aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Gapczynski <mtgap@owncloud.com>2013-02-11 20:27:05 -0500
committerMichael Gapczynski <mtgap@owncloud.com>2013-02-11 20:27:05 -0500
commit6eba790a75ba128e3182771a30dbe88733ee0dfc (patch)
treeba313bec694c64928d82e2b76445d6307a305b22
parent6f08b1f829e9d4c49f66b19fdda8c229bc8ae3f3 (diff)
parent04bf8c1b66d6adef0466efae00c32745465767f2 (diff)
downloadnextcloud-server-6eba790a75ba128e3182771a30dbe88733ee0dfc.tar.gz
nextcloud-server-6eba790a75ba128e3182771a30dbe88733ee0dfc.zip
Merge branch 'master' into external_storage_ui_feedback
Conflicts: apps/files_external/js/dropbox.js apps/files_external/js/google.js apps/files_external/js/settings.js apps/files_external/lib/amazons3.php apps/files_external/lib/dropbox.php apps/files_external/lib/google.php apps/files_external/lib/smb.php apps/files_external/lib/swift.php apps/files_external/lib/webdav.php lib/filestorage.php
-rw-r--r--.gitignore12
-rw-r--r--CONTRIBUTING.md37
-rw-r--r--apps/files/admin.php4
-rw-r--r--apps/files/ajax/autocomplete.php54
-rw-r--r--apps/files/ajax/delete.php15
-rw-r--r--apps/files/ajax/getstoragestats.php9
-rw-r--r--apps/files/ajax/list.php2
-rw-r--r--apps/files/ajax/move.php22
-rw-r--r--apps/files/ajax/newfile.php21
-rw-r--r--apps/files/ajax/newfolder.php5
-rw-r--r--apps/files/ajax/rawlist.php2
-rw-r--r--apps/files/ajax/rename.php16
-rw-r--r--apps/files/ajax/scan.php90
-rw-r--r--apps/files/ajax/upgrade.php44
-rw-r--r--apps/files/ajax/upload.php84
-rw-r--r--apps/files/appinfo/app.php4
-rw-r--r--apps/files/appinfo/filesync.php4
-rw-r--r--apps/files/appinfo/info.xml2
-rw-r--r--apps/files/appinfo/remote.php3
-rw-r--r--apps/files/appinfo/version2
-rw-r--r--apps/files/css/files.css39
-rw-r--r--apps/files/download.php11
-rw-r--r--apps/files/index.php131
-rw-r--r--apps/files/js/fileactions.js53
-rw-r--r--apps/files/js/filelist.js251
-rw-r--r--apps/files/js/files.js322
-rw-r--r--apps/files/js/jquery-visibility.js32
-rw-r--r--apps/files/js/upgrade.js17
-rw-r--r--apps/files/js/upload.js8
-rw-r--r--apps/files/l10n/ar.php4
-rw-r--r--apps/files/l10n/bg_BG.php3
-rw-r--r--apps/files/l10n/bn_BD.php65
-rw-r--r--apps/files/l10n/ca.php25
-rw-r--r--apps/files/l10n/cs_CZ.php25
-rw-r--r--apps/files/l10n/da.php22
-rw-r--r--apps/files/l10n/de.php24
-rw-r--r--apps/files/l10n/de_DE.php25
-rw-r--r--apps/files/l10n/el.php27
-rw-r--r--apps/files/l10n/eo.php19
-rw-r--r--apps/files/l10n/es.php26
-rw-r--r--apps/files/l10n/es_AR.php26
-rw-r--r--apps/files/l10n/et_EE.php11
-rw-r--r--apps/files/l10n/eu.php22
-rw-r--r--apps/files/l10n/fa.php29
-rw-r--r--apps/files/l10n/fi_FI.php21
-rw-r--r--apps/files/l10n/fr.php25
-rw-r--r--apps/files/l10n/gl.php74
-rw-r--r--apps/files/l10n/he.php11
-rw-r--r--apps/files/l10n/hr.php8
-rw-r--r--apps/files/l10n/hu_HU.php20
-rw-r--r--apps/files/l10n/ia.php2
-rw-r--r--apps/files/l10n/id.php7
-rw-r--r--apps/files/l10n/is.php23
-rw-r--r--apps/files/l10n/it.php25
-rw-r--r--apps/files/l10n/ja_JP.php24
-rw-r--r--apps/files/l10n/ka_GE.php11
-rw-r--r--apps/files/l10n/ko.php26
-rw-r--r--apps/files/l10n/ku_IQ.php2
-rw-r--r--apps/files/l10n/lb.php4
-rw-r--r--apps/files/l10n/lt_LT.php11
-rw-r--r--apps/files/l10n/lv.php92
-rw-r--r--apps/files/l10n/mk.php11
-rw-r--r--apps/files/l10n/ms_MY.php5
-rw-r--r--apps/files/l10n/nb_NO.php10
-rw-r--r--apps/files/l10n/nl.php24
-rw-r--r--apps/files/l10n/nn_NO.php2
-rw-r--r--apps/files/l10n/oc.php8
-rw-r--r--apps/files/l10n/pl.php15
-rw-r--r--apps/files/l10n/pt_BR.php20
-rw-r--r--apps/files/l10n/pt_PT.php30
-rw-r--r--apps/files/l10n/ro.php19
-rw-r--r--apps/files/l10n/ru.php27
-rw-r--r--apps/files/l10n/ru_RU.php28
-rw-r--r--apps/files/l10n/si_LK.php6
-rw-r--r--apps/files/l10n/sk_SK.php32
-rw-r--r--apps/files/l10n/sl.php11
-rw-r--r--apps/files/l10n/sr.php11
-rw-r--r--apps/files/l10n/sr@latin.php2
-rw-r--r--apps/files/l10n/sv.php25
-rw-r--r--apps/files/l10n/ta_LK.php11
-rw-r--r--apps/files/l10n/th_TH.php26
-rw-r--r--apps/files/l10n/tr.php19
-rw-r--r--apps/files/l10n/uk.php23
-rw-r--r--apps/files/l10n/vi.php28
-rw-r--r--apps/files/l10n/zh_CN.GB2312.php11
-rw-r--r--apps/files/l10n/zh_CN.php19
-rw-r--r--apps/files/l10n/zh_TW.php47
-rw-r--r--apps/files/lib/helper.php20
-rw-r--r--apps/files/settings.php6
-rw-r--r--apps/files/templates/index.php8
-rw-r--r--apps/files/templates/part.breadcrumb.php26
-rw-r--r--apps/files/templates/part.list.php130
-rw-r--r--apps/files/templates/upgrade.php4
-rw-r--r--apps/files_encryption/appinfo/app.php49
-rw-r--r--apps/files_encryption/appinfo/database.xml24
-rw-r--r--apps/files_encryption/appinfo/info.xml6
-rw-r--r--apps/files_encryption/appinfo/spec.txt19
-rw-r--r--apps/files_encryption/appinfo/version2
-rw-r--r--apps/files_encryption/hooks/hooks.php191
-rw-r--r--apps/files_encryption/js/settings.js11
-rw-r--r--apps/files_encryption/l10n/ar.php4
-rw-r--r--apps/files_encryption/l10n/bg_BG.php4
-rw-r--r--apps/files_encryption/l10n/bn_BD.php4
-rw-r--r--apps/files_encryption/l10n/ca.php7
-rw-r--r--apps/files_encryption/l10n/cs_CZ.php7
-rw-r--r--apps/files_encryption/l10n/da.php4
-rw-r--r--apps/files_encryption/l10n/de.php4
-rw-r--r--apps/files_encryption/l10n/de_DE.php7
-rw-r--r--apps/files_encryption/l10n/el.php7
-rw-r--r--apps/files_encryption/l10n/eo.php4
-rw-r--r--apps/files_encryption/l10n/es.php7
-rw-r--r--apps/files_encryption/l10n/es_AR.php4
-rw-r--r--apps/files_encryption/l10n/et_EE.php4
-rw-r--r--apps/files_encryption/l10n/eu.php4
-rw-r--r--apps/files_encryption/l10n/fa.php4
-rw-r--r--apps/files_encryption/l10n/fi_FI.php4
-rw-r--r--apps/files_encryption/l10n/fr.php7
-rw-r--r--apps/files_encryption/l10n/gl.php7
-rw-r--r--apps/files_encryption/l10n/he.php4
-rw-r--r--apps/files_encryption/l10n/hu_HU.php4
-rw-r--r--apps/files_encryption/l10n/id.php4
-rw-r--r--apps/files_encryption/l10n/is.php4
-rw-r--r--apps/files_encryption/l10n/it.php7
-rw-r--r--apps/files_encryption/l10n/ja_JP.php7
-rw-r--r--apps/files_encryption/l10n/ko.php4
-rw-r--r--apps/files_encryption/l10n/ku_IQ.php4
-rw-r--r--apps/files_encryption/l10n/lt_LT.php4
-rw-r--r--apps/files_encryption/l10n/lv.php7
-rw-r--r--apps/files_encryption/l10n/mk.php4
-rw-r--r--apps/files_encryption/l10n/nb_NO.php4
-rw-r--r--apps/files_encryption/l10n/nl.php7
-rw-r--r--apps/files_encryption/l10n/pl.php4
-rw-r--r--apps/files_encryption/l10n/pt_BR.php4
-rw-r--r--apps/files_encryption/l10n/pt_PT.php7
-rw-r--r--apps/files_encryption/l10n/ro.php4
-rw-r--r--apps/files_encryption/l10n/ru.php7
-rw-r--r--apps/files_encryption/l10n/ru_RU.php4
-rw-r--r--apps/files_encryption/l10n/si_LK.php4
-rw-r--r--apps/files_encryption/l10n/sk_SK.php7
-rw-r--r--apps/files_encryption/l10n/sl.php4
-rw-r--r--apps/files_encryption/l10n/sr.php4
-rw-r--r--apps/files_encryption/l10n/sv.php7
-rw-r--r--apps/files_encryption/l10n/ta_LK.php4
-rw-r--r--apps/files_encryption/l10n/th_TH.php4
-rw-r--r--apps/files_encryption/l10n/tr.php4
-rw-r--r--apps/files_encryption/l10n/uk.php4
-rw-r--r--apps/files_encryption/l10n/vi.php7
-rw-r--r--apps/files_encryption/l10n/zh_CN.GB2312.php4
-rw-r--r--apps/files_encryption/l10n/zh_CN.php4
-rw-r--r--apps/files_encryption/l10n/zh_TW.php4
-rwxr-xr-x[-rw-r--r--]apps/files_encryption/lib/crypt.php915
-rw-r--r--apps/files_encryption/lib/cryptstream.php177
-rwxr-xr-xapps/files_encryption/lib/keymanager.php323
-rw-r--r--apps/files_encryption/lib/proxy.php389
-rw-r--r--apps/files_encryption/lib/session.php103
-rw-r--r--apps/files_encryption/lib/stream.php495
-rw-r--r--apps/files_encryption/lib/util.php476
-rw-r--r--apps/files_encryption/settings-personal.php17
-rw-r--r--apps/files_encryption/settings.php19
-rw-r--r--apps/files_encryption/templates/settings-personal.php22
-rw-r--r--apps/files_encryption/templates/settings.php26
-rw-r--r--apps/files_encryption/test/binary (renamed from apps/files_encryption/tests/binary)bin9734 -> 9734 bytes
-rwxr-xr-xapps/files_encryption/test/crypt.php667
-rw-r--r--apps/files_encryption/test/keymanager.php130
-rw-r--r--apps/files_encryption/test/legacy-encrypted-text.txtbin0 -> 3360 bytes
-rw-r--r--apps/files_encryption/test/proxy.php220
-rw-r--r--apps/files_encryption/test/stream.php226
-rwxr-xr-xapps/files_encryption/test/util.php225
-rw-r--r--apps/files_encryption/test/zeros (renamed from apps/files_encryption/tests/zeros)bin10238 -> 10238 bytes
-rw-r--r--apps/files_encryption/tests/encryption.php72
-rw-r--r--apps/files_encryption/tests/proxy.php117
-rw-r--r--apps/files_encryption/tests/stream.php85
-rw-r--r--apps/files_external/3rdparty/phpseclib/AUTHORS3
-rw-r--r--apps/files_external/3rdparty/phpseclib/LICENSE21
-rw-r--r--apps/files_external/3rdparty/phpseclib/README.md16
-rw-r--r--apps/files_external/3rdparty/phpseclib/composer.json48
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php946
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php1334
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php825
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php519
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php2646
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php243
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php1525
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php1080
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php540
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php1277
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php4323
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php3633
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php2029
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php1577
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php3009
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf6
-rw-r--r--apps/files_external/3rdparty/phpseclib/phpunit.xml.dist18
-rw-r--r--apps/files_external/ajax/addRootCertificate.php6
-rw-r--r--apps/files_external/appinfo/app.php17
-rw-r--r--apps/files_external/appinfo/info.xml2
-rw-r--r--apps/files_external/js/dropbox.js10
-rw-r--r--apps/files_external/js/google.js10
-rw-r--r--apps/files_external/js/settings.js14
-rw-r--r--apps/files_external/l10n/af_ZA.php3
-rw-r--r--apps/files_external/l10n/bg_BG.php1
-rw-r--r--apps/files_external/l10n/bn_BD.php26
-rw-r--r--apps/files_external/l10n/fa.php7
-rw-r--r--apps/files_external/l10n/fi_FI.php2
-rw-r--r--apps/files_external/l10n/ko.php4
-rw-r--r--apps/files_external/l10n/lv.php23
-rw-r--r--apps/files_external/l10n/pt_BR.php2
-rw-r--r--apps/files_external/l10n/ro.php8
-rw-r--r--apps/files_external/l10n/sk_SK.php8
-rw-r--r--apps/files_external/l10n/th_TH.php2
-rw-r--r--apps/files_external/l10n/vi.php2
-rw-r--r--apps/files_external/lib/amazons3.php79
-rwxr-xr-xapps/files_external/lib/config.php83
-rwxr-xr-xapps/files_external/lib/dropbox.php62
-rw-r--r--apps/files_external/lib/ftp.php23
-rw-r--r--apps/files_external/lib/google.php32
-rw-r--r--apps/files_external/lib/sftp.php291
-rw-r--r--apps/files_external/lib/smb.php21
-rw-r--r--apps/files_external/lib/streamwrapper.php55
-rw-r--r--apps/files_external/lib/swift.php130
-rw-r--r--apps/files_external/lib/webdav.php114
-rwxr-xr-xapps/files_external/personal.php2
-rw-r--r--apps/files_external/templates/settings.php6
-rw-r--r--apps/files_external/tests/amazons3.php8
-rw-r--r--apps/files_external/tests/config.php7
-rw-r--r--apps/files_external/tests/dropbox.php6
-rw-r--r--apps/files_external/tests/ftp.php16
-rw-r--r--apps/files_external/tests/google.php5
-rw-r--r--apps/files_external/tests/sftp.php43
-rw-r--r--apps/files_external/tests/smb.php9
-rw-r--r--apps/files_external/tests/swift.php6
-rw-r--r--apps/files_external/tests/webdav.php7
-rw-r--r--apps/files_sharing/appinfo/app.php9
-rw-r--r--apps/files_sharing/appinfo/info.xml2
-rw-r--r--apps/files_sharing/appinfo/update.php10
-rw-r--r--apps/files_sharing/css/public.css10
-rw-r--r--apps/files_sharing/js/share.js6
-rw-r--r--apps/files_sharing/l10n/af_ZA.php4
-rw-r--r--apps/files_sharing/l10n/bn_BD.php7
-rw-r--r--apps/files_sharing/l10n/fa.php11
-rw-r--r--apps/files_sharing/l10n/lb.php3
-rw-r--r--apps/files_sharing/l10n/lv.php9
-rw-r--r--apps/files_sharing/l10n/sr.php5
-rw-r--r--apps/files_sharing/l10n/zh_TW.php3
-rw-r--r--apps/files_sharing/lib/cache.php258
-rw-r--r--apps/files_sharing/lib/permissions.php85
-rw-r--r--apps/files_sharing/lib/share/file.php75
-rw-r--r--apps/files_sharing/lib/share/folder.php43
-rw-r--r--apps/files_sharing/lib/sharedstorage.php268
-rw-r--r--apps/files_sharing/lib/watcher.php51
-rw-r--r--apps/files_sharing/public.php258
-rw-r--r--apps/files_sharing/templates/authenticate.php4
-rw-r--r--apps/files_sharing/templates/public.php14
-rw-r--r--apps/files_trashbin/ajax/delete.php24
-rw-r--r--apps/files_trashbin/ajax/undelete.php46
-rw-r--r--apps/files_trashbin/appinfo/app.php7
-rw-r--r--apps/files_trashbin/appinfo/database.xml92
-rw-r--r--apps/files_trashbin/appinfo/info.xml14
-rw-r--r--apps/files_trashbin/appinfo/version1
-rw-r--r--apps/files_trashbin/download.php51
-rw-r--r--apps/files_trashbin/index.php100
-rw-r--r--apps/files_trashbin/js/disableDefaultActions.js4
-rw-r--r--apps/files_trashbin/js/trash.js183
-rw-r--r--apps/files_trashbin/l10n/.gitkeep0
-rw-r--r--apps/files_trashbin/l10n/ar.php3
-rw-r--r--apps/files_trashbin/l10n/bg_BG.php4
-rw-r--r--apps/files_trashbin/l10n/bn_BD.php7
-rw-r--r--apps/files_trashbin/l10n/ca.php14
-rw-r--r--apps/files_trashbin/l10n/cs_CZ.php14
-rw-r--r--apps/files_trashbin/l10n/da.php8
-rw-r--r--apps/files_trashbin/l10n/de.php11
-rw-r--r--apps/files_trashbin/l10n/de_DE.php12
-rw-r--r--apps/files_trashbin/l10n/el.php14
-rw-r--r--apps/files_trashbin/l10n/eo.php8
-rw-r--r--apps/files_trashbin/l10n/es.php14
-rw-r--r--apps/files_trashbin/l10n/es_AR.php8
-rw-r--r--apps/files_trashbin/l10n/et_EE.php7
-rw-r--r--apps/files_trashbin/l10n/eu.php8
-rw-r--r--apps/files_trashbin/l10n/fa.php8
-rw-r--r--apps/files_trashbin/l10n/fi_FI.php11
-rw-r--r--apps/files_trashbin/l10n/fr.php14
-rw-r--r--apps/files_trashbin/l10n/gl.php14
-rw-r--r--apps/files_trashbin/l10n/he.php7
-rw-r--r--apps/files_trashbin/l10n/hr.php3
-rw-r--r--apps/files_trashbin/l10n/hu_HU.php8
-rw-r--r--apps/files_trashbin/l10n/ia.php3
-rw-r--r--apps/files_trashbin/l10n/id.php3
-rw-r--r--apps/files_trashbin/l10n/is.php7
-rw-r--r--apps/files_trashbin/l10n/it.php14
-rw-r--r--apps/files_trashbin/l10n/ja_JP.php14
-rw-r--r--apps/files_trashbin/l10n/ka_GE.php7
-rw-r--r--apps/files_trashbin/l10n/ko.php8
-rw-r--r--apps/files_trashbin/l10n/ku_IQ.php3
-rw-r--r--apps/files_trashbin/l10n/lb.php3
-rw-r--r--apps/files_trashbin/l10n/lt_LT.php7
-rw-r--r--apps/files_trashbin/l10n/lv.php14
-rw-r--r--apps/files_trashbin/l10n/mk.php7
-rw-r--r--apps/files_trashbin/l10n/ms_MY.php3
-rw-r--r--apps/files_trashbin/l10n/nb_NO.php7
-rw-r--r--apps/files_trashbin/l10n/nl.php12
-rw-r--r--apps/files_trashbin/l10n/nn_NO.php3
-rw-r--r--apps/files_trashbin/l10n/oc.php3
-rw-r--r--apps/files_trashbin/l10n/pl.php8
-rw-r--r--apps/files_trashbin/l10n/pt_BR.php11
-rw-r--r--apps/files_trashbin/l10n/pt_PT.php14
-rw-r--r--apps/files_trashbin/l10n/ro.php7
-rw-r--r--apps/files_trashbin/l10n/ru.php14
-rw-r--r--apps/files_trashbin/l10n/ru_RU.php14
-rw-r--r--apps/files_trashbin/l10n/si_LK.php5
-rw-r--r--apps/files_trashbin/l10n/sk_SK.php14
-rw-r--r--apps/files_trashbin/l10n/sl.php7
-rw-r--r--apps/files_trashbin/l10n/sr.php11
-rw-r--r--apps/files_trashbin/l10n/sr@latin.php3
-rw-r--r--apps/files_trashbin/l10n/sv.php14
-rw-r--r--apps/files_trashbin/l10n/ta_LK.php7
-rw-r--r--apps/files_trashbin/l10n/th_TH.php11
-rw-r--r--apps/files_trashbin/l10n/tr.php7
-rw-r--r--apps/files_trashbin/l10n/uk.php7
-rw-r--r--apps/files_trashbin/l10n/vi.php14
-rw-r--r--apps/files_trashbin/l10n/zh_CN.GB2312.php7
-rw-r--r--apps/files_trashbin/l10n/zh_CN.php7
-rw-r--r--apps/files_trashbin/l10n/zh_TW.php7
-rw-r--r--apps/files_trashbin/lib/hooks.php45
-rw-r--r--apps/files_trashbin/lib/trash.php411
-rw-r--r--apps/files_trashbin/templates/index.php34
-rw-r--r--apps/files_trashbin/templates/part.list.php76
-rw-r--r--apps/files_versions/ajax/getVersions.php5
-rw-r--r--apps/files_versions/ajax/rollbackVersion.php12
-rw-r--r--apps/files_versions/appinfo/app.php10
-rw-r--r--apps/files_versions/appinfo/info.xml2
-rw-r--r--apps/files_versions/history.php28
-rw-r--r--apps/files_versions/js/settings-personal.js39
-rw-r--r--apps/files_versions/l10n/ar.php3
-rw-r--r--apps/files_versions/l10n/bg_BG.php2
-rw-r--r--apps/files_versions/l10n/bn_BD.php4
-rw-r--r--apps/files_versions/l10n/ca.php11
-rw-r--r--apps/files_versions/l10n/cs_CZ.php11
-rw-r--r--apps/files_versions/l10n/da.php3
-rw-r--r--apps/files_versions/l10n/de.php3
-rw-r--r--apps/files_versions/l10n/de_DE.php7
-rw-r--r--apps/files_versions/l10n/el.php11
-rw-r--r--apps/files_versions/l10n/eo.php3
-rw-r--r--apps/files_versions/l10n/es.php11
-rw-r--r--apps/files_versions/l10n/es_AR.php3
-rw-r--r--apps/files_versions/l10n/et_EE.php3
-rw-r--r--apps/files_versions/l10n/eu.php3
-rw-r--r--apps/files_versions/l10n/fa.php3
-rw-r--r--apps/files_versions/l10n/fi_FI.php3
-rw-r--r--apps/files_versions/l10n/fr.php11
-rw-r--r--apps/files_versions/l10n/gl.php3
-rw-r--r--apps/files_versions/l10n/he.php3
-rw-r--r--apps/files_versions/l10n/hu_HU.php3
-rw-r--r--apps/files_versions/l10n/id.php3
-rw-r--r--apps/files_versions/l10n/is.php3
-rw-r--r--apps/files_versions/l10n/it.php11
-rw-r--r--apps/files_versions/l10n/ja_JP.php11
-rw-r--r--apps/files_versions/l10n/ko.php3
-rw-r--r--apps/files_versions/l10n/ku_IQ.php3
-rw-r--r--apps/files_versions/l10n/lb.php5
-rw-r--r--apps/files_versions/l10n/lt_LT.php3
-rw-r--r--apps/files_versions/l10n/lv.php13
-rw-r--r--apps/files_versions/l10n/mk.php3
-rw-r--r--apps/files_versions/l10n/nb_NO.php2
-rw-r--r--apps/files_versions/l10n/nl.php3
-rw-r--r--apps/files_versions/l10n/pl.php3
-rw-r--r--apps/files_versions/l10n/pt_BR.php3
-rw-r--r--apps/files_versions/l10n/pt_PT.php11
-rw-r--r--apps/files_versions/l10n/ro.php3
-rw-r--r--apps/files_versions/l10n/ru.php11
-rw-r--r--apps/files_versions/l10n/ru_RU.php3
-rw-r--r--apps/files_versions/l10n/si_LK.php3
-rw-r--r--apps/files_versions/l10n/sk_SK.php11
-rw-r--r--apps/files_versions/l10n/sl.php3
-rw-r--r--apps/files_versions/l10n/sr.php5
-rw-r--r--apps/files_versions/l10n/sv.php11
-rw-r--r--apps/files_versions/l10n/ta_LK.php3
-rw-r--r--apps/files_versions/l10n/th_TH.php3
-rw-r--r--apps/files_versions/l10n/tr.php3
-rw-r--r--apps/files_versions/l10n/uk.php3
-rw-r--r--apps/files_versions/l10n/vi.php11
-rw-r--r--apps/files_versions/l10n/zh_CN.GB2312.php3
-rw-r--r--apps/files_versions/l10n/zh_CN.php3
-rw-r--r--apps/files_versions/l10n/zh_TW.php2
-rw-r--r--apps/files_versions/lib/hooks.php44
-rw-r--r--apps/files_versions/lib/versions.php402
-rw-r--r--apps/files_versions/settings-personal.php7
-rw-r--r--apps/files_versions/templates/history.php2
-rw-r--r--apps/files_versions/templates/settings-personal.php12
-rw-r--r--apps/files_versions/templates/settings.php8
-rw-r--r--apps/user_ldap/ajax/deleteConfiguration.php (renamed from apps/files_versions/ajax/expireAll.php)27
-rw-r--r--apps/user_ldap/ajax/getConfiguration.php31
-rw-r--r--apps/user_ldap/ajax/getNewServerConfigPrefix.php34
-rw-r--r--apps/user_ldap/ajax/setConfiguration.php33
-rw-r--r--apps/user_ldap/ajax/testConfiguration.php12
-rw-r--r--apps/user_ldap/appinfo/app.php24
-rw-r--r--apps/user_ldap/appinfo/info.xml2
-rw-r--r--apps/user_ldap/appinfo/update.php20
-rw-r--r--apps/user_ldap/appinfo/version2
-rw-r--r--apps/user_ldap/css/settings.css4
-rw-r--r--apps/user_ldap/group_ldap.php10
-rw-r--r--apps/user_ldap/group_proxy.php178
-rw-r--r--apps/user_ldap/js/settings.js157
-rw-r--r--apps/user_ldap/l10n/af_ZA.php4
-rw-r--r--apps/user_ldap/l10n/ar.php4
-rw-r--r--apps/user_ldap/l10n/bn_BD.php32
-rw-r--r--apps/user_ldap/l10n/ca.php42
-rw-r--r--apps/user_ldap/l10n/cs_CZ.php42
-rw-r--r--apps/user_ldap/l10n/da.php8
-rw-r--r--apps/user_ldap/l10n/de.php16
-rw-r--r--apps/user_ldap/l10n/de_DE.php41
-rw-r--r--apps/user_ldap/l10n/el.php11
-rw-r--r--apps/user_ldap/l10n/eo.php12
-rw-r--r--apps/user_ldap/l10n/es.php44
-rw-r--r--apps/user_ldap/l10n/es_AR.php30
-rw-r--r--apps/user_ldap/l10n/et_EE.php10
-rw-r--r--apps/user_ldap/l10n/eu.php15
-rw-r--r--apps/user_ldap/l10n/fa.php3
-rw-r--r--apps/user_ldap/l10n/fi_FI.php10
-rw-r--r--apps/user_ldap/l10n/fr.php46
-rw-r--r--apps/user_ldap/l10n/gl.php11
-rw-r--r--apps/user_ldap/l10n/he.php13
-rw-r--r--apps/user_ldap/l10n/hr.php3
-rw-r--r--apps/user_ldap/l10n/hu_HU.php16
-rw-r--r--apps/user_ldap/l10n/ia.php3
-rw-r--r--apps/user_ldap/l10n/id.php4
-rw-r--r--apps/user_ldap/l10n/it.php42
-rw-r--r--apps/user_ldap/l10n/ja_JP.php42
-rw-r--r--apps/user_ldap/l10n/ka_GE.php4
-rw-r--r--apps/user_ldap/l10n/ko.php17
-rw-r--r--apps/user_ldap/l10n/ku_IQ.php3
-rw-r--r--apps/user_ldap/l10n/lb.php5
-rw-r--r--apps/user_ldap/l10n/lt_LT.php1
-rw-r--r--apps/user_ldap/l10n/lv.php69
-rw-r--r--apps/user_ldap/l10n/mk.php4
-rw-r--r--apps/user_ldap/l10n/ms_MY.php4
-rw-r--r--apps/user_ldap/l10n/nb_NO.php4
-rw-r--r--apps/user_ldap/l10n/nl.php47
-rw-r--r--apps/user_ldap/l10n/nn_NO.php3
-rw-r--r--apps/user_ldap/l10n/oc.php4
-rw-r--r--apps/user_ldap/l10n/pl.php11
-rw-r--r--apps/user_ldap/l10n/pt_BR.php10
-rw-r--r--apps/user_ldap/l10n/pt_PT.php42
-rw-r--r--apps/user_ldap/l10n/ro.php15
-rw-r--r--apps/user_ldap/l10n/ru.php30
-rw-r--r--apps/user_ldap/l10n/ru_RU.php15
-rw-r--r--apps/user_ldap/l10n/si_LK.php1
-rw-r--r--apps/user_ldap/l10n/sk_SK.php42
-rw-r--r--apps/user_ldap/l10n/sl.php11
-rw-r--r--apps/user_ldap/l10n/sr.php35
-rw-r--r--apps/user_ldap/l10n/sr@latin.php3
-rw-r--r--apps/user_ldap/l10n/sv.php42
-rw-r--r--apps/user_ldap/l10n/ta_LK.php10
-rw-r--r--apps/user_ldap/l10n/th_TH.php34
-rw-r--r--apps/user_ldap/l10n/tr.php10
-rw-r--r--apps/user_ldap/l10n/uk.php30
-rw-r--r--apps/user_ldap/l10n/vi.php20
-rw-r--r--apps/user_ldap/l10n/zh_CN.GB2312.php10
-rw-r--r--apps/user_ldap/l10n/zh_CN.php10
-rw-r--r--apps/user_ldap/l10n/zh_TW.php3
-rw-r--r--apps/user_ldap/lib/access.php176
-rw-r--r--apps/user_ldap/lib/connection.php320
-rw-r--r--apps/user_ldap/lib/helper.php105
-rw-r--r--apps/user_ldap/lib/proxy.php104
-rw-r--r--apps/user_ldap/settings.php78
-rw-r--r--apps/user_ldap/templates/settings.php69
-rw-r--r--apps/user_ldap/tests/group_ldap.php2
-rw-r--r--apps/user_ldap/user_ldap.php89
-rw-r--r--apps/user_ldap/user_proxy.php186
-rwxr-xr-xapps/user_webdavauth/appinfo/info.xml2
-rw-r--r--apps/user_webdavauth/l10n/bn_BD.php3
-rw-r--r--apps/user_webdavauth/l10n/ca.php3
-rw-r--r--apps/user_webdavauth/l10n/cs_CZ.php3
-rw-r--r--apps/user_webdavauth/l10n/da.php3
-rw-r--r--apps/user_webdavauth/l10n/de.php3
-rw-r--r--apps/user_webdavauth/l10n/de_DE.php3
-rw-r--r--apps/user_webdavauth/l10n/el.php3
-rw-r--r--apps/user_webdavauth/l10n/eo.php1
-rw-r--r--apps/user_webdavauth/l10n/es.php3
-rw-r--r--apps/user_webdavauth/l10n/es_AR.php3
-rw-r--r--apps/user_webdavauth/l10n/eu.php3
-rw-r--r--apps/user_webdavauth/l10n/fr.php3
-rw-r--r--apps/user_webdavauth/l10n/gl.php3
-rw-r--r--apps/user_webdavauth/l10n/hu_HU.php3
-rw-r--r--apps/user_webdavauth/l10n/id.php5
-rw-r--r--apps/user_webdavauth/l10n/is.php3
-rw-r--r--apps/user_webdavauth/l10n/it.php3
-rw-r--r--apps/user_webdavauth/l10n/ja_JP.php3
-rw-r--r--apps/user_webdavauth/l10n/ko.php3
-rw-r--r--apps/user_webdavauth/l10n/lv.php5
-rw-r--r--apps/user_webdavauth/l10n/nl.php3
-rw-r--r--apps/user_webdavauth/l10n/pl.php4
-rw-r--r--apps/user_webdavauth/l10n/pt_BR.php4
-rw-r--r--apps/user_webdavauth/l10n/pt_PT.php3
-rw-r--r--apps/user_webdavauth/l10n/ro.php3
-rw-r--r--apps/user_webdavauth/l10n/ru_RU.php1
-rw-r--r--apps/user_webdavauth/l10n/sk_SK.php4
-rw-r--r--apps/user_webdavauth/l10n/sl.php3
-rw-r--r--apps/user_webdavauth/l10n/sr.php5
-rw-r--r--apps/user_webdavauth/l10n/sv.php3
-rw-r--r--apps/user_webdavauth/l10n/th_TH.php4
-rw-r--r--apps/user_webdavauth/l10n/uk.php3
-rw-r--r--apps/user_webdavauth/l10n/vi.php4
-rw-r--r--apps/user_webdavauth/l10n/zh_CN.php4
-rwxr-xr-xapps/user_webdavauth/settings.php4
-rwxr-xr-xapps/user_webdavauth/templates/settings.php5
-rw-r--r--autotest.cmd117
-rwxr-xr-xautotest.sh2
-rw-r--r--build/phpcs.xml2
-rw-r--r--config/config.sample.php56
-rw-r--r--core/ajax/share.php21
-rw-r--r--core/ajax/translations.php1
-rw-r--r--core/ajax/vcategories/add.php2
-rw-r--r--core/ajax/vcategories/removeFromFavorites.php4
-rw-r--r--core/css/images/animated-overlay.gifbin0 -> 1738 bytes
-rw-r--r--core/css/images/ui-bg_diagonals-thick_18_b81900_40x40.pngbin0 -> 260 bytes
-rw-r--r--core/css/images/ui-bg_diagonals-thick_20_666666_40x40.pngbin0 -> 251 bytes
-rw-r--r--core/css/images/ui-bg_flat_100_ffffff_40x100.pngbin0 -> 178 bytes
-rw-r--r--core/css/images/ui-bg_flat_10_000000_40x100.pngbin0 -> 178 bytes
-rw-r--r--core/css/images/ui-bg_flat_35_1d2d44_40x100.pngbin0 -> 183 bytes
-rw-r--r--core/css/images/ui-bg_glass_100_f8f8f8_1x400.pngbin0 -> 105 bytes
-rw-r--r--core/css/images/ui-bg_highlight-hard_100_f8f8f8_1x100.pngbin0 -> 88 bytes
-rw-r--r--core/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngbin0 -> 90 bytes
-rw-r--r--core/css/images/ui-icons_1d2d44_256x240.pngbin0 -> 4369 bytes
-rw-r--r--core/css/images/ui-icons_222222_256x240.pngbin0 -> 4369 bytes
-rw-r--r--core/css/images/ui-icons_ffd27a_256x240.pngbin0 -> 4369 bytes
-rw-r--r--core/css/images/ui-icons_ffffff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--core/css/jquery-ui-1.10.0.custom.css1174
-rw-r--r--core/css/jquery-ui-1.8.16.custom.css362
-rw-r--r--core/css/multiselect.css27
-rw-r--r--core/css/styles.css137
-rw-r--r--core/img/actions/caret.pngbin0 -> 283 bytes
-rw-r--r--core/img/actions/caret.svg112
-rw-r--r--core/img/actions/close.pngbin0 -> 275 bytes
-rw-r--r--core/img/actions/close.svg73
-rw-r--r--core/img/actions/delete-hover.pngbin0 -> 344 bytes
-rw-r--r--core/img/actions/delete-hover.svg73
-rw-r--r--core/img/actions/logout.pngbin706 -> 613 bytes
-rw-r--r--core/img/actions/logout.svg17
-rw-r--r--core/img/actions/toggle.pngbin0 -> 515 bytes
-rw-r--r--core/img/actions/toggle.svg61
-rw-r--r--core/img/actions/undelete.pngbin0 -> 624 bytes
-rw-r--r--core/img/actions/view-close.pngbin0 -> 434 bytes
-rw-r--r--core/img/actions/view-close.svg73
-rw-r--r--core/img/actions/view-next.pngbin0 -> 341 bytes
-rw-r--r--core/img/actions/view-next.svg73
-rw-r--r--core/img/actions/view-pause.pngbin0 -> 206 bytes
-rw-r--r--core/img/actions/view-pause.svg72
-rw-r--r--core/img/actions/view-play.pngbin0 -> 274 bytes
-rw-r--r--core/img/actions/view-play.svg73
-rw-r--r--core/img/actions/view-previous.pngbin0 -> 356 bytes
-rw-r--r--core/img/actions/view-previous.svg73
-rw-r--r--core/img/appstore.pngbin0 -> 7418 bytes
-rw-r--r--core/img/desktopapp.pngbin0 -> 4593 bytes
-rw-r--r--core/img/desktopapp.svg100
-rw-r--r--core/img/filetypes/application.pngbin0 -> 464 bytes
-rw-r--r--core/img/googleplay.pngbin0 -> 7758 bytes
-rw-r--r--core/img/noise.pngbin0 -> 951865 bytes
-rw-r--r--core/img/places/files.pngbin0 -> 328 bytes
-rw-r--r--core/img/places/files.svg128
-rw-r--r--core/img/places/home.pngbin372 -> 355 bytes
-rw-r--r--core/img/places/home.svg86
-rw-r--r--core/img/places/music.pngbin532 -> 708 bytes
-rw-r--r--core/img/places/music.svg1683
-rw-r--r--core/img/places/picture.pngbin300 -> 271 bytes
-rw-r--r--core/img/places/picture.svg1720
-rw-r--r--core/js/config.php41
-rw-r--r--core/js/eventsource.js2
-rw-r--r--core/js/jquery-ui-1.10.0.custom.js14850
-rw-r--r--core/js/jquery-ui-1.8.16.custom.min.js761
-rw-r--r--core/js/js.js100
-rw-r--r--core/js/multiselect.js231
-rw-r--r--core/js/oc-requesttoken.js3
-rw-r--r--core/js/oc-vcategories.js4
-rw-r--r--core/js/setup.js3
-rw-r--r--core/js/share.js172
-rw-r--r--core/js/update.js23
-rw-r--r--core/js/visitortimezone.js4
-rw-r--r--core/l10n/af_ZA.php33
-rw-r--r--core/l10n/ar.php46
-rw-r--r--core/l10n/bg_BG.php3
-rw-r--r--core/l10n/bn_BD.php119
-rw-r--r--core/l10n/ca.php54
-rw-r--r--core/l10n/cs_CZ.php54
-rw-r--r--core/l10n/da.php48
-rw-r--r--core/l10n/de.php50
-rw-r--r--core/l10n/de_DE.php52
-rw-r--r--core/l10n/el.php47
-rw-r--r--core/l10n/eo.php46
-rw-r--r--core/l10n/es.php54
-rw-r--r--core/l10n/es_AR.php49
-rw-r--r--core/l10n/et_EE.php45
-rw-r--r--core/l10n/eu.php49
-rw-r--r--core/l10n/fa.php91
-rw-r--r--core/l10n/fi_FI.php58
-rw-r--r--core/l10n/fr.php54
-rw-r--r--core/l10n/gl.php46
-rw-r--r--core/l10n/he.php46
-rw-r--r--core/l10n/hi.php1
-rw-r--r--core/l10n/hr.php41
-rw-r--r--core/l10n/hu_HU.php48
-rw-r--r--core/l10n/ia.php41
-rw-r--r--core/l10n/id.php46
-rw-r--r--core/l10n/is.php62
-rw-r--r--core/l10n/it.php56
-rw-r--r--core/l10n/ja_JP.php52
-rw-r--r--core/l10n/ka_GE.php45
-rw-r--r--core/l10n/ko.php58
-rw-r--r--core/l10n/lb.php54
-rw-r--r--core/l10n/lt_LT.php47
-rw-r--r--core/l10n/lv.php123
-rw-r--r--core/l10n/mk.php47
-rw-r--r--core/l10n/ms_MY.php41
-rw-r--r--core/l10n/nb_NO.php45
-rw-r--r--core/l10n/nl.php51
-rw-r--r--core/l10n/nn_NO.php39
-rw-r--r--core/l10n/oc.php41
-rw-r--r--core/l10n/pl.php48
-rw-r--r--core/l10n/pt_BR.php57
-rw-r--r--core/l10n/pt_PT.php66
-rw-r--r--core/l10n/ro.php62
-rw-r--r--core/l10n/ru.php53
-rw-r--r--core/l10n/ru_RU.php53
-rw-r--r--core/l10n/si_LK.php41
-rw-r--r--core/l10n/sk_SK.php63
-rw-r--r--core/l10n/sl.php47
-rw-r--r--core/l10n/sr.php51
-rw-r--r--core/l10n/sr@latin.php39
-rw-r--r--core/l10n/sv.php54
-rw-r--r--core/l10n/ta_LK.php47
-rw-r--r--core/l10n/th_TH.php57
-rw-r--r--core/l10n/tr.php64
-rw-r--r--core/l10n/uk.php50
-rw-r--r--core/l10n/vi.php61
-rw-r--r--core/l10n/zh_CN.GB2312.php47
-rw-r--r--core/l10n/zh_CN.php48
-rw-r--r--core/l10n/zh_TW.php101
-rw-r--r--core/routes.php7
-rw-r--r--core/setup.php2
-rw-r--r--core/templates/exception.php2
-rw-r--r--core/templates/installation.php22
-rw-r--r--core/templates/layout.base.php6
-rw-r--r--core/templates/layout.guest.php11
-rw-r--r--core/templates/layout.user.php74
-rw-r--r--core/templates/login.php101
-rw-r--r--core/templates/logout.php1
-rw-r--r--core/templates/update.php26
-rw-r--r--core/templates/verify.php18
-rw-r--r--db_structure.xml262
-rw-r--r--index.html6
-rw-r--r--issue_template.md46
-rw-r--r--l10n/.tx/config6
-rw-r--r--l10n/af_ZA/core.po594
-rw-r--r--l10n/af_ZA/files.po315
-rw-r--r--l10n/af_ZA/files_encryption.po38
-rw-r--r--l10n/af_ZA/files_external.po120
-rw-r--r--l10n/af_ZA/files_sharing.po48
-rw-r--r--l10n/af_ZA/files_trashbin.po68
-rw-r--r--l10n/af_ZA/files_versions.po65
-rw-r--r--l10n/af_ZA/lib.po253
-rw-r--r--l10n/af_ZA/settings.po316
-rw-r--r--l10n/af_ZA/user_ldap.po309
-rw-r--r--l10n/af_ZA/user_webdavauth.po33
-rw-r--r--l10n/ar/core.po347
-rw-r--r--l10n/ar/files.po161
-rw-r--r--l10n/ar/files_encryption.po28
-rw-r--r--l10n/ar/files_trashbin.po68
-rw-r--r--l10n/ar/files_versions.po49
-rw-r--r--l10n/ar/lib.po151
-rw-r--r--l10n/ar/settings.po173
-rw-r--r--l10n/ar/user_ldap.po216
-rw-r--r--l10n/ar/user_webdavauth.po16
-rw-r--r--l10n/bg_BG/core.po349
-rw-r--r--l10n/bg_BG/files.po161
-rw-r--r--l10n/bg_BG/files_encryption.po26
-rw-r--r--l10n/bg_BG/files_external.po10
-rw-r--r--l10n/bg_BG/files_trashbin.po68
-rw-r--r--l10n/bg_BG/files_versions.po47
-rw-r--r--l10n/bg_BG/lib.po153
-rw-r--r--l10n/bg_BG/settings.po193
-rw-r--r--l10n/bg_BG/user_ldap.po216
-rw-r--r--l10n/bg_BG/user_webdavauth.po16
-rw-r--r--l10n/bn_BD/core.po430
-rw-r--r--l10n/bn_BD/files.po239
-rw-r--r--l10n/bn_BD/files_encryption.po22
-rw-r--r--l10n/bn_BD/files_external.po48
-rw-r--r--l10n/bn_BD/files_sharing.po16
-rw-r--r--l10n/bn_BD/files_trashbin.po68
-rw-r--r--l10n/bn_BD/files_versions.po49
-rw-r--r--l10n/bn_BD/lib.po183
-rw-r--r--l10n/bn_BD/settings.po239
-rw-r--r--l10n/bn_BD/user_ldap.po258
-rw-r--r--l10n/bn_BD/user_webdavauth.po19
-rw-r--r--l10n/ca/core.po350
-rw-r--r--l10n/ca/files.po174
-rw-r--r--l10n/ca/files_encryption.po31
-rw-r--r--l10n/ca/files_trashbin.po69
-rw-r--r--l10n/ca/files_versions.po48
-rw-r--r--l10n/ca/lib.po156
-rw-r--r--l10n/ca/settings.po176
-rw-r--r--l10n/ca/user_ldap.po229
-rw-r--r--l10n/ca/user_webdavauth.po18
-rw-r--r--l10n/cs_CZ/core.po349
-rw-r--r--l10n/cs_CZ/files.po175
-rw-r--r--l10n/cs_CZ/files_encryption.po30
-rw-r--r--l10n/cs_CZ/files_trashbin.po69
-rw-r--r--l10n/cs_CZ/files_versions.po49
-rw-r--r--l10n/cs_CZ/lib.po155
-rw-r--r--l10n/cs_CZ/settings.po177
-rw-r--r--l10n/cs_CZ/user_ldap.po226
-rw-r--r--l10n/cs_CZ/user_webdavauth.po18
-rw-r--r--l10n/da/core.po354
-rw-r--r--l10n/da/files.po183
-rw-r--r--l10n/da/files_encryption.po29
-rw-r--r--l10n/da/files_trashbin.po68
-rw-r--r--l10n/da/files_versions.po49
-rw-r--r--l10n/da/lib.po155
-rw-r--r--l10n/da/settings.po175
-rw-r--r--l10n/da/user_ldap.po226
-rw-r--r--l10n/da/user_webdavauth.po19
-rw-r--r--l10n/de/core.po353
-rw-r--r--l10n/de/files.po178
-rw-r--r--l10n/de/files_encryption.po29
-rw-r--r--l10n/de/files_trashbin.po70
-rw-r--r--l10n/de/files_versions.po49
-rw-r--r--l10n/de/lib.po155
-rw-r--r--l10n/de/settings.po177
-rw-r--r--l10n/de/user_ldap.po231
-rw-r--r--l10n/de/user_webdavauth.po19
-rw-r--r--l10n/de_DE/core.po355
-rw-r--r--l10n/de_DE/files.po181
-rw-r--r--l10n/de_DE/files_encryption.po33
-rw-r--r--l10n/de_DE/files_trashbin.po71
-rw-r--r--l10n/de_DE/files_versions.po50
-rw-r--r--l10n/de_DE/lib.po154
-rw-r--r--l10n/de_DE/settings.po182
-rw-r--r--l10n/de_DE/user_ldap.po232
-rw-r--r--l10n/de_DE/user_webdavauth.po18
-rw-r--r--l10n/el/core.po356
-rw-r--r--l10n/el/files.po186
-rw-r--r--l10n/el/files_encryption.po32
-rw-r--r--l10n/el/files_trashbin.po69
-rw-r--r--l10n/el/files_versions.po49
-rw-r--r--l10n/el/lib.po154
-rw-r--r--l10n/el/settings.po180
-rw-r--r--l10n/el/user_ldap.po228
-rw-r--r--l10n/el/user_webdavauth.po19
-rw-r--r--l10n/eo/core.po347
-rw-r--r--l10n/eo/files.po180
-rw-r--r--l10n/eo/files_encryption.po30
-rw-r--r--l10n/eo/files_trashbin.po68
-rw-r--r--l10n/eo/files_versions.po49
-rw-r--r--l10n/eo/lib.po153
-rw-r--r--l10n/eo/settings.po194
-rw-r--r--l10n/eo/user_ldap.po227
-rw-r--r--l10n/eo/user_webdavauth.po15
-rw-r--r--l10n/es/core.po352
-rw-r--r--l10n/es/files.po178
-rw-r--r--l10n/es/files_encryption.po33
-rw-r--r--l10n/es/files_trashbin.po69
-rw-r--r--l10n/es/files_versions.po50
-rw-r--r--l10n/es/lib.po155
-rw-r--r--l10n/es/settings.po176
-rw-r--r--l10n/es/user_ldap.po232
-rw-r--r--l10n/es/user_webdavauth.po19
-rw-r--r--l10n/es_AR/core.po354
-rw-r--r--l10n/es_AR/files.po182
-rw-r--r--l10n/es_AR/files_encryption.po29
-rw-r--r--l10n/es_AR/files_trashbin.po68
-rw-r--r--l10n/es_AR/files_versions.po49
-rw-r--r--l10n/es_AR/lib.po154
-rw-r--r--l10n/es_AR/settings.po178
-rw-r--r--l10n/es_AR/user_ldap.po229
-rw-r--r--l10n/es_AR/user_webdavauth.po19
-rw-r--r--l10n/et_EE/core.po347
-rw-r--r--l10n/et_EE/files.po165
-rw-r--r--l10n/et_EE/files_encryption.po30
-rw-r--r--l10n/et_EE/files_trashbin.po68
-rw-r--r--l10n/et_EE/files_versions.po49
-rw-r--r--l10n/et_EE/lib.po151
-rw-r--r--l10n/et_EE/settings.po169
-rw-r--r--l10n/et_EE/user_ldap.po224
-rw-r--r--l10n/et_EE/user_webdavauth.po14
-rw-r--r--l10n/eu/core.po352
-rw-r--r--l10n/eu/files.po184
-rw-r--r--l10n/eu/files_encryption.po31
-rw-r--r--l10n/eu/files_trashbin.po68
-rw-r--r--l10n/eu/files_versions.po49
-rw-r--r--l10n/eu/lib.po154
-rw-r--r--l10n/eu/settings.po180
-rw-r--r--l10n/eu/user_ldap.po227
-rw-r--r--l10n/eu/user_webdavauth.po17
-rw-r--r--l10n/fa/core.po444
-rw-r--r--l10n/fa/files.po204
-rw-r--r--l10n/fa/files_encryption.po29
-rw-r--r--l10n/fa/files_external.po33
-rw-r--r--l10n/fa/files_sharing.po23
-rw-r--r--l10n/fa/files_trashbin.po68
-rw-r--r--l10n/fa/files_versions.po50
-rw-r--r--l10n/fa/lib.po172
-rw-r--r--l10n/fa/settings.po200
-rw-r--r--l10n/fa/user_ldap.po215
-rw-r--r--l10n/fa/user_webdavauth.po14
-rw-r--r--l10n/fi_FI/core.po373
-rw-r--r--l10n/fi_FI/files.po175
-rw-r--r--l10n/fi_FI/files_encryption.po32
-rw-r--r--l10n/fi_FI/files_external.po28
-rw-r--r--l10n/fi_FI/files_trashbin.po69
-rw-r--r--l10n/fi_FI/files_versions.po49
-rw-r--r--l10n/fi_FI/lib.po155
-rw-r--r--l10n/fi_FI/settings.po179
-rw-r--r--l10n/fi_FI/user_ldap.po224
-rw-r--r--l10n/fi_FI/user_webdavauth.po14
-rw-r--r--l10n/fr/core.po356
-rw-r--r--l10n/fr/files.po181
-rw-r--r--l10n/fr/files_encryption.po32
-rw-r--r--l10n/fr/files_trashbin.po70
-rw-r--r--l10n/fr/files_versions.po49
-rw-r--r--l10n/fr/lib.po156
-rw-r--r--l10n/fr/settings.po179
-rw-r--r--l10n/fr/user_ldap.po235
-rw-r--r--l10n/fr/user_webdavauth.po21
-rw-r--r--l10n/gl/core.po353
-rw-r--r--l10n/gl/files.po230
-rw-r--r--l10n/gl/files_encryption.po31
-rw-r--r--l10n/gl/files_trashbin.po69
-rw-r--r--l10n/gl/files_versions.po49
-rw-r--r--l10n/gl/lib.po160
-rw-r--r--l10n/gl/settings.po175
-rw-r--r--l10n/gl/user_ldap.po228
-rw-r--r--l10n/gl/user_webdavauth.po20
-rw-r--r--l10n/he/core.po352
-rw-r--r--l10n/he/files.po165
-rw-r--r--l10n/he/files_encryption.po26
-rw-r--r--l10n/he/files_trashbin.po68
-rw-r--r--l10n/he/files_versions.po49
-rw-r--r--l10n/he/lib.po153
-rw-r--r--l10n/he/settings.po173
-rw-r--r--l10n/he/user_ldap.po231
-rw-r--r--l10n/he/user_webdavauth.po14
-rw-r--r--l10n/hi/core.po345
-rw-r--r--l10n/hi/files.po157
-rw-r--r--l10n/hi/files_encryption.po26
-rw-r--r--l10n/hi/files_trashbin.po68
-rw-r--r--l10n/hi/files_versions.po45
-rw-r--r--l10n/hi/lib.po151
-rw-r--r--l10n/hi/settings.po165
-rw-r--r--l10n/hi/user_ldap.po214
-rw-r--r--l10n/hi/user_webdavauth.po14
-rw-r--r--l10n/hr/core.po347
-rw-r--r--l10n/hr/files.po163
-rw-r--r--l10n/hr/files_encryption.po26
-rw-r--r--l10n/hr/files_trashbin.po68
-rw-r--r--l10n/hr/files_versions.po45
-rw-r--r--l10n/hr/lib.po151
-rw-r--r--l10n/hr/settings.po169
-rw-r--r--l10n/hr/user_ldap.po216
-rw-r--r--l10n/hr/user_webdavauth.po14
-rw-r--r--l10n/hu/core.po49
-rw-r--r--l10n/hu/files.po83
-rw-r--r--l10n/hu/files_versions.po18
-rw-r--r--l10n/hu/lib.po48
-rw-r--r--l10n/hu/settings.po20
-rw-r--r--l10n/hu/user_ldap.po22
-rw-r--r--l10n/hu/user_webdavauth.po16
-rw-r--r--l10n/hu_HU/core.po355
-rw-r--r--l10n/hu_HU/files.po178
-rw-r--r--l10n/hu_HU/files_encryption.po28
-rw-r--r--l10n/hu_HU/files_trashbin.po68
-rw-r--r--l10n/hu_HU/files_versions.po49
-rw-r--r--l10n/hu_HU/lib.po159
-rw-r--r--l10n/hu_HU/settings.po175
-rw-r--r--l10n/hu_HU/user_ldap.po231
-rw-r--r--l10n/hu_HU/user_webdavauth.po19
-rw-r--r--l10n/ia/core.po347
-rw-r--r--l10n/ia/files.po159
-rw-r--r--l10n/ia/files_encryption.po26
-rw-r--r--l10n/ia/files_trashbin.po68
-rw-r--r--l10n/ia/files_versions.po45
-rw-r--r--l10n/ia/lib.po151
-rw-r--r--l10n/ia/settings.po169
-rw-r--r--l10n/ia/user_ldap.po216
-rw-r--r--l10n/ia/user_webdavauth.po14
-rw-r--r--l10n/id/core.po347
-rw-r--r--l10n/id/files.po163
-rw-r--r--l10n/id/files_encryption.po28
-rw-r--r--l10n/id/files_trashbin.po68
-rw-r--r--l10n/id/files_versions.po49
-rw-r--r--l10n/id/lib.po162
-rw-r--r--l10n/id/settings.po169
-rw-r--r--l10n/id/user_ldap.po218
-rw-r--r--l10n/id/user_webdavauth.po23
-rw-r--r--l10n/is/core.po369
-rw-r--r--l10n/is/files.po187
-rw-r--r--l10n/is/files_encryption.po26
-rw-r--r--l10n/is/files_trashbin.po68
-rw-r--r--l10n/is/files_versions.po49
-rw-r--r--l10n/is/lib.po153
-rw-r--r--l10n/is/settings.po183
-rw-r--r--l10n/is/user_ldap.po216
-rw-r--r--l10n/is/user_webdavauth.po18
-rw-r--r--l10n/it/core.po354
-rw-r--r--l10n/it/files.po175
-rw-r--r--l10n/it/files_encryption.po32
-rw-r--r--l10n/it/files_trashbin.po69
-rw-r--r--l10n/it/files_versions.po49
-rw-r--r--l10n/it/lib.po155
-rw-r--r--l10n/it/settings.po179
-rw-r--r--l10n/it/user_ldap.po228
-rw-r--r--l10n/it/user_webdavauth.po18
-rw-r--r--l10n/ja_JP/core.po351
-rw-r--r--l10n/ja_JP/files.po174
-rw-r--r--l10n/ja_JP/files_encryption.po31
-rw-r--r--l10n/ja_JP/files_trashbin.po69
-rw-r--r--l10n/ja_JP/files_versions.po50
-rw-r--r--l10n/ja_JP/lib.po154
-rw-r--r--l10n/ja_JP/settings.po176
-rw-r--r--l10n/ja_JP/user_ldap.po229
-rw-r--r--l10n/ja_JP/user_webdavauth.po18
-rw-r--r--l10n/ka_GE/core.po347
-rw-r--r--l10n/ka_GE/files.po165
-rw-r--r--l10n/ka_GE/files_encryption.po24
-rw-r--r--l10n/ka_GE/files_trashbin.po68
-rw-r--r--l10n/ka_GE/files_versions.po45
-rw-r--r--l10n/ka_GE/lib.po151
-rw-r--r--l10n/ka_GE/settings.po169
-rw-r--r--l10n/ka_GE/user_ldap.po216
-rw-r--r--l10n/ka_GE/user_webdavauth.po14
-rw-r--r--l10n/ko/core.po362
-rw-r--r--l10n/ko/files.po181
-rw-r--r--l10n/ko/files_encryption.po30
-rw-r--r--l10n/ko/files_external.po21
-rw-r--r--l10n/ko/files_trashbin.po68
-rw-r--r--l10n/ko/files_versions.po49
-rw-r--r--l10n/ko/lib.po154
-rw-r--r--l10n/ko/settings.po190
-rw-r--r--l10n/ko/user_ldap.po232
-rw-r--r--l10n/ko/user_webdavauth.po19
-rw-r--r--l10n/ku_IQ/core.po343
-rw-r--r--l10n/ku_IQ/files.po159
-rw-r--r--l10n/ku_IQ/files_encryption.po28
-rw-r--r--l10n/ku_IQ/files_trashbin.po68
-rw-r--r--l10n/ku_IQ/files_versions.po49
-rw-r--r--l10n/ku_IQ/lib.po151
-rw-r--r--l10n/ku_IQ/settings.po167
-rw-r--r--l10n/ku_IQ/user_ldap.po216
-rw-r--r--l10n/ku_IQ/user_webdavauth.po14
-rw-r--r--l10n/lb/core.po372
-rw-r--r--l10n/lb/files.po161
-rw-r--r--l10n/lb/files_encryption.po26
-rw-r--r--l10n/lb/files_sharing.po16
-rw-r--r--l10n/lb/files_trashbin.po68
-rw-r--r--l10n/lb/files_versions.po50
-rw-r--r--l10n/lb/lib.po163
-rw-r--r--l10n/lb/settings.po169
-rw-r--r--l10n/lb/user_ldap.po218
-rw-r--r--l10n/lb/user_webdavauth.po14
-rw-r--r--l10n/lt_LT/core.po349
-rw-r--r--l10n/lt_LT/files.po165
-rw-r--r--l10n/lt_LT/files_encryption.po30
-rw-r--r--l10n/lt_LT/files_trashbin.po68
-rw-r--r--l10n/lt_LT/files_versions.po49
-rw-r--r--l10n/lt_LT/lib.po151
-rw-r--r--l10n/lt_LT/settings.po169
-rw-r--r--l10n/lt_LT/user_ldap.po214
-rw-r--r--l10n/lt_LT/user_webdavauth.po14
-rw-r--r--l10n/lv/core.po520
-rw-r--r--l10n/lv/files.po272
-rw-r--r--l10n/lv/files_encryption.po35
-rw-r--r--l10n/lv/files_external.po61
-rw-r--r--l10n/lv/files_sharing.po23
-rw-r--r--l10n/lv/files_trashbin.po69
-rw-r--r--l10n/lv/files_versions.po56
-rw-r--r--l10n/lv/lib.po204
-rw-r--r--l10n/lv/settings.po232
-rw-r--r--l10n/lv/user_ldap.po291
-rw-r--r--l10n/lv/user_webdavauth.po23
-rw-r--r--l10n/mk/core.po349
-rw-r--r--l10n/mk/files.po165
-rw-r--r--l10n/mk/files_encryption.po28
-rw-r--r--l10n/mk/files_trashbin.po68
-rw-r--r--l10n/mk/files_versions.po49
-rw-r--r--l10n/mk/lib.po153
-rw-r--r--l10n/mk/settings.po173
-rw-r--r--l10n/mk/user_ldap.po218
-rw-r--r--l10n/mk/user_webdavauth.po16
-rw-r--r--l10n/ms_MY/core.po347
-rw-r--r--l10n/ms_MY/files.po161
-rw-r--r--l10n/ms_MY/files_encryption.po26
-rw-r--r--l10n/ms_MY/files_trashbin.po68
-rw-r--r--l10n/ms_MY/files_versions.po45
-rw-r--r--l10n/ms_MY/lib.po153
-rw-r--r--l10n/ms_MY/settings.po169
-rw-r--r--l10n/ms_MY/user_ldap.po216
-rw-r--r--l10n/ms_MY/user_webdavauth.po14
-rw-r--r--l10n/nb_NO/core.po347
-rw-r--r--l10n/nb_NO/files.po163
-rw-r--r--l10n/nb_NO/files_encryption.po30
-rw-r--r--l10n/nb_NO/files_trashbin.po68
-rw-r--r--l10n/nb_NO/files_versions.po47
-rw-r--r--l10n/nb_NO/lib.po153
-rw-r--r--l10n/nb_NO/settings.po173
-rw-r--r--l10n/nb_NO/user_ldap.po218
-rw-r--r--l10n/nb_NO/user_webdavauth.po16
-rw-r--r--l10n/nl/core.po351
-rw-r--r--l10n/nl/files.po176
-rw-r--r--l10n/nl/files_encryption.po32
-rw-r--r--l10n/nl/files_trashbin.po69
-rw-r--r--l10n/nl/files_versions.po49
-rw-r--r--l10n/nl/lib.po154
-rw-r--r--l10n/nl/settings.po175
-rw-r--r--l10n/nl/user_ldap.po237
-rw-r--r--l10n/nl/user_webdavauth.po18
-rw-r--r--l10n/nn_NO/core.po345
-rw-r--r--l10n/nn_NO/files.po159
-rw-r--r--l10n/nn_NO/files_encryption.po26
-rw-r--r--l10n/nn_NO/files_trashbin.po68
-rw-r--r--l10n/nn_NO/files_versions.po45
-rw-r--r--l10n/nn_NO/lib.po151
-rw-r--r--l10n/nn_NO/settings.po169
-rw-r--r--l10n/nn_NO/user_ldap.po216
-rw-r--r--l10n/nn_NO/user_webdavauth.po14
-rw-r--r--l10n/oc/core.po347
-rw-r--r--l10n/oc/files.po163
-rw-r--r--l10n/oc/files_encryption.po24
-rw-r--r--l10n/oc/files_trashbin.po68
-rw-r--r--l10n/oc/files_versions.po45
-rw-r--r--l10n/oc/lib.po151
-rw-r--r--l10n/oc/settings.po169
-rw-r--r--l10n/oc/user_ldap.po216
-rw-r--r--l10n/oc/user_webdavauth.po14
-rw-r--r--l10n/pl/core.po351
-rw-r--r--l10n/pl/files.po174
-rw-r--r--l10n/pl/files_encryption.po30
-rw-r--r--l10n/pl/files_trashbin.po68
-rw-r--r--l10n/pl/files_versions.po49
-rw-r--r--l10n/pl/lib.po155
-rw-r--r--l10n/pl/settings.po178
-rw-r--r--l10n/pl/user_ldap.po228
-rw-r--r--l10n/pl/user_webdavauth.po19
-rw-r--r--l10n/pl_PL/core.po343
-rw-r--r--l10n/pl_PL/files.po157
-rw-r--r--l10n/pl_PL/files_encryption.po26
-rw-r--r--l10n/pl_PL/files_trashbin.po68
-rw-r--r--l10n/pl_PL/files_versions.po45
-rw-r--r--l10n/pl_PL/lib.po151
-rw-r--r--l10n/pl_PL/settings.po165
-rw-r--r--l10n/pl_PL/user_ldap.po214
-rw-r--r--l10n/pl_PL/user_webdavauth.po14
-rw-r--r--l10n/pt_BR/core.po368
-rw-r--r--l10n/pt_BR/files.po182
-rw-r--r--l10n/pt_BR/files_encryption.po29
-rw-r--r--l10n/pt_BR/files_external.po27
-rw-r--r--l10n/pt_BR/files_trashbin.po69
-rw-r--r--l10n/pt_BR/files_versions.po49
-rw-r--r--l10n/pt_BR/lib.po153
-rw-r--r--l10n/pt_BR/settings.po228
-rw-r--r--l10n/pt_BR/user_ldap.po224
-rw-r--r--l10n/pt_BR/user_webdavauth.po21
-rw-r--r--l10n/pt_PT/core.po367
-rw-r--r--l10n/pt_PT/files.po186
-rw-r--r--l10n/pt_PT/files_encryption.po29
-rw-r--r--l10n/pt_PT/files_trashbin.po69
-rw-r--r--l10n/pt_PT/files_versions.po50
-rw-r--r--l10n/pt_PT/lib.po156
-rw-r--r--l10n/pt_PT/settings.po178
-rw-r--r--l10n/pt_PT/user_ldap.po231
-rw-r--r--l10n/pt_PT/user_webdavauth.po18
-rw-r--r--l10n/ro/core.po380
-rw-r--r--l10n/ro/files.po184
-rw-r--r--l10n/ro/files_encryption.po29
-rw-r--r--l10n/ro/files_external.po29
-rw-r--r--l10n/ro/files_trashbin.po68
-rw-r--r--l10n/ro/files_versions.po49
-rw-r--r--l10n/ro/lib.po154
-rw-r--r--l10n/ro/settings.po202
-rw-r--r--l10n/ro/user_ldap.po230
-rw-r--r--l10n/ro/user_webdavauth.po19
-rw-r--r--l10n/ru/core.po356
-rw-r--r--l10n/ru/files.po184
-rw-r--r--l10n/ru/files_encryption.po31
-rw-r--r--l10n/ru/files_trashbin.po69
-rw-r--r--l10n/ru/files_versions.po50
-rw-r--r--l10n/ru/lib.po154
-rw-r--r--l10n/ru/settings.po195
-rw-r--r--l10n/ru/user_ldap.po229
-rw-r--r--l10n/ru/user_webdavauth.po16
-rw-r--r--l10n/ru_RU/core.po355
-rw-r--r--l10n/ru_RU/files.po185
-rw-r--r--l10n/ru_RU/files_encryption.po29
-rw-r--r--l10n/ru_RU/files_trashbin.po69
-rw-r--r--l10n/ru_RU/files_versions.po49
-rw-r--r--l10n/ru_RU/lib.po155
-rw-r--r--l10n/ru_RU/settings.po180
-rw-r--r--l10n/ru_RU/user_ldap.po229
-rw-r--r--l10n/ru_RU/user_webdavauth.po15
-rw-r--r--l10n/si_LK/core.po347
-rw-r--r--l10n/si_LK/files.po163
-rw-r--r--l10n/si_LK/files_encryption.po28
-rw-r--r--l10n/si_LK/files_trashbin.po68
-rw-r--r--l10n/si_LK/files_versions.po49
-rw-r--r--l10n/si_LK/lib.po151
-rw-r--r--l10n/si_LK/settings.po169
-rw-r--r--l10n/si_LK/user_ldap.po214
-rw-r--r--l10n/si_LK/user_webdavauth.po14
-rw-r--r--l10n/sk/core.po593
-rw-r--r--l10n/sk/files.po315
-rw-r--r--l10n/sk/files_encryption.po38
-rw-r--r--l10n/sk/files_external.po120
-rw-r--r--l10n/sk/files_sharing.po48
-rw-r--r--l10n/sk/files_trashbin.po68
-rw-r--r--l10n/sk/files_versions.po65
-rw-r--r--l10n/sk/lib.po253
-rw-r--r--l10n/sk/settings.po316
-rw-r--r--l10n/sk/user_ldap.po309
-rw-r--r--l10n/sk/user_webdavauth.po33
-rw-r--r--l10n/sk_SK/core.po374
-rw-r--r--l10n/sk_SK/files.po191
-rw-r--r--l10n/sk_SK/files_encryption.po30
-rw-r--r--l10n/sk_SK/files_external.po27
-rw-r--r--l10n/sk_SK/files_trashbin.po70
-rw-r--r--l10n/sk_SK/files_versions.po51
-rw-r--r--l10n/sk_SK/lib.po162
-rw-r--r--l10n/sk_SK/settings.po198
-rw-r--r--l10n/sk_SK/user_ldap.po231
-rw-r--r--l10n/sk_SK/user_webdavauth.po21
-rw-r--r--l10n/sl/core.po349
-rw-r--r--l10n/sl/files.po165
-rw-r--r--l10n/sl/files_encryption.po28
-rw-r--r--l10n/sl/files_trashbin.po68
-rw-r--r--l10n/sl/files_versions.po49
-rw-r--r--l10n/sl/lib.po153
-rw-r--r--l10n/sl/settings.po175
-rw-r--r--l10n/sl/user_ldap.po228
-rw-r--r--l10n/sl/user_webdavauth.po18
-rw-r--r--l10n/sq/core.po49
-rw-r--r--l10n/sq/files.po83
-rw-r--r--l10n/sq/files_versions.po18
-rw-r--r--l10n/sq/lib.po56
-rw-r--r--l10n/sq/settings.po18
-rw-r--r--l10n/sq/user_ldap.po20
-rw-r--r--l10n/sq/user_webdavauth.po14
-rw-r--r--l10n/sr/core.po361
-rw-r--r--l10n/sr/files.po165
-rw-r--r--l10n/sr/files_encryption.po28
-rw-r--r--l10n/sr/files_sharing.po14
-rw-r--r--l10n/sr/files_trashbin.po69
-rw-r--r--l10n/sr/files_versions.po50
-rw-r--r--l10n/sr/lib.po164
-rw-r--r--l10n/sr/settings.po169
-rw-r--r--l10n/sr/user_ldap.po257
-rw-r--r--l10n/sr/user_webdavauth.po21
-rw-r--r--l10n/sr@latin/core.po345
-rw-r--r--l10n/sr@latin/files.po159
-rw-r--r--l10n/sr@latin/files_encryption.po26
-rw-r--r--l10n/sr@latin/files_trashbin.po68
-rw-r--r--l10n/sr@latin/files_versions.po45
-rw-r--r--l10n/sr@latin/lib.po151
-rw-r--r--l10n/sr@latin/settings.po169
-rw-r--r--l10n/sr@latin/user_ldap.po216
-rw-r--r--l10n/sr@latin/user_webdavauth.po14
-rw-r--r--l10n/sv/core.po350
-rw-r--r--l10n/sv/files.po176
-rw-r--r--l10n/sv/files_encryption.po33
-rw-r--r--l10n/sv/files_trashbin.po70
-rw-r--r--l10n/sv/files_versions.po49
-rw-r--r--l10n/sv/lib.po155
-rw-r--r--l10n/sv/settings.po178
-rw-r--r--l10n/sv/user_ldap.po230
-rw-r--r--l10n/sv/user_webdavauth.po18
-rw-r--r--l10n/sw_KE/core.po593
-rw-r--r--l10n/sw_KE/files.po315
-rw-r--r--l10n/sw_KE/files_encryption.po38
-rw-r--r--l10n/sw_KE/files_external.po120
-rw-r--r--l10n/sw_KE/files_sharing.po48
-rw-r--r--l10n/sw_KE/files_trashbin.po68
-rw-r--r--l10n/sw_KE/files_versions.po65
-rw-r--r--l10n/sw_KE/lib.po253
-rw-r--r--l10n/sw_KE/settings.po316
-rw-r--r--l10n/sw_KE/user_ldap.po309
-rw-r--r--l10n/sw_KE/user_webdavauth.po33
-rw-r--r--l10n/ta_LK/core.po349
-rw-r--r--l10n/ta_LK/files.po165
-rw-r--r--l10n/ta_LK/files_encryption.po28
-rw-r--r--l10n/ta_LK/files_trashbin.po68
-rw-r--r--l10n/ta_LK/files_versions.po49
-rw-r--r--l10n/ta_LK/lib.po153
-rw-r--r--l10n/ta_LK/settings.po169
-rw-r--r--l10n/ta_LK/user_ldap.po224
-rw-r--r--l10n/ta_LK/user_webdavauth.po14
-rw-r--r--l10n/templates/core.pot341
-rw-r--r--l10n/templates/files.pot155
-rw-r--r--l10n/templates/files_encryption.pot16
-rw-r--r--l10n/templates/files_external.pot6
-rw-r--r--l10n/templates/files_sharing.pot12
-rw-r--r--l10n/templates/files_trashbin.pot68
-rw-r--r--l10n/templates/files_versions.pot41
-rw-r--r--l10n/templates/lib.pot149
-rw-r--r--l10n/templates/settings.pot163
-rw-r--r--l10n/templates/user_ldap.pot212
-rw-r--r--l10n/templates/user_webdavauth.pot13
-rw-r--r--l10n/th_TH/core.po369
-rw-r--r--l10n/th_TH/files.po183
-rw-r--r--l10n/th_TH/files_encryption.po32
-rw-r--r--l10n/th_TH/files_external.po18
-rw-r--r--l10n/th_TH/files_trashbin.po69
-rw-r--r--l10n/th_TH/files_versions.po49
-rw-r--r--l10n/th_TH/lib.po155
-rw-r--r--l10n/th_TH/settings.po199
-rw-r--r--l10n/th_TH/user_ldap.po230
-rw-r--r--l10n/th_TH/user_webdavauth.po22
-rw-r--r--l10n/tr/core.po386
-rw-r--r--l10n/tr/files.po180
-rw-r--r--l10n/tr/files_encryption.po26
-rw-r--r--l10n/tr/files_trashbin.po68
-rw-r--r--l10n/tr/files_versions.po49
-rw-r--r--l10n/tr/lib.po154
-rw-r--r--l10n/tr/settings.po173
-rw-r--r--l10n/tr/user_ldap.po226
-rw-r--r--l10n/tr/user_webdavauth.po16
-rw-r--r--l10n/uk/core.po353
-rw-r--r--l10n/uk/files.po174
-rw-r--r--l10n/uk/files_encryption.po28
-rw-r--r--l10n/uk/files_trashbin.po68
-rw-r--r--l10n/uk/files_versions.po49
-rw-r--r--l10n/uk/lib.po154
-rw-r--r--l10n/uk/settings.po184
-rw-r--r--l10n/uk/user_ldap.po227
-rw-r--r--l10n/uk/user_webdavauth.po18
-rw-r--r--l10n/vi/core.po372
-rw-r--r--l10n/vi/files.po184
-rw-r--r--l10n/vi/files_encryption.po29
-rw-r--r--l10n/vi/files_external.po21
-rw-r--r--l10n/vi/files_trashbin.po69
-rw-r--r--l10n/vi/files_versions.po50
-rw-r--r--l10n/vi/lib.po154
-rw-r--r--l10n/vi/settings.po196
-rw-r--r--l10n/vi/user_ldap.po227
-rw-r--r--l10n/vi/user_webdavauth.po23
-rw-r--r--l10n/zh_CN.GB2312/core.po349
-rw-r--r--l10n/zh_CN.GB2312/files.po165
-rw-r--r--l10n/zh_CN.GB2312/files_encryption.po28
-rw-r--r--l10n/zh_CN.GB2312/files_trashbin.po68
-rw-r--r--l10n/zh_CN.GB2312/files_versions.po49
-rw-r--r--l10n/zh_CN.GB2312/lib.po151
-rw-r--r--l10n/zh_CN.GB2312/settings.po169
-rw-r--r--l10n/zh_CN.GB2312/user_ldap.po224
-rw-r--r--l10n/zh_CN.GB2312/user_webdavauth.po14
-rw-r--r--l10n/zh_CN/core.po354
-rw-r--r--l10n/zh_CN/files.po181
-rw-r--r--l10n/zh_CN/files_encryption.po28
-rw-r--r--l10n/zh_CN/files_trashbin.po68
-rw-r--r--l10n/zh_CN/files_versions.po49
-rw-r--r--l10n/zh_CN/lib.po153
-rw-r--r--l10n/zh_CN/settings.po181
-rw-r--r--l10n/zh_CN/user_ldap.po227
-rw-r--r--l10n/zh_CN/user_webdavauth.po20
-rw-r--r--l10n/zh_HK/core.po345
-rw-r--r--l10n/zh_HK/files.po157
-rw-r--r--l10n/zh_HK/files_encryption.po24
-rw-r--r--l10n/zh_HK/files_trashbin.po68
-rw-r--r--l10n/zh_HK/files_versions.po45
-rw-r--r--l10n/zh_HK/lib.po153
-rw-r--r--l10n/zh_HK/settings.po165
-rw-r--r--l10n/zh_HK/user_ldap.po214
-rw-r--r--l10n/zh_HK/user_webdavauth.po14
-rw-r--r--l10n/zh_TW/core.po414
-rw-r--r--l10n/zh_TW/files.po198
-rw-r--r--l10n/zh_TW/files_encryption.po31
-rw-r--r--l10n/zh_TW/files_sharing.po9
-rw-r--r--l10n/zh_TW/files_trashbin.po68
-rw-r--r--l10n/zh_TW/files_versions.po47
-rw-r--r--l10n/zh_TW/lib.po166
-rw-r--r--l10n/zh_TW/settings.po197
-rw-r--r--l10n/zh_TW/user_ldap.po216
-rw-r--r--l10n/zh_TW/user_webdavauth.po14
-rw-r--r--l10n/zu_ZA/core.po49
-rw-r--r--l10n/zu_ZA/files.po83
-rw-r--r--l10n/zu_ZA/files_versions.po18
-rw-r--r--l10n/zu_ZA/lib.po54
-rw-r--r--l10n/zu_ZA/settings.po18
-rw-r--r--l10n/zu_ZA/user_ldap.po20
-rw-r--r--l10n/zu_ZA/user_webdavauth.po14
-rw-r--r--lib/MDB2/Driver/sqlite3.php2
-rw-r--r--lib/api.php39
-rw-r--r--lib/app.php185
-rw-r--r--lib/archive/tar.php4
-rw-r--r--lib/archive/zip.php2
-rw-r--r--lib/backgroundjob.php2
-rw-r--r--lib/base.php1383
-rw-r--r--lib/cache/apc.php2
-rw-r--r--lib/cache/file.php4
-rw-r--r--lib/connector/sabre/ServiceUnavailable.php22
-rw-r--r--lib/connector/sabre/directory.php52
-rw-r--r--lib/connector/sabre/file.php46
-rw-r--r--lib/connector/sabre/maintenanceplugin.php56
-rw-r--r--lib/connector/sabre/node.php76
-rw-r--r--lib/connector/sabre/quotaplugin.php2
-rw-r--r--lib/connector/sabre/request.php50
-rw-r--r--lib/db.php36
-rw-r--r--lib/filecache.php534
-rw-r--r--lib/filecache/cached.php81
-rw-r--r--lib/filecache/update.php227
-rw-r--r--lib/filechunking.php38
-rw-r--r--lib/fileproxy.php2
-rw-r--r--lib/fileproxy/fileoperations.php6
-rw-r--r--lib/fileproxy/quota.php30
-rw-r--r--lib/files.php444
-rw-r--r--lib/files/cache/cache.php527
-rw-r--r--lib/files/cache/legacy.php81
-rw-r--r--lib/files/cache/permissions.php102
-rw-r--r--lib/files/cache/scanner.php162
-rw-r--r--lib/files/cache/updater.php105
-rw-r--r--lib/files/cache/upgrade.php159
-rw-r--r--lib/files/cache/watcher.php72
-rw-r--r--lib/files/filesystem.php637
-rw-r--r--lib/files/mapper.php216
-rw-r--r--lib/files/mount.php188
-rw-r--r--lib/files/storage/common.php (renamed from lib/filestorage/common.php)246
-rw-r--r--lib/files/storage/commontest.php (renamed from lib/filestorage/commontest.php)13
-rw-r--r--lib/files/storage/local.php (renamed from lib/filestorage/local.php)38
-rw-r--r--lib/files/storage/mappedlocal.php335
-rw-r--r--lib/files/storage/storage.php88
-rw-r--r--lib/files/storage/temporary.php27
-rw-r--r--lib/files/stream/close.php100
-rw-r--r--lib/files/stream/dir.php47
-rw-r--r--lib/files/stream/oc.php129
-rw-r--r--lib/files/stream/staticstream.php (renamed from lib/streamwrappers.php)136
-rw-r--r--lib/files/view.php970
-rw-r--r--lib/filestorage.php68
-rw-r--r--lib/filestorage/temporary.php17
-rw-r--r--lib/filesystem.php680
-rw-r--r--lib/filesystemview.php659
-rw-r--r--lib/group.php29
-rw-r--r--lib/group/backend.php18
-rw-r--r--lib/group/database.php21
-rw-r--r--lib/helper.php100
-rw-r--r--lib/hook.php22
-rw-r--r--lib/image.php4
-rw-r--r--lib/installer.php101
-rw-r--r--lib/json.php21
-rw-r--r--lib/l10n.php22
-rw-r--r--lib/l10n/af_ZA.php8
-rw-r--r--lib/l10n/bg_BG.php1
-rw-r--r--lib/l10n/bn_BD.php23
-rw-r--r--lib/l10n/ca.php3
-rw-r--r--lib/l10n/cs_CZ.php3
-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.php1
-rw-r--r--lib/l10n/es.php3
-rw-r--r--lib/l10n/es_AR.php1
-rw-r--r--lib/l10n/eu.php1
-rw-r--r--lib/l10n/fa.php14
-rw-r--r--lib/l10n/fi_FI.php2
-rw-r--r--lib/l10n/fr.php3
-rw-r--r--lib/l10n/gl.php7
-rw-r--r--lib/l10n/hu_HU.php5
-rw-r--r--lib/l10n/id.php8
-rw-r--r--lib/l10n/it.php3
-rw-r--r--lib/l10n/ja_JP.php1
-rw-r--r--lib/l10n/ko.php1
-rw-r--r--lib/l10n/lb.php8
-rw-r--r--lib/l10n/lv.php33
-rw-r--r--lib/l10n/ms_MY.php1
-rw-r--r--lib/l10n/nl.php1
-rw-r--r--lib/l10n/pl.php1
-rw-r--r--lib/l10n/pt_PT.php3
-rw-r--r--lib/l10n/ro.php1
-rw-r--r--lib/l10n/ru.php1
-rw-r--r--lib/l10n/ru_RU.php3
-rw-r--r--lib/l10n/sk_SK.php11
-rw-r--r--lib/l10n/sr.php9
-rw-r--r--lib/l10n/sv.php3
-rw-r--r--lib/l10n/th_TH.php1
-rw-r--r--lib/l10n/tr.php1
-rw-r--r--lib/l10n/uk.php1
-rw-r--r--lib/l10n/vi.php1
-rw-r--r--lib/l10n/zh_TW.php15
-rw-r--r--lib/log.php4
-rw-r--r--lib/mail.php12
-rw-r--r--lib/migrate.php4
-rw-r--r--lib/migration/content.php2
-rw-r--r--lib/mimetypes.list.php4
-rw-r--r--lib/ocs/cloud.php20
-rw-r--r--lib/ocs/config.php4
-rw-r--r--lib/ocs/person.php2
-rw-r--r--lib/ocs/privatedata.php4
-rw-r--r--lib/ocs/result.php14
-rw-r--r--lib/ocsclient.php18
-rw-r--r--lib/public/api.php4
-rw-r--r--lib/public/app.php7
-rw-r--r--lib/public/constants.php1
-rw-r--r--lib/public/db.php6
-rw-r--r--lib/public/files.php5
-rw-r--r--lib/public/response.php14
-rw-r--r--lib/public/share.php128
-rw-r--r--lib/public/user.php26
-rw-r--r--lib/public/util.php54
-rwxr-xr-xlib/request.php61
-rw-r--r--lib/router.php28
-rw-r--r--lib/search.php16
-rw-r--r--lib/search/provider/file.php2
-rw-r--r--lib/setup.php182
-rw-r--r--lib/subadmin.php7
-rw-r--r--lib/template.php34
-rw-r--r--lib/templatelayout.php18
-rw-r--r--lib/user.php138
-rw-r--r--lib/user/backend.php28
-rw-r--r--lib/user/database.php65
-rw-r--r--lib/user/interface.php15
-rwxr-xr-xlib/util.php244
-rw-r--r--lib/vcategories.php1
-rw-r--r--ocs/providers.php2
-rw-r--r--ocs/routes.php2
-rw-r--r--robots.txt2
-rwxr-xr-xsettings/admin.php12
-rw-r--r--settings/ajax/apps/ocs.php14
-rw-r--r--settings/ajax/changedisplayname.php33
-rw-r--r--settings/ajax/changepassword.php19
-rw-r--r--settings/ajax/createuser.php4
-rw-r--r--settings/ajax/disableapp.php3
-rw-r--r--settings/ajax/enableapp.php3
-rw-r--r--settings/ajax/navigationdetect.php6
-rw-r--r--settings/ajax/openid.php16
-rw-r--r--settings/ajax/removeuser.php2
-rw-r--r--settings/ajax/setquota.php2
-rw-r--r--settings/ajax/setsecurity.php13
-rw-r--r--settings/ajax/togglegroups.php8
-rw-r--r--settings/ajax/updateapp.php15
-rw-r--r--settings/ajax/userlist.php2
-rw-r--r--settings/apps.php105
-rw-r--r--settings/css/settings.css29
-rw-r--r--settings/help.php2
-rw-r--r--settings/img/admin.pngbin224 -> 228 bytes
-rw-r--r--settings/img/admin.svg120
-rw-r--r--settings/img/apps.pngbin229 -> 219 bytes
-rw-r--r--settings/img/apps.svg81
-rw-r--r--settings/img/help.pngbin423 -> 477 bytes
-rw-r--r--settings/img/help.svg46
-rw-r--r--settings/img/personal.pngbin504 -> 499 bytes
-rw-r--r--settings/img/personal.svg46
-rw-r--r--settings/img/users.pngbin639 -> 598 bytes
-rw-r--r--settings/img/users.svg52
-rw-r--r--settings/js/admin.js4
-rw-r--r--settings/js/apps-custom.php26
-rw-r--r--settings/js/apps.js36
-rw-r--r--settings/js/isadmin.php20
-rw-r--r--settings/js/personal.js27
-rw-r--r--settings/js/users.js77
-rw-r--r--settings/l10n/af_ZA.php4
-rw-r--r--settings/l10n/ar.php13
-rw-r--r--settings/l10n/bg_BG.php17
-rw-r--r--settings/l10n/bn_BD.php68
-rw-r--r--settings/l10n/ca.php27
-rw-r--r--settings/l10n/cs_CZ.php27
-rw-r--r--settings/l10n/da.php13
-rw-r--r--settings/l10n/de.php18
-rw-r--r--settings/l10n/de_DE.php27
-rw-r--r--settings/l10n/el.php17
-rw-r--r--settings/l10n/eo.php23
-rw-r--r--settings/l10n/es.php27
-rw-r--r--settings/l10n/es_AR.php17
-rw-r--r--settings/l10n/et_EE.php10
-rw-r--r--settings/l10n/eu.php19
-rw-r--r--settings/l10n/fa.php36
-rw-r--r--settings/l10n/fi_FI.php29
-rw-r--r--settings/l10n/fr.php27
-rw-r--r--settings/l10n/gl.php13
-rw-r--r--settings/l10n/he.php13
-rw-r--r--settings/l10n/hr.php9
-rw-r--r--settings/l10n/hu_HU.php13
-rw-r--r--settings/l10n/ia.php7
-rw-r--r--settings/l10n/id.php10
-rw-r--r--settings/l10n/is.php18
-rw-r--r--settings/l10n/it.php30
-rw-r--r--settings/l10n/ja_JP.php27
-rw-r--r--settings/l10n/ka_GE.php10
-rw-r--r--settings/l10n/ko.php28
-rw-r--r--settings/l10n/ku_IQ.php5
-rw-r--r--settings/l10n/lb.php9
-rw-r--r--settings/l10n/lt_LT.php10
-rw-r--r--settings/l10n/lv.php71
-rw-r--r--settings/l10n/mk.php13
-rw-r--r--settings/l10n/ms_MY.php10
-rw-r--r--settings/l10n/nb_NO.php13
-rw-r--r--settings/l10n/nl.php27
-rw-r--r--settings/l10n/nn_NO.php10
-rw-r--r--settings/l10n/oc.php9
-rw-r--r--settings/l10n/pl.php15
-rw-r--r--settings/l10n/pl_PL.php1
-rw-r--r--settings/l10n/pt_BR.php58
-rw-r--r--settings/l10n/pt_PT.php27
-rw-r--r--settings/l10n/ro.php26
-rw-r--r--settings/l10n/ru.php36
-rw-r--r--settings/l10n/ru_RU.php17
-rw-r--r--settings/l10n/si_LK.php10
-rw-r--r--settings/l10n/sk_SK.php39
-rw-r--r--settings/l10n/sl.php13
-rw-r--r--settings/l10n/sr.php10
-rw-r--r--settings/l10n/sr@latin.php6
-rw-r--r--settings/l10n/sv.php27
-rw-r--r--settings/l10n/ta_LK.php10
-rw-r--r--settings/l10n/th_TH.php34
-rw-r--r--settings/l10n/tr.php13
-rw-r--r--settings/l10n/uk.php31
-rw-r--r--settings/l10n/vi.php37
-rw-r--r--settings/l10n/zh_CN.GB2312.php10
-rw-r--r--settings/l10n/zh_CN.php17
-rw-r--r--settings/l10n/zh_TW.php37
-rw-r--r--settings/personal.php26
-rw-r--r--settings/routes.php14
-rw-r--r--settings/settings.php1
-rw-r--r--settings/templates/admin.php290
-rw-r--r--settings/templates/apps.php18
-rw-r--r--settings/templates/help.php38
-rw-r--r--settings/templates/personal.php53
-rw-r--r--settings/templates/users.php54
-rw-r--r--settings/users.php31
-rw-r--r--tests/bootstrap.php22
-rw-r--r--tests/enable_all.php3
-rw-r--r--tests/lib/archive.php36
-rw-r--r--tests/lib/cache.php10
-rw-r--r--tests/lib/cache/file.php6
-rw-r--r--tests/lib/db.php40
-rw-r--r--tests/lib/dbschema.php2
-rw-r--r--tests/lib/files/cache/cache.php215
-rw-r--r--tests/lib/files/cache/permissions.php56
-rw-r--r--tests/lib/files/cache/scanner.php141
-rw-r--r--tests/lib/files/cache/updater.php147
-rw-r--r--tests/lib/files/cache/watcher.php121
-rw-r--r--tests/lib/files/filesystem.php110
-rw-r--r--tests/lib/files/mount.php41
-rw-r--r--tests/lib/files/storage/commontest.php (renamed from tests/lib/filestorage/commontest.php)15
-rw-r--r--tests/lib/files/storage/local.php (renamed from tests/lib/filestorage/local.php)11
-rw-r--r--tests/lib/files/storage/storage.php (renamed from tests/lib/filestorage.php)89
-rw-r--r--tests/lib/files/view.php251
-rw-r--r--tests/lib/filesystem.php139
-rw-r--r--tests/lib/geo.php2
-rw-r--r--tests/lib/group.php56
-rw-r--r--tests/lib/group/backend.php20
-rw-r--r--tests/lib/helper.php2
-rw-r--r--tests/lib/public/contacts.php8
-rw-r--r--tests/lib/share/share.php2
-rw-r--r--tests/lib/streamwrappers.php105
-rw-r--r--tests/lib/template.php14
-rw-r--r--tests/lib/user/backend.php8
-rw-r--r--tests/lib/util.php2
-rw-r--r--tests/lib/vcategories.php22
-rw-r--r--tests/phpunit-autotest.xml14
-rw-r--r--tests/phpunit.xml3
-rw-r--r--tests/win32-phpunit.php347
1552 files changed, 125927 insertions, 42741 deletions
diff --git a/.gitignore b/.gitignore
index 819347f540f..40d6e6ca0fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,17 @@ config/mount.php
apps/inc.php
3rdparty
+# ignore all apps except core ones
+apps/*
+!apps/files
+!apps/files_encryption
+!apps/files_external
+!apps/files_sharing
+!apps/files_trashbin
+!apps/files_versions
+!apps/user_ldap
+!apps/user_webdavauth
+
# just sane ignores
.*.sw[po]
*.bak
@@ -45,6 +56,7 @@ nbproject
# Cloud9IDE
.settings.xml
+.c9revisions
# vim ex mode
.vimrc
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000000..1021eae0f64
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,37 @@
+## Submitting issues
+
+If you have questions about how to use ownCloud, please direct these to the [mailing list][mailinglist] or our [forum][forum]. We are also available on [IRC][irc].
+
+### Guidelines
+* Report the issue using our [template][template], it includes all the informations we need to track down the issue.
+* This repository is *only* for issues within the ownCloud core code. Issues in other compontents should be reported in their own repositores:
+ - [Android client](https://github.com/owncloud/android/issues)
+ - [iOS client](https://github.com/owncloud/ios-issues/issues)
+ - [Desktop client](https://github.com/owncloud/mirall/issues)
+ - [ownCloud apps](https://github.com/owncloud/apps/issues) (e.g. Calendar, Contacts...)
+* Search the existing issues first, it's likely that your issue was already reported.
+
+If your issue appears to be a bug, and hasn't been reported, open a new issue.
+
+Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
+
+[template]: https://raw.github.com/owncloud/core/master/issue_template.md
+[mailinglist]: https://mail.kde.org/mailman/listinfo/owncloud
+[forum]: http://forum.owncloud.org/
+[irc]: http://webchat.freenode.net/?channels=owncloud&uio=d4
+
+## Contributing to Source Code
+
+Thanks for wanting to contribute source code to ownCloud. That's great!
+
+Before we're able to merge your code into the ownCloud core, you need to sign our [Contributor Agreement][agreement].
+
+Please read the [Developer Manuals][devmanual] to get useful infos like how to create your first application or how to test the ownCloud code with phpunit.
+
+[agreement]: http://owncloud.org/about/contributor-agreement/
+[devmanual]: http://owncloud.org/dev/
+
+## Translations
+Please submit translations via [Transifex][transifex].
+
+[transifex]: https://www.transifex.com/projects/p/owncloud/
diff --git a/apps/files/admin.php b/apps/files/admin.php
index f747f8645f6..02c3147dba5 100644
--- a/apps/files/admin.php
+++ b/apps/files/admin.php
@@ -21,10 +21,6 @@
*
*/
-
-// Init owncloud
-
-
OCP\User::checkAdminUser();
$htaccessWorking=(getenv('htaccessWorking')=='true');
diff --git a/apps/files/ajax/autocomplete.php b/apps/files/ajax/autocomplete.php
deleted file mode 100644
index b32ba7c3d5b..00000000000
--- a/apps/files/ajax/autocomplete.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-//provide auto completion of paths for use with jquer ui autocomplete
-
-
-// Init owncloud
-
-
-OCP\JSON::checkLoggedIn();
-
-// Get data
-$query = $_GET['term'];
-$dirOnly=(isset($_GET['dironly']))?($_GET['dironly']=='true'):false;
-
-if($query[0]!='/') {
- $query='/'.$query;
-}
-
-if(substr($query, -1, 1)=='/') {
- $base=$query;
-} else {
- $base=dirname($query);
-}
-
-$query=substr($query, strlen($base));
-
-if($base!='/') {
- $query=substr($query, 1);
-}
-$queryLen=strlen($query);
-$query=strtolower($query);
-
-// echo "$base - $query";
-
-$files=array();
-
-if(OC_Filesystem::file_exists($base) and OC_Filesystem::is_dir($base)) {
- $dh = OC_Filesystem::opendir($base);
- if($dh) {
- if(substr($base, -1, 1)!='/') {
- $base=$base.'/';
- }
- while (($file = readdir($dh)) !== false) {
- if ($file != "." && $file != "..") {
- if(substr(strtolower($file), 0, $queryLen)==$query) {
- $item=$base.$file;
- if((!$dirOnly or OC_Filesystem::is_dir($item))) {
- $files[]=(object)array('id'=>$item, 'label'=>$item, 'name'=>$item);
- }
- }
- }
- }
- }
-}
-OCP\JSON::encodedPrint($files);
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index 6532b76df21..da7e9d6b2aa 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -12,17 +12,22 @@ $files = isset($_POST["file"]) ? stripslashes($_POST["file"]) : stripslashes($_P
$files = json_decode($files);
$filesWithError = '';
+
$success = true;
+
//Now delete
-foreach($files as $file) {
- if( !OC_Files::delete( $dir, $file )) {
+foreach ($files as $file) {
+ if (($dir === '' && $file === 'Shared') || !\OC\Files\Filesystem::unlink($dir . '/' . $file)) {
$filesWithError .= $file . "\n";
$success = false;
}
}
-if($success) {
- OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $files )));
+// get array with updated storage stats (e.g. max file size) after upload
+$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
+
+if ($success) {
+ OCP\JSON::success(array("data" => array_merge(array("dir" => $dir, "files" => $files), $storageStats)));
} else {
- OCP\JSON::error(array("data" => array( "message" => "Could not delete:\n" . $filesWithError )));
+ OCP\JSON::error(array("data" => array_merge(array("message" => "Could not delete:\n" . $filesWithError), $storageStats)));
}
diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php
new file mode 100644
index 00000000000..7a2b642a9bd
--- /dev/null
+++ b/apps/files/ajax/getstoragestats.php
@@ -0,0 +1,9 @@
+<?php
+
+// only need filesystem apps
+$RUNTIME_APPTYPES = array('filesystem');
+
+OCP\JSON::checkLoggedIn();
+
+// send back json
+OCP\JSON::success(array('data' => \OCA\files\lib\Helper::buildFileStorageStatistics('/')));
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index cade7e872b3..878e4cb2159 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -32,7 +32,7 @@ if($doBreadcrumb) {
// make filelist
$files = array();
-foreach( OC_Files::getdirectorycontent( $dir ) as $i ) {
+foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) {
$i["date"] = OCP\Util::formatDate($i["mtime"] );
$files[] = $i;
}
diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php
index 4ebc3f42d9f..93063e52eb0 100644
--- a/apps/files/ajax/move.php
+++ b/apps/files/ajax/move.php
@@ -7,19 +7,25 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
// Get data
-$dir = stripslashes($_GET["dir"]);
-$file = stripslashes($_GET["file"]);
-$target = stripslashes(rawurldecode($_GET["target"]));
+$dir = stripslashes($_POST["dir"]);
+$file = stripslashes($_POST["file"]);
+$target = stripslashes(rawurldecode($_POST["target"]));
-$l=OC_L10N::get('files');
+$l = OC_L10N::get('files');
-if(OC_Filesystem::file_exists($target . '/' . $file)) {
+if(\OC\Files\Filesystem::file_exists($target . '/' . $file)) {
OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s - File with this name already exists", array($file)) )));
exit;
}
-if(OC_Files::move($dir, $file, $target, $file)) {
- OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file )));
-} else {
+if ($dir != '' || $file != 'Shared') {
+ $targetFile = \OC\Files\Filesystem::normalizePath($target . '/' . $file);
+ $sourceFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file);
+ if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) {
+ OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file )));
+ } else {
+ OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s", array($file)) )));
+ }
+}else{
OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s", array($file)) )));
}
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index 2bac9bb20ba..38714f34a63 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -63,13 +63,12 @@ if($source) {
$ctx = stream_context_create(null, array('notification' =>'progress'));
$sourceStream=fopen($source, 'rb', false, $ctx);
$target=$dir.'/'.$filename;
- $result=OC_Filesystem::file_put_contents($target, $sourceStream);
+ $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream);
if($result) {
- $target = OC_Filesystem::normalizePath($target);
- $meta = OC_FileCache::get($target);
+ $meta = \OC\Files\Filesystem::getFileInfo($target);
$mime=$meta['mimetype'];
- $id = OC_FileCache::getId($target);
- $eventSource->send('success', array('mime'=>$mime, 'size'=>OC_Filesystem::filesize($target), 'id' => $id));
+ $id = $meta['fileid'];
+ $eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id));
} else {
$eventSource->send('error', "Error while downloading ".$source. ' to '.$target);
}
@@ -77,15 +76,15 @@ if($source) {
exit();
} else {
if($content) {
- if(OC_Filesystem::file_put_contents($dir.'/'.$filename, $content)) {
- $meta = OC_FileCache::get($dir.'/'.$filename);
- $id = OC_FileCache::getId($dir.'/'.$filename);
+ if(\OC\Files\Filesystem::file_put_contents($dir.'/'.$filename, $content)) {
+ $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename);
+ $id = $meta['fileid'];
OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id)));
exit();
}
- }elseif(OC_Files::newFile($dir, $filename, 'file')) {
- $meta = OC_FileCache::get($dir.'/'.$filename);
- $id = OC_FileCache::getId($dir.'/'.$filename);
+ }elseif(\OC\Files\Filesystem::touch($dir . '/' . $filename)) {
+ $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename);
+ $id = $meta['fileid'];
OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id)));
exit();
}
diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php
index 0f1f2f14eb0..e26e1238bc6 100644
--- a/apps/files/ajax/newfolder.php
+++ b/apps/files/ajax/newfolder.php
@@ -19,13 +19,14 @@ if(strpos($foldername, '/')!==false) {
exit();
}
-if(OC_Files::newFile($dir, stripslashes($foldername), 'dir')) {
+if(\OC\Files\Filesystem::mkdir($dir . '/' . stripslashes($foldername))) {
if ( $dir != '/') {
$path = $dir.'/'.$foldername;
} else {
$path = '/'.$foldername;
}
- $id = OC_FileCache::getId($path);
+ $meta = \OC\Files\Filesystem::getFileInfo($path);
+ $id = $meta['fileid'];
OCP\JSON::success(array("data" => array('id'=>$id)));
exit();
}
diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php
index e0aa0bdac52..1cd2944483c 100644
--- a/apps/files/ajax/rawlist.php
+++ b/apps/files/ajax/rawlist.php
@@ -15,7 +15,7 @@ $mimetype = isset($_GET['mimetype']) ? $_GET['mimetype'] : '';
// make filelist
$files = array();
-foreach( OC_Files::getdirectorycontent( $dir, $mimetype ) as $i ) {
+foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, $mimetype ) as $i ) {
$i["date"] = OCP\Util::formatDate($i["mtime"] );
$i['mimetype_icon'] = $i['type'] == 'dir' ? \mimetype_icon('dir'): \mimetype_icon($i['mimetype']);
$files[] = $i;
diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php
index 89b4d4bba73..9fd2ce3ad4b 100644
--- a/apps/files/ajax/rename.php
+++ b/apps/files/ajax/rename.php
@@ -11,10 +11,16 @@ $dir = stripslashes($_GET["dir"]);
$file = stripslashes($_GET["file"]);
$newname = stripslashes($_GET["newname"]);
-// Delete
-if( $newname !== '.' and OC_Files::move( $dir, $file, $dir, $newname )) {
- OCP\JSON::success(array("data" => array( "dir" => $dir, "file" => $file, "newname" => $newname )));
-} else {
- $l=OC_L10N::get('files');
+$l = OC_L10N::get('files');
+
+if ( $newname !== '.' and ($dir != '' || $file != 'Shared') and $newname !== '.') {
+ $targetFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $newname);
+ $sourceFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file);
+ if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) {
+ OCP\JSON::success(array("data" => array( "dir" => $dir, "file" => $file, "newname" => $newname )));
+ } else {
+ OCP\JSON::error(array("data" => array( "message" => $l->t("Unable to rename file") )));
+ }
+}else{
OCP\JSON::error(array("data" => array( "message" => $l->t("Unable to rename file") )));
}
diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php
index 5cd9572d7f9..391b98608bd 100644
--- a/apps/files/ajax/scan.php
+++ b/apps/files/ajax/scan.php
@@ -1,43 +1,71 @@
<?php
+set_time_limit(0); //scanning can take ages
+session_write_close();
-set_time_limit(0);//scanning can take ages
+$force = (isset($_GET['force']) and ($_GET['force'] === 'true'));
+$dir = isset($_GET['dir']) ? $_GET['dir'] : '';
-$force=isset($_GET['force']) and $_GET['force']=='true';
-$dir=isset($_GET['dir'])?$_GET['dir']:'';
-$checkOnly=isset($_GET['checkonly']) and $_GET['checkonly']=='true';
+$eventSource = new OC_EventSource();
+ScanListener::$eventSource = $eventSource;
+ScanListener::$view = \OC\Files\Filesystem::getView();
-if(!$checkOnly) {
- $eventSource=new OC_EventSource();
-}
+OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_folder', 'ScanListener', 'folder');
+OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_file', 'ScanListener', 'file');
-session_write_close();
+$absolutePath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir);
-//create the file cache if necesary
-if($force or !OC_FileCache::inCache('')) {
- if(!$checkOnly) {
- OCP\DB::beginTransaction();
+$mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath);
+$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
+$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
- if(OC_Cache::isFast()) {
- OC_Cache::clear('fileid/'); //make sure the old fileid's don't mess things up
+foreach ($mountPoints as $mountPoint) {
+ $storage = \OC\Files\Filesystem::getStorage($mountPoint);
+ if ($storage) {
+ ScanListener::$mountPoints[$storage->getId()] = $mountPoint;
+ $scanner = $storage->getScanner();
+ if ($force) {
+ $scanner->scan('');
+ } else {
+ $scanner->backgroundScan();
}
-
- OC_FileCache::scan($dir, $eventSource);
- OC_FileCache::clean();
- OCP\DB::commit();
- $eventSource->send('success', true);
- } else {
- OCP\JSON::success(array('data'=>array('done'=>true)));
- exit;
}
-} else {
- if($checkOnly) {
- OCP\JSON::success(array('data'=>array('done'=>false)));
- exit;
+}
+
+$eventSource->send('done', ScanListener::$fileCount);
+$eventSource->close();
+
+class ScanListener {
+
+ static public $fileCount = 0;
+ static public $lastCount = 0;
+
+ /**
+ * @var \OC\Files\View $view
+ */
+ static public $view;
+
+ /**
+ * @var array $mountPoints map storage ids to mountpoints
+ */
+ static public $mountPoints = array();
+
+ /**
+ * @var \OC_EventSource event source to pass events to
+ */
+ static public $eventSource;
+
+ static function folder($params) {
+ $internalPath = $params['path'];
+ $mountPoint = self::$mountPoints[$params['storage']];
+ $path = self::$view->getRelativePath($mountPoint . $internalPath);
+ self::$eventSource->send('folder', $path);
}
- if(isset($eventSource)) {
- $eventSource->send('success', false);
- } else {
- exit;
+
+ static function file() {
+ self::$fileCount++;
+ if (self::$fileCount > self::$lastCount + 20) { //send a count update every 20 files
+ self::$lastCount = self::$fileCount;
+ self::$eventSource->send('count', self::$fileCount);
+ }
}
}
-$eventSource->close();
diff --git a/apps/files/ajax/upgrade.php b/apps/files/ajax/upgrade.php
new file mode 100644
index 00000000000..7237b02c0b0
--- /dev/null
+++ b/apps/files/ajax/upgrade.php
@@ -0,0 +1,44 @@
+<?php
+set_time_limit(0); //scanning can take ages
+session_write_close();
+
+$user = OC_User::getUser();
+$eventSource = new OC_EventSource();
+$listener = new UpgradeListener($eventSource);
+$legacy = new \OC\Files\Cache\Legacy($user);
+
+if ($legacy->hasItems()) {
+ OC_Hook::connect('\OC\Files\Cache\Upgrade', 'migrate_path', $listener, 'upgradePath');
+
+ OC_DB::beginTransaction();
+ $upgrade = new \OC\Files\Cache\Upgrade($legacy);
+ $count = $legacy->getCount();
+ $eventSource->send('total', $count);
+ $upgrade->upgradePath('/' . $user . '/files');
+ OC_DB::commit();
+}
+\OC\Files\Cache\Upgrade::upgradeDone($user);
+$eventSource->send('done', true);
+$eventSource->close();
+
+class UpgradeListener {
+ /**
+ * @var OC_EventSource $eventSource
+ */
+ private $eventSource;
+
+ private $count = 0;
+ private $lastSend = 0;
+
+ public function __construct($eventSource) {
+ $this->eventSource = $eventSource;
+ }
+
+ public function upgradePath($path) {
+ $this->count++;
+ if ($this->count > ($this->lastSend + 5)) {
+ $this->lastSend = $this->count;
+ $this->eventSource->send('count', $this->count);
+ }
+ }
+}
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 2a2d935da6c..07977f5ddf1 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -8,65 +8,79 @@ OCP\JSON::setContentTypeHeader('text/plain');
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
-$l=OC_L10N::get('files');
+$l = OC_L10N::get('files');
+
+
+$dir = $_POST['dir'];
+// get array with current storage stats (e.g. max file size)
+$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
if (!isset($_FILES['files'])) {
- OCP\JSON::error(array('data' => array( 'message' => $l->t( 'No file was uploaded. Unknown error' ))));
+ OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('No file was uploaded. Unknown error')), $storageStats)));
exit();
}
foreach ($_FILES['files']['error'] as $error) {
if ($error != 0) {
$errors = array(
- UPLOAD_ERR_OK=>$l->t('There is no error, the file uploaded with success'),
- UPLOAD_ERR_INI_SIZE=>$l->t('The uploaded file exceeds the upload_max_filesize directive in php.ini: ')
- .ini_get('upload_max_filesize'),
- UPLOAD_ERR_FORM_SIZE=>$l->t('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified'
- .' in the HTML form'),
- UPLOAD_ERR_PARTIAL=>$l->t('The uploaded file was only partially uploaded'),
- UPLOAD_ERR_NO_FILE=>$l->t('No file was uploaded'),
- UPLOAD_ERR_NO_TMP_DIR=>$l->t('Missing a temporary folder'),
- UPLOAD_ERR_CANT_WRITE=>$l->t('Failed to write to disk'),
+ UPLOAD_ERR_OK => $l->t('There is no error, the file uploaded with success'),
+ UPLOAD_ERR_INI_SIZE => $l->t('The uploaded file exceeds the upload_max_filesize directive in php.ini: ')
+ . ini_get('upload_max_filesize'),
+ UPLOAD_ERR_FORM_SIZE => $l->t('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified'
+ . ' in the HTML form'),
+ UPLOAD_ERR_PARTIAL => $l->t('The uploaded file was only partially uploaded'),
+ UPLOAD_ERR_NO_FILE => $l->t('No file was uploaded'),
+ UPLOAD_ERR_NO_TMP_DIR => $l->t('Missing a temporary folder'),
+ UPLOAD_ERR_CANT_WRITE => $l->t('Failed to write to disk'),
);
- OCP\JSON::error(array('data' => array( 'message' => $errors[$error] )));
+ OCP\JSON::error(array('data' => array_merge(array('message' => $errors[$error]), $storageStats)));
exit();
}
}
-$files=$_FILES['files'];
+$files = $_FILES['files'];
-$dir = $_POST['dir'];
-$error='';
+$error = '';
+
+$maxUploadFilesize = OCP\Util::maxUploadFilesize($dir);
+$maxHumanFilesize = OCP\Util::humanFileSize($maxUploadFilesize);
-$totalSize=0;
-foreach($files['size'] as $size) {
- $totalSize+=$size;
+$totalSize = 0;
+foreach ($files['size'] as $size) {
+ $totalSize += $size;
}
-if($totalSize>OC_Filesystem::free_space($dir)) {
- OCP\JSON::error(array('data' => array( 'message' => $l->t( 'Not enough space available' ))));
+if ($totalSize > \OC\Files\Filesystem::free_space($dir)) {
+ OCP\JSON::error(array('data' => array('message' => $l->t('Not enough storage available'),
+ 'uploadMaxFilesize' => $maxUploadFilesize,
+ 'maxHumanFilesize' => $maxHumanFilesize)));
exit();
}
-$result=array();
-if(strpos($dir, '..') === false) {
- $fileCount=count($files['name']);
- for($i=0;$i<$fileCount;$i++) {
+$result = array();
+if (strpos($dir, '..') === false) {
+ $fileCount = count($files['name']);
+ for ($i = 0; $i < $fileCount; $i++) {
$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
// $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder
- $target = OC_Filesystem::normalizePath($target);
- if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
- $meta = OC_FileCache::get($target);
- $id = OC_FileCache::getId($target);
- $result[]=array( 'status' => 'success',
- 'mime'=>$meta['mimetype'],
- 'size'=>$meta['size'],
- 'id'=>$id,
- 'name'=>basename($target));
+ $target = \OC\Files\Filesystem::normalizePath($target);
+ if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
+ $meta = \OC\Files\Filesystem::getFileInfo($target);
+ // updated max file size after upload
+ $storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
+
+ $result[] = array('status' => 'success',
+ 'mime' => $meta['mimetype'],
+ 'size' => $meta['size'],
+ 'id' => $meta['fileid'],
+ 'name' => basename($target),
+ 'uploadMaxFilesize' => $maxUploadFilesize,
+ 'maxHumanFilesize' => $maxHumanFilesize
+ );
}
}
OCP\JSON::encodedPrint($result);
exit();
} else {
- $error=$l->t( 'Invalid directory.' );
+ $error = $l->t('Invalid directory.');
}
-OCP\JSON::error(array('data' => array('message' => $error )));
+OCP\JSON::error(array('data' => array_merge(array('message' => $error), $storageStats)));
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index 108f02930e2..da17a7f2ccd 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -1,12 +1,12 @@
<?php
-$l=OC_L10N::get('files');
+$l = OC_L10N::get('files');
OCP\App::registerAdmin('files', 'admin');
OCP\App::addNavigationEntry( array( "id" => "files_index",
"order" => 0,
"href" => OCP\Util::linkTo( "files", "index.php" ),
- "icon" => OCP\Util::imagePath( "core", "places/home.svg" ),
+ "icon" => OCP\Util::imagePath( "core", "places/files.svg" ),
"name" => $l->t("Files") ));
OC_Search::registerProvider('OC_Search_Provider_File');
diff --git a/apps/files/appinfo/filesync.php b/apps/files/appinfo/filesync.php
index cbed56a6de5..47884a4f15e 100644
--- a/apps/files/appinfo/filesync.php
+++ b/apps/files/appinfo/filesync.php
@@ -43,7 +43,7 @@ if ($type != 'oc_chunked') {
die;
}
-if (!OC_Filesystem::is_file($file)) {
+if (!\OC\Files\Filesystem::is_file($file)) {
OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
die;
}
@@ -51,7 +51,7 @@ if (!OC_Filesystem::is_file($file)) {
switch($_SERVER['REQUEST_METHOD']) {
case 'PUT':
$input = fopen("php://input", "r");
- $org_file = OC_Filesystem::fopen($file, 'rb');
+ $org_file = \OC\Files\Filesystem::fopen($file, 'rb');
$info = array(
'name' => basename($file),
);
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index 0a1b196b06f..7c82c839dab 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>File Management</description>
<licence>AGPL</licence>
<author>Robin Appelman</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<standalone/>
<default_enable/>
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index 1713bcc22ce..6c92cc80b69 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -32,12 +32,14 @@ OC_Util::obEnd();
// Backends
$authBackend = new OC_Connector_Sabre_Auth();
$lockBackend = new OC_Connector_Sabre_Locks();
+$requestBackend = new OC_Connector_Sabre_Request();
// Create ownCloud Dir
$publicDir = new OC_Connector_Sabre_Directory('');
// Fire up server
$server = new Sabre_DAV_Server($publicDir);
+$server->httpRequest = $requestBackend;
$server->setBaseUri($baseuri);
// Load plugins
@@ -45,6 +47,7 @@ $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud'));
$server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
$server->addPlugin(new OC_Connector_Sabre_QuotaPlugin());
+$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
// And off we go!
$server->exec();
diff --git a/apps/files/appinfo/version b/apps/files/appinfo/version
index 0664a8fd291..2bf1ca5f549 100644
--- a/apps/files/appinfo/version
+++ b/apps/files/appinfo/version
@@ -1 +1 @@
-1.1.6
+1.1.7
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 36a1e5c954b..1dae49c1cf4 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -3,7 +3,7 @@
See the COPYING-README file. */
/* FILE MENU */
-.actions { padding:.3em; float:left; height:2em; }
+.actions { padding:.3em; height:2em; width: 100%; }
.actions input, .actions button, .actions .button { margin:0; float:left; }
#new {
@@ -23,7 +23,9 @@
#new>ul>li>p { cursor:pointer; }
#new>ul>li>form>input { padding:0.3em; margin:-0.3em; }
-#upload {
+#trash { height:17px; margin: 0 1em; z-index:1010; float: right; }
+
+#upload {
height:27px; padding:0; margin-left:0.2em; overflow:hidden;
}
#upload a {
@@ -35,14 +37,14 @@
}
.file_upload_target { display:none; }
.file_upload_form { display:inline; float:left; margin:0; padding:0; cursor:pointer; overflow:visible; }
-#file_upload_start {
+#file_upload_start {
left:0; top:0; width:28px; height:27px; padding:0;
font-size:1em;
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0;
z-index:20; position:relative; cursor:pointer; overflow:hidden;
}
-#uploadprogresswrapper { position:absolute; right:13.5em; top:0em; }
+#uploadprogresswrapper { float: right; position: relative; }
#uploadprogresswrapper #uploadprogressbar { position:relative; display:inline-block; width:10em; height:1.5em; top:.4em; }
/* FILE TABLE */
@@ -72,9 +74,9 @@ table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-
/* Multiselect bar */
table.multiselect { top:63px; }
-table.multiselect thead { position:fixed; top:82px; z-index:1; }
+table.multiselect thead { position:fixed; top:82px; z-index:1; -moz-box-sizing: border-box; box-sizing: border-box; left: 0; padding-left: 64px; width:100%; }
table.multiselect thead th { background:rgba(230,230,230,.8); color:#000; font-weight:bold; border-bottom:0; }
-
+table.multiselect #headerName { width: 100%; }
table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; }
table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; }
@@ -104,21 +106,38 @@ table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
#fileList tr:hover .fileactions { /* background to distinguish when overlaying with file names */
background:rgba(248,248,248,.9); box-shadow:-5px 0 7px rgba(248,248,248,.9);
}
-#fileList tr.selected:hover .fileactions { /* slightly darker color for selected rows */
+#fileList tr.selected:hover .fileactions, #fileList tr.mouseOver .fileactions { /* slightly darker color for selected rows */
background:rgba(238,238,238,.9); box-shadow:-5px 0 7px rgba(238,238,238,.9);
}
#fileList .fileactions a.action img { position:relative; top:.2em; }
#fileList a.action { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; }
+#fileList img.move2trash { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; float:right; }
a.action.delete { float:right; }
a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
.selectedActions { display:none; float:right; }
.selectedActions a { display:inline; margin:-.5em 0; padding:.5em !important; }
.selectedActions a img { position:relative; top:.3em; }
-/* add breadcrumb divider to the File item in navigation panel */
-#navigation>ul>li:first-child { background:url('%webroot%/core/img/breadcrumb-start.svg') no-repeat 12.5em 0px; width:12.5em; padding-right:1em; position:fixed; }
-#navigation>ul>li:first-child+li { padding-top:2.9em; }
#scanning-message{ top:40%; left:40%; position:absolute; display:none; }
div.crumb a{ padding:0.9em 0 0.7em 0; }
+
+table.dragshadow {
+ width:auto;
+}
+table.dragshadow td.filename {
+ padding-left:36px;
+ padding-right:16px;
+}
+table.dragshadow td.size {
+ padding-right:8px;
+}
+#upgrade {
+ width: 400px;
+ position: absolute;
+ top: 200px;
+ left: 50%;
+ text-align: center;
+ margin-left: -200px;
+}
diff --git a/apps/files/download.php b/apps/files/download.php
index e2149cd4135..e3fe24e45d7 100644
--- a/apps/files/download.php
+++ b/apps/files/download.php
@@ -21,15 +21,12 @@
*
*/
-// Init owncloud
-
-
// Check if we are a user
OCP\User::checkLoggedIn();
$filename = $_GET["file"];
-if(!OC_Filesystem::file_exists($filename)) {
+if(!\OC\Files\Filesystem::file_exists($filename)) {
header("HTTP/1.0 404 Not Found");
$tmpl = new OCP\Template( '', '404', 'guest' );
$tmpl->assign('file', $filename);
@@ -37,7 +34,7 @@ if(!OC_Filesystem::file_exists($filename)) {
exit;
}
-$ftype=OC_Filesystem::getMimeType( $filename );
+$ftype=\OC\Files\Filesystem::getMimeType( $filename );
header('Content-Type:'.$ftype);
if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
@@ -47,7 +44,7 @@ if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
. '; filename="' . rawurlencode( basename($filename) ) . '"' );
}
OCP\Response::disableCaching();
-header('Content-Length: '.OC_Filesystem::filesize($filename));
+header('Content-Length: '.\OC\Files\Filesystem::filesize($filename));
OC_Util::obEnd();
-OC_Filesystem::readfile( $filename );
+\OC\Files\Filesystem::readfile( $filename );
diff --git a/apps/files/index.php b/apps/files/index.php
index b64bde44cc0..434e98c6ea8 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -28,84 +28,113 @@ OCP\User::checkLoggedIn();
OCP\Util::addStyle('files', 'files');
OCP\Util::addscript('files', 'jquery.iframe-transport');
OCP\Util::addscript('files', 'jquery.fileupload');
-OCP\Util::addscript('files', 'files');
+OCP\Util::addscript('files', 'jquery-visibility');
OCP\Util::addscript('files', 'filelist');
-OCP\Util::addscript('files', 'fileactions');
-OCP\Util::addscript('files', 'keyboardshortcuts');
OCP\App::setActiveNavigationEntry('files_index');
// Load the files
$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
// Redirect if directory does not exist
-if (!OC_Filesystem::is_dir($dir . '/')) {
- header('Location: ' . $_SERVER['SCRIPT_NAME'] . '');
- exit();
+if (!\OC\Files\Filesystem::is_dir($dir . '/')) {
+ header('Location: ' . OCP\Util::getScriptName() . '');
+ exit();
+}
+
+function fileCmp($a, $b) {
+ if ($a['type'] == 'dir' and $b['type'] != 'dir') {
+ return -1;
+ } elseif ($a['type'] != 'dir' and $b['type'] == 'dir') {
+ return 1;
+ } else {
+ return strnatcasecmp($a['name'], $b['name']);
+ }
}
$files = array();
-foreach (OC_Files::getdirectorycontent($dir) as $i) {
- $i['date'] = OCP\Util::formatDate($i['mtime']);
- if ($i['type'] == 'file') {
- $fileinfo = pathinfo($i['name']);
- $i['basename'] = $fileinfo['filename'];
- if (!empty($fileinfo['extension'])) {
- $i['extension'] = '.' . $fileinfo['extension'];
- } else {
- $i['extension'] = '';
- }
- }
- if ($i['directory'] == '/') {
- $i['directory'] = '';
- }
- $files[] = $i;
+$user = OC_User::getUser();
+if (\OC\Files\Cache\Upgrade::needUpgrade($user)) { //dont load anything if we need to upgrade the cache
+ $content = array();
+ $needUpgrade = true;
+ $freeSpace = 0;
+} else {
+ $content = \OC\Files\Filesystem::getDirectoryContent($dir);
+ $freeSpace = \OC\Files\Filesystem::free_space($dir);
+ $needUpgrade = false;
}
+foreach ($content as $i) {
+ $i['date'] = OCP\Util::formatDate($i['mtime']);
+ if ($i['type'] == 'file') {
+ $fileinfo = pathinfo($i['name']);
+ $i['basename'] = $fileinfo['filename'];
+ if (!empty($fileinfo['extension'])) {
+ $i['extension'] = '.' . $fileinfo['extension'];
+ } else {
+ $i['extension'] = '';
+ }
+ }
+ $i['directory'] = $dir;
+ $files[] = $i;
+}
+
+usort($files, "fileCmp");
// Make breadcrumb
$breadcrumb = array();
$pathtohere = '';
foreach (explode('/', $dir) as $i) {
- if ($i != '') {
- $pathtohere .= '/' . $i;
- $breadcrumb[] = array('dir' => $pathtohere, 'name' => $i);
- }
+ if ($i != '') {
+ $pathtohere .= '/' . $i;
+ $breadcrumb[] = array('dir' => $pathtohere, 'name' => $i);
+ }
}
// make breadcrumb und filelist markup
$list = new OCP\Template('files', 'part.list', '');
$list->assign('files', $files, false);
$list->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=', false);
-$list->assign('downloadURL', OCP\Util::linkTo('files', 'download.php') . '?file=', false);
+$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')), false);
+$list->assign('disableSharing', false);
$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=', false);
-$upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize'));
-$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
-$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
-
-$freeSpace = OC_Filesystem::free_space($dir);
-$freeSpace = max($freeSpace, 0);
-$maxUploadFilesize = min($maxUploadFilesize, $freeSpace);
-
$permissions = OCP\PERMISSION_READ;
-if (OC_Filesystem::isUpdatable($dir . '/')) {
- $permissions |= OCP\PERMISSION_UPDATE;
+if (\OC\Files\Filesystem::isCreatable($dir . '/')) {
+ $permissions |= OCP\PERMISSION_CREATE;
}
-if (OC_Filesystem::isDeletable($dir . '/')) {
- $permissions |= OCP\PERMISSION_DELETE;
+if (\OC\Files\Filesystem::isUpdatable($dir . '/')) {
+ $permissions |= OCP\PERMISSION_UPDATE;
}
-if (OC_Filesystem::isSharable($dir . '/')) {
- $permissions |= OCP\PERMISSION_SHARE;
+if (\OC\Files\Filesystem::isDeletable($dir . '/')) {
+ $permissions |= OCP\PERMISSION_DELETE;
}
+if (\OC\Files\Filesystem::isSharable($dir . '/')) {
+ $permissions |= OCP\PERMISSION_SHARE;
+}
+
+if ($needUpgrade) {
+ OCP\Util::addscript('files', 'upgrade');
+ $tmpl = new OCP\Template('files', 'upgrade', 'user');
+ $tmpl->printPage();
+} else {
+ // information about storage capacities
+ $storageInfo=OC_Helper::getStorageInfo();
+ $maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
-$tmpl = new OCP\Template('files', 'index', 'user');
-$tmpl->assign('fileList', $list->fetchPage(), false);
-$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
-$tmpl->assign('dir', OC_Filesystem::normalizePath($dir));
-$tmpl->assign('isCreatable', OC_Filesystem::isCreatable($dir . '/'));
-$tmpl->assign('permissions', $permissions);
-$tmpl->assign('files', $files);
-$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize);
-$tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
-$tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
-$tmpl->printPage();
+ OCP\Util::addscript('files', 'fileactions');
+ OCP\Util::addscript('files', 'files');
+ OCP\Util::addscript('files', 'keyboardshortcuts');
+ $tmpl = new OCP\Template('files', 'index', 'user');
+ $tmpl->assign('fileList', $list->fetchPage(), false);
+ $tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
+ $tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($dir));
+ $tmpl->assign('isCreatable', \OC\Files\Filesystem::isCreatable($dir . '/'));
+ $tmpl->assign('permissions', $permissions);
+ $tmpl->assign('files', $files);
+ $tmpl->assign('trash', \OCP\App::isEnabled('files_trashbin'));
+ $tmpl->assign('uploadMaxFilesize', $maxUploadFilesize);
+ $tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
+ $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ $tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']);
+ $tmpl->printPage();
+} \ No newline at end of file
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 80b9c01f838..38f5bab6f73 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -70,51 +70,59 @@ var FileActions = {
}
parent.children('a.name').append('<span class="fileactions" />');
var defaultAction = FileActions.getDefault(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
-
+
var actionHandler = function (event) {
event.stopPropagation();
event.preventDefault();
FileActions.currentFile = event.data.elem;
var file = FileActions.getCurrentFile();
-
+
event.data.actionFunc(file);
};
-
- $.each(actions, function (name, action) {
+
+ var addAction = function (name, action) {
// NOTE: Temporary fix to prevent rename action in root of Shared directory
if (name === 'Rename' && $('#dir').val() === '/Shared') {
return true;
}
-
+
if ((name === 'Download' || action !== defaultAction) && name !== 'Delete') {
var img = FileActions.icons[name];
if (img.call) {
img = img(file);
}
- var html = '<a href="#" class="action" data-action="'+name+'">';
+ var html = '<a href="#" class="action" data-action="' + name + '">';
if (img) {
html += '<img class ="svg" src="' + img + '" /> ';
}
html += t('files', name) + '</a>';
-
+
var element = $(html);
element.data('action', name);
//alert(element);
- element.on('click',{a:null, elem:parent, actionFunc:actions[name]},actionHandler);
+ element.on('click', {a: null, elem: parent, actionFunc: actions[name]}, actionHandler);
parent.find('a.name>span.fileactions').append(element);
}
-
+
+ };
+
+ $.each(actions, function (name, action) {
+ if (name !== 'Share') {
+ addAction(name, action);
+ }
});
-
+ if(actions.Share){
+ addAction('Share', actions.Share);
+ }
+
if (actions['Delete']) {
var img = FileActions.icons['Delete'];
if (img.call) {
img = img(file);
}
- // NOTE: Temporary fix to allow unsharing of files in root of Shared folder
- if ($('#dir').val() == '/Shared') {
- var html = '<a href="#" original-title="' + t('files', 'Unshare') + '" class="action delete" />';
+ if (typeof trashBinApp !== 'undefined' && trashBinApp) {
+ var html = '<a href="#" original-title="' + t('files', 'Delete permanently') + '" class="action delete" />';
} else {
var html = '<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" />';
}
@@ -123,7 +131,7 @@ var FileActions = {
element.append($('<img class ="svg" src="' + img + '"/>'));
}
element.data('action', actions['Delete']);
- element.on('click',{a:null, elem:parent, actionFunc:actions['Delete']},actionHandler);
+ element.on('click', {a: null, elem: parent, actionFunc: actions['Delete']}, actionHandler);
parent.parent().children().last().append(element);
}
},
@@ -147,15 +155,19 @@ $(document).ready(function () {
} else {
var downloadScope = 'file';
}
- FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () {
- return OC.imagePath('core', 'actions/download');
- }, function (filename) {
- window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val());
- });
- $('#fileList tr').each(function(){
+ if (typeof disableDownloadActions == 'undefined' || !disableDownloadActions) {
+ FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () {
+ return OC.imagePath('core', 'actions/download');
+ }, function (filename) {
+ window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val());
+ });
+ }
+
+ $('#fileList tr').each(function () {
FileActions.display($(this).children('td.filename'));
});
+
});
FileActions.register('all', 'Delete', OC.PERMISSION_DELETE, function () {
@@ -185,6 +197,7 @@ FileActions.register('all', 'Rename', OC.PERMISSION_UPDATE, function () {
FileList.rename(filename);
});
+
FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename) {
window.location = OC.linkTo('files', 'index.php') + '?dir=' + encodeURIComponent($('#dir').val()).replace(/%2F/g, '/') + '/' + encodeURIComponent(filename);
});
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 66697bbbf56..cc107656da8 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -3,35 +3,92 @@ var FileList={
update:function(fileListHtml) {
$('#fileList').empty().html(fileListHtml);
},
- addFile:function(name,size,lastModified,loading,hidden){
- var basename, extension, simpleSize, sizeColor, lastModifiedTime, modifiedColor,
- img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png'),
- html='<tr data-type="file" data-size="'+size+'" data-permissions="'+$('#permissions').val()+'">';
- if(name.indexOf('.')!=-1){
+ createRow:function(type, name, iconurl, linktarget, size, lastModified, permissions){
+ var td, simpleSize, basename, extension;
+ //containing tr
+ var tr = $('<tr></tr>').attr({
+ "data-type": type,
+ "data-size": size,
+ "data-file": name,
+ "data-permissions": permissions
+ });
+ // filename td
+ td = $('<td></td>').attr({
+ "class": "filename",
+ "style": 'background-image:url('+iconurl+')'
+ });
+ td.append('<input type="checkbox" />');
+ var link_elem = $('<a></a>').attr({
+ "class": "name",
+ "href": linktarget
+ });
+ //split extension from filename for non dirs
+ if (type != 'dir' && name.indexOf('.')!=-1) {
basename=name.substr(0,name.lastIndexOf('.'));
extension=name.substr(name.lastIndexOf('.'));
- }else{
+ } else {
basename=name;
extension=false;
}
- html+='<td class="filename" style="background-image:url('+img+')"><input type="checkbox" />';
- html+='<a class="name" href="download.php?file='+$('#dir').val().replace(/</, '&lt;').replace(/>/, '&gt;')+'/'+escapeHTML(name)+'"><span class="nametext">'+escapeHTML(basename);
+ var name_span=$('<span></span>').addClass('nametext').text(basename);
+ link_elem.append(name_span);
if(extension){
- html+='<span class="extension">'+escapeHTML(extension)+'</span>';
+ name_span.append($('<span></span>').addClass('extension').text(extension));
}
- html+='</span></a></td>';
- if(size!='Pending'){
+ //dirs can show the number of uploaded files
+ if (type == 'dir') {
+ link_elem.append($('<span></span>').attr({
+ 'class': 'uploadtext',
+ 'currentUploads': 0
+ }));
+ }
+ td.append(link_elem);
+ tr.append(td);
+
+ //size column
+ if(size!=t('files', 'Pending')){
simpleSize=simpleFileSize(size);
}else{
- simpleSize='Pending';
+ simpleSize=t('files', 'Pending');
}
- sizeColor = Math.round(200-size/(1024*1024)*2);
- lastModifiedTime=Math.round(lastModified.getTime() / 1000);
- modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*14);
- html+='<td class="filesize" title="'+humanFileSize(size)+'" style="color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')">'+simpleSize+'</td>';
- html+='<td class="date"><span class="modified" title="'+formatDate(lastModified)+'" style="color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')">'+relative_modified_date(lastModified.getTime() / 1000)+'</span></td>';
- html+='</tr>';
- FileList.insertElement(name,'file',$(html).attr('data-file',name));
+ var sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2));
+ var lastModifiedTime = Math.round(lastModified.getTime() / 1000);
+ td = $('<td></td>').attr({
+ "class": "filesize",
+ "title": humanFileSize(size),
+ "style": 'color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')'
+ }).text(simpleSize);
+ tr.append(td);
+
+ // date column
+ var modifiedColor = Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5);
+ td = $('<td></td>').attr({ "class": "date" });
+ td.append($('<span></span>').attr({
+ "class": "modified",
+ "title": formatDate(lastModified),
+ "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')'
+ }).text( relative_modified_date(lastModified.getTime() / 1000) ));
+ tr.append(td);
+ return tr;
+ },
+ addFile:function(name,size,lastModified,loading,hidden){
+ var imgurl;
+ if (loading) {
+ imgurl = OC.imagePath('core', 'loading.gif');
+ } else {
+ imgurl = OC.imagePath('core', 'filetypes/file.png');
+ }
+ var tr = this.createRow(
+ 'file',
+ name,
+ imgurl,
+ OC.Router.generate('download', { file: $('#dir').val()+'/'+name }),
+ size,
+ lastModified,
+ $('#permissions').val()
+ );
+
+ FileList.insertElement(name, 'file', tr.attr('data-file',name));
var row = $('tr').filterAttr('data-file',name);
if(loading){
row.data('loading',true);
@@ -44,30 +101,18 @@ var FileList={
FileActions.display(row.find('td.filename'));
},
addDir:function(name,size,lastModified,hidden){
- var html, td, link_elem, sizeColor, lastModifiedTime, modifiedColor;
- html = $('<tr></tr>').attr({ "data-type": "dir", "data-size": size, "data-file": name, "data-permissions": $('#permissions').val()});
- td = $('<td></td>').attr({"class": "filename", "style": 'background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')' });
- td.append('<input type="checkbox" />');
- link_elem = $('<a></a>').attr({ "class": "name", "href": OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') });
- link_elem.append($('<span></span>').addClass('nametext').text(name));
- link_elem.append($('<span></span>').attr({'class': 'uploadtext', 'currentUploads': 0}));
- td.append(link_elem);
- html.append(td);
- if(size!='Pending'){
- simpleSize=simpleFileSize(size);
- }else{
- simpleSize='Pending';
- }
- sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2));
- lastModifiedTime=Math.round(lastModified.getTime() / 1000);
- modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5);
- td = $('<td></td>').attr({ "class": "filesize", "title": humanFileSize(size), "style": 'color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')'}).text(simpleSize);
- html.append(td);
-
- td = $('<td></td>').attr({ "class": "date" });
- td.append($('<span></span>').attr({ "class": "modified", "title": formatDate(lastModified), "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')' }).text( relative_modified_date(lastModified.getTime() / 1000) ));
- html.append(td);
- FileList.insertElement(name,'dir',html);
+
+ var tr = this.createRow(
+ 'dir',
+ name,
+ OC.imagePath('core', 'filetypes/folder.png'),
+ OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/'),
+ size,
+ lastModified,
+ $('#permissions').val()
+ );
+
+ FileList.insertElement(name,'dir',tr);
var row = $('tr').filterAttr('data-file',name);
row.find('td.filename').draggable(dragOptions);
row.find('td.filename').droppable(folderDropOptions);
@@ -201,15 +246,14 @@ var FileList={
},
checkName:function(oldName, newName, isNewFile) {
if (isNewFile || $('tr').filterAttr('data-file', newName).length > 0) {
- if (isNewFile) {
- $('#notification').html(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="suggest">'+t('files', 'suggest name')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
- } else {
- $('#notification').html(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
- }
$('#notification').data('oldName', oldName);
$('#notification').data('newName', newName);
$('#notification').data('isNewFile', isNewFile);
- $('#notification').fadeIn();
+ if (isNewFile) {
+ OC.Notification.showHtml(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="suggest">'+t('files', 'suggest name')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
+ } else {
+ OC.Notification.showHtml(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
+ }
return true;
} else {
return false;
@@ -217,9 +261,6 @@ var FileList={
},
replace:function(oldName, newName, isNewFile) {
// Finish any existing actions
- if (FileList.lastAction || !FileList.useUndo) {
- FileList.lastAction();
- }
$('tr').filterAttr('data-file', oldName).hide();
$('tr').filterAttr('data-file', newName).hide();
var tr = $('tr').filterAttr('data-file', oldName).clone();
@@ -251,11 +292,10 @@ var FileList={
FileList.finishReplace();
};
if (isNewFile) {
- $('#notification').html(t('files', 'replaced {new_name}', {new_name: newName})+'<span class="undo">'+t('files', 'undo')+'</span>');
+ OC.Notification.showHtml(t('files', 'replaced {new_name}', {new_name: newName})+'<span class="undo">'+t('files', 'undo')+'</span>');
} else {
- $('#notification').html(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
+ OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
}
- $('#notification').fadeIn();
},
finishReplace:function() {
if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) {
@@ -273,72 +313,45 @@ var FileList={
}
},
do_delete:function(files){
+ if(files.substr){
+ files=[files];
+ }
+ for (var i in files) {
+ var deleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date").children(".action.delete");
+ var oldHTML = deleteAction[0].outerHTML;
+ var newHTML = '<img class="move2trash" data-action="Delete" title="'+t('files', 'perform delete operation')+'" src="'+ OC.imagePath('core', 'loading.gif') +'"></a>';
+ deleteAction[0].outerHTML = newHTML;
+ }
// Finish any existing actions
if (FileList.lastAction) {
FileList.lastAction();
}
- FileList.prepareDeletion(files);
-
- if (!FileList.useUndo) {
- FileList.lastAction();
- } else {
- // NOTE: Temporary fix to change the text to unshared for files in root of Shared folder
- if ($('#dir').val() == '/Shared') {
- $('#notification').html(t('files', 'unshared {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
- } else {
- $('#notification').html(t('files', 'deleted {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
- }
- $('#notification').fadeIn();
- }
- },
- finishDelete:function(ready,sync){
- if(!FileList.deleteCanceled && FileList.deleteFiles){
- var fileNames=JSON.stringify(FileList.deleteFiles);
- $.ajax({
- url: OC.filePath('files', 'ajax', 'delete.php'),
- async:!sync,
- type:'post',
- data: {dir:$('#dir').val(),files:fileNames},
- complete: function(data){
- boolOperationFinished(data, function(){
- $('#notification').fadeOut('400');
- $.each(FileList.deleteFiles,function(index,file){
- FileList.remove(file);
+ var fileNames = JSON.stringify(files);
+ $.post(OC.filePath('files', 'ajax', 'delete.php'),
+ {dir:$('#dir').val(),files:fileNames},
+ function(result){
+ if (result.status == 'success') {
+ $.each(files,function(index,file){
+ var files = $('tr').filterAttr('data-file',file);
+ files.hide();
+ files.find('input[type="checkbox"]').removeAttr('checked');
+ files.removeClass('selected');
});
- FileList.deleteCanceled=true;
- FileList.deleteFiles=null;
- FileList.lastAction = null;
- if(ready){
- ready();
- }
- });
- }
- });
- }
- },
- prepareDeletion:function(files){
- if(files.substr){
- files=[files];
- }
- $.each(files,function(index,file){
- var files = $('tr').filterAttr('data-file',file);
- files.hide();
- files.find('input[type="checkbox"]').removeAttr('checked');
- files.removeClass('selected');
- });
- procesSelection();
- FileList.deleteCanceled=false;
- FileList.deleteFiles=files;
- FileList.lastAction = function() {
- FileList.finishDelete(null, true);
- };
+ procesSelection();
+ } else {
+ $.each(files,function(index,file) {
+ var deleteAction = $('tr').filterAttr('data-file',file).children("td.date").children(".move2trash");
+ deleteAction[0].outerHTML = oldHTML;
+ });
+ }
+ });
}
};
$(document).ready(function(){
$('#notification').hide();
- $('#notification .undo').live('click', function(){
+ $('#notification').on('click', '.undo', function(){
if (FileList.deleteFiles) {
$.each(FileList.deleteFiles,function(index,file){
$('tr').filterAttr('data-file',file).show();
@@ -350,7 +363,6 @@ $(document).ready(function(){
// Delete the new uploaded file
FileList.deleteCanceled = false;
FileList.deleteFiles = [FileList.replaceOldName];
- FileList.finishDelete(null, true);
} else {
$('tr').filterAttr('data-file', FileList.replaceOldName).show();
}
@@ -362,22 +374,21 @@ $(document).ready(function(){
FileList.replaceIsNewFile = null;
}
FileList.lastAction = null;
- $('#notification').fadeOut('400');
+ OC.Notification.hide();
});
- $('#notification .replace').live('click', function() {
- $('#notification').fadeOut('400', function() {
- FileList.replace($('#notification').data('oldName'), $('#notification').data('newName'), $('#notification').data('isNewFile'));
- });
+ $('#notification').on('click', '.replace', function() {
+ OC.Notification.hide(function() {
+ FileList.replace($('#notification').data('oldName'), $('#notification').data('newName'), $('#notification').data('isNewFile'));
+ });
});
- $('#notification .suggest').live('click', function() {
+ $('#notification').on('click', '.suggest', function() {
$('tr').filterAttr('data-file', $('#notification').data('oldName')).show();
- $('#notification').fadeOut('400');
+ OC.Notification.hide();
});
- $('#notification .cancel').live('click', function() {
+ $('#notification').on('click', '.cancel', function() {
if ($('#notification').data('isNewFile')) {
FileList.deleteCanceled = false;
FileList.deleteFiles = [$('#notification').data('oldName')];
- FileList.finishDelete(null, true);
}
});
FileList.useUndo=(window.onbeforeunload)?true:false;
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index bb298431e84..918182162d4 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -26,15 +26,34 @@ Files={
});
procesSelection();
},
+ updateMaxUploadFilesize:function(response) {
+ if(response == undefined) {
+ return;
+ }
+ if(response.data !== undefined && response.data.uploadMaxFilesize !== undefined) {
+ $('#max_upload').val(response.data.uploadMaxFilesize);
+ $('#upload.button').attr('original-title', response.data.maxHumanFilesize);
+ $('#usedSpacePercent').val(response.data.usedSpacePercent);
+ Files.displayStorageWarnings();
+ }
+ if(response[0] == undefined) {
+ return;
+ }
+ if(response[0].uploadMaxFilesize !== undefined) {
+ $('#max_upload').val(response[0].uploadMaxFilesize);
+ $('#upload.button').attr('original-title', response[0].maxHumanFilesize);
+ $('#usedSpacePercent').val(response[0].usedSpacePercent);
+ Files.displayStorageWarnings();
+ }
+
+ },
isFileNameValid:function (name) {
if (name === '.') {
- $('#notification').text(t('files', '\'.\' is an invalid file name.'));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files', '\'.\' is an invalid file name.'));
return false;
}
if (name.length == 0) {
- $('#notification').text(t('files', 'File name cannot be empty.'));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files', 'File name cannot be empty.'));
return false;
}
@@ -42,17 +61,30 @@ Files={
var invalid_characters = ['\\', '/', '<', '>', ':', '"', '|', '?', '*'];
for (var i = 0; i < invalid_characters.length; i++) {
if (name.indexOf(invalid_characters[i]) != -1) {
- $('#notification').text(t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."));
return false;
}
}
- $('#notification').fadeOut();
+ OC.Notification.hide();
return true;
+ },
+ displayStorageWarnings: function() {
+ if (!OC.Notification.isHidden()) {
+ return;
+ }
+
+ var usedSpacePercent = $('#usedSpacePercent').val();
+ if (usedSpacePercent > 98) {
+ OC.Notification.show(t('files', 'Your storage is full, files can not be updated or synced anymore!'));
+ return;
+ }
+ if (usedSpacePercent > 90) {
+ OC.Notification.show(t('files', 'Your storage is almost full ({usedSpacePercent}%)', {usedSpacePercent: usedSpacePercent}));
+ }
}
};
$(document).ready(function() {
- Files.bindKeyboardShortcuts(document, jQuery);
+ Files.bindKeyboardShortcuts(document, jQuery);
$('#fileList tr').each(function(){
//little hack to set unescape filenames in attribute
$(this).attr('data-file',decodeURIComponent($(this).attr('data-file')));
@@ -78,17 +110,22 @@ $(document).ready(function() {
}
// Triggers invisible file input
- $('#upload a').live('click', function() {
+ $('#upload a').on('click', function() {
$(this).parent().children('#file_upload_start').trigger('click');
return false;
});
+
+ // Show trash bin
+ $('#trash a').live('click', function() {
+ window.location=OC.filePath('files_trashbin', '', 'index.php');
+ });
var lastChecked;
// Sets the file link behaviour :
- $('td.filename a').live('click',function(event) {
- event.preventDefault();
+ $('#fileList').on('click','td.filename a',function(event) {
if (event.ctrlKey || event.shiftKey) {
+ event.preventDefault();
if (event.shiftKey) {
var last = $(lastChecked).parent().parent().prevAll().length;
var first = $(this).parent().parent().prevAll().length;
@@ -130,6 +167,7 @@ $(document).ready(function() {
var permissions = $(this).parent().parent().data('permissions');
var action=FileActions.getDefault(mime,type, permissions);
if(action){
+ event.preventDefault();
action(filename);
}
}
@@ -151,7 +189,7 @@ $(document).ready(function() {
procesSelection();
});
- $('td.filename input:checkbox').live('change',function(event) {
+ $('#fileList').on('change', 'td.filename input:checkbox',function(event) {
if (event.shiftKey) {
var last = $(lastChecked).parent().parent().prevAll().length;
var first = $(this).parent().parent().prevAll().length;
@@ -183,8 +221,7 @@ $(document).ready(function() {
$('.download').click('click',function(event) {
var files=getSelectedFiles('name').join(';');
var dir=$('#dir').val()||'/';
- $('#notification').text(t('files','generating ZIP-file, it may take some time.'));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.'));
// use special download URL if provided, e.g. for public shared files
if ( (downloadURL = document.getElementById("downloadURL")) ) {
window.location=downloadURL.value+"&download&files="+files;
@@ -225,12 +262,6 @@ $(document).ready(function() {
return;
}
totalSize+=files[i].size;
- if(FileList.deleteFiles && FileList.deleteFiles.indexOf(files[i].name)!=-1){//finish delete if we are uploading a deleted file
- FileList.finishDelete(function(){
- $('#file_upload_start').change();
- });
- return;
- }
}
}
if(totalSize>$('#max_upload').val()){
@@ -313,9 +344,9 @@ $(document).ready(function() {
var response;
response=jQuery.parseJSON(result);
if(response[0] == undefined || response[0].status != 'success') {
- $('#notification').text(t('files', response.data.message));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files', response.data.message));
}
+ Files.updateMaxUploadFilesize(response);
var file=response[0];
// TODO: this doesn't work if the file name has been changed server side
delete uploadingFiles[dirName][file.name];
@@ -353,9 +384,7 @@ $(document).ready(function() {
uploadtext.text(t('files', '{count} files uploading', {count: currentUploads}));
}
delete uploadingFiles[dirName][fileName];
- $('#notification').hide();
- $('#notification').text(t('files', 'Upload cancelled.'));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files', 'Upload cancelled.'));
}
});
//TODO test with filenames containing slashes
@@ -368,6 +397,8 @@ $(document).ready(function() {
.success(function(result, textStatus, jqXHR) {
var response;
response=jQuery.parseJSON(result);
+ Files.updateMaxUploadFilesize(response);
+
if(response[0] != undefined && response[0].status == 'success') {
var file=response[0];
delete uploadingFiles[file.name];
@@ -380,20 +411,17 @@ $(document).ready(function() {
FileList.loadingDone(file.name, file.id);
} else {
Files.cancelUpload(this.files[0].name);
- $('#notification').text(t('files', response.data.message));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files', response.data.message));
$('#fileList > tr').not('[data-mime]').fadeOut();
$('#fileList > tr').not('[data-mime]').remove();
}
- })
- .error(function(jqXHR, textStatus, errorThrown) {
- if(errorThrown === 'abort') {
- Files.cancelUpload(this.files[0].name);
- $('#notification').hide();
- $('#notification').text(t('files', 'Upload cancelled.'));
- $('#notification').fadeIn();
- }
- });
+ })
+ .error(function(jqXHR, textStatus, errorThrown) {
+ if(errorThrown === 'abort') {
+ Files.cancelUpload(this.files[0].name);
+ OC.Notification.show(t('files', 'Upload cancelled.'));
+ }
+ });
uploadingFiles[uniqueName] = jqXHR;
}
}
@@ -401,6 +429,7 @@ $(document).ready(function() {
data.submit().success(function(data, status) {
// in safari data is a string
response = jQuery.parseJSON(typeof data === 'string' ? data : data[0].body.innerText);
+ Files.updateMaxUploadFilesize(response);
if(response[0] != undefined && response[0].status == 'success') {
var file=response[0];
delete uploadingFiles[file.name];
@@ -413,8 +442,7 @@ $(document).ready(function() {
FileList.loadingDone(file.name, file.id);
} else {
//TODO Files.cancelUpload(/*where do we get the filename*/);
- $('#notification').text(t('files', response.data.message));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files', response.data.message));
$('#fileList > tr').not('[data-mime]').fadeOut();
$('#fileList > tr').not('[data-mime]').remove();
}
@@ -433,6 +461,10 @@ $(document).ready(function() {
$('#uploadprogressbar').progressbar('value',progress);
},
start: function(e, data) {
+ //IE < 10 does not fire the necessary events for the progress bar.
+ if($.browser.msie && parseInt($.browser.version) < 10) {
+ return;
+ }
$('#uploadprogressbar').progressbar({value:0});
$('#uploadprogressbar').fadeIn();
if(data.dataType != 'iframe ') {
@@ -534,14 +566,12 @@ $(document).ready(function() {
event.preventDefault();
var newname=input.val();
if(type == 'web' && newname.length == 0) {
- $('#notification').text(t('files', 'URL cannot be empty.'));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files', 'URL cannot be empty.'));
return false;
} else if (type != 'web' && !Files.isFileNameValid(newname)) {
return false;
} else if( type == 'folder' && $('#dir').val() == '/' && newname == 'Shared') {
- $('#notification').text(t('files','Invalid folder name. Usage of \'Shared\' is reserved by Owncloud'));
- $('#notification').fadeIn();
+ OC.Notification.show(t('files','Invalid folder name. Usage of \'Shared\' is reserved by Owncloud'));
return false;
}
if (FileList.lastAction) {
@@ -639,12 +669,8 @@ $(document).ready(function() {
});
});
- //check if we need to scan the filesystem
- $.get(OC.filePath('files','ajax','scan.php'),{checkonly:'true'}, function(response) {
- if(response.data.done){
- scanFiles();
- }
- }, "json");
+ //do a background scan if needed
+ scanFiles();
var lastWidth = 0;
var breadcrumbs = [];
@@ -659,9 +685,10 @@ $(document).ready(function() {
breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth;
});
- if ($('#controls .actions').length > 0) {
- breadcrumbsWidth += $('#controls .actions').get(0).offsetWidth;
- }
+
+ $.each($('#controls .actions>div'), function(index, action) {
+ breadcrumbsWidth += $(action).get(0).offsetWidth;
+ });
function resizeBreadcrumbs(firstRun) {
var width = $(this).width();
@@ -711,35 +738,66 @@ $(document).ready(function() {
});
resizeBreadcrumbs(true);
+
+ // display storage warnings
+ setTimeout ( "Files.displayStorageWarnings()", 100 );
+ OC.Notification.setDefault(Files.displayStorageWarnings);
+
+ // file space size sync
+ function update_storage_statistics() {
+ $.getJSON(OC.filePath('files','ajax','getstoragestats.php'),function(response) {
+ Files.updateMaxUploadFilesize(response);
+ });
+ }
+
+ // start on load - we ask the server every 5 minutes
+ var update_storage_statistics_interval = 5*60*1000;
+ var update_storage_statistics_interval_id = setInterval(update_storage_statistics, update_storage_statistics_interval);
+
+ // Use jquery-visibility to de-/re-activate file stats sync
+ if ($.support.pageVisibility) {
+ $(document).on({
+ 'show.visibility': function() {
+ if (!update_storage_statistics_interval_id) {
+ update_storage_statistics_interval_id = setInterval(update_storage_statistics, update_storage_statistics_interval);
+ }
+ },
+ 'hide.visibility': function() {
+ clearInterval(update_storage_statistics_interval_id);
+ update_storage_statistics_interval_id = 0;
+ }
+ });
+ }
});
-function scanFiles(force,dir){
+function scanFiles(force, dir){
+ if (!OC.currentUser) {
+ return;
+ }
+
if(!dir){
- dir='';
+ dir = '';
}
- force=!!force; //cast to bool
- scanFiles.scanning=true;
- $('#scanning-message').show();
- $('#fileList').remove();
- var scannerEventSource=new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir});
- scanFiles.cancel=scannerEventSource.close.bind(scannerEventSource);
- scannerEventSource.listen('scanning',function(data){
- $('#scan-count').text(t('files', '{count} files scanned', {count: data.count}));
- $('#scan-current').text(data.file+'/');
+ force = !!force; //cast to bool
+ scanFiles.scanning = true;
+ var scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir});
+ scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource);
+ scannerEventSource.listen('count',function(count){
+ console.log(count + 'files scanned')
+ });
+ scannerEventSource.listen('folder',function(path){
+ console.log('now scanning ' + path)
});
- scannerEventSource.listen('success',function(success){
+ scannerEventSource.listen('done',function(count){
scanFiles.scanning=false;
- if(success){
- window.location.reload();
- }else{
- alert(t('files', 'error while scanning'));
- }
+ console.log('done after ' + count + 'files');
});
}
scanFiles.scanning=false;
function boolOperationFinished(data, callback) {
result = jQuery.parseJSON(data.responseText);
+ Files.updateMaxUploadFilesize(result);
if(result.status == 'success'){
callback.call();
} else {
@@ -751,32 +809,101 @@ function updateBreadcrumb(breadcrumbHtml) {
$('p.nav').empty().html(breadcrumbHtml);
}
-//options for file drag/dropp
+var createDragShadow = function(event){
+ //select dragged file
+ var isDragSelected = $(event.target).parents('tr').find('td input:first').prop('checked');
+ if (!isDragSelected) {
+ //select dragged file
+ $(event.target).parents('tr').find('td input:first').prop('checked',true);
+ }
+
+ var selectedFiles = getSelectedFiles();
+
+ if (!isDragSelected && selectedFiles.length == 1) {
+ //revert the selection
+ $(event.target).parents('tr').find('td input:first').prop('checked',false);
+ }
+
+ //also update class when we dragged more than one file
+ if (selectedFiles.length > 1) {
+ $(event.target).parents('tr').addClass('selected');
+ }
+
+ // build dragshadow
+ var dragshadow = $('<table class="dragshadow"></table>');
+ var tbody = $('<tbody></tbody>');
+ dragshadow.append(tbody);
+
+ var dir=$('#dir').val();
+
+ $(selectedFiles).each(function(i,elem){
+ var newtr = $('<tr data-dir="'+dir+'" data-filename="'+elem.name+'">'
+ +'<td class="filename">'+elem.name+'</td><td class="size">'+humanFileSize(elem.size)+'</td>'
+ +'</tr>');
+ tbody.append(newtr);
+ if (elem.type === 'dir') {
+ newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')');
+ } else {
+ getMimeIcon(elem.mime,function(path){
+ newtr.find('td.filename').attr('style','background-image:url('+path+')');
+ });
+ }
+ });
+
+ return dragshadow;
+}
+
+//options for file drag/drop
var dragOptions={
- distance: 20, revert: 'invalid', opacity: 0.7, helper: 'clone',
+ revert: 'invalid', revertDuration: 300,
+ opacity: 0.7, zIndex: 100, appendTo: 'body', cursorAt: { left: -5, top: -5 },
+ helper: createDragShadow, cursor: 'move',
stop: function(event, ui) {
$('#fileList tr td.filename').addClass('ui-draggable');
}
-};
+}
+
var folderDropOptions={
drop: function( event, ui ) {
- var file=ui.draggable.parent().data('file');
- var target=$(this).find('.nametext').text().trim();
- var dir=$('#dir').val();
- $.ajax({
- url: OC.filePath('files', 'ajax', 'move.php'),
- data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(dir)+'/'+encodeURIComponent(target),
- complete: function(data){boolOperationFinished(data, function(){
- var el = $('#fileList tr').filterAttr('data-file',file).find('td.filename');
- el.draggable('destroy');
- FileList.remove(file);
- });}
+ //don't allow moving a file into a selected folder
+ if ($(event.target).parents('tr').find('td input:first').prop('checked') === true) {
+ return false;
+ }
+
+ var target=$.trim($(this).find('.nametext').text());
+
+ var files = ui.helper.find('tr');
+ $(files).each(function(i,row){
+ var dir = $(row).data('dir');
+ var file = $(row).data('filename');
+ $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: dir+'/'+target }, function(result) {
+ if (result) {
+ if (result.status === 'success') {
+ //recalculate folder size
+ var oldSize = $('#fileList tr').filterAttr('data-file',target).data('size');
+ var newSize = oldSize + $('#fileList tr').filterAttr('data-file',file).data('size');
+ $('#fileList tr').filterAttr('data-file',target).data('size', newSize);
+ $('#fileList tr').filterAttr('data-file',target).find('td.filesize').text(humanFileSize(newSize));
+
+ FileList.remove(file);
+ procesSelection();
+ $('#notification').hide();
+ } else {
+ $('#notification').hide();
+ $('#notification').text(result.data.message);
+ $('#notification').fadeIn();
+ }
+ } else {
+ OC.dialogs.alert(t('Error moving file'));
+ }
+ });
});
- }
+ },
+ tolerance: 'pointer'
}
+
var crumbDropOptions={
drop: function( event, ui ) {
- var file=ui.draggable.parent().data('file');
var target=$(this).data('dir');
var dir=$('#dir').val();
while(dir.substr(0,1)=='/'){//remove extra leading /'s
@@ -789,12 +916,25 @@ var crumbDropOptions={
if(target==dir || target+'/'==dir){
return;
}
- $.ajax({
- url: OC.filePath('files', 'ajax', 'move.php'),
- data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(target),
- complete: function(data){boolOperationFinished(data, function(){
- FileList.remove(file);
- });}
+ var files = ui.helper.find('tr');
+ $(files).each(function(i,row){
+ var dir = $(row).data('dir');
+ var file = $(row).data('filename');
+ $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) {
+ if (result) {
+ if (result.status === 'success') {
+ FileList.remove(file);
+ procesSelection();
+ $('#notification').hide();
+ } else {
+ $('#notification').hide();
+ $('#notification').text(result.data.message);
+ $('#notification').fadeIn();
+ }
+ } else {
+ OC.dialogs.alert(t('Error moving file'));
+ }
+ });
});
},
tolerance: 'pointer'
@@ -901,7 +1041,7 @@ function getUniqueName(name){
num=parseInt(numMatch[numMatch.length-1])+1;
base=base.split('(')
base.pop();
- base=base.join('(').trim();
+ base=$.trim(base.join('('));
}
name=base+' ('+num+')';
if (extension) {
diff --git a/apps/files/js/jquery-visibility.js b/apps/files/js/jquery-visibility.js
new file mode 100644
index 00000000000..a824bf68730
--- /dev/null
+++ b/apps/files/js/jquery-visibility.js
@@ -0,0 +1,32 @@
+/*! http://mths.be/visibility v1.0.5 by @mathias */
+(function (window, document, $, undefined) {
+
+ var prefix,
+ property,
+// In Opera, `'onfocusin' in document == true`, hence the extra `hasFocus` check to detect IE-like behavior
+ eventName = 'onfocusin' in document && 'hasFocus' in document ? 'focusin focusout' : 'focus blur',
+ prefixes = ['', 'moz', 'ms', 'o', 'webkit'],
+ $support = $.support,
+ $event = $.event;
+
+ while ((property = prefix = prefixes.pop()) != undefined) {
+ property = (prefix ? prefix + 'H' : 'h') + 'idden';
+ if ($support.pageVisibility = typeof document[property] == 'boolean') {
+ eventName = prefix + 'visibilitychange';
+ break;
+ }
+ }
+
+ $(/blur$/.test(eventName) ? window : document).on(eventName, function (event) {
+ var type = event.type,
+ originalEvent = event.originalEvent,
+ toElement = originalEvent.toElement;
+// If it’s a `{focusin,focusout}` event (IE), `fromElement` and `toElement` should both be `null` or `undefined`;
+// else, the page visibility hasn’t changed, but the user just clicked somewhere in the doc.
+// In IE9, we need to check the `relatedTarget` property instead.
+ if (!/^focus./.test(type) || (toElement == undefined && originalEvent.fromElement == undefined && originalEvent.relatedTarget == undefined)) {
+ $event.trigger((property && document[property] || /^(?:blur|focusout)$/.test(type) ? 'hide' : 'show') + '.visibility');
+ }
+ });
+
+}(this, document, jQuery));
diff --git a/apps/files/js/upgrade.js b/apps/files/js/upgrade.js
new file mode 100644
index 00000000000..02d57fc9e6c
--- /dev/null
+++ b/apps/files/js/upgrade.js
@@ -0,0 +1,17 @@
+$(document).ready(function () {
+ var eventSource, total, bar = $('#progressbar');
+ console.log('start');
+ bar.progressbar({value: 0});
+ eventSource = new OC.EventSource(OC.filePath('files', 'ajax', 'upgrade.php'));
+ eventSource.listen('total', function (count) {
+ total = count;
+ console.log(count + ' files needed to be migrated');
+ });
+ eventSource.listen('count', function (count) {
+ bar.progressbar({value: (count / total) * 100});
+ console.log(count);
+ });
+ eventSource.listen('done', function () {
+ document.location.reload();
+ });
+});
diff --git a/apps/files/js/upload.js b/apps/files/js/upload.js
new file mode 100644
index 00000000000..9d9f61f600e
--- /dev/null
+++ b/apps/files/js/upload.js
@@ -0,0 +1,8 @@
+function Upload(fileSelector) {
+ if ($.support.xhrFileUpload) {
+ return new XHRUpload(fileSelector.target.files);
+ } else {
+ return new FormUpload(fileSelector);
+ }
+}
+Upload.target = OC.filePath('files', 'ajax', 'upload.php');
diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php
index 5740d54f8b1..ce8a34acedb 100644
--- a/apps/files/l10n/ar.php
+++ b/apps/files/l10n/ar.php
@@ -5,20 +5,20 @@
"No file was uploaded" => "لم يتم ترÙيع أي من Ø§Ù„Ù…Ù„ÙØ§Øª",
"Missing a temporary folder" => "المجلد المؤقت غير موجود",
"Files" => "Ø§Ù„Ù…Ù„ÙØ§Øª",
-"Unshare" => "إلغاء مشاركة",
"Delete" => "محذوÙ",
"Close" => "إغلق",
"Name" => "الاسم",
"Size" => "حجم",
"Modified" => "معدل",
+"Upload" => "Ø¥Ø±ÙØ¹",
"Maximum upload size" => "الحد الأقصى لحجم Ø§Ù„Ù…Ù„ÙØ§Øª التي يمكن Ø±ÙØ¹Ù‡Ø§",
"Save" => "Ø­ÙØ¸",
"New" => "جديد",
"Text file" => "ملÙ",
"Folder" => "مجلد",
-"Upload" => "Ø¥Ø±ÙØ¹",
"Nothing in here. Upload something!" => "لا يوجد شيء هنا. Ø¥Ø±ÙØ¹ بعض Ø§Ù„Ù…Ù„ÙØ§Øª!",
"Download" => "تحميل",
+"Unshare" => "إلغاء مشاركة",
"Upload too large" => "حجم الترÙيع أعلى من المسموح",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم Ø§Ù„Ù…Ù„ÙØ§Øª التي تريد ترÙيعها أعلى من المسموح على الخادم."
);
diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php
index bc10979611b..632b5745453 100644
--- a/apps/files/l10n/bg_BG.php
+++ b/apps/files/l10n/bg_BG.php
@@ -6,16 +6,17 @@
"replace" => "препокриване",
"cancel" => "отказ",
"undo" => "възтановÑване",
+"Close" => "Затвори",
"Upload cancelled." => "Качването е ÑпрÑно.",
"Name" => "Име",
"Size" => "Размер",
"Modified" => "Променено",
+"Upload" => "Качване",
"Maximum upload size" => "МакÑимален размер за качване",
"0 is unlimited" => "Ползвайте 0 за без ограничениÑ",
"Save" => "ЗапиÑ",
"New" => "Ðово",
"Folder" => "Папка",
-"Upload" => "Качване",
"Nothing in here. Upload something!" => "ÐÑма нищо тук. Качете нещо.",
"Download" => "ИзтеглÑне",
"Upload too large" => "Файлът който Ñте избрали за качване е прекалено голÑм"
diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php
index 45cf1c2313d..05cfb9f1381 100644
--- a/apps/files/l10n/bn_BD.php
+++ b/apps/files/l10n/bn_BD.php
@@ -1,46 +1,65 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s কে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦­à¦¬ হলো না - à¦à¦‡ নামের ফাইল বিদà§à¦¯à¦®à¦¾à¦¨",
+"Could not move %s" => "%s কে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦­à¦¬ হলো না",
+"Unable to rename file" => "ফাইলের নাম পরিবরà§à¦¤à¦¨ করা সমà§à¦­à¦¬ হলো না",
+"No file was uploaded. Unknown error" => "কোন ফাইল আপলোড করা হয় নি। সমসà§à¦¯à¦¾ অজà§à¦žà¦¾à¦¤à¥¤",
"There is no error, the file uploaded with success" => "কোন সমসà§à¦¯à¦¾ নেই, ফাইল আপলোড সà§à¦¸à¦®à§à¦ªà¦¨à§à¦¨ হয়েছে",
-"The uploaded file was only partially uploaded" => "আপলোড করা ফাইলটি আংশিক আপলোড হয়েছে",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "আপলোড করা ফাইলটি php.ini তে বরà§à¦£à¦¿à¦¤ upload_max_filesize নিরà§à¦¦à§‡à¦¶à¦¿à¦¤ আয়তন অতিকà§à¦°à¦® করছেঃ",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "আপলোড করা ফাইলটি HTML ফরà§à¦®à§‡ নিরà§à¦§à¦¾à¦°à¦¿à¦¤ MAX_FILE_SIZE নিরà§à¦¦à§‡à¦¶à¦¿à¦¤ সরà§à¦¬à§‹à¦šà§à¦š আকার অতিকà§à¦°à¦® করেছে ",
+"The uploaded file was only partially uploaded" => "আপলোড করা ফাইলটি আংশিক আপলোড করা হয়েছে",
"No file was uploaded" => "কোন ফাইল আপলোড করা হয় নি",
-"Missing a temporary folder" => "অসà§à¦¥à¦¾à§Ÿà§€ ফোলà§à¦¡à¦¾à¦°à¦Ÿà¦¿ খোয়া গিয়েছে ",
-"Failed to write to disk" => "ডিসà§à¦•ে লিখতে পারা গেল না",
+"Missing a temporary folder" => "অসà§à¦¥à¦¾à§Ÿà§€ ফোলà§à¦¡à¦¾à¦° খোয়া গিয়েছে",
+"Failed to write to disk" => "ডিসà§à¦•ে লিখতে বà§à¦¯à¦°à§à¦¥",
+"Invalid directory." => "ভà§à¦² ডিরেকà§à¦Ÿà¦°à¦¿",
"Files" => "ফাইল",
-"Unshare" => "ভাগাভাগি বাতিল",
"Delete" => "মà§à¦›à§‡ ফেল",
"Rename" => "পূনঃনামকরণ",
+"Pending" => "মà§à¦²à¦¤à§à¦¬à¦¿",
"{new_name} already exists" => "{new_name} টি বিদà§à¦¯à¦®à¦¾à¦¨",
"replace" => "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨",
-"suggest name" => "নাম সà§à¦ªà¦¾à¦°à¦¿à¦¶ কর",
+"suggest name" => "নাম সà§à¦ªà¦¾à¦°à¦¿à¦¶ করà§à¦¨",
"cancel" => "বাতিল",
"replaced {new_name}" => "{new_name} পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে",
"undo" => "কà§à¦°à¦¿à§Ÿà¦¾ পà§à¦°à¦¤à§à¦¯à¦¾à¦¹à¦¾à¦°",
"replaced {new_name} with {old_name}" => "{new_name} কে {old_name} নামে পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে",
-"unshared {files}" => "{files} ভাগাভাগি বাতিল কর",
-"deleted {files}" => "{files} মà§à¦›à§‡ ফেলা হয়েছে",
-"Upload Error" => "আপলোড করতে সমসà§à¦¯à¦¾",
-"Pending" => "মà§à¦²à¦¤à§à¦¬à¦¿",
-"1 file uploading" => "à§§ টি ফাইল আপলোড করা হচà§à¦›à§‡",
-"Upload cancelled." => "আপলোড বাতিল করা হয়েছে ।",
-"error while scanning" => "সà§à¦•à§à¦¯à¦¾à¦¨ করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে",
+"'.' is an invalid file name." => "টি à¦à¦•টি অননà§à¦®à§‹à¦¦à¦¿à¦¤ নাম।",
+"File name cannot be empty." => "ফাইলের নামটি ফাà¦à¦•া রাখা যাবে না।",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' à¦à¦¬à¦‚ '*' অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়।",
+"Unable to upload your file as it is a directory or has 0 bytes" => "আপনার ফাইলটি আপলোড করা সমà§à¦­à¦¬ হলো না, কেননা à¦à¦Ÿà¦¿ হয় à¦à¦•টি ফোলà§à¦¡à¦¾à¦° কিংবা à¦à¦° আকার ০ বাইট",
+"Upload Error" => "আপলোড করতে সমসà§à¦¯à¦¾ ",
+"Close" => "বনà§à¦§",
+"1 file uploading" => "১টি ফাইল আপলোড করা হচà§à¦›à§‡",
+"{count} files uploading" => "{count} টি ফাইল আপলোড করা হচà§à¦›à§‡",
+"Upload cancelled." => "আপলোড বাতিল করা হয়েছে।",
+"File upload is in progress. Leaving the page now will cancel the upload." => "ফাইল আপলোড চলমান। à¦à¦‡ পৃষà§à¦ à¦¾ পরিতà§à¦¯à¦¾à¦— করলে আপলোড বাতিল করা হবে।",
+"URL cannot be empty." => "URL ফাà¦à¦•া রাখা যাবে না।",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "ফোলà§à¦¡à¦¾à¦°à§‡à¦° নামটি সঠিক নয়। 'ভাগাভাগি করা' শà§à¦§à§à¦®à¦¾à¦¤à§à¦° Owncloud à¦à¦° জনà§à¦¯ সংরকà§à¦·à¦¿à¦¤à¥¤",
"Name" => "নাম",
"Size" => "আকার",
"Modified" => "পরিবরà§à¦¤à¦¿à¦¤",
-"File handling" => "ফাইল হà§à¦¯à¦¾à¦¨à§à¦¡à¦²à¦¿à¦‚",
+"1 folder" => "১টি ফোলà§à¦¡à¦¾à¦°",
+"{count} folders" => "{count} টি ফোলà§à¦¡à¦¾à¦°",
+"1 file" => "১টি ফাইল",
+"{count} files" => "{count} টি ফাইল",
+"Upload" => "আপলোড",
+"File handling" => "ফাইল হà§à¦¯à¦¾à¦°à§à¦¡à¦²à¦¿à¦‚",
"Maximum upload size" => "আপলোডের সরà§à¦¬à§‹à¦šà§à¦š আকার",
-"max. possible: " => "সমà§à¦­à¦¾à¦¬à§à¦¯ সরà§à¦¬à§‹à¦šà§à¦šà¦ƒ",
-"Needed for multi-file and folder downloads." => "à¦à¦•াধিক ফাইল à¦à¦¬à¦‚ ফোলà§à¦¡à¦¾à¦° ডাউনলোড করার কà§à¦·à§‡à¦¤à§à¦°à§‡ আবশà§à¦¯à¦•।",
-"Enable ZIP-download" => "জিপ ডাউনলোড সকà§à¦°à¦¿à§Ÿ কর",
-"0 is unlimited" => "০ à¦à¦° অরà§à¦¥ হলো অসীম",
-"Maximum input size for ZIP files" => "জিপ ফাইলের জনà§à¦¯ সরà§à¦¬à§‹à¦šà§à¦š ইনপà§à¦Ÿ",
-"Save" => "সংরকà§à¦·à¦£ কর",
+"max. possible: " => "অনà§à¦®à§‹à¦¦à¦¿à¦¤ সরà§à¦¬à§‹à¦šà§à¦š আকার",
+"Needed for multi-file and folder downloads." => "à¦à¦•াধিক ফাইল à¦à¦¬à¦‚ ফোলà§à¦¡à¦¾à¦° ডাউনলোড করার জনà§à¦¯ আবশà§à¦¯à¦•।",
+"Enable ZIP-download" => "ZIP ডাউনলোড সকà§à¦°à¦¿à§Ÿ কর",
+"0 is unlimited" => "০ à¦à¦° অরà§à¦¥ অসীম",
+"Maximum input size for ZIP files" => "ZIP ফাইলের ইনপà§à¦Ÿà§‡à¦° সরà§à¦¬à§‹à¦šà§à¦š আকার",
+"Save" => "সংরকà§à¦·à¦¨ কর",
"New" => "নতà§à¦¨",
"Text file" => "টেকà§à¦¸à¦Ÿ ফাইল",
"Folder" => "ফোলà§à¦¡à¦¾à¦°",
-"Upload" => "আপলোড",
+"From link" => " লিংক থেকে",
"Cancel upload" => "আপলোড বাতিল কর",
-"Nothing in here. Upload something!" => "à¦à¦–ানে কোন কিছà§à¦‡ নেই। কিছৠআপলোড করà§à¦¨ !",
+"Nothing in here. Upload something!" => "à¦à¦–ানে কিছà§à¦‡ নেই। কিছৠআপলোড করà§à¦¨ !",
"Download" => "ডাউনলোড",
-"Upload too large" => "আপলোডের আকার অনেক বড়",
-"Files are being scanned, please wait." => "ফাইল সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡, দয়া করে অপেকà§à¦·à¦¾ করà§à¦¨à¥¤",
+"Unshare" => "ভাগাভাগি বাতিল ",
+"Upload too large" => "আপলোডের আকারটি অনেক বড়",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "আপনি à¦à¦‡ সারà§à¦­à¦¾à¦°à§‡ আপলোড করার জনà§à¦¯ অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফাইলের সরà§à¦¬à§‹à¦šà§à¦š আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষà§à¦Ÿà¦¾ করছেন ",
+"Files are being scanned, please wait." => "ফাইলগà§à¦²à§‹ সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡, দয়া করে অপেকà§à¦·à¦¾ করà§à¦¨à¥¤",
"Current scanning" => "বরà§à¦¤à¦®à¦¾à¦¨ সà§à¦•à§à¦¯à¦¾à¦¨à¦¿à¦‚"
);
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index df099c6331d..6655633bbdb 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom",
+"Could not move %s" => " No s'ha pogut moure %s",
+"Unable to rename file" => "No es pot canviar el nom del fitxer",
"No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut",
"There is no error, the file uploaded with success" => "El fitxer s'ha pujat correctament",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "L’arxiu que voleu carregar supera el màxim definit en la directiva upload_max_filesize del php.ini:",
@@ -7,12 +10,13 @@
"No file was uploaded" => "El fitxer no s'ha pujat",
"Missing a temporary folder" => "S'ha perdut un fitxer temporal",
"Failed to write to disk" => "Ha fallat en escriure al disc",
-"Not enough space available" => "No hi ha prou espai disponible",
+"Not enough storage available" => "No hi ha prou espai disponible",
"Invalid directory." => "Directori no vàlid.",
"Files" => "Fitxers",
-"Unshare" => "Deixa de compartir",
+"Delete permanently" => "Esborra permanentment",
"Delete" => "Suprimeix",
"Rename" => "Reanomena",
+"Pending" => "Pendents",
"{new_name} already exists" => "{new_name} ja existeix",
"replace" => "substitueix",
"suggest name" => "sugereix un nom",
@@ -20,24 +24,22 @@
"replaced {new_name}" => "s'ha substituït {new_name}",
"undo" => "desfés",
"replaced {new_name} with {old_name}" => "s'ha substituït {old_name} per {new_name}",
-"unshared {files}" => "no compartits {files}",
-"deleted {files}" => "eliminats {files}",
+"perform delete operation" => "executa d'operació d'esborrar",
"'.' is an invalid file name." => "'.' és un nom no vàlid per un fitxer.",
"File name cannot be empty." => "El nom del fitxer no pot ser buit.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.",
-"generating ZIP-file, it may take some time." => "s'estan generant fitxers ZIP, pot trigar una estona.",
+"Your storage is full, files can not be updated or synced anymore!" => "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!",
+"Your storage is almost full ({usedSpacePercent}%)" => "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans.",
"Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes",
"Upload Error" => "Error en la pujada",
"Close" => "Tanca",
-"Pending" => "Pendents",
"1 file uploading" => "1 fitxer pujant",
"{count} files uploading" => "{count} fitxers en pujada",
"Upload cancelled." => "La pujada s'ha cancel·lat.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
"URL cannot be empty." => "La URL no pot ser buida",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud",
-"{count} files scanned" => "{count} fitxers escannejats",
-"error while scanning" => "error durant l'escaneig",
"Name" => "Nom",
"Size" => "Mida",
"Modified" => "Modificat",
@@ -45,6 +47,7 @@
"{count} folders" => "{count} carpetes",
"1 file" => "1 fitxer",
"{count} files" => "{count} fitxers",
+"Upload" => "Puja",
"File handling" => "Gestió de fitxers",
"Maximum upload size" => "Mida màxima de pujada",
"max. possible: " => "màxim possible:",
@@ -57,12 +60,14 @@
"Text file" => "Fitxer de text",
"Folder" => "Carpeta",
"From link" => "Des d'enllaç",
-"Upload" => "Puja",
+"Trash bin" => "Paperera",
"Cancel upload" => "Cancel·la la pujada",
"Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!",
"Download" => "Baixa",
+"Unshare" => "Deixa de compartir",
"Upload too large" => "La pujada és massa gran",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
"Files are being scanned, please wait." => "S'estan escanejant els fitxers, espereu",
-"Current scanning" => "Actualment escanejant"
+"Current scanning" => "Actualment escanejant",
+"Upgrading filesystem cache..." => "Actualitzant la memòria de cau del sistema de fitxers..."
);
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index 301a54c343a..d2306838bd4 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nelze přesunout %s - existuje soubor se stejným názvem",
+"Could not move %s" => "Nelze přesunout %s",
+"Unable to rename file" => "Nelze přejmenovat soubor",
"No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba",
"There is no error, the file uploaded with success" => "Soubor byl odeslán úspěšně",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Odesílaný soubor přesahuje velikost upload_max_filesize povolenou v php.ini:",
@@ -7,12 +10,13 @@
"No file was uploaded" => "Žádný soubor nebyl odeslán",
"Missing a temporary folder" => "Chybí adresář pro doÄasné soubory",
"Failed to write to disk" => "Zápis na disk selhal",
-"Not enough space available" => "Nedostatek dostupného místa",
+"Not enough storage available" => "Nedostatek dostupného úložného prostoru",
"Invalid directory." => "Neplatný adresář",
"Files" => "Soubory",
-"Unshare" => "Zrušit sdílení",
+"Delete permanently" => "Trvale odstranit",
"Delete" => "Smazat",
"Rename" => "Přejmenovat",
+"Pending" => "Čekající",
"{new_name} already exists" => "{new_name} již existuje",
"replace" => "nahradit",
"suggest name" => "navrhnout název",
@@ -20,24 +24,22 @@
"replaced {new_name}" => "nahrazeno {new_name}",
"undo" => "zpět",
"replaced {new_name} with {old_name}" => "nahrazeno {new_name} s {old_name}",
-"unshared {files}" => "sdílení zrušeno pro {files}",
-"deleted {files}" => "smazáno {files}",
+"perform delete operation" => "provést smazání",
"'.' is an invalid file name." => "'.' je neplatným názvem souboru.",
"File name cannot be empty." => "Název souboru nemůže být prázdný řetězec.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny.",
-"generating ZIP-file, it may take some time." => "generuji ZIP soubor, může to nějakou dobu trvat.",
+"Your storage is full, files can not be updated or synced anymore!" => "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.",
+"Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložiště je téměř plné ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Vaše soubory ke stažení se připravují. Pokud jsou velké může to chvíli trvat.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů",
"Upload Error" => "Chyba odesílání",
"Close" => "Zavřít",
-"Pending" => "Čekající",
"1 file uploading" => "odesílá se 1 soubor",
"{count} files uploading" => "odesílám {count} souborů",
"Upload cancelled." => "Odesílání zrušeno.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání.",
"URL cannot be empty." => "URL nemůže být prázdná",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud",
-"{count} files scanned" => "prozkoumáno {count} souborů",
-"error while scanning" => "chyba při prohledávání",
"Name" => "Název",
"Size" => "Velikost",
"Modified" => "Změněno",
@@ -45,6 +47,7 @@
"{count} folders" => "{count} složky",
"1 file" => "1 soubor",
"{count} files" => "{count} soubory",
+"Upload" => "Odeslat",
"File handling" => "Zacházení se soubory",
"Maximum upload size" => "Maximální velikost pro odesílání",
"max. possible: " => "největší možná: ",
@@ -57,12 +60,14 @@
"Text file" => "Textový soubor",
"Folder" => "Složka",
"From link" => "Z odkazu",
-"Upload" => "Odeslat",
+"Trash bin" => "Koš",
"Cancel upload" => "Zrušit odesílání",
"Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.",
"Download" => "Stáhnout",
+"Unshare" => "Zrušit sdílení",
"Upload too large" => "Odeslaný soubor je příliš velký",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte odeslat, pÅ™ekraÄují limit velikosti odesílání na tomto serveru.",
"Files are being scanned, please wait." => "Soubory se prohledávají, prosím Äekejte.",
-"Current scanning" => "Aktuální prohledávání"
+"Current scanning" => "Aktuální prohledávání",
+"Upgrading filesystem cache..." => "Aktualizuji mezipaměť souborového systému..."
);
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index 02c177a2f1c..13ceacc6241 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Kunne ikke flytte %s - der findes allerede en fil med dette navn",
+"Could not move %s" => "Kunne ikke flytte %s",
+"Unable to rename file" => "Kunne ikke omdøbe fil",
"No file was uploaded. Unknown error" => "Ingen fil blev uploadet. Ukendt fejl.",
"There is no error, the file uploaded with success" => "Der er ingen fejl, filen blev uploadet med success",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini",
@@ -7,10 +10,12 @@
"No file was uploaded" => "Ingen fil blev uploadet",
"Missing a temporary folder" => "Mangler en midlertidig mappe",
"Failed to write to disk" => "Fejl ved skrivning til disk.",
+"Not enough storage available" => "Der er ikke nok plads til rådlighed",
+"Invalid directory." => "Ugyldig mappe.",
"Files" => "Filer",
-"Unshare" => "Fjern deling",
"Delete" => "Slet",
"Rename" => "Omdøb",
+"Pending" => "Afventer",
"{new_name} already exists" => "{new_name} eksisterer allerede",
"replace" => "erstat",
"suggest name" => "foreslå navn",
@@ -18,21 +23,21 @@
"replaced {new_name}" => "erstattede {new_name}",
"undo" => "fortryd",
"replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}",
-"unshared {files}" => "ikke delte {files}",
-"deleted {files}" => "slettede {files}",
+"'.' is an invalid file name." => "'.' er et ugyldigt filnavn.",
+"File name cannot be empty." => "Filnavnet kan ikke stå tomt.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.",
-"generating ZIP-file, it may take some time." => "genererer ZIP-fil, det kan tage lidt tid.",
+"Your storage is full, files can not be updated or synced anymore!" => "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Dit download forberedes. Dette kan tage lidt tid ved større filer.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kunne ikke uploade din fil, da det enten er en mappe eller er tom",
"Upload Error" => "Fejl ved upload",
"Close" => "Luk",
-"Pending" => "Afventer",
"1 file uploading" => "1 fil uploades",
"{count} files uploading" => "{count} filer uploades",
"Upload cancelled." => "Upload afbrudt.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.",
"URL cannot be empty." => "URLen kan ikke være tom.",
-"{count} files scanned" => "{count} filer skannet",
-"error while scanning" => "fejl under scanning",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud",
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Ændret",
@@ -40,6 +45,7 @@
"{count} folders" => "{count} mapper",
"1 file" => "1 fil",
"{count} files" => "{count} filer",
+"Upload" => "Upload",
"File handling" => "Filhåndtering",
"Maximum upload size" => "Maksimal upload-størrelse",
"max. possible: " => "max. mulige: ",
@@ -52,10 +58,10 @@
"Text file" => "Tekstfil",
"Folder" => "Mappe",
"From link" => "Fra link",
-"Upload" => "Upload",
"Cancel upload" => "Fortryd upload",
"Nothing in here. Upload something!" => "Her er tomt. Upload noget!",
"Download" => "Download",
+"Unshare" => "Fjern deling",
"Upload too large" => "Upload for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.",
"Files are being scanned, please wait." => "Filerne bliver indlæst, vent venligst.",
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 1c0af30be5c..fa202c8c2b5 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits.",
+"Could not move %s" => "Konnte %s nicht verschieben",
+"Unable to rename file" => "Konnte Datei nicht umbenennen",
"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
"There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
@@ -7,12 +10,12 @@
"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
"Missing a temporary folder" => "Temporärer Ordner fehlt.",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
-"Not enough space available" => "Nicht genug Speicherplatz verfügbar",
+"Not enough storage available" => "Nicht genug Speicherplatz verfügbar",
"Invalid directory." => "Ungültiges Verzeichnis.",
"Files" => "Dateien",
-"Unshare" => "Nicht mehr freigeben",
"Delete" => "Löschen",
"Rename" => "Umbenennen",
+"Pending" => "Ausstehend",
"{new_name} already exists" => "{new_name} existiert bereits",
"replace" => "ersetzen",
"suggest name" => "Name vorschlagen",
@@ -20,23 +23,22 @@
"replaced {new_name}" => "{new_name} wurde ersetzt",
"undo" => "rückgängig machen",
"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
-"unshared {files}" => "Freigabe von {files} aufgehoben",
-"deleted {files}" => "{files} gelöscht",
+"perform delete operation" => "Löschvorgang ausführen",
"'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
"File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.",
-"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
+"Your storage is full, files can not be updated or synced anymore!" => "Ihr Speicherplatz ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicherplatz ist fast aufgebraucht ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.",
"Upload Error" => "Fehler beim Upload",
"Close" => "Schließen",
-"Pending" => "Ausstehend",
"1 file uploading" => "Eine Datei wird hoch geladen",
"{count} files uploading" => "{count} Dateien werden hochgeladen",
"Upload cancelled." => "Upload abgebrochen.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.",
"URL cannot be empty." => "Die URL darf nicht leer sein.",
-"{count} files scanned" => "{count} Dateien wurden gescannt",
-"error while scanning" => "Fehler beim Scannen",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten.",
"Name" => "Name",
"Size" => "Größe",
"Modified" => "Bearbeitet",
@@ -44,6 +46,7 @@
"{count} folders" => "{count} Ordner",
"1 file" => "1 Datei",
"{count} files" => "{count} Dateien",
+"Upload" => "Hochladen",
"File handling" => "Dateibehandlung",
"Maximum upload size" => "Maximale Upload-Größe",
"max. possible: " => "maximal möglich:",
@@ -56,12 +59,13 @@
"Text file" => "Textdatei",
"Folder" => "Ordner",
"From link" => "Von einem Link",
-"Upload" => "Hochladen",
"Cancel upload" => "Upload abbrechen",
"Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!",
"Download" => "Herunterladen",
+"Unshare" => "Nicht mehr freigeben",
"Upload too large" => "Upload zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
-"Current scanning" => "Scanne"
+"Current scanning" => "Scanne",
+"Upgrading filesystem cache..." => "Dateisystem-Cache wird aktualisiert ..."
);
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index a7526d35646..0dfc19ff01b 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits",
+"Could not move %s" => "Konnte %s nicht verschieben",
+"Unable to rename file" => "Konnte Datei nicht umbenennen",
"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
"There is no error, the file uploaded with success" => "Es sind keine Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
@@ -7,12 +10,13 @@
"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
"Missing a temporary folder" => "Der temporäre Ordner fehlt.",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
-"Not enough space available" => "Nicht genügend Speicherplatz verfügbar",
+"Not enough storage available" => "Nicht genug Speicher vorhanden.",
"Invalid directory." => "Ungültiges Verzeichnis.",
"Files" => "Dateien",
-"Unshare" => "Nicht mehr freigeben",
+"Delete permanently" => "Entgültig löschen",
"Delete" => "Löschen",
"Rename" => "Umbenennen",
+"Pending" => "Ausstehend",
"{new_name} already exists" => "{new_name} existiert bereits",
"replace" => "ersetzen",
"suggest name" => "Name vorschlagen",
@@ -20,23 +24,22 @@
"replaced {new_name}" => "{new_name} wurde ersetzt",
"undo" => "rückgängig machen",
"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
-"unshared {files}" => "Freigabe für {files} beendet",
-"deleted {files}" => "{files} gelöscht",
+"perform delete operation" => "Führe das Löschen aus",
"'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
"File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.",
-"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
+"Your storage is full, files can not be updated or synced anymore!" => "Ihr Speicher ist voll. Daher können keine Dateien mehr aktualisiert oder synchronisiert werden!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien einen Moment dauern.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.",
"Upload Error" => "Fehler beim Upload",
"Close" => "Schließen",
-"Pending" => "Ausstehend",
"1 file uploading" => "1 Datei wird hochgeladen",
"{count} files uploading" => "{count} Dateien wurden hochgeladen",
"Upload cancelled." => "Upload abgebrochen.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
"URL cannot be empty." => "Die URL darf nicht leer sein.",
-"{count} files scanned" => "{count} Dateien wurden gescannt",
-"error while scanning" => "Fehler beim Scannen",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten",
"Name" => "Name",
"Size" => "Größe",
"Modified" => "Bearbeitet",
@@ -44,6 +47,7 @@
"{count} folders" => "{count} Ordner",
"1 file" => "1 Datei",
"{count} files" => "{count} Dateien",
+"Upload" => "Hochladen",
"File handling" => "Dateibehandlung",
"Maximum upload size" => "Maximale Upload-Größe",
"max. possible: " => "maximal möglich:",
@@ -56,12 +60,13 @@
"Text file" => "Textdatei",
"Folder" => "Ordner",
"From link" => "Von einem Link",
-"Upload" => "Hochladen",
"Cancel upload" => "Upload abbrechen",
"Nothing in here. Upload something!" => "Alles leer. Bitte laden Sie etwas hoch!",
"Download" => "Herunterladen",
+"Unshare" => "Nicht mehr freigeben",
"Upload too large" => "Der Upload ist zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
-"Current scanning" => "Scanne"
+"Current scanning" => "Scanne",
+"Upgrading filesystem cache..." => "Aktualisiere den Dateisystem-Cache"
);
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index 3c1ac538091..2a110afa960 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Αδυναμία μετακίνησης του %s - υπάÏχει ήδη αÏχείο με αυτό το όνομα",
+"Could not move %s" => "Αδυναμία μετακίνησης του %s",
+"Unable to rename file" => "Αδυναμία μετονομασίας αÏχείου",
"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:",
@@ -7,10 +10,13 @@
"No file was uploaded" => "Κανένα αÏχείο δεν στάλθηκε",
"Missing a temporary folder" => "Λείπει ο Ï€ÏοσωÏινός φάκελος",
"Failed to write to disk" => "Αποτυχία εγγÏαφής στο δίσκο",
+"Not enough storage available" => "Μη επαÏκής διαθέσιμος αποθηκευτικός χώÏος",
+"Invalid directory." => "Μη έγκυÏος φάκελος.",
"Files" => "ΑÏχεία",
-"Unshare" => "Διακοπή κοινής χÏήσης",
+"Delete permanently" => "Μόνιμη διαγÏαφή",
"Delete" => "ΔιαγÏαφή",
"Rename" => "Μετονομασία",
+"Pending" => "ΕκκÏεμεί",
"{new_name} already exists" => "{new_name} υπάÏχει ήδη",
"replace" => "αντικατέστησε",
"suggest name" => "συνιστώμενο όνομα",
@@ -18,21 +24,22 @@
"replaced {new_name}" => "{new_name} αντικαταστάθηκε",
"undo" => "αναίÏεση",
"replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
-"unshared {files}" => "μη διαμοιÏασμένα {files}",
-"deleted {files}" => "διαγÏαμμένα {files}",
+"perform delete operation" => "εκτέλεση διαδικασία διαγÏαφής",
+"'.' is an invalid file name." => "'.' είναι μη έγκυÏο όνομα αÏχείου.",
+"File name cannot be empty." => "Το όνομα αÏχείου δεν Ï€Ïέπει να είναι κενό.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυÏο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτÏέπονται.",
-"generating ZIP-file, it may take some time." => "παÏαγωγή αÏχείου ZIP, ίσως διαÏκέσει αÏκετά.",
+"Your storage is full, files can not be updated or synced anymore!" => "Ο αποθηκευτικός σας χώÏος είναι γεμάτος, τα αÏχεία δεν μποÏοÏν να ενημεÏωθοÏν ή να συγχÏονιστοÏν πια!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Ο αποθηκευτικός χώÏος είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Η λήψη Ï€Ïοετοιμάζεται. Αυτό μποÏεί να πάÏει ÏŽÏα εάν τα αÏχεία έχουν μεγάλο μέγεθος.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην αποστολή του αÏχείου σας Î±Ï†Î¿Ï ÎµÎ¯Î½Î±Î¹ φάκελος ή έχει 0 bytes",
"Upload Error" => "Σφάλμα Αποστολής",
"Close" => "Κλείσιμο",
-"Pending" => "ΕκκÏεμεί",
"1 file uploading" => "1 αÏχείο ανεβαίνει",
"{count} files uploading" => "{count} αÏχεία ανεβαίνουν",
"Upload cancelled." => "Η αποστολή ακυÏώθηκε.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αÏχείου βÏίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυÏώσει την αποστολή.",
"URL cannot be empty." => "Η URL δεν Ï€Ïέπει να είναι κενή.",
-"{count} files scanned" => "{count} αÏχεία ανιχνεÏτηκαν",
-"error while scanning" => "σφάλμα κατά την ανίχνευση",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Μη έγκυÏο όνομα φακέλου. Η χÏήση του 'ΚοινόχÏηστος' χÏησιμοποιείται από ο Owncloud",
"Name" => "Όνομα",
"Size" => "Μέγεθος",
"Modified" => "ΤÏοποποιήθηκε",
@@ -40,6 +47,7 @@
"{count} folders" => "{count} φάκελοι",
"1 file" => "1 αÏχείο",
"{count} files" => "{count} αÏχεία",
+"Upload" => "Αποστολή",
"File handling" => "ΔιαχείÏιση αÏχείων",
"Maximum upload size" => "Μέγιστο μέγεθος αποστολής",
"max. possible: " => "μέγιστο δυνατό:",
@@ -52,12 +60,13 @@
"Text file" => "ΑÏχείο κειμένου",
"Folder" => "Φάκελος",
"From link" => "Από σÏνδεσμο",
-"Upload" => "Αποστολή",
"Cancel upload" => "ΑκÏÏωση αποστολής",
"Nothing in here. Upload something!" => "Δεν υπάÏχει τίποτα εδώ. Ανέβασε κάτι!",
"Download" => "Λήψη",
+"Unshare" => "Διακοπή κοινής χÏήσης",
"Upload too large" => "Î Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ αÏχείο Ï€Ïος αποστολή",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Τα αÏχεία που Ï€Ïοσπαθείτε να ανεβάσετε υπεÏβαίνουν το μέγιστο μέγεθος αποστολής αÏχείων σε αυτόν τον διακομιστή.",
"Files are being scanned, please wait." => "Τα αÏχεία σαÏώνονται, παÏακαλώ πεÏιμένετε",
-"Current scanning" => "ΤÏέχουσα αναζήτηση "
+"Current scanning" => "ΤÏέχουσα αναζήτηση ",
+"Upgrading filesystem cache..." => "Αναβάθμιση μνήμης cache του συστήματος αÏχείων..."
);
diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php
index 92c03ee8826..b943244f1ae 100644
--- a/apps/files/l10n/eo.php
+++ b/apps/files/l10n/eo.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas",
+"Could not move %s" => "Ne eblis movi %s",
+"Unable to rename file" => "Ne eblis alinomigi dosieron",
"No file was uploaded. Unknown error" => "Neniu dosiero alÅutiÄis. Nekonata eraro.",
"There is no error, the file uploaded with success" => "Ne estas eraro, la dosiero alÅutiÄis sukcese",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "La dosiero alÅutita superas la regulon upload_max_filesize el php.ini: ",
@@ -7,10 +10,11 @@
"No file was uploaded" => "Neniu dosiero estas alÅutita",
"Missing a temporary folder" => "Mankas tempa dosierujo",
"Failed to write to disk" => "Malsukcesis skribo al disko",
+"Invalid directory." => "Nevalida dosierujo.",
"Files" => "Dosieroj",
-"Unshare" => "Malkunhavigi",
"Delete" => "Forigi",
"Rename" => "Alinomigi",
+"Pending" => "Traktotaj",
"{new_name} already exists" => "{new_name} jam ekzistas",
"replace" => "anstataÅ­igi",
"suggest name" => "sugesti nomon",
@@ -18,21 +22,19 @@
"replaced {new_name}" => "anstataÅ­iÄis {new_name}",
"undo" => "malfari",
"replaced {new_name} with {old_name}" => "anstataÅ­iÄis {new_name} per {old_name}",
-"unshared {files}" => "malkunhaviÄis {files}",
-"deleted {files}" => "foriÄis {files}",
+"'.' is an invalid file name." => "'.' ne estas valida dosiernomo.",
+"File name cannot be empty." => "Dosiernomo devas ne malpleni.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nevalida nomo: “\\â€, “/â€, “<â€, “>â€, “:â€, “\"â€, “|â€, “?†kaj “*†ne permesatas.",
-"generating ZIP-file, it may take some time." => "generanta ZIP-dosiero, Äi povas daÅ­ri iom da tempo",
+"Your download is being prepared. This might take some time if the files are big." => "Via elÅuto pretiÄatas. Ĉi tio povas daÅ­ri iom da tempo se la dosieroj grandas.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alÅuti vian dosieron ĉar Äi estas dosierujo aÅ­ havas 0 duumokojn",
"Upload Error" => "AlÅuta eraro",
"Close" => "Fermi",
-"Pending" => "Traktotaj",
"1 file uploading" => "1 dosiero estas alÅutata",
"{count} files uploading" => "{count} dosieroj alÅutatas",
"Upload cancelled." => "La alÅuto nuliÄis.",
"File upload is in progress. Leaving the page now will cancel the upload." => "DosieralÅuto plenumiÄas. Lasi la paÄon nun nuligus la alÅuton.",
"URL cannot be empty." => "URL ne povas esti malplena.",
-"{count} files scanned" => "{count} dosieroj skaniÄis",
-"error while scanning" => "eraro dum skano",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nevalida dosierujnomo. Uzo de “Shared†rezervatas de Owncloud.",
"Name" => "Nomo",
"Size" => "Grando",
"Modified" => "Modifita",
@@ -40,6 +42,7 @@
"{count} folders" => "{count} dosierujoj",
"1 file" => "1 dosiero",
"{count} files" => "{count} dosierujoj",
+"Upload" => "AlÅuti",
"File handling" => "Dosieradministro",
"Maximum upload size" => "Maksimuma alÅutogrando",
"max. possible: " => "maks. ebla: ",
@@ -52,10 +55,10 @@
"Text file" => "Tekstodosiero",
"Folder" => "Dosierujo",
"From link" => "El ligilo",
-"Upload" => "AlÅuti",
"Cancel upload" => "Nuligi alÅuton",
"Nothing in here. Upload something!" => "Nenio estas ĉi tie. AlÅutu ion!",
"Download" => "ElÅuti",
+"Unshare" => "Malkunhavigi",
"Upload too large" => "ElÅuto tro larÄa",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alÅuti, transpasas la maksimuman grandon por dosieralÅutoj en ĉi tiu servilo.",
"Files are being scanned, please wait." => "Dosieroj estas skanataj, bonvolu atendi.",
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index 7489d3b555e..4ebbdb21e34 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "No se puede mover %s - Ya existe un archivo con ese nombre",
+"Could not move %s" => "No se puede mover %s",
+"Unable to rename file" => "No se puede renombrar el archivo",
"No file was uploaded. Unknown error" => "Fallo no se subió el fichero",
"There is no error, the file uploaded with success" => "No se ha producido ningún error, el archivo se ha subido con éxito",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini",
@@ -7,12 +10,13 @@
"No file was uploaded" => "No se ha subido ningún archivo",
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "La escritura en disco ha fallado",
-"Not enough space available" => "No hay suficiente espacio disponible",
+"Not enough storage available" => "No hay suficiente espacio disponible",
"Invalid directory." => "Directorio invalido.",
"Files" => "Archivos",
-"Unshare" => "Dejar de compartir",
+"Delete permanently" => "Eliminar permanentemente",
"Delete" => "Eliminar",
"Rename" => "Renombrar",
+"Pending" => "Pendiente",
"{new_name} already exists" => "{new_name} ya existe",
"replace" => "reemplazar",
"suggest name" => "sugerir nombre",
@@ -20,23 +24,22 @@
"replaced {new_name}" => "reemplazado {new_name}",
"undo" => "deshacer",
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
-"unshared {files}" => "{files} descompartidos",
-"deleted {files}" => "{files} eliminados",
+"perform delete operation" => "Eliminar",
"'.' is an invalid file name." => "'.' es un nombre de archivo inválido.",
"File name cannot be empty." => "El nombre de archivo no puede estar vacío.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre Invalido, \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ",
-"generating ZIP-file, it may take some time." => "generando un fichero ZIP, puede llevar un tiempo.",
+"Your storage is full, files can not be updated or synced anymore!" => "Su almacenamiento esta lleno, los archivos no pueden ser mas actualizados o sincronizados!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Su almacenamiento esta lleno en un ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Tu descarga esta siendo preparada. Esto puede tardar algun tiempo si los archivos son muy grandes.",
"Unable to upload your file as it is a directory or has 0 bytes" => "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes",
"Upload Error" => "Error al subir el archivo",
"Close" => "cerrrar",
-"Pending" => "Pendiente",
"1 file uploading" => "subiendo 1 archivo",
"{count} files uploading" => "Subiendo {count} archivos",
"Upload cancelled." => "Subida cancelada.",
"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida.",
"URL cannot be empty." => "La URL no puede estar vacía.",
-"{count} files scanned" => "{count} archivos escaneados",
-"error while scanning" => "error escaneando",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
@@ -44,6 +47,7 @@
"{count} folders" => "{count} carpetas",
"1 file" => "1 archivo",
"{count} files" => "{count} archivos",
+"Upload" => "Subir",
"File handling" => "Tratamiento de archivos",
"Maximum upload size" => "Tamaño máximo de subida",
"max. possible: " => "máx. posible:",
@@ -56,12 +60,14 @@
"Text file" => "Archivo de texto",
"Folder" => "Carpeta",
"From link" => "Desde el enlace",
-"Upload" => "Subir",
+"Trash bin" => "Papelera de reciclaje",
"Cancel upload" => "Cancelar subida",
"Nothing in here. Upload something!" => "Aquí no hay nada. ¡Sube algo!",
"Download" => "Descargar",
+"Unshare" => "Dejar de compartir",
"Upload too large" => "El archivo es demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor.",
"Files are being scanned, please wait." => "Se están escaneando los archivos, por favor espere.",
-"Current scanning" => "Ahora escaneando"
+"Current scanning" => "Ahora escaneando",
+"Upgrading filesystem cache..." => "Actualizando cache de archivos de sistema"
);
diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php
index 6863f701e65..edc732b4675 100644
--- a/apps/files/l10n/es_AR.php
+++ b/apps/files/l10n/es_AR.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "No se pudo mover %s - Un archivo con este nombre ya existe",
+"Could not move %s" => "No se pudo mover %s ",
+"Unable to rename file" => "No fue posible cambiar el nombre al archivo",
"No file was uploaded. Unknown error" => "El archivo no fue subido. Error desconocido",
"There is no error, the file uploaded with success" => "No se han producido errores, el archivo se ha subido con éxito",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentás subir excede el tamaño definido por upload_max_filesize en el php.ini:",
@@ -7,12 +10,12 @@
"No file was uploaded" => "El archivo no fue subido",
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "Error al escribir en el disco",
-"Not enough space available" => "No hay suficiente espacio disponible",
+"Not enough storage available" => "No hay suficiente capacidad de almacenamiento",
"Invalid directory." => "Directorio invalido.",
"Files" => "Archivos",
-"Unshare" => "Dejar de compartir",
"Delete" => "Borrar",
"Rename" => "Cambiar nombre",
+"Pending" => "Pendiente",
"{new_name} already exists" => "{new_name} ya existe",
"replace" => "reemplazar",
"suggest name" => "sugerir nombre",
@@ -20,21 +23,22 @@
"replaced {new_name}" => "reemplazado {new_name}",
"undo" => "deshacer",
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
-"unshared {files}" => "{files} se dejaron de compartir",
-"deleted {files}" => "{files} borrados",
+"perform delete operation" => "Eliminar",
+"'.' is an invalid file name." => "'.' es un nombre de archivo inválido.",
+"File name cannot be empty." => "El nombre del archivo no puede quedar vacío.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos.",
-"generating ZIP-file, it may take some time." => "generando un archivo ZIP, puede llevar un tiempo.",
+"Your storage is full, files can not be updated or synced anymore!" => "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando",
+"Your storage is almost full ({usedSpacePercent}%)" => "El almacenamiento está casi lleno ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Tu descarga esta siendo preparada. Esto puede tardar algun tiempo si los archivos son muy grandes.",
"Unable to upload your file as it is a directory or has 0 bytes" => "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes",
"Upload Error" => "Error al subir el archivo",
"Close" => "Cerrar",
-"Pending" => "Pendiente",
"1 file uploading" => "Subiendo 1 archivo",
"{count} files uploading" => "Subiendo {count} archivos",
"Upload cancelled." => "La subida fue cancelada",
"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.",
"URL cannot be empty." => "La URL no puede estar vacía",
-"{count} files scanned" => "{count} archivos escaneados",
-"error while scanning" => "error mientras se escaneaba",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
@@ -42,6 +46,7 @@
"{count} folders" => "{count} directorios",
"1 file" => "1 archivo",
"{count} files" => "{count} archivos",
+"Upload" => "Subir",
"File handling" => "Tratamiento de archivos",
"Maximum upload size" => "Tamaño máximo de subida",
"max. possible: " => "máx. posible:",
@@ -54,12 +59,13 @@
"Text file" => "Archivo de texto",
"Folder" => "Carpeta",
"From link" => "Desde enlace",
-"Upload" => "Subir",
"Cancel upload" => "Cancelar subida",
"Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!",
"Download" => "Descargar",
+"Unshare" => "Dejar de compartir",
"Upload too large" => "El archivo es demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que intentás subir sobrepasan el tamaño máximo ",
"Files are being scanned, please wait." => "Se están escaneando los archivos, por favor esperá.",
-"Current scanning" => "Escaneo actual"
+"Current scanning" => "Escaneo actual",
+"Upgrading filesystem cache..." => "Actualizando el cache del sistema de archivos"
);
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index 6996b0a7918..98af371e071 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -7,9 +7,9 @@
"Missing a temporary folder" => "Ajutiste failide kaust puudub",
"Failed to write to disk" => "Kettale kirjutamine ebaõnnestus",
"Files" => "Failid",
-"Unshare" => "Lõpeta jagamine",
"Delete" => "Kustuta",
"Rename" => "ümber",
+"Pending" => "Ootel",
"{new_name} already exists" => "{new_name} on juba olemas",
"replace" => "asenda",
"suggest name" => "soovita nime",
@@ -17,21 +17,15 @@
"replaced {new_name}" => "asendatud nimega {new_name}",
"undo" => "tagasi",
"replaced {new_name} with {old_name}" => "asendas nime {old_name} nimega {new_name}",
-"unshared {files}" => "jagamata {files}",
-"deleted {files}" => "kustutatud {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.",
-"generating ZIP-file, it may take some time." => "ZIP-faili loomine, see võib veidi aega võtta.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti",
"Upload Error" => "Üleslaadimise viga",
"Close" => "Sulge",
-"Pending" => "Ootel",
"1 file uploading" => "1 faili üleslaadimisel",
"{count} files uploading" => "{count} faili üleslaadimist",
"Upload cancelled." => "Üleslaadimine tühistati.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.",
"URL cannot be empty." => "URL ei saa olla tühi.",
-"{count} files scanned" => "{count} faili skännitud",
-"error while scanning" => "viga skännimisel",
"Name" => "Nimi",
"Size" => "Suurus",
"Modified" => "Muudetud",
@@ -39,6 +33,7 @@
"{count} folders" => "{count} kausta",
"1 file" => "1 fail",
"{count} files" => "{count} faili",
+"Upload" => "Lae üles",
"File handling" => "Failide käsitlemine",
"Maximum upload size" => "Maksimaalne üleslaadimise suurus",
"max. possible: " => "maks. võimalik: ",
@@ -51,10 +46,10 @@
"Text file" => "Tekstifail",
"Folder" => "Kaust",
"From link" => "Allikast",
-"Upload" => "Lae üles",
"Cancel upload" => "Tühista üleslaadimine",
"Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!",
"Download" => "Lae alla",
+"Unshare" => "Lõpeta jagamine",
"Upload too large" => "Üleslaadimine on liiga suur",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.",
"Files are being scanned, please wait." => "Faile skannitakse, palun oota",
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index 96f59a668e9..b62b1c7bf79 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da",
+"Could not move %s" => "Ezin dira fitxategiak mugitu %s",
+"Unable to rename file" => "Ezin izan da fitxategia berrizendatu",
"No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna",
"There is no error, the file uploaded with success" => "Ez da arazorik izan, fitxategia ongi igo da",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:",
@@ -7,10 +10,12 @@
"No file was uploaded" => "Ez da fitxategirik igo",
"Missing a temporary folder" => "Aldi baterako karpeta falta da",
"Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
+"Not enough storage available" => "Ez dago behar aina leku erabilgarri,",
+"Invalid directory." => "Baliogabeko karpeta.",
"Files" => "Fitxategiak",
-"Unshare" => "Ez elkarbanatu",
"Delete" => "Ezabatu",
"Rename" => "Berrizendatu",
+"Pending" => "Zain",
"{new_name} already exists" => "{new_name} dagoeneko existitzen da",
"replace" => "ordeztu",
"suggest name" => "aholkatu izena",
@@ -18,21 +23,21 @@
"replaced {new_name}" => "ordezkatua {new_name}",
"undo" => "desegin",
"replaced {new_name} with {old_name}" => " {new_name}-k {old_name} ordezkatu du",
-"unshared {files}" => "elkarbanaketa utzita {files}",
-"deleted {files}" => "ezabatuta {files}",
+"'.' is an invalid file name." => "'.' ez da fitxategi izen baliogarria.",
+"File name cannot be empty." => "Fitxategi izena ezin da hutsa izan.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta.",
-"generating ZIP-file, it may take some time." => "ZIP-fitxategia sortzen ari da, denbora har dezake",
+"Your storage is full, files can not be updated or synced anymore!" => "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})",
+"Your download is being prepared. This might take some time if the files are big." => "Zure deskarga prestatu egin behar da. Denbora bat har lezake fitxategiak handiak badira. ",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu",
"Upload Error" => "Igotzean errore bat suertatu da",
"Close" => "Itxi",
-"Pending" => "Zain",
"1 file uploading" => "fitxategi 1 igotzen",
"{count} files uploading" => "{count} fitxategi igotzen",
"Upload cancelled." => "Igoera ezeztatuta",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.",
"URL cannot be empty." => "URLa ezin da hutsik egon.",
-"{count} files scanned" => "{count} fitxategi eskaneatuta",
-"error while scanning" => "errore bat egon da eskaneatzen zen bitartean",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du",
"Name" => "Izena",
"Size" => "Tamaina",
"Modified" => "Aldatuta",
@@ -40,6 +45,7 @@
"{count} folders" => "{count} karpeta",
"1 file" => "fitxategi bat",
"{count} files" => "{count} fitxategi",
+"Upload" => "Igo",
"File handling" => "Fitxategien kudeaketa",
"Maximum upload size" => "Igo daitekeen gehienezko tamaina",
"max. possible: " => "max, posiblea:",
@@ -52,10 +58,10 @@
"Text file" => "Testu fitxategia",
"Folder" => "Karpeta",
"From link" => "Estekatik",
-"Upload" => "Igo",
"Cancel upload" => "Ezeztatu igoera",
"Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!",
"Download" => "Deskargatu",
+"Unshare" => "Ez elkarbanatu",
"Upload too large" => "Igotakoa handiegia da",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.",
"Files are being scanned, please wait." => "Fitxategiak eskaneatzen ari da, itxoin mezedez.",
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index 062df6a56b3..d4cbb99e10a 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -1,26 +1,48 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. ",
+"Could not move %s" => "%s نمی تواند حرکت کند ",
+"Unable to rename file" => "قادر به تغییر نام پرونده نیست.",
"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: " => "پرونده آپلود شده بیش ازدستور ماکزیمم_حجم ÙØ§ÛŒÙ„_برای آپلود در php.ini Ø§Ø³ØªÙØ§Ø¯Ù‡ کرده است.",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "حداکثر حجم مجاز برای بارگذاری از طریق HTML \nMAX_FILE_SIZE",
"The uploaded file was only partially uploaded" => "مقدار Ú©Ù…ÛŒ از ÙØ§ÛŒÙ„ بارگذاری شده",
"No file was uploaded" => "هیچ ÙØ§ÛŒÙ„ÛŒ بارگذاری نشده",
"Missing a temporary folder" => "یک پوشه موقت گم شده است",
"Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموÙÙ‚ بود",
+"Invalid directory." => "Ùهرست راهنما نامعتبر Ù…ÛŒ باشد.",
"Files" => "ÙØ§ÛŒÙ„ ها",
"Delete" => "پاک کردن",
"Rename" => "تغییرنام",
+"Pending" => "در انتظار",
+"{new_name} already exists" => "{نام _جدید} در حال حاضر وجود دارد.",
"replace" => "جایگزین",
+"suggest name" => "پیشنهاد نام",
"cancel" => "لغو",
+"replaced {new_name}" => "{نام _جدید} جایگزین شد ",
"undo" => "بازگشت",
-"generating ZIP-file, it may take some time." => "در حال ساخت ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ ممکن است زمان زیادی به طول بیانجامد",
+"replaced {new_name} with {old_name}" => "{نام_جدید} با { نام_قدیمی} جایگزین شد.",
+"'.' is an invalid file name." => "'.' یک نام پرونده نامعتبر است.",
+"File name cannot be empty." => "نام پرونده نمی تواند خالی باشد.",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "نام نامعتبر ، '\\', '/', '<', '>', ':', '\"', '|', '?' و '*' مجاز نمی باشند.",
+"Your download is being prepared. This might take some time if the files are big." => "دانلود شما در حال آماده شدن است. در صورتیکه پرونده ها بزرگ باشند ممکن است مدتی طول بکشد.",
"Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا ÙØ§ÛŒÙ„ یک پوشه است یا 0بایت دارد",
"Upload Error" => "خطا در بار گذاری",
"Close" => "بستن",
-"Pending" => "در انتظار",
+"1 file uploading" => "1 پرونده آپلود شد.",
+"{count} files uploading" => "{ شمار } ÙØ§ÛŒÙ„ های در حال آپلود",
"Upload cancelled." => "بار گذاری لغو شد",
+"File upload is in progress. Leaving the page now will cancel the upload." => "آپلودکردن پرونده در حال Ù¾ÛŒØ´Ø±ÙØª است. در صورت خروج از ØµÙØ­Ù‡ آپلود لغو میگردد. ",
+"URL cannot be empty." => "URL نمی تواند خالی باشد.",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "نام پوشه نامعتبر است. Ø§Ø³ØªÙØ§Ø¯Ù‡ از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است.",
"Name" => "نام",
"Size" => "اندازه",
"Modified" => "تغییر ÛŒØ§ÙØªÙ‡",
+"1 folder" => "1 پوشه",
+"{count} folders" => "{ شمار} پوشه ها",
+"1 file" => "1 پرونده",
+"{count} files" => "{ شمار } ÙØ§ÛŒÙ„ ها",
+"Upload" => "بارگذاری",
"File handling" => "اداره پرونده ها",
"Maximum upload size" => "حداکثر اندازه بارگزاری",
"max. possible: " => "حداکثرمقدارممکن:",
@@ -32,10 +54,11 @@
"New" => "جدید",
"Text file" => "ÙØ§ÛŒÙ„ متنی",
"Folder" => "پوشه",
-"Upload" => "بارگذاری",
+"From link" => "از پیوند",
"Cancel upload" => "متوق٠کردن بار گذاری",
"Nothing in here. Upload something!" => "اینجا هیچ چیز نیست.",
"Download" => "بارگیری",
+"Unshare" => "لغو اشتراک",
"Upload too large" => "حجم بارگذاری بسیار زیاد است",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ÙØ§ÛŒÙ„ها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر ÙØ§ÛŒÙ„ php,ini میتوان این محدودیت را برطر٠کرد",
"Files are being scanned, please wait." => "پرونده ها در حال بازرسی هستند Ù„Ø·ÙØ§ صبر کنید",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index 3847590c99e..cd7ce66dc44 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa",
+"Could not move %s" => "Kohteen %s siirto ei onnistunut",
+"Unable to rename file" => "Tiedoston nimeäminen uudelleen ei onnistunut",
"No file was uploaded. Unknown error" => "Tiedostoa ei lähetetty. Tuntematon virhe",
"There is no error, the file uploaded with success" => "Ei virheitä, tiedosto lähetettiin onnistuneesti",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Lähetetty tiedosto ylittää HTML-lomakkeessa määritetyn MAX_FILE_SIZE-arvon ylärajan",
@@ -6,25 +9,28 @@
"No file was uploaded" => "Yhtäkään tiedostoa ei lähetetty",
"Missing a temporary folder" => "Väliaikaiskansiota ei ole olemassa",
"Failed to write to disk" => "Levylle kirjoitus epäonnistui",
-"Not enough space available" => "Tilaa ei ole riittävästi",
+"Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä",
"Invalid directory." => "Virheellinen kansio.",
"Files" => "Tiedostot",
-"Unshare" => "Peru jakaminen",
+"Delete permanently" => "Poista pysyvästi",
"Delete" => "Poista",
"Rename" => "Nimeä uudelleen",
+"Pending" => "Odottaa",
"{new_name} already exists" => "{new_name} on jo olemassa",
"replace" => "korvaa",
"suggest name" => "ehdota nimeä",
"cancel" => "peru",
"undo" => "kumoa",
+"perform delete operation" => "suorita poistotoiminto",
"'.' is an invalid file name." => "'.' on virheellinen nimi tiedostolle.",
"File name cannot be empty." => "Tiedoston nimi ei voi olla tyhjä.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Virheellinen nimi, merkit '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' eivät ole sallittuja.",
-"generating ZIP-file, it may take some time." => "luodaan ZIP-tiedostoa, tämä saattaa kestää hetken.",
+"Your storage is full, files can not be updated or synced anymore!" => "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Tallennustila on melkein loppu ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot ovat suuria kooltaan.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio",
"Upload Error" => "Lähetysvirhe.",
"Close" => "Sulje",
-"Pending" => "Odottaa",
"Upload cancelled." => "Lähetys peruttu.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.",
"URL cannot be empty." => "Verkko-osoite ei voi olla tyhjä",
@@ -35,6 +41,7 @@
"{count} folders" => "{count} kansiota",
"1 file" => "1 tiedosto",
"{count} files" => "{count} tiedostoa",
+"Upload" => "Lähetä",
"File handling" => "Tiedostonhallinta",
"Maximum upload size" => "Lähetettävän tiedoston suurin sallittu koko",
"max. possible: " => "suurin mahdollinen:",
@@ -47,12 +54,14 @@
"Text file" => "Tekstitiedosto",
"Folder" => "Kansio",
"From link" => "Linkistä",
-"Upload" => "Lähetä",
+"Trash bin" => "Roskakori",
"Cancel upload" => "Peru lähetys",
"Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!",
"Download" => "Lataa",
+"Unshare" => "Peru jakaminen",
"Upload too large" => "Lähetettävä tiedosto on liian suuri",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.",
"Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki.",
-"Current scanning" => "Tämänhetkinen tutkinta"
+"Current scanning" => "Tämänhetkinen tutkinta",
+"Upgrading filesystem cache..." => "Päivitetään tiedostojärjestelmän välimuistia..."
);
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index 9e911324d25..3e8945f3454 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà",
+"Could not move %s" => "Impossible de déplacer %s",
+"Unable to rename file" => "Impossible de renommer le fichier",
"No file was uploaded. Unknown error" => "Aucun fichier n'a été chargé. Erreur inconnue",
"There is no error, the file uploaded with success" => "Aucune erreur, le fichier a été téléversé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:",
@@ -7,12 +10,13 @@
"No file was uploaded" => "Aucun fichier n'a été téléversé",
"Missing a temporary folder" => "Il manque un répertoire temporaire",
"Failed to write to disk" => "Erreur d'écriture sur le disque",
-"Not enough space available" => "Espace disponible insuffisant",
+"Not enough storage available" => "Plus assez d'espace de stockage disponible",
"Invalid directory." => "Dossier invalide.",
"Files" => "Fichiers",
-"Unshare" => "Ne plus partager",
+"Delete permanently" => "Supprimer de façon définitive",
"Delete" => "Supprimer",
"Rename" => "Renommer",
+"Pending" => "En cours",
"{new_name} already exists" => "{new_name} existe déjà",
"replace" => "remplacer",
"suggest name" => "Suggérer un nom",
@@ -20,24 +24,22 @@
"replaced {new_name}" => "{new_name} a été remplacé",
"undo" => "annuler",
"replaced {new_name} with {old_name}" => "{new_name} a été remplacé par {old_name}",
-"unshared {files}" => "Fichiers non partagés : {files}",
-"deleted {files}" => "Fichiers supprimés : {files}",
+"perform delete operation" => "effectuer l'opération de suppression",
"'.' is an invalid file name." => "'.' n'est pas un nom de fichier valide.",
"File name cannot be empty." => "Le nom de fichier ne peut être vide.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.",
-"generating ZIP-file, it may take some time." => "Fichier ZIP en cours d'assemblage ; cela peut prendre du temps.",
+"Your storage is full, files can not be updated or synced anymore!" => "Votre espage de stockage est plein, les fichiers ne peuvent plus être téléversés ou synchronisés !",
+"Your storage is almost full ({usedSpacePercent}%)" => "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet.",
"Upload Error" => "Erreur de chargement",
"Close" => "Fermer",
-"Pending" => "En cours",
"1 file uploading" => "1 fichier en cours de téléchargement",
"{count} files uploading" => "{count} fichiers téléversés",
"Upload cancelled." => "Chargement annulé.",
"File upload is in progress. Leaving the page now will cancel the upload." => "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
"URL cannot be empty." => "L'URL ne peut-être vide",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud",
-"{count} files scanned" => "{count} fichiers indexés",
-"error while scanning" => "erreur lors de l'indexation",
"Name" => "Nom",
"Size" => "Taille",
"Modified" => "Modifié",
@@ -45,6 +47,7 @@
"{count} folders" => "{count} dossiers",
"1 file" => "1 fichier",
"{count} files" => "{count} fichiers",
+"Upload" => "Envoyer",
"File handling" => "Gestion des fichiers",
"Maximum upload size" => "Taille max. d'envoi",
"max. possible: " => "Max. possible :",
@@ -57,12 +60,14 @@
"Text file" => "Fichier texte",
"Folder" => "Dossier",
"From link" => "Depuis le lien",
-"Upload" => "Envoyer",
+"Trash bin" => "Corbeille",
"Cancel upload" => "Annuler l'envoi",
"Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)",
"Download" => "Télécharger",
+"Unshare" => "Ne plus partager",
"Upload too large" => "Fichier trop volumineux",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.",
"Files are being scanned, please wait." => "Les fichiers sont en cours d'analyse, veuillez patienter.",
-"Current scanning" => "Analyse en cours"
+"Current scanning" => "Analyse en cours",
+"Upgrading filesystem cache..." => "Mise à niveau du cache du système de fichier"
);
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 5bd30e95d17..e2a4c2f592b 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -1,40 +1,45 @@
<?php $TRANSLATIONS = array(
-"No file was uploaded. Unknown error" => "Non se subiu ningún ficheiro. Erro descoñecido.",
-"There is no error, the file uploaded with success" => "Non hai erros. O ficheiro enviouse correctamente",
-"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini",
-"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O ficheiro enviado supera a directiva MAX_FILE_SIZE que foi indicada no formulario HTML",
+"Could not move %s - File with this name already exists" => "Non se moveu %s - Xa existe un ficheiro con ese nome.",
+"Could not move %s" => "Non foi posíbel mover %s",
+"Unable to rename file" => "Non é posíbel renomear o ficheiro",
+"No file was uploaded. Unknown error" => "Non foi enviado ningún ficheiro. Produciuse un erro descoñecido.",
+"There is no error, the file uploaded with success" => "Non se produciu ningún erro. O ficheiro enviouse correctamente",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro enviado excede a directiva indicada por upload_max_filesize de php.ini:",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O ficheiro enviado excede a directiva MAX_FILE_SIZE que foi indicada no formulario HTML",
"The uploaded file was only partially uploaded" => "O ficheiro enviado foi só parcialmente enviado",
"No file was uploaded" => "Non se enviou ningún ficheiro",
"Missing a temporary folder" => "Falta un cartafol temporal",
-"Failed to write to disk" => "Erro ao escribir no disco",
-"Not enough space available" => "O espazo dispoñíbel é insuficiente",
+"Failed to write to disk" => "Produciuse un erro ao escribir no disco",
+"Not enough storage available" => "Non hai espazo de almacenamento abondo",
"Invalid directory." => "O directorio é incorrecto.",
"Files" => "Ficheiros",
-"Unshare" => "Deixar de compartir",
+"Delete permanently" => "Eliminar permanentemente",
"Delete" => "Eliminar",
-"Rename" => "Mudar o nome",
+"Rename" => "Renomear",
+"Pending" => "Pendentes",
"{new_name} already exists" => "xa existe un {new_name}",
"replace" => "substituír",
"suggest name" => "suxerir nome",
"cancel" => "cancelar",
"replaced {new_name}" => "substituír {new_name}",
"undo" => "desfacer",
-"replaced {new_name} with {old_name}" => "substituír {new_name} polo {old_name}",
-"unshared {files}" => "{files} sen compartir",
-"deleted {files}" => "{files} eliminados",
-"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non válido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non se permiten.",
-"generating ZIP-file, it may take some time." => "xerando un ficheiro ZIP, o que pode levar un anaco.",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes",
-"Upload Error" => "Erro na subida",
+"replaced {new_name} with {old_name}" => "substituír {new_name} por {old_name}",
+"perform delete operation" => "realizar a operación de eliminación",
+"'.' is an invalid file name." => "«.» é un nome de ficheiro incorrecto",
+"File name cannot be empty." => "O nome de ficheiro non pode estar baleiro",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».",
+"Your storage is full, files can not be updated or synced anymore!" => "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!",
+"Your storage is almost full ({usedSpacePercent}%)" => "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Non foi posíbel enviar o ficheiro pois ou é un directorio ou ten 0 bytes",
+"Upload Error" => "Produciuse un erro no envío",
"Close" => "Pechar",
-"Pending" => "Pendentes",
-"1 file uploading" => "1 ficheiro subíndose",
-"{count} files uploading" => "{count} ficheiros subíndose",
-"Upload cancelled." => "Subida cancelada.",
-"File upload is in progress. Leaving the page now will cancel the upload." => "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida.",
-"URL cannot be empty." => "URL non pode quedar baleiro.",
-"{count} files scanned" => "{count} ficheiros escaneados",
-"error while scanning" => "erro mentres analizaba",
+"1 file uploading" => "Enviándose 1 ficheiro",
+"{count} files uploading" => "Enviandose {count} ficheiros",
+"Upload cancelled." => "Envío cancelado.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío.",
+"URL cannot be empty." => "O URL non pode quedar baleiro.",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de cartafol incorrecto. O uso de «Shared» está reservado por Owncloud",
"Name" => "Nome",
"Size" => "Tamaño",
"Modified" => "Modificado",
@@ -42,24 +47,27 @@
"{count} folders" => "{count} cartafoles",
"1 file" => "1 ficheiro",
"{count} files" => "{count} ficheiros",
+"Upload" => "Enviar",
"File handling" => "Manexo de ficheiro",
-"Maximum upload size" => "Tamaño máximo de envío",
-"max. possible: " => "máx. posible: ",
+"Maximum upload size" => "Tamaño máximo do envío",
+"max. possible: " => "máx. posíbel: ",
"Needed for multi-file and folder downloads." => "Precísase para a descarga de varios ficheiros e cartafoles.",
"Enable ZIP-download" => "Habilitar a descarga-ZIP",
"0 is unlimited" => "0 significa ilimitado",
-"Maximum input size for ZIP files" => "Tamaño máximo de descarga para os ZIP",
+"Maximum input size for ZIP files" => "Tamaño máximo de descarga para os ficheiros ZIP",
"Save" => "Gardar",
"New" => "Novo",
"Text file" => "Ficheiro de texto",
"Folder" => "Cartafol",
-"From link" => "Dende a ligazón",
-"Upload" => "Enviar",
-"Cancel upload" => "Cancelar a subida",
-"Nothing in here. Upload something!" => "Nada por aquí. Envía algo.",
+"From link" => "Desde a ligazón",
+"Trash bin" => "Cesto do lixo",
+"Cancel upload" => "Cancelar o envío",
+"Nothing in here. Upload something!" => "Aquí non hai nada por aquí. Envíe algo.",
"Download" => "Descargar",
+"Unshare" => "Deixar de compartir",
"Upload too large" => "Envío demasiado grande",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor",
-"Files are being scanned, please wait." => "Estanse analizando os ficheiros. Agarda.",
-"Current scanning" => "Análise actual"
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor",
+"Files are being scanned, please wait." => "Estanse analizando os ficheiros. Agarde.",
+"Current scanning" => "Análise actual",
+"Upgrading filesystem cache..." => "Anovando a caché do sistema de ficheiros..."
);
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
index bac9a8a6a53..442eafe1c04 100644
--- a/apps/files/l10n/he.php
+++ b/apps/files/l10n/he.php
@@ -8,9 +8,9 @@
"Missing a temporary folder" => "תיקייה זמנית חסרה",
"Failed to write to disk" => "הכתיבה לכונן נכשלה",
"Files" => "קבצי×",
-"Unshare" => "הסר שיתוף",
"Delete" => "מחיקה",
"Rename" => "שינוי ש×",
+"Pending" => "ממתין",
"{new_name} already exists" => "{new_name} כבר ×§×™×™×",
"replace" => "החלפה",
"suggest name" => "הצעת ש×",
@@ -18,21 +18,15 @@
"replaced {new_name}" => "{new_name} הוחלף",
"undo" => "ביטול",
"replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}",
-"unshared {files}" => "בוטל ×©×™×ª×•×¤× ×©×œ {files}",
-"deleted {files}" => "{files} נמחקו",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "×”×©× ×©×’×•×™, ×סור להשתמש ×‘×ª×•×•×™× '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.",
-"generating ZIP-file, it may take some time." => "יוצר קובץ ZIP, ×× × ×”×ž×ª×Ÿ.",
"Unable to upload your file as it is a directory or has 0 bytes" => "×œ× ×™×›×•×œ להעלות ×ת הקובץ מכיוון שזו תקיה ×ו שמשקל הקובץ 0 בתי×",
"Upload Error" => "שגי×ת העל××”",
"Close" => "סגירה",
-"Pending" => "ממתין",
"1 file uploading" => "קובץ ×חד נשלח",
"{count} files uploading" => "{count} ×§×‘×¦×™× × ×©×œ×—×™×",
"Upload cancelled." => "ההעל××” בוטלה.",
"File upload is in progress. Leaving the page now will cancel the upload." => "מתבצעת כעת העל×ת קבצי×. עזיבה של העמוד תבטל ×ת ההעל××”.",
"URL cannot be empty." => "קישור ×ינו יכול להיות ריק.",
-"{count} files scanned" => "{count} ×§×‘×¦×™× × ×¡×¨×§×•",
-"error while scanning" => "×ירעה שגי××” במהלך הסריקה",
"Name" => "ש×",
"Size" => "גודל",
"Modified" => "זמן שינוי",
@@ -40,6 +34,7 @@
"{count} folders" => "{count} תיקיות",
"1 file" => "קובץ ×חד",
"{count} files" => "{count} קבצי×",
+"Upload" => "העל××”",
"File handling" => "טיפול בקבצי×",
"Maximum upload size" => "גודל העל××” מקסימלי",
"max. possible: " => "המרבי ×”×פשרי: ",
@@ -52,10 +47,10 @@
"Text file" => "קובץ טקסט",
"Folder" => "תיקייה",
"From link" => "מקישור",
-"Upload" => "העל××”",
"Cancel upload" => "ביטול ההעל××”",
"Nothing in here. Upload something!" => "×ין ×›×ן ×©×•× ×“×‘×¨. ×ולי ברצונך להעלות משהו?",
"Download" => "הורדה",
+"Unshare" => "הסר שיתוף",
"Upload too large" => "העל××” גדולה מידי",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "×”×§×‘×¦×™× ×©× ×™×¡×™×ª להעלות חרגו מהגודל המקסימלי להעל×ת ×§×‘×¦×™× ×¢×œ שרת ×–×”.",
"Files are being scanned, please wait." => "×”×§×‘×¦×™× × ×¡×¨×§×™×, × × ×œ×”×ž×ª×™×Ÿ.",
diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php
index 4db4ac3f3e3..3516ab8c1e6 100644
--- a/apps/files/l10n/hr.php
+++ b/apps/files/l10n/hr.php
@@ -6,25 +6,23 @@
"Missing a temporary folder" => "Nedostaje privremena mapa",
"Failed to write to disk" => "Neuspjelo pisanje na disk",
"Files" => "Datoteke",
-"Unshare" => "Prekini djeljenje",
"Delete" => "Briši",
"Rename" => "Promjeni ime",
+"Pending" => "U tijeku",
"replace" => "zamjeni",
"suggest name" => "predloži ime",
"cancel" => "odustani",
"undo" => "vrati",
-"generating ZIP-file, it may take some time." => "generiranje ZIP datoteke, ovo može potrajati.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nemoguće poslati datoteku jer je prazna ili je direktorij",
"Upload Error" => "Pogreška pri slanju",
"Close" => "Zatvori",
-"Pending" => "U tijeku",
"1 file uploading" => "1 datoteka se uÄitava",
"Upload cancelled." => "Slanje poništeno.",
"File upload is in progress. Leaving the page now will cancel the upload." => "UÄitavanje datoteke. NapuÅ¡tanjem stranice će prekinuti uÄitavanje.",
-"error while scanning" => "greÄka prilikom skeniranja",
"Name" => "Naziv",
"Size" => "VeliÄina",
"Modified" => "Zadnja promjena",
+"Upload" => "Pošalji",
"File handling" => "datoteka za rukovanje",
"Maximum upload size" => "Maksimalna veliÄina prijenosa",
"max. possible: " => "maksimalna moguća: ",
@@ -36,10 +34,10 @@
"New" => "novo",
"Text file" => "tekstualna datoteka",
"Folder" => "mapa",
-"Upload" => "Pošalji",
"Cancel upload" => "Prekini upload",
"Nothing in here. Upload something!" => "Nema niÄega u ovoj mapi. PoÅ¡alji neÅ¡to!",
"Download" => "Preuzmi",
+"Unshare" => "Prekini djeljenje",
"Upload too large" => "Prijenos je preobiman",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke koje pokuÅ¡avate prenijeti prelaze maksimalnu veliÄinu za prijenos datoteka na ovom poslužitelju.",
"Files are being scanned, please wait." => "Datoteke se skeniraju, molimo priÄekajte.",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index b0d46ee7a2c..eaec8d24b7a 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"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",
+"Unable to rename file" => "Nem lehet átnevezni a fájlt",
"No file was uploaded. Unknown error" => "Nem történt feltöltés. Ismeretlen hiba",
"There is no error, the file uploaded with success" => "A fájlt sikerült feltölteni",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "A feltöltött fájl mérete meghaladja a php.ini állományban megadott upload_max_filesize paraméter értékét.",
@@ -7,12 +10,12 @@
"No file was uploaded" => "Nem töltődött fel semmi",
"Missing a temporary folder" => "Hiányzik egy ideiglenes mappa",
"Failed to write to disk" => "Nem sikerült a lemezre történő írás",
-"Not enough space available" => "Nincs elég szabad hely",
+"Not enough storage available" => "Nincs elég szabad hely.",
"Invalid directory." => "Érvénytelen mappa.",
"Files" => "Fájlok",
-"Unshare" => "Megosztás visszavonása",
"Delete" => "Törlés",
"Rename" => "Ãtnevezés",
+"Pending" => "Folyamatban",
"{new_name} already exists" => "{new_name} már létezik",
"replace" => "írjuk fölül",
"suggest name" => "legyen más neve",
@@ -20,23 +23,21 @@
"replaced {new_name}" => "a(z) {new_name} állományt kicseréltük",
"undo" => "visszavonás",
"replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel: {old_name}",
-"unshared {files}" => "{files} fájl megosztása visszavonva",
-"deleted {files}" => "{files} fájl törölve",
"'.' is an invalid file name." => "'.' fájlnév érvénytelen.",
"File name cannot be empty." => "A fájlnév nem lehet semmi.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'",
-"generating ZIP-file, it may take some time." => "ZIP-fájl generálása, ez eltarthat egy ideig.",
+"Your storage is full, files can not be updated or synced anymore!" => "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
+"Your storage is almost full ({usedSpacePercent}%)" => "A tároló majdnem tele van ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű",
"Upload Error" => "Feltöltési hiba",
"Close" => "Bezárás",
-"Pending" => "Folyamatban",
"1 file uploading" => "1 fájl töltődik föl",
"{count} files uploading" => "{count} fájl töltődik föl",
"Upload cancelled." => "A feltöltést megszakítottuk.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.",
"URL cannot be empty." => "Az URL nem lehet semmi.",
-"{count} files scanned" => "{count} fájlt találtunk",
-"error while scanning" => "Hiba a fájllista-ellenőrzés során",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Érvénytelen mappanév. A név használata csak a Owncloud számára lehetséges.",
"Name" => "Név",
"Size" => "Méret",
"Modified" => "Módosítva",
@@ -44,6 +45,7 @@
"{count} folders" => "{count} mappa",
"1 file" => "1 fájl",
"{count} files" => "{count} fájl",
+"Upload" => "Feltöltés",
"File handling" => "Fájlkezelés",
"Maximum upload size" => "Maximális feltölthető fájlméret",
"max. possible: " => "max. lehetséges: ",
@@ -56,10 +58,10 @@
"Text file" => "Szövegfájl",
"Folder" => "Mappa",
"From link" => "Feltöltés linkről",
-"Upload" => "Feltöltés",
"Cancel upload" => "A feltöltés megszakítása",
"Nothing in here. Upload something!" => "Itt nincs semmi. Töltsön fel valamit!",
"Download" => "Letöltés",
+"Unshare" => "Megosztás visszavonása",
"Upload too large" => "A feltöltés túl nagy",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet.",
"Files are being scanned, please wait." => "A fájllista ellenőrzése zajlik, kis türelmet!",
diff --git a/apps/files/l10n/ia.php b/apps/files/l10n/ia.php
index ada64cd7574..ae614c1bf5d 100644
--- a/apps/files/l10n/ia.php
+++ b/apps/files/l10n/ia.php
@@ -8,12 +8,12 @@
"Name" => "Nomine",
"Size" => "Dimension",
"Modified" => "Modificate",
+"Upload" => "Incargar",
"Maximum upload size" => "Dimension maxime de incargamento",
"Save" => "Salveguardar",
"New" => "Nove",
"Text file" => "File de texto",
"Folder" => "Dossier",
-"Upload" => "Incargar",
"Nothing in here. Upload something!" => "Nihil hic. Incarga alcun cosa!",
"Download" => "Discargar",
"Upload too large" => "Incargamento troppo longe"
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index 5d934e97e7b..4c4e2e0f714 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -6,21 +6,20 @@
"Missing a temporary folder" => "Kehilangan folder temporer",
"Failed to write to disk" => "Gagal menulis ke disk",
"Files" => "Berkas",
-"Unshare" => "batalkan berbagi",
"Delete" => "Hapus",
+"Pending" => "Menunggu",
"replace" => "mengganti",
"cancel" => "batalkan",
"undo" => "batal dikerjakan",
-"generating ZIP-file, it may take some time." => "membuat berkas ZIP, ini mungkin memakan waktu.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte",
"Upload Error" => "Terjadi Galat Pengunggahan",
"Close" => "tutup",
-"Pending" => "Menunggu",
"Upload cancelled." => "Pengunggahan dibatalkan.",
"URL cannot be empty." => "tautan tidak boleh kosong",
"Name" => "Nama",
"Size" => "Ukuran",
"Modified" => "Dimodifikasi",
+"Upload" => "Unggah",
"File handling" => "Penanganan berkas",
"Maximum upload size" => "Ukuran unggah maksimum",
"max. possible: " => "Kemungkinan maks:",
@@ -32,10 +31,10 @@
"New" => "Baru",
"Text file" => "Berkas teks",
"Folder" => "Folder",
-"Upload" => "Unggah",
"Cancel upload" => "Batal mengunggah",
"Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!",
"Download" => "Unduh",
+"Unshare" => "batalkan berbagi",
"Upload too large" => "Unggahan terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang anda coba unggah melebihi ukuran maksimum untuk pengunggahan berkas di server ini.",
"Files are being scanned, please wait." => "Berkas sedang dipindai, silahkan tunggu.",
diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php
index b70d212c9c7..c0898c555b9 100644
--- a/apps/files/l10n/is.php
+++ b/apps/files/l10n/is.php
@@ -1,4 +1,8 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Gat ekki fært %s - Skrá með þessu nafni er þegar til",
+"Could not move %s" => "Gat ekki fært %s",
+"Unable to rename file" => "Gat ekki endurskýrt skrá",
+"No file was uploaded. Unknown error" => "Engin skrá var send inn. Óþekkt villa.",
"There is no error, the file uploaded with success" => "Engin villa, innsending heppnaðist",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Innsend skrá er stærri en upload_max stillingin í php.ini:",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Innsenda skráin er stærri en MAX_FILE_SIZE sem skilgreint er í HTML sniðinu.",
@@ -6,10 +10,11 @@
"No file was uploaded" => "Engin skrá skilaði sér",
"Missing a temporary folder" => "Vantar bráðabirgðamöppu",
"Failed to write to disk" => "Tókst ekki að skrifa á disk",
+"Invalid directory." => "Ógild mappa.",
"Files" => "Skrár",
-"Unshare" => "Hætta deilingu",
"Delete" => "Eyða",
"Rename" => "Endurskýra",
+"Pending" => "Bíður",
"{new_name} already exists" => "{new_name} er þegar til",
"replace" => "yfirskrifa",
"suggest name" => "stinga upp á nafni",
@@ -17,21 +22,18 @@
"replaced {new_name}" => "endurskýrði {new_name}",
"undo" => "afturkalla",
"replaced {new_name} with {old_name}" => "yfirskrifaði {new_name} með {old_name}",
-"unshared {files}" => "Hætti við deilingu á {files}",
-"deleted {files}" => "eyddi {files}",
+"'.' is an invalid file name." => "'.' er ekki leyfilegt nafn.",
+"File name cannot be empty." => "Nafn skráar má ekki vera tómt",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ógilt nafn, táknin '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' eru ekki leyfð.",
-"generating ZIP-file, it may take some time." => "bý til ZIP skrá, það gæti tekið smá stund.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skráin er 0 bæti.",
"Upload Error" => "Villa við innsendingu",
"Close" => "Loka",
-"Pending" => "Bíður",
"1 file uploading" => "1 skrá innsend",
"{count} files uploading" => "{count} skrár innsendar",
"Upload cancelled." => "Hætt við innsendingu.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.",
"URL cannot be empty." => "Vefslóð má ekki vera tóm.",
-"{count} files scanned" => "{count} skrár skimaðar",
-"error while scanning" => "villa við skimun",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud",
"Name" => "Nafn",
"Size" => "Stærð",
"Modified" => "Breytt",
@@ -39,6 +41,7 @@
"{count} folders" => "{count} möppur",
"1 file" => "1 skrá",
"{count} files" => "{count} skrár",
+"Upload" => "Senda inn",
"File handling" => "Meðhöndlun skrár",
"Maximum upload size" => "Hámarks stærð innsendingar",
"max. possible: " => "hámark mögulegt: ",
@@ -51,11 +54,11 @@
"Text file" => "Texta skrá",
"Folder" => "Mappa",
"From link" => "Af tengli",
-"Upload" => "Senda inn",
"Cancel upload" => "Hætta við innsendingu",
-"Nothing in here. Upload something!" => "Ekkert hér. Sendu eitthvað inn!",
+"Nothing in here. Upload something!" => "Ekkert hér. Settu eitthvað inn!",
"Download" => "Niðurhal",
-"Upload too large" => "Innsend skrá of stór",
+"Unshare" => "Hætta deilingu",
+"Upload too large" => "Innsend skrá er of stór",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.",
"Files are being scanned, please wait." => "Verið er að skima skrár, vinsamlegast hinkraðu.",
"Current scanning" => "Er að skima"
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index 8c3173d5d50..23372439a2d 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Impossibile spostare %s - un file con questo nome esiste già",
+"Could not move %s" => "Impossibile spostare %s",
+"Unable to rename file" => "Impossibile rinominare il file",
"No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto",
"There is no error, the file uploaded with success" => "Non ci sono errori, file caricato con successo",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Il file caricato supera la direttiva upload_max_filesize in php.ini:",
@@ -7,12 +10,13 @@
"No file was uploaded" => "Nessun file è stato caricato",
"Missing a temporary folder" => "Cartella temporanea mancante",
"Failed to write to disk" => "Scrittura su disco non riuscita",
-"Not enough space available" => "Spazio disponibile insufficiente",
+"Not enough storage available" => "Spazio di archiviazione insufficiente",
"Invalid directory." => "Cartella non valida.",
"Files" => "File",
-"Unshare" => "Rimuovi condivisione",
+"Delete permanently" => "Elimina definitivamente",
"Delete" => "Elimina",
"Rename" => "Rinomina",
+"Pending" => "In corso",
"{new_name} already exists" => "{new_name} esiste già",
"replace" => "sostituisci",
"suggest name" => "suggerisci nome",
@@ -20,24 +24,22 @@
"replaced {new_name}" => "sostituito {new_name}",
"undo" => "annulla",
"replaced {new_name} with {old_name}" => "sostituito {new_name} con {old_name}",
-"unshared {files}" => "non condivisi {files}",
-"deleted {files}" => "eliminati {files}",
+"perform delete operation" => "esegui l'operazione di eliminazione",
"'.' is an invalid file name." => "'.' non è un nome file valido.",
"File name cannot be empty." => "Il nome del file non può essere vuoto.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti.",
-"generating ZIP-file, it may take some time." => "creazione file ZIP, potrebbe richiedere del tempo.",
+"Your storage is full, files can not be updated or synced anymore!" => "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte",
"Upload Error" => "Errore di invio",
"Close" => "Chiudi",
-"Pending" => "In corso",
"1 file uploading" => "1 file in fase di caricamento",
"{count} files uploading" => "{count} file in fase di caricamentoe",
"Upload cancelled." => "Invio annullato",
"File upload is in progress. Leaving the page now will cancel the upload." => "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
"URL cannot be empty." => "L'URL non può essere vuoto.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud",
-"{count} files scanned" => "{count} file analizzati",
-"error while scanning" => "errore durante la scansione",
"Name" => "Nome",
"Size" => "Dimensione",
"Modified" => "Modificato",
@@ -45,6 +47,7 @@
"{count} folders" => "{count} cartelle",
"1 file" => "1 file",
"{count} files" => "{count} file",
+"Upload" => "Carica",
"File handling" => "Gestione file",
"Maximum upload size" => "Dimensione massima upload",
"max. possible: " => "numero mass.: ",
@@ -57,12 +60,14 @@
"Text file" => "File di testo",
"Folder" => "Cartella",
"From link" => "Da collegamento",
-"Upload" => "Carica",
+"Trash bin" => "Cestino",
"Cancel upload" => "Annulla invio",
"Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!",
"Download" => "Scarica",
+"Unshare" => "Rimuovi condivisione",
"Upload too large" => "Il file caricato è troppo grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "I file che stai provando a caricare superano la dimensione massima consentita su questo server.",
"Files are being scanned, please wait." => "Scansione dei file in corso, attendi",
-"Current scanning" => "Scansione corrente"
+"Current scanning" => "Scansione corrente",
+"Upgrading filesystem cache..." => "Aggiornamento della cache del filesystem in corso..."
);
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index eab693c3431..85ec6b6e953 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s を移動ã§ãã¾ã›ã‚“ã§ã—㟠― ã“ã®åå‰ã®ãƒ•ァイルã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™",
+"Could not move %s" => "%s を移動ã§ãã¾ã›ã‚“ã§ã—ãŸ",
+"Unable to rename file" => "ファイルåã®å¤‰æ›´ãŒã§ãã¾ã›ã‚“",
"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: " => "アップロードã•れãŸãƒ•ァイルã¯php.ini ã® upload_max_filesize ã«è¨­å®šã•れãŸã‚µã‚¤ã‚ºã‚’è¶…ãˆã¦ã„ã¾ã™:",
@@ -7,12 +10,13 @@
"No file was uploaded" => "ファイルã¯ã‚¢ãƒƒãƒ—ロードã•れã¾ã›ã‚“ã§ã—ãŸ",
"Missing a temporary folder" => "テンãƒãƒ©ãƒªãƒ•ォルダãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“",
"Failed to write to disk" => "ディスクã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ",
-"Not enough space available" => "利用å¯èƒ½ãªã‚¹ãƒšãƒ¼ã‚¹ãŒå分ã«ã‚りã¾ã›ã‚“",
+"Not enough storage available" => "ストレージã«å分ãªç©ºã容é‡ãŒã‚りã¾ã›ã‚“",
"Invalid directory." => "無効ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚",
"Files" => "ファイル",
-"Unshare" => "共有ã—ãªã„",
+"Delete permanently" => "完全ã«å‰Šé™¤ã™ã‚‹",
"Delete" => "削除",
"Rename" => "åå‰ã®å¤‰æ›´",
+"Pending" => "ä¿ç•™",
"{new_name} already exists" => "{new_name} ã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™",
"replace" => "ç½®ãæ›ãˆ",
"suggest name" => "推奨åç§°",
@@ -20,24 +24,22 @@
"replaced {new_name}" => "{new_name} ã‚’ç½®æ›",
"undo" => "å…ƒã«æˆ»ã™",
"replaced {new_name} with {old_name}" => "{old_name} ã‚’ {new_name} ã«ç½®æ›",
-"unshared {files}" => "未共有 {files}",
-"deleted {files}" => "削除 {files}",
+"perform delete operation" => "削除を実行",
"'.' is an invalid file name." => "'.' ã¯ç„¡åйãªãƒ•ァイルåã§ã™ã€‚",
"File name cannot be empty." => "ファイルåを空ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "無効ãªåå‰ã€'\\', '/', '<', '>', ':', '\"', '|', '?', '*' ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。",
-"generating ZIP-file, it may take some time." => "ZIPファイルを生æˆä¸­ã§ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。",
+"Your storage is full, files can not be updated or synced anymore!" => "ã‚ãªãŸã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã¯ä¸€æ¯ã§ã™ã€‚ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›´æ–°ã¨åŒæœŸã¯ã‚‚ã†ã§ãã¾ã›ã‚“ï¼",
+"Your storage is almost full ({usedSpacePercent}%)" => "ã‚ãªãŸã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã¯ã»ã¼ä¸€æ¯ã§ã™ï¼ˆ{usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®æº–備中ã§ã™ã€‚ファイルサイズãŒå¤§ãã„å ´åˆã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。",
"Unable to upload your file as it is a directory or has 0 bytes" => "ディレクトリもã—ãã¯0ãƒã‚¤ãƒˆã®ãƒ•ァイルã¯ã‚¢ãƒƒãƒ—ロードã§ãã¾ã›ã‚“",
"Upload Error" => "アップロードエラー",
"Close" => "é–‰ã˜ã‚‹",
-"Pending" => "ä¿ç•™",
"1 file uploading" => "ファイルを1ã¤ã‚¢ãƒƒãƒ—ロード中",
"{count} files uploading" => "{count} ファイルをアップロード中",
"Upload cancelled." => "アップロードã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã—ãŸã€‚",
"File upload is in progress. Leaving the page now will cancel the upload." => "ファイル転é€ã‚’実行中ã§ã™ã€‚今ã“ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ç§»å‹•ã™ã‚‹ã¨ã‚¢ãƒƒãƒ—ロードãŒä¸­æ­¢ã•れã¾ã™ã€‚",
"URL cannot be empty." => "URLã¯ç©ºã«ã§ãã¾ã›ã‚“。",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "無効ãªãƒ•ォルダåã§ã™ã€‚'Shared' ã®åˆ©ç”¨ã¯ ownCloud ãŒäºˆç´„済ã¿ã§ã™ã€‚",
-"{count} files scanned" => "{count} ファイルをスキャン",
-"error while scanning" => "スキャン中ã®ã‚¨ãƒ©ãƒ¼",
"Name" => "åå‰",
"Size" => "サイズ",
"Modified" => "更新日時",
@@ -45,6 +47,7 @@
"{count} folders" => "{count} フォルダ",
"1 file" => "1 ファイル",
"{count} files" => "{count} ファイル",
+"Upload" => "アップロード",
"File handling" => "ファイルæ“作",
"Maximum upload size" => "最大アップロードサイズ",
"max. possible: " => "最大容é‡: ",
@@ -57,12 +60,13 @@
"Text file" => "テキストファイル",
"Folder" => "フォルダ",
"From link" => "リンク",
-"Upload" => "アップロード",
"Cancel upload" => "アップロードをキャンセル",
"Nothing in here. Upload something!" => "ã“ã“ã«ã¯ä½•ã‚‚ã‚りã¾ã›ã‚“。何ã‹ã‚¢ãƒƒãƒ—ロードã—ã¦ãã ã•ã„。",
"Download" => "ダウンロード",
+"Unshare" => "共有ã—ãªã„",
"Upload too large" => "ファイルサイズãŒå¤§ãã™ãŽã¾ã™",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "アップロードã—よã†ã¨ã—ã¦ã„るファイルã¯ã€ã‚µãƒ¼ãƒã§è¦å®šã•ã‚ŒãŸæœ€å¤§ã‚µã‚¤ã‚ºã‚’è¶…ãˆã¦ã„ã¾ã™ã€‚",
"Files are being scanned, please wait." => "ファイルをスキャンã—ã¦ã„ã¾ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。",
-"Current scanning" => "スキャン中"
+"Current scanning" => "スキャン中",
+"Upgrading filesystem cache..." => "ファイルシステムキャッシュを更新中..."
);
diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php
index 9a73abfbe3b..a7b58f02d21 100644
--- a/apps/files/l10n/ka_GE.php
+++ b/apps/files/l10n/ka_GE.php
@@ -6,9 +6,9 @@
"Missing a temporary folder" => "დრáƒáƒ”ბითი სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს",
"Failed to write to disk" => "შეცდáƒáƒ›áƒ დისკზე ჩáƒáƒ¬áƒ”რისáƒáƒ¡",
"Files" => "ფáƒáƒ˜áƒšáƒ”ბი",
-"Unshare" => "გáƒáƒ–იáƒáƒ áƒ”ბის მáƒáƒ®áƒ¡áƒœáƒ",
"Delete" => "წáƒáƒ¨áƒšáƒ",
"Rename" => "გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვáƒ",
+"Pending" => "მáƒáƒªáƒ“ის რეჟიმში",
"{new_name} already exists" => "{new_name} უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს",
"replace" => "შეცვლáƒ",
"suggest name" => "სáƒáƒ®áƒ”ლის შემáƒáƒ—áƒáƒ•áƒáƒ–ებáƒ",
@@ -16,19 +16,13 @@
"replaced {new_name}" => "{new_name} შეცვლილიáƒ",
"undo" => "დáƒáƒ‘რუნებáƒ",
"replaced {new_name} with {old_name}" => "{new_name} შეცვლილირ{old_name}–ით",
-"unshared {files}" => "გáƒáƒ–იáƒáƒ áƒ”ბრმáƒáƒ®áƒ¡áƒœáƒ˜áƒšáƒ˜ {files}",
-"deleted {files}" => "წáƒáƒ¨áƒšáƒ˜áƒšáƒ˜ {files}",
-"generating ZIP-file, it may take some time." => "ZIP-ფáƒáƒ˜áƒšáƒ˜áƒ¡ გენერირებáƒ, áƒáƒ›áƒáƒ¡ ჭირდებრგáƒáƒ áƒ™áƒ•ეული დრáƒ.",
"Unable to upload your file as it is a directory or has 0 bytes" => "თქვენი ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•ირთვრვერ მáƒáƒ®áƒ”რხდáƒ. ის áƒáƒ áƒ˜áƒ¡ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე დრშეიცáƒáƒ•ს 0 ბáƒáƒ˜áƒ¢áƒ¡",
"Upload Error" => "შეცდáƒáƒ›áƒ áƒáƒ¢áƒ•ირთვისáƒáƒ¡",
"Close" => "დáƒáƒ®áƒ£áƒ áƒ•áƒ",
-"Pending" => "მáƒáƒªáƒ“ის რეჟიმში",
"1 file uploading" => "1 ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•ირთვáƒ",
"{count} files uploading" => "{count} ფáƒáƒ˜áƒšáƒ˜ იტვირთებáƒ",
"Upload cancelled." => "áƒáƒ¢áƒ•ირთვრშეჩერებულ იქნáƒ.",
"File upload is in progress. Leaving the page now will cancel the upload." => "მიმდინáƒáƒ áƒ”áƒáƒ‘ს ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•ირთვáƒ. სხვრგვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლრგáƒáƒ›áƒáƒ˜áƒ¬áƒ•ევს áƒáƒ¢áƒ•ირთვის შეჩერებáƒáƒ¡",
-"{count} files scanned" => "{count} ფáƒáƒ˜áƒšáƒ˜ სკáƒáƒœáƒ˜áƒ áƒ”ბულიáƒ",
-"error while scanning" => "შეცდáƒáƒ›áƒ სკáƒáƒœáƒ˜áƒ áƒ”ბისáƒáƒ¡",
"Name" => "სáƒáƒ®áƒ”ლი",
"Size" => "ზáƒáƒ›áƒ",
"Modified" => "შეცვლილიáƒ",
@@ -36,6 +30,7 @@
"{count} folders" => "{count} სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე",
"1 file" => "1 ფáƒáƒ˜áƒšáƒ˜",
"{count} files" => "{count} ფáƒáƒ˜áƒšáƒ˜",
+"Upload" => "áƒáƒ¢áƒ•ირთვáƒ",
"File handling" => "ფáƒáƒ˜áƒšáƒ˜áƒ¡ დáƒáƒ›áƒ£áƒ¨áƒáƒ•ებáƒ",
"Maximum upload size" => "მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒ£áƒ› áƒáƒ¢áƒ•ირთის ზáƒáƒ›áƒ",
"max. possible: " => "მáƒáƒ¥áƒ¡. შესáƒáƒ«áƒšáƒ”ბელი:",
@@ -47,10 +42,10 @@
"New" => "áƒáƒ®áƒáƒšáƒ˜",
"Text file" => "ტექსტური ფáƒáƒ˜áƒšáƒ˜",
"Folder" => "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე",
-"Upload" => "áƒáƒ¢áƒ•ირთვáƒ",
"Cancel upload" => "áƒáƒ¢áƒ•ირთვის გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ",
"Nothing in here. Upload something!" => "áƒáƒ¥ áƒáƒ áƒáƒ¤áƒ”რი áƒáƒ  áƒáƒ áƒ˜áƒ¡. áƒáƒ¢áƒ•ირთე რáƒáƒ›áƒ”!",
"Download" => "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვáƒ",
+"Unshare" => "გáƒáƒ–იáƒáƒ áƒ”ბის მáƒáƒ®áƒ¡áƒœáƒ",
"Upload too large" => "áƒáƒ¡áƒáƒ¢áƒ•ირთი ფáƒáƒ˜áƒšáƒ˜ ძáƒáƒšáƒ˜áƒáƒœ დიდიáƒ",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ზáƒáƒ›áƒ რáƒáƒ›áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•ირთვáƒáƒ¡áƒáƒª თქვენ áƒáƒžáƒ˜áƒ áƒ”ბთ, áƒáƒ­áƒáƒ áƒ‘ებს სერვერზე დáƒáƒ¨áƒ•ებულ მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒ£áƒ›áƒ¡.",
"Files are being scanned, please wait." => "მიმდინáƒáƒ áƒ”áƒáƒ‘ს ფáƒáƒ˜áƒšáƒ”ბის სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ, გთხáƒáƒ•თ დáƒáƒ”ლáƒáƒ“áƒáƒ—.",
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index dd7df1c0862..d483f8061a1 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s í•­ëª©ì„ ì´ë™ì‹œí‚¤ì§€ ëª»í•˜ì˜€ìŒ - íŒŒì¼ ì´ë¦„ì´ ì´ë¯¸ 존재함",
+"Could not move %s" => "%s í•­ëª©ì„ ì´ë”©ì‹œí‚¤ì§€ 못하였ìŒ",
+"Unable to rename file" => "íŒŒì¼ ì´ë¦„바꾸기 í•  수 ì—†ìŒ",
"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: " => "업로드한 파ì¼ì´ php.iniì˜ upload_max_filesize보다 í½ë‹ˆë‹¤:",
@@ -7,12 +10,11 @@
"No file was uploaded" => "ì—…ë¡œë“œëœ íŒŒì¼ ì—†ìŒ",
"Missing a temporary folder" => "임시 í´ë”ê°€ 사ë¼ì§",
"Failed to write to disk" => "디스í¬ì— ì“°ì§€ 못했습니다",
-"Not enough space available" => "ì—¬ìœ ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤",
-"Invalid directory." => "올바르지 ì•Šì€ ë””ë ‰í† ë¦¬ìž…ë‹ˆë‹¤.",
+"Invalid directory." => "올바르지 ì•Šì€ ë””ë ‰í„°ë¦¬ìž…ë‹ˆë‹¤.",
"Files" => "파ì¼",
-"Unshare" => "공유 해제",
"Delete" => "삭제",
"Rename" => "ì´ë¦„ 바꾸기",
+"Pending" => "보류 중",
"{new_name} already exists" => "{new_name}ì´(ê°€) ì´ë¯¸ 존재함",
"replace" => "바꾸기",
"suggest name" => "ì´ë¦„ 제안",
@@ -20,23 +22,21 @@
"replaced {new_name}" => "{new_name}ì„(를) 대체함",
"undo" => "실행 취소",
"replaced {new_name} with {old_name}" => "{old_name}ì´(ê°€) {new_name}(으)로 대체ë¨",
-"unshared {files}" => "{files} 공유 í•´ì œë¨",
-"deleted {files}" => "{files} ì‚­ì œë¨",
"'.' is an invalid file name." => "'.' 는 올바르지 ì•Šì€ íŒŒì¼ ì´ë¦„ 입니다.",
-"File name cannot be empty." => "파ì¼ì´ë¦„ì€ ê³µëž€ì´ ë  ìˆ˜ 없습니다.",
+"File name cannot be empty." => "íŒŒì¼ ì´ë¦„ì´ ë¹„ì–´ ìžˆì„ ìˆ˜ 없습니다.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "í´ë” ì´ë¦„ì´ ì˜¬ë°”ë¥´ì§€ 않습니다. ì´ë¦„ì— ë¬¸ìž '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다.",
-"generating ZIP-file, it may take some time." => "ZIP 파ì¼ì„ ìƒì„±í•˜ê³  있습니다. ì‹œê°„ì´ ê±¸ë¦´ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.",
+"Your storage is full, files can not be updated or synced anymore!" => "저장 ê³µê°„ì´ ê°€ë“ ì°¼ìŠµë‹ˆë‹¤. 파ì¼ì„ ì—…ë°ì´íŠ¸í•˜ê±°ë‚˜ ë™ê¸°í™”í•  수 없습니다!",
+"Your storage is almost full ({usedSpacePercent}%)" => "저장 ê³µê°„ì´ ê±°ì˜ ê°€ë“ ì°¼ìŠµë‹ˆë‹¤ ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "다운로드가 준비 중입니다. íŒŒì¼ í¬ê¸°ê°€ í¬ë‹¤ë©´ ì‹œê°„ì´ ì˜¤ëž˜ 걸릴 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.",
"Unable to upload your file as it is a directory or has 0 bytes" => "ì´ íŒŒì¼ì€ 디렉터리ì´ê±°ë‚˜ 비어 있기 ë•Œë¬¸ì— ì—…ë¡œë“œí•  수 없습니다",
"Upload Error" => "업로드 오류",
"Close" => "닫기",
-"Pending" => "보류 중",
"1 file uploading" => "íŒŒì¼ 1ê°œ 업로드 중",
"{count} files uploading" => "íŒŒì¼ {count}ê°œ 업로드 중",
"Upload cancelled." => "업로드가 취소ë˜ì—ˆìŠµë‹ˆë‹¤.",
"File upload is in progress. Leaving the page now will cancel the upload." => "íŒŒì¼ ì—…ë¡œë“œê°€ ì§„í–‰ 중입니다. ì´ íŽ˜ì´ì§€ë¥¼ 벗어나면 업로드가 취소ë©ë‹ˆë‹¤.",
"URL cannot be empty." => "URLì„ ìž…ë ¥í•´ì•¼ 합니다.",
-"{count} files scanned" => "íŒŒì¼ {count}ê°œ 검색ë¨",
-"error while scanning" => "검색 중 오류 ë°œìƒ",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "í´ë” ì´ë¦„ì´ ìœ íš¨í•˜ì§€ 않습니다. ",
"Name" => "ì´ë¦„",
"Size" => "í¬ê¸°",
"Modified" => "수정ë¨",
@@ -44,6 +44,7 @@
"{count} folders" => "í´ë” {count}ê°œ",
"1 file" => "íŒŒì¼ 1ê°œ",
"{count} files" => "íŒŒì¼ {count}ê°œ",
+"Upload" => "업로드",
"File handling" => "íŒŒì¼ ì²˜ë¦¬",
"Maximum upload size" => "최대 업로드 í¬ê¸°",
"max. possible: " => "최대 가능:",
@@ -56,12 +57,13 @@
"Text file" => "í…스트 파ì¼",
"Folder" => "í´ë”",
"From link" => "ë§í¬ì—서",
-"Upload" => "업로드",
"Cancel upload" => "업로드 취소",
"Nothing in here. Upload something!" => "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤. 업로드할 수 있습니다!",
"Download" => "다운로드",
+"Unshare" => "공유 해제",
"Upload too large" => "업로드 용량 초과",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ì´ íŒŒì¼ì´ 서버ì—서 허용하는 최대 업로드 가능 용량보다 í½ë‹ˆë‹¤.",
"Files are being scanned, please wait." => "파ì¼ì„ 검색하고 있습니다. 기다려 주십시오.",
-"Current scanning" => "현재 검색"
+"Current scanning" => "현재 검색",
+"Upgrading filesystem cache..." => "íŒŒì¼ ì‹œìŠ¤í…œ ìºì‹œ 업그레ì´ë“œ 중..."
);
diff --git a/apps/files/l10n/ku_IQ.php b/apps/files/l10n/ku_IQ.php
index d6cf6450792..5c5a3d6bd8f 100644
--- a/apps/files/l10n/ku_IQ.php
+++ b/apps/files/l10n/ku_IQ.php
@@ -2,8 +2,8 @@
"Close" => "داخستن",
"URL cannot be empty." => "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت.",
"Name" => "ناو",
+"Upload" => "بارکردن",
"Save" => "پاشکه‌وتکردن",
"Folder" => "بوخچه",
-"Upload" => "بارکردن",
"Download" => "داگرتن"
);
diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php
index 229ec3f2024..b052da3a027 100644
--- a/apps/files/l10n/lb.php
+++ b/apps/files/l10n/lb.php
@@ -10,7 +10,6 @@
"replace" => "ersetzen",
"cancel" => "ofbriechen",
"undo" => "réckgängeg man",
-"generating ZIP-file, it may take some time." => "Et gëtt eng ZIP-File generéiert, dëst ka bëssen daueren.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss ass.",
"Upload Error" => "Fehler beim eroplueden",
"Close" => "Zoumaachen",
@@ -19,6 +18,7 @@
"Name" => "Numm",
"Size" => "Gréisst",
"Modified" => "Geännert",
+"Upload" => "Eroplueden",
"File handling" => "Fichier handling",
"Maximum upload size" => "Maximum Upload Gréisst ",
"max. possible: " => "max. méiglech:",
@@ -30,10 +30,10 @@
"New" => "Nei",
"Text file" => "Text Fichier",
"Folder" => "Dossier",
-"Upload" => "Eroplueden",
"Cancel upload" => "Upload ofbriechen",
"Nothing in here. Upload something!" => "Hei ass näischt. Lued eppes rop!",
"Download" => "Eroflueden",
+"Unshare" => "Net méi deelen",
"Upload too large" => "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
"Files are being scanned, please wait." => "Fichieren gi gescannt, war weg.",
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index fd9824e0c19..70296b5db9f 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -6,9 +6,9 @@
"Missing a temporary folder" => "NÄ—ra laikinojo katalogo",
"Failed to write to disk" => "Nepavyko įrašyti į diską",
"Files" => "Failai",
-"Unshare" => "Nebesidalinti",
"Delete" => "Ištrinti",
"Rename" => "Pervadinti",
+"Pending" => "Laukiantis",
"{new_name} already exists" => "{new_name} jau egzistuoja",
"replace" => "pakeisti",
"suggest name" => "pasiūlyti pavadinimą",
@@ -16,19 +16,13 @@
"replaced {new_name}" => "pakeiskite {new_name}",
"undo" => "anuliuoti",
"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
-"unshared {files}" => "nebesidalinti {files}",
-"deleted {files}" => "ištrinti {files}",
-"generating ZIP-file, it may take some time." => "kuriamas ZIP archyvas, tai gali užtrukti šiek tiek laiko.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas",
"Upload Error" => "Įkėlimo klaida",
"Close" => "Užverti",
-"Pending" => "Laukiantis",
"1 file uploading" => "įkeliamas 1 failas",
"{count} files uploading" => "{count} įkeliami failai",
"Upload cancelled." => "Įkėlimas atšauktas.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
-"{count} files scanned" => "{count} praskanuoti failai",
-"error while scanning" => "klaida skanuojant",
"Name" => "Pavadinimas",
"Size" => "Dydis",
"Modified" => "Pakeista",
@@ -36,6 +30,7 @@
"{count} folders" => "{count} aplankalai",
"1 file" => "1 failas",
"{count} files" => "{count} failai",
+"Upload" => "Įkelti",
"File handling" => "Failų tvarkymas",
"Maximum upload size" => "Maksimalus įkeliamo failo dydis",
"max. possible: " => "maks. galima:",
@@ -47,10 +42,10 @@
"New" => "Naujas",
"Text file" => "Teksto failas",
"Folder" => "Katalogas",
-"Upload" => "Įkelti",
"Cancel upload" => "Atšaukti siuntimą",
"Nothing in here. Upload something!" => "ÄŒia tuÅ¡Äia. Ä®kelkite kÄ… nors!",
"Download" => "Atsisiųsti",
+"Unshare" => "Nebesidalinti",
"Upload too large" => "Įkėlimui failas per didelis",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje",
"Files are being scanned, please wait." => "Skenuojami failai, prašome palaukti.",
diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php
index 33367984918..b7d00735628 100644
--- a/apps/files/l10n/lv.php
+++ b/apps/files/l10n/lv.php
@@ -1,41 +1,73 @@
<?php $TRANSLATIONS = array(
-"There is no error, the file uploaded with success" => "Viss kÄrtÄ«bÄ, augÅ¡upielÄde veiksmÄ«ga",
-"No file was uploaded" => "Neviens fails netika augÅ¡uplÄdÄ“ts",
+"Could not move %s - File with this name already exists" => "NevarÄ“ja pÄrvietot %s — jau eksistÄ“ datne ar tÄdu nosaukumu",
+"Could not move %s" => "NevarÄ“ja pÄrvietot %s",
+"Unable to rename file" => "NevarÄ“ja pÄrsaukt datni",
+"No file was uploaded. Unknown error" => "Netika augÅ¡upielÄdÄ“ta neviena datne. NezinÄma kļūda",
+"There is no error, the file uploaded with success" => "AugÅ¡upielÄde pabeigta bez kļūdÄm",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "AugÅ¡upielÄdÄ“tÄ datne pÄrsniedz upload_max_filesize norÄdÄ«jumu php.ini datnÄ“:",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "AugÅ¡upielÄdÄ“tÄ datne pÄrsniedz MAX_FILE_SIZE norÄdi, kas ir norÄdÄ«ta HTML formÄ",
+"The uploaded file was only partially uploaded" => "AugÅ¡upielÄdÄ“tÄ datne ir tikai daļēji augÅ¡upielÄdÄ“ta",
+"No file was uploaded" => "Neviena datne netika augÅ¡upielÄdÄ“ta",
"Missing a temporary folder" => "Trūkst pagaidu mapes",
-"Failed to write to disk" => "Nav iespÄ“jams saglabÄt",
-"Files" => "Faili",
-"Unshare" => "PÄrtraukt lÄ«dzdalīšanu",
-"Delete" => "Izdzēst",
-"Rename" => "PÄrdÄ“vÄ“t",
+"Failed to write to disk" => "NeizdevÄs saglabÄt diskÄ",
+"Not enough storage available" => "Nav pietiekami daudz vietas",
+"Invalid directory." => "Nederīga direktorija.",
+"Files" => "Datnes",
+"Delete permanently" => "Dzēst pavisam",
+"Delete" => "Dzēst",
+"Rename" => "PÄrsaukt",
+"Pending" => "Gaida savu kÄrtu",
+"{new_name} already exists" => "{new_name} jau eksistē",
"replace" => "aizvietot",
-"suggest name" => "Ieteiktais nosaukums",
+"suggest name" => "ieteiktais nosaukums",
"cancel" => "atcelt",
-"undo" => "vienu soli atpakaļ",
-"generating ZIP-file, it may take some time." => "lai uzÄ£enerÄ“tu ZIP failu, kÄds brÄ«dis ir jÄpagaida",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Nav iespÄ“jams augÅ¡uplÄdÄ“t jÅ«su failu, jo tÄds jau eksistÄ“ vai arÄ« failam nav izmÄ“ra (0 baiti)",
-"Upload Error" => "AugÅ¡uplÄdēšanas laikÄ radÄs kļūda",
-"Pending" => "Gaida savu kÄrtu",
-"Upload cancelled." => "AugÅ¡uplÄde ir atcelta",
+"replaced {new_name}" => "aizvietots {new_name}",
+"undo" => "atsaukt",
+"replaced {new_name} with {old_name}" => "aizvietoja {new_name} ar {old_name}",
+"perform delete operation" => "veikt dzēšanas darbību",
+"'.' is an invalid file name." => "'.' ir nederīgs datnes nosaukums.",
+"File name cannot be empty." => "Datnes nosaukums nevar būt tukšs.",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'.",
+"Your storage is full, files can not be updated or synced anymore!" => "JÅ«su krÄtuve ir pilna, datnes vairs nevar augÅ¡upielÄdÄ“t vai sinhronizÄ“t!",
+"Your storage is almost full ({usedSpacePercent}%)" => "JÅ«su krÄtuve ir gandrÄ«z pilna ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Tiek sagatavota lejupielÄde. Tas var aizņemt kÄdu laiciņu, ja datnes ir lielas.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Nevar augÅ¡upielÄdÄ“t jÅ«su datni, jo tÄ ir direktorija vai arÄ« tÄs izmÄ“rs ir 0 baiti",
+"Upload Error" => "Kļūda augÅ¡upielÄdÄ“jot",
+"Close" => "Aizvērt",
+"1 file uploading" => "AugÅ¡upielÄdÄ“ 1 datni",
+"{count} files uploading" => "augÅ¡upielÄdÄ“ {count} datnes",
+"Upload cancelled." => "AugÅ¡upielÄde ir atcelta.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Notiek augÅ¡upielÄde. Pametot lapu tagad, tiks atcelta augÅ¡upielÄde.",
+"URL cannot be empty." => "URL nevar būt tukšs.",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nederīgs mapes nosaukums. “Koplietots†izmantojums ir rezervēts ownCloud servisam.",
"Name" => "Nosaukums",
"Size" => "Izmērs",
-"Modified" => "Izmainīts",
-"File handling" => "Failu pÄrvaldÄ«ba",
-"Maximum upload size" => "MaksimÄlais failu augÅ¡uplÄdes apjoms",
-"max. possible: " => "maksÄ«mÄlais iespÄ“jamais:",
-"Needed for multi-file and folder downloads." => "VajadzÄ«gs vairÄku failu un mapju lejuplÄdei",
-"Enable ZIP-download" => "IespÄ“jot ZIP lejuplÄdi",
+"Modified" => "Mainīts",
+"1 folder" => "1 mape",
+"{count} folders" => "{count} mapes",
+"1 file" => "1 datne",
+"{count} files" => "{count} datnes",
+"Upload" => "AugÅ¡upielÄdÄ“t",
+"File handling" => "Datņu pÄrvaldÄ«ba",
+"Maximum upload size" => "MaksimÄlais datņu augÅ¡upielÄdes apjoms",
+"max. possible: " => "maksimÄlais iespÄ“jamais:",
+"Needed for multi-file and folder downloads." => "VajadzÄ«gs vairÄku datņu un mapju lejupielÄdēšanai.",
+"Enable ZIP-download" => "AktivÄ“t ZIP lejupielÄdi",
"0 is unlimited" => "0 ir neierobežots",
+"Maximum input size for ZIP files" => "MaksimÄlais ievades izmÄ“rs ZIP datnÄ“m",
"Save" => "SaglabÄt",
-"New" => "Jauns",
-"Text file" => "Teksta fails",
+"New" => "Jauna",
+"Text file" => "Teksta datne",
"Folder" => "Mape",
-"Upload" => "AugÅ¡uplÄdet",
-"Cancel upload" => "Atcelt augÅ¡uplÄdi",
-"Nothing in here. Upload something!" => "Te vÄ“l nekas nav. RÄ«kojies, sÄc augÅ¡uplÄdÄ“t",
-"Download" => "LejuplÄdÄ“t",
-"Upload too large" => "Fails ir par lielu lai to augÅ¡uplÄdetu",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "JÅ«su augÅ¡uplÄdÄ“jamie faili pÄrsniedz servera pieļaujamo failu augÅ¡upielÄdes apjomu",
-"Files are being scanned, please wait." => "Faili Å¡obrÄ«d tiek caurskatÄ«ti, nedaudz jÄpagaida.",
-"Current scanning" => "Å obrÄ«d tiek pÄrbaudÄ«ti"
+"From link" => "No saites",
+"Trash bin" => "Miskaste",
+"Cancel upload" => "Atcelt augÅ¡upielÄdi",
+"Nothing in here. Upload something!" => "Te vÄ“l nekas nav. RÄ«kojies, sÄc augÅ¡upielÄdÄ“t!",
+"Download" => "LejupielÄdÄ“t",
+"Unshare" => "PÄrtraukt dalīšanos",
+"Upload too large" => "Datne ir par lielu, lai to augÅ¡upielÄdÄ“tu",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "AugÅ¡upielÄdÄ“jamÄs datnes pÄrsniedz servera pieļaujamo datņu augÅ¡upielÄdes apjomu",
+"Files are being scanned, please wait." => "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet.",
+"Current scanning" => "Šobrīd tiek caurskatīts",
+"Upgrading filesystem cache..." => "Uzlabo datņu sistēmas kešatmiņu..."
);
diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php
index 3f48a69874e..5cb7e720584 100644
--- a/apps/files/l10n/mk.php
+++ b/apps/files/l10n/mk.php
@@ -8,9 +8,9 @@
"Missing a temporary folder" => "Ðе поÑтои привремена папка",
"Failed to write to disk" => "ÐеуÑпеав да запишам на диÑк",
"Files" => "Датотеки",
-"Unshare" => "Ðе Ñподелувај",
"Delete" => "Избриши",
"Rename" => "Преименувај",
+"Pending" => "Чека",
"{new_name} already exists" => "{new_name} веќе поÑтои",
"replace" => "замени",
"suggest name" => "предложи име",
@@ -18,21 +18,15 @@
"replaced {new_name}" => "земенета {new_name}",
"undo" => "врати",
"replaced {new_name} with {old_name}" => "заменета {new_name} Ñо {old_name}",
-"unshared {files}" => "без Ñподелување {files}",
-"deleted {files}" => "избришани {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ðеправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не Ñе дозволени.",
-"generating ZIP-file, it may take some time." => "Се генерира ZIP фајлот, ќе треба извеÑно време.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðе може да Ñе преземе вашата датотека бидејќи фолдерот во кој Ñе наоѓа фајлот има големина од 0 бајти",
"Upload Error" => "Грешка при преземање",
"Close" => "Затвои",
-"Pending" => "Чека",
"1 file uploading" => "1 датотека Ñе подига",
"{count} files uploading" => "{count} датотеки Ñе подигаат",
"Upload cancelled." => "Преземањето е прекинато.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Подигање на датотека е во тек. Ðапуштење на Ñтраницата ќе го прекине.",
"URL cannot be empty." => "ÐдреÑата неможе да биде празна.",
-"{count} files scanned" => "{count} датотеки Ñкенирани",
-"error while scanning" => "грешка при Ñкенирање",
"Name" => "Име",
"Size" => "Големина",
"Modified" => "Променето",
@@ -40,6 +34,7 @@
"{count} folders" => "{count} папки",
"1 file" => "1 датотека",
"{count} files" => "{count} датотеки",
+"Upload" => "Подигни",
"File handling" => "Ракување Ñо датотеки",
"Maximum upload size" => "МакÑимална големина за подигање",
"max. possible: " => "макÑ. можно:",
@@ -52,10 +47,10 @@
"Text file" => "ТекÑтуална датотека",
"Folder" => "Папка",
"From link" => "Од врÑка",
-"Upload" => "Подигни",
"Cancel upload" => "Откажи прикачување",
"Nothing in here. Upload something!" => "Тука нема ништо. Снимете нешто!",
"Download" => "Преземи",
+"Unshare" => "Ðе Ñподелувај",
"Upload too large" => "Датотеката е премногу голема",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеките кои Ñе обидувате да ги подигнете ја надминуваат макÑималната големина за подигнување датотеки на овој Ñервер.",
"Files are being scanned, please wait." => "Се Ñкенираат датотеки, ве молам почекајте.",
diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php
index 7fa87840842..b15a9111e70 100644
--- a/apps/files/l10n/ms_MY.php
+++ b/apps/files/l10n/ms_MY.php
@@ -8,17 +8,17 @@
"Failed to write to disk" => "Gagal untuk disimpan",
"Files" => "fail",
"Delete" => "Padam",
+"Pending" => "Dalam proses",
"replace" => "ganti",
"cancel" => "Batal",
-"generating ZIP-file, it may take some time." => "sedang menghasilkan fail ZIP, mungkin mengambil sedikit masa.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes",
"Upload Error" => "Muat naik ralat",
"Close" => "Tutup",
-"Pending" => "Dalam proses",
"Upload cancelled." => "Muatnaik dibatalkan.",
"Name" => "Nama ",
"Size" => "Saiz",
"Modified" => "Dimodifikasi",
+"Upload" => "Muat naik",
"File handling" => "Pengendalian fail",
"Maximum upload size" => "Saiz maksimum muat naik",
"max. possible: " => "maksimum:",
@@ -30,7 +30,6 @@
"New" => "Baru",
"Text file" => "Fail teks",
"Folder" => "Folder",
-"Upload" => "Muat naik",
"Cancel upload" => "Batal muat naik",
"Nothing in here. Upload something!" => "Tiada apa-apa di sini. Muat naik sesuatu!",
"Download" => "Muat turun",
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
index 9be868164b1..2609923cbf4 100644
--- a/apps/files/l10n/nb_NO.php
+++ b/apps/files/l10n/nb_NO.php
@@ -7,9 +7,9 @@
"Missing a temporary folder" => "Mangler en midlertidig mappe",
"Failed to write to disk" => "Klarte ikke å skrive til disk",
"Files" => "Filer",
-"Unshare" => "Avslutt deling",
"Delete" => "Slett",
"Rename" => "Omdøp",
+"Pending" => "Ventende",
"{new_name} already exists" => "{new_name} finnes allerede",
"replace" => "erstatt",
"suggest name" => "foreslå navn",
@@ -17,20 +17,15 @@
"replaced {new_name}" => "erstatt {new_name}",
"undo" => "angre",
"replaced {new_name} with {old_name}" => "erstatt {new_name} med {old_name}",
-"deleted {files}" => "slettet {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt.",
-"generating ZIP-file, it may take some time." => "opprettet ZIP-fil, dette kan ta litt tid",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes",
"Upload Error" => "Opplasting feilet",
"Close" => "Lukk",
-"Pending" => "Ventende",
"1 file uploading" => "1 fil lastes opp",
"{count} files uploading" => "{count} filer laster opp",
"Upload cancelled." => "Opplasting avbrutt.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
"URL cannot be empty." => "URL-en kan ikke være tom.",
-"{count} files scanned" => "{count} filer lest inn",
-"error while scanning" => "feil under skanning",
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Endret",
@@ -38,6 +33,7 @@
"{count} folders" => "{count} mapper",
"1 file" => "1 fil",
"{count} files" => "{count} filer",
+"Upload" => "Last opp",
"File handling" => "Filhåndtering",
"Maximum upload size" => "Maksimum opplastingsstørrelse",
"max. possible: " => "max. mulige:",
@@ -50,10 +46,10 @@
"Text file" => "Tekstfil",
"Folder" => "Mappe",
"From link" => "Fra link",
-"Upload" => "Last opp",
"Cancel upload" => "Avbryt opplasting",
"Nothing in here. Upload something!" => "Ingenting her. Last opp noe!",
"Download" => "Last ned",
+"Unshare" => "Avslutt deling",
"Upload too large" => "Opplasting for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er for store for å laste opp til denne serveren.",
"Files are being scanned, please wait." => "Skanner etter filer, vennligst vent.",
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index 77219abcf20..6e886ad700b 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam",
+"Could not move %s" => "Kon %s niet verplaatsen",
+"Unable to rename file" => "Kan bestand niet hernoemen",
"No file was uploaded. Unknown error" => "Er was geen bestand geladen. Onbekende fout",
"There is no error, the file uploaded with success" => "Geen fout opgetreden, bestand successvol geupload.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:",
@@ -7,12 +10,12 @@
"No file was uploaded" => "Geen bestand geüpload",
"Missing a temporary folder" => "Een tijdelijke map mist",
"Failed to write to disk" => "Schrijven naar schijf mislukt",
-"Not enough space available" => "Niet genoeg ruimte beschikbaar",
"Invalid directory." => "Ongeldige directory.",
"Files" => "Bestanden",
-"Unshare" => "Stop delen",
+"Delete permanently" => "Verwijder definitief",
"Delete" => "Verwijder",
"Rename" => "Hernoem",
+"Pending" => "Wachten",
"{new_name} already exists" => "{new_name} bestaat al",
"replace" => "vervang",
"suggest name" => "Stel een naam voor",
@@ -20,23 +23,22 @@
"replaced {new_name}" => "verving {new_name}",
"undo" => "ongedaan maken",
"replaced {new_name} with {old_name}" => "verving {new_name} met {old_name}",
-"unshared {files}" => "delen gestopt {files}",
-"deleted {files}" => "verwijderde {files}",
+"perform delete operation" => "uitvoeren verwijderactie",
"'.' is an invalid file name." => "'.' is een ongeldige bestandsnaam.",
"File name cannot be empty." => "Bestandsnaam kan niet leeg zijn.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan.",
-"generating ZIP-file, it may take some time." => "aanmaken ZIP-file, dit kan enige tijd duren.",
+"Your storage is full, files can not be updated or synced anymore!" => "Uw opslagruimte zit vol, Bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Uw download wordt voorbereid. Dit kan enige tijd duren bij grote bestanden.",
"Unable to upload your file as it is a directory or has 0 bytes" => "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes",
"Upload Error" => "Upload Fout",
"Close" => "Sluit",
-"Pending" => "Wachten",
"1 file uploading" => "1 bestand wordt ge-upload",
"{count} files uploading" => "{count} bestanden aan het uploaden",
"Upload cancelled." => "Uploaden geannuleerd.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.",
"URL cannot be empty." => "URL kan niet leeg zijn.",
-"{count} files scanned" => "{count} bestanden gescanned",
-"error while scanning" => "Fout tijdens het scannen",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud",
"Name" => "Naam",
"Size" => "Bestandsgrootte",
"Modified" => "Laatst aangepast",
@@ -44,6 +46,7 @@
"{count} folders" => "{count} mappen",
"1 file" => "1 bestand",
"{count} files" => "{count} bestanden",
+"Upload" => "Upload",
"File handling" => "Bestand",
"Maximum upload size" => "Maximale bestandsgrootte voor uploads",
"max. possible: " => "max. mogelijk: ",
@@ -56,12 +59,13 @@
"Text file" => "Tekstbestand",
"Folder" => "Map",
"From link" => "Vanaf link",
-"Upload" => "Upload",
"Cancel upload" => "Upload afbreken",
"Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!",
"Download" => "Download",
+"Unshare" => "Stop delen",
"Upload too large" => "Bestanden te groot",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.",
"Files are being scanned, please wait." => "Bestanden worden gescand, even wachten.",
-"Current scanning" => "Er wordt gescand"
+"Current scanning" => "Er wordt gescand",
+"Upgrading filesystem cache..." => "Upgraden bestandssysteem cache..."
);
diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php
index 04e01a39cfc..8a4ab91ea7e 100644
--- a/apps/files/l10n/nn_NO.php
+++ b/apps/files/l10n/nn_NO.php
@@ -10,12 +10,12 @@
"Name" => "Namn",
"Size" => "Storleik",
"Modified" => "Endra",
+"Upload" => "Last opp",
"Maximum upload size" => "Maksimal opplastingsstorleik",
"Save" => "Lagre",
"New" => "Ny",
"Text file" => "Tekst fil",
"Folder" => "Mappe",
-"Upload" => "Last opp",
"Nothing in here. Upload something!" => "Ingenting her. Last noko opp!",
"Download" => "Last ned",
"Upload too large" => "For stor opplasting",
diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php
index 36bbb433394..7a39e9399f5 100644
--- a/apps/files/l10n/oc.php
+++ b/apps/files/l10n/oc.php
@@ -6,24 +6,22 @@
"Missing a temporary folder" => "Un dorsièr temporari manca",
"Failed to write to disk" => "L'escriptura sul disc a fracassat",
"Files" => "Fichièrs",
-"Unshare" => "Non parteja",
"Delete" => "Escafa",
"Rename" => "Torna nomenar",
+"Pending" => "Al esperar",
"replace" => "remplaça",
"suggest name" => "nom prepausat",
"cancel" => "anulla",
"undo" => "defar",
-"generating ZIP-file, it may take some time." => "Fichièr ZIP a se far, aquò pòt trigar un briu.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten pas que 0 octet.",
"Upload Error" => "Error d'amontcargar",
-"Pending" => "Al esperar",
"1 file uploading" => "1 fichièr al amontcargar",
"Upload cancelled." => "Amontcargar anullat.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
-"error while scanning" => "error pendant l'exploracion",
"Name" => "Nom",
"Size" => "Talha",
"Modified" => "Modificat",
+"Upload" => "Amontcarga",
"File handling" => "Manejament de fichièr",
"Maximum upload size" => "Talha maximum d'amontcargament",
"max. possible: " => "max. possible: ",
@@ -35,10 +33,10 @@
"New" => "Nòu",
"Text file" => "Fichièr de tèxte",
"Folder" => "Dorsièr",
-"Upload" => "Amontcarga",
"Cancel upload" => " Anulla l'amontcargar",
"Nothing in here. Upload something!" => "Pas res dedins. Amontcarga qualquaren",
"Download" => "Avalcarga",
+"Unshare" => "Non parteja",
"Upload too large" => "Amontcargament tròp gròs",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.",
"Files are being scanned, please wait." => "Los fiichièrs son a èsser explorats, ",
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index b96048cf002..83091bad18c 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nie można było przenieść %s - Plik o takiej nazwie już istnieje",
+"Could not move %s" => "Nie można było przenieść %s",
+"Unable to rename file" => "Nie można zmienić nazwy pliku",
"No file was uploaded. Unknown error" => "Plik nie został załadowany. Nieznany błąd",
"There is no error, the file uploaded with success" => "Przesłano plik",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini: ",
@@ -7,12 +10,11 @@
"No file was uploaded" => "Nie przesłano żadnego pliku",
"Missing a temporary folder" => "Brak katalogu tymczasowego",
"Failed to write to disk" => "Błąd zapisu na dysk",
-"Not enough space available" => "Za mało miejsca",
"Invalid directory." => "Zła ścieżka.",
"Files" => "Pliki",
-"Unshare" => "Nie udostępniaj",
"Delete" => "Usuwa element",
"Rename" => "Zmień nazwę",
+"Pending" => "OczekujÄ…ce",
"{new_name} already exists" => "{new_name} już istnieje",
"replace" => "zastap",
"suggest name" => "zasugeruj nazwÄ™",
@@ -20,24 +22,18 @@
"replaced {new_name}" => "zastÄ…piony {new_name}",
"undo" => "wróć",
"replaced {new_name} with {old_name}" => "zastÄ…piony {new_name} z {old_name}",
-"unshared {files}" => "Udostępniane wstrzymane {files}",
-"deleted {files}" => "usunięto {files}",
"'.' is an invalid file name." => "'.' jest nieprawidłową nazwą pliku.",
"File name cannot be empty." => "Nazwa pliku nie może być pusta.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Niepoprawna nazwa, Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*'sÄ… niedozwolone.",
-"generating ZIP-file, it may take some time." => "Generowanie pliku ZIP, może potrwać pewien czas.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów",
"Upload Error" => "Błąd wczytywania",
"Close" => "Zamknij",
-"Pending" => "OczekujÄ…ce",
"1 file uploading" => "1 plik wczytany",
"{count} files uploading" => "{count} przesyłanie plików",
"Upload cancelled." => "Wczytywanie anulowane.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane.",
"URL cannot be empty." => "URL nie może być pusty.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nazwa folderu nieprawidłowa. Wykorzystanie \"Shared\" jest zarezerwowane przez Owncloud",
-"{count} files scanned" => "{count} pliki skanowane",
-"error while scanning" => "Wystąpił błąd podczas skanowania",
"Name" => "Nazwa",
"Size" => "Rozmiar",
"Modified" => "Czas modyfikacji",
@@ -45,6 +41,7 @@
"{count} folders" => "{count} foldery",
"1 file" => "1 plik",
"{count} files" => "{count} pliki",
+"Upload" => "Prześlij",
"File handling" => "ZarzÄ…dzanie plikami",
"Maximum upload size" => "Maksymalny rozmiar wysyłanego pliku",
"max. possible: " => "max. możliwych",
@@ -57,10 +54,10 @@
"Text file" => "Plik tekstowy",
"Folder" => "Katalog",
"From link" => "Z linku",
-"Upload" => "Prześlij",
"Cancel upload" => "Przestań wysyłać",
"Nothing in here. Upload something!" => "Brak zawartości. Proszę wysłać pliki!",
"Download" => "Pobiera element",
+"Unshare" => "Nie udostępniaj",
"Upload too large" => "Wysyłany plik ma za duży rozmiar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Pliki które próbujesz przesłać, przekraczają maksymalną, dopuszczalną wielkość.",
"Files are being scanned, please wait." => "Skanowanie plików, proszę czekać.",
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index ece24c7a2fa..7d834b8f30d 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Não possível mover %s - Um arquivo com este nome já existe",
+"Could not move %s" => "Não possível mover %s",
+"Unable to rename file" => "Impossível renomear arquivo",
"No file was uploaded. Unknown error" => "Nenhum arquivo foi transferido. Erro desconhecido",
"There is no error, the file uploaded with success" => "Não houve nenhum erro, o arquivo foi transferido com sucesso",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O arquivo enviado excede a diretiva upload_max_filesize no php.ini: ",
@@ -7,10 +10,12 @@
"No file was uploaded" => "Nenhum arquivo foi transferido",
"Missing a temporary folder" => "Pasta temporária não encontrada",
"Failed to write to disk" => "Falha ao escrever no disco",
+"Not enough storage available" => "Espaço de armazenamento insuficiente",
+"Invalid directory." => "Diretório inválido.",
"Files" => "Arquivos",
-"Unshare" => "Descompartilhar",
"Delete" => "Excluir",
"Rename" => "Renomear",
+"Pending" => "Pendente",
"{new_name} already exists" => "{new_name} já existe",
"replace" => "substituir",
"suggest name" => "sugerir nome",
@@ -18,21 +23,19 @@
"replaced {new_name}" => "substituído {new_name}",
"undo" => "desfazer",
"replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ",
-"unshared {files}" => "{files} não compartilhados",
-"deleted {files}" => "{files} apagados",
+"'.' is an invalid file name." => "'.' é um nome de arquivo inválido.",
+"File name cannot be empty." => "O nome do arquivo não pode estar vazio.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.",
-"generating ZIP-file, it may take some time." => "gerando arquivo ZIP, isso pode levar um tempo.",
+"Your download is being prepared. This might take some time if the files are big." => "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.",
"Upload Error" => "Erro de envio",
"Close" => "Fechar",
-"Pending" => "Pendente",
"1 file uploading" => "enviando 1 arquivo",
"{count} files uploading" => "Enviando {count} arquivos",
"Upload cancelled." => "Envio cancelado.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.",
"URL cannot be empty." => "URL não pode ficar em branco",
-"{count} files scanned" => "{count} arquivos scaneados",
-"error while scanning" => "erro durante verificação",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud",
"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
@@ -40,6 +43,7 @@
"{count} folders" => "{count} pastas",
"1 file" => "1 arquivo",
"{count} files" => "{count} arquivos",
+"Upload" => "Carregar",
"File handling" => "Tratamento de Arquivo",
"Maximum upload size" => "Tamanho máximo para carregar",
"max. possible: " => "max. possível:",
@@ -52,10 +56,10 @@
"Text file" => "Arquivo texto",
"Folder" => "Pasta",
"From link" => "Do link",
-"Upload" => "Carregar",
"Cancel upload" => "Cancelar upload",
"Nothing in here. Upload something!" => "Nada aqui.Carrege alguma coisa!",
"Download" => "Baixar",
+"Unshare" => "Descompartilhar",
"Upload too large" => "Arquivo muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor.",
"Files are being scanned, please wait." => "Arquivos sendo escaneados, por favor aguarde.",
diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php
index 447cd6bdeb6..80dc774d65c 100644
--- a/apps/files/l10n/pt_PT.php
+++ b/apps/files/l10n/pt_PT.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome",
+"Could not move %s" => "Não foi possível move o ficheiro %s",
+"Unable to rename file" => "Não foi possível renomear o ficheiro",
"No file was uploaded. Unknown error" => "Nenhum ficheiro foi carregado. Erro desconhecido",
"There is no error, the file uploaded with success" => "Sem erro, ficheiro enviado com sucesso",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro enviado excede o limite permitido na directiva do php.ini upload_max_filesize",
@@ -7,36 +10,36 @@
"No file was uploaded" => "Não foi enviado nenhum ficheiro",
"Missing a temporary folder" => "Falta uma pasta temporária",
"Failed to write to disk" => "Falhou a escrita no disco",
-"Not enough space available" => "Espaço em disco insuficiente!",
+"Not enough storage available" => "Não há espaço suficiente em disco",
"Invalid directory." => "Directório Inválido",
"Files" => "Ficheiros",
-"Unshare" => "Deixar de partilhar",
+"Delete permanently" => "Eliminar permanentemente",
"Delete" => "Apagar",
"Rename" => "Renomear",
+"Pending" => "Pendente",
"{new_name} already exists" => "O nome {new_name} já existe",
"replace" => "substituir",
-"suggest name" => "Sugira um nome",
+"suggest name" => "sugira um nome",
"cancel" => "cancelar",
"replaced {new_name}" => "{new_name} substituido",
"undo" => "desfazer",
"replaced {new_name} with {old_name}" => "substituido {new_name} por {old_name}",
-"unshared {files}" => "{files} não partilhado(s)",
-"deleted {files}" => "{files} eliminado(s)",
+"perform delete operation" => "Executar a tarefa de apagar",
"'.' is an invalid file name." => "'.' não é um nome de ficheiro válido!",
"File name cannot be empty." => "O nome do ficheiro não pode estar vazio.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome Inválido, os caracteres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.",
-"generating ZIP-file, it may take some time." => "a gerar o ficheiro ZIP, poderá demorar algum tempo.",
+"Your storage is full, files can not be updated or synced anymore!" => "O seu armazenamento está cheio, os ficheiros não podem ser sincronizados.",
+"Your storage is almost full ({usedSpacePercent}%)" => "O seu espaço de armazenamento está quase cheiro ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "O seu download está a ser preparado. Este processo pode demorar algum tempo se os ficheiros forem grandes.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes",
"Upload Error" => "Erro no envio",
"Close" => "Fechar",
-"Pending" => "Pendente",
"1 file uploading" => "A enviar 1 ficheiro",
"{count} files uploading" => "A carregar {count} ficheiros",
-"Upload cancelled." => "O envio foi cancelado.",
+"Upload cancelled." => "Envio cancelado.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora.",
"URL cannot be empty." => "O URL não pode estar vazio.",
-"{count} files scanned" => "{count} ficheiros analisados",
-"error while scanning" => "erro ao analisar",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud",
"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
@@ -44,6 +47,7 @@
"{count} folders" => "{count} pastas",
"1 file" => "1 ficheiro",
"{count} files" => "{count} ficheiros",
+"Upload" => "Enviar",
"File handling" => "Manuseamento de ficheiros",
"Maximum upload size" => "Tamanho máximo de envio",
"max. possible: " => "max. possivel: ",
@@ -56,12 +60,14 @@
"Text file" => "Ficheiro de texto",
"Folder" => "Pasta",
"From link" => "Da ligação",
-"Upload" => "Enviar",
+"Trash bin" => "Reciclagem",
"Cancel upload" => "Cancelar envio",
"Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!",
"Download" => "Transferir",
+"Unshare" => "Deixar de partilhar",
"Upload too large" => "Envio muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que está a tentar enviar excedem o tamanho máximo de envio permitido neste servidor.",
"Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.",
-"Current scanning" => "Análise actual"
+"Current scanning" => "Análise actual",
+"Upgrading filesystem cache..." => "Atualizar cache do sistema de ficheiros..."
);
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index b816311fac7..79604f56ad2 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nu se poate de mutat %s - Fișier cu acest nume deja există",
+"Could not move %s" => "Nu s-a putut muta %s",
+"Unable to rename file" => "Nu s-a putut redenumi fișierul",
"No file was uploaded. Unknown error" => "Nici un fișier nu a fost încărcat. Eroare necunoscută",
"There is no error, the file uploaded with success" => "Nicio eroare, fișierul a fost încărcat cu succes",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Fisierul incarcat depaseste upload_max_filesize permisi in php.ini: ",
@@ -7,10 +10,11 @@
"No file was uploaded" => "Niciun fișier încărcat",
"Missing a temporary folder" => "Lipsește un dosar temporar",
"Failed to write to disk" => "Eroare la scriere pe disc",
+"Invalid directory." => "Director invalid.",
"Files" => "Fișiere",
-"Unshare" => "Anulează partajarea",
"Delete" => "Șterge",
"Rename" => "Redenumire",
+"Pending" => "În așteptare",
"{new_name} already exists" => "{new_name} deja exista",
"replace" => "înlocuire",
"suggest name" => "sugerează nume",
@@ -18,21 +22,19 @@
"replaced {new_name}" => "inlocuit {new_name}",
"undo" => "Anulează ultima acțiune",
"replaced {new_name} with {old_name}" => "{new_name} inlocuit cu {old_name}",
-"unshared {files}" => "nedistribuit {files}",
-"deleted {files}" => "Sterse {files}",
+"'.' is an invalid file name." => "'.' este un nume invalid de fișier.",
+"File name cannot be empty." => "Numele fișierului nu poate rămâne gol.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nume invalid, '\\', '/', '<', '>', ':', '\"', '|', '?' si '*' nu sunt permise.",
-"generating ZIP-file, it may take some time." => "se generază fișierul ZIP, va dura ceva timp.",
+"Your download is being prepared. This might take some time if the files are big." => "Se pregătește descărcarea. Aceasta poate să dureze ceva timp dacă fișierele sunt mari.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nu s-a putut încărca fișierul tău deoarece pare să fie un director sau are 0 bytes.",
"Upload Error" => "Eroare la încărcare",
"Close" => "ÃŽnchide",
-"Pending" => "În așteptare",
"1 file uploading" => "un fișier se încarcă",
"{count} files uploading" => "{count} fisiere incarcate",
"Upload cancelled." => "Încărcare anulată.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.",
"URL cannot be empty." => "Adresa URL nu poate fi goală.",
-"{count} files scanned" => "{count} fisiere scanate",
-"error while scanning" => "eroare la scanarea",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Invalid folder name. Usage of 'Shared' is reserved by Ownclou",
"Name" => "Nume",
"Size" => "Dimensiune",
"Modified" => "Modificat",
@@ -40,6 +42,7 @@
"{count} folders" => "{count} foldare",
"1 file" => "1 fisier",
"{count} files" => "{count} fisiere",
+"Upload" => "Încarcă",
"File handling" => "Manipulare fișiere",
"Maximum upload size" => "Dimensiune maximă admisă la încărcare",
"max. possible: " => "max. posibil:",
@@ -52,10 +55,10 @@
"Text file" => "Fișier text",
"Folder" => "Dosar",
"From link" => "de la adresa",
-"Upload" => "Încarcă",
"Cancel upload" => "Anulează încărcarea",
"Nothing in here. Upload something!" => "Nimic aici. Încarcă ceva!",
"Download" => "Descarcă",
+"Unshare" => "Anulează partajarea",
"Upload too large" => "Fișierul încărcat este prea mare",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fișierul care l-ai încărcat a depășită limita maximă admisă la încărcare pe acest server.",
"Files are being scanned, please wait." => "Fișierele sunt scanate, te rog așteptă.",
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index bbbeebc93d0..803b34e99c8 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Ðевозможно перемеÑтить %s - файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует",
+"Could not move %s" => "Ðевозможно перемеÑтить %s",
+"Unable to rename file" => "Ðевозможно переименовать файл",
"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:",
@@ -7,10 +10,13 @@
"No file was uploaded" => "Файл не был загружен",
"Missing a temporary folder" => "Ðевозможно найти временную папку",
"Failed to write to disk" => "Ошибка запиÑи на диÑк",
+"Not enough storage available" => "ÐедоÑтаточно доÑтупного меÑта в хранилище",
+"Invalid directory." => "Ðеправильный каталог.",
"Files" => "Файлы",
-"Unshare" => "Отменить публикацию",
+"Delete permanently" => "Удалено навÑегда",
"Delete" => "Удалить",
"Rename" => "Переименовать",
+"Pending" => "Ожидание",
"{new_name} already exists" => "{new_name} уже ÑущеÑтвует",
"replace" => "заменить",
"suggest name" => "предложить название",
@@ -18,21 +24,22 @@
"replaced {new_name}" => "заменено {new_name}",
"undo" => "отмена",
"replaced {new_name} with {old_name}" => "заменено {new_name} на {old_name}",
-"unshared {files}" => "не опубликованные {files}",
-"deleted {files}" => "удаленные {files}",
+"perform delete operation" => "выполнÑетÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ",
+"'.' is an invalid file name." => "'.' - неправильное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°.",
+"File name cannot be empty." => "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может быть пуÑтым.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ðеправильное имÑ, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопуÑтимы.",
-"generating ZIP-file, it may take some time." => "Ñоздание ZIP-файла, Ñто может занÑть некоторое времÑ.",
+"Your storage is full, files can not be updated or synced anymore!" => "Ваше диÑковое проÑтранÑтво полноÑтью заполнено, произведите очиÑтку перед загрузкой новых файлов.",
+"Your storage is almost full ({usedSpacePercent}%)" => "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Загрузка началаÑÑŒ. Это может потребовать много времени, еÑли файл большого размера.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ файл размером 0 байт в каталог",
"Upload Error" => "Ошибка загрузки",
"Close" => "Закрыть",
-"Pending" => "Ожидание",
"1 file uploading" => "загружаетÑÑ 1 файл",
"{count} files uploading" => "{count} файлов загружаетÑÑ",
"Upload cancelled." => "Загрузка отменена.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процеÑÑе загрузки. Покинув Ñтраницу вы прервёте загрузку.",
"URL cannot be empty." => "СÑылка не может быть пуÑтой.",
-"{count} files scanned" => "{count} файлов проÑканировано",
-"error while scanning" => "ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑанированиÑ",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ðеправильное Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°. Ð˜Ð¼Ñ 'Shared' зарезервировано.",
"Name" => "Ðазвание",
"Size" => "Размер",
"Modified" => "Изменён",
@@ -40,6 +47,7 @@
"{count} folders" => "{count} папок",
"1 file" => "1 файл",
"{count} files" => "{count} файлов",
+"Upload" => "Загрузить",
"File handling" => "Управление файлами",
"Maximum upload size" => "МакÑимальный размер загружаемого файла",
"max. possible: " => "макÑ. возможно: ",
@@ -52,12 +60,13 @@
"Text file" => "ТекÑтовый файл",
"Folder" => "Папка",
"From link" => "Из ÑÑылки",
-"Upload" => "Загрузить",
"Cancel upload" => "Отмена загрузки",
"Nothing in here. Upload something!" => "ЗдеÑÑŒ ничего нет. Загрузите что-нибудь!",
"Download" => "Скачать",
+"Unshare" => "Отменить публикацию",
"Upload too large" => "Файл Ñлишком большой",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файлы, которые Ð’Ñ‹ пытаетеÑÑŒ загрузить, превышают лимит Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² на Ñтом Ñервере.",
"Files are being scanned, please wait." => "Подождите, файлы ÑканируютÑÑ.",
-"Current scanning" => "Текущее Ñканирование"
+"Current scanning" => "Текущее Ñканирование",
+"Upgrading filesystem cache..." => "Обновление кеша файловой ÑиÑтемы..."
);
diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php
index 16bcc54e59f..b6354442127 100644
--- a/apps/files/l10n/ru_RU.php
+++ b/apps/files/l10n/ru_RU.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "ÐеполучаетÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти %s - Файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует",
+"Could not move %s" => "ÐеполучаетÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти %s ",
+"Unable to rename file" => "Ðевозможно переименовать файл",
"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:",
@@ -7,10 +10,13 @@
"No file was uploaded" => "Файл не был загружен",
"Missing a temporary folder" => "ОтÑутÑтвует Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°",
"Failed to write to disk" => "Ðе удалоÑÑŒ запиÑать на диÑк",
+"Not enough storage available" => "ÐедоÑтаточно меÑта в хранилище",
+"Invalid directory." => "Ðеверный каталог.",
"Files" => "Файлы",
-"Unshare" => "Скрыть",
+"Delete permanently" => "Удалить навÑегда",
"Delete" => "Удалить",
"Rename" => "Переименовать",
+"Pending" => "Ожидающий решениÑ",
"{new_name} already exists" => "{новое_имÑ} уже ÑущеÑтвует",
"replace" => "отмена",
"suggest name" => "подобрать название",
@@ -18,21 +24,22 @@
"replaced {new_name}" => "заменено {новое_имÑ}",
"undo" => "отменить дейÑтвие",
"replaced {new_name} with {old_name}" => "заменено {новое_имÑ} Ñ {Ñтарое_имÑ}",
-"unshared {files}" => "CовмеÑтное иÑпользование прекращено {файлы}",
-"deleted {files}" => "удалено {файлы}",
+"perform delete operation" => "выполнÑетÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ",
+"'.' is an invalid file name." => "'.' ÑвлÑетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¼ именем файла.",
+"File name cannot be empty." => "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может быть пуÑтым.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ðекорректное имÑ, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не допуÑтимы.",
-"generating ZIP-file, it may take some time." => "Создание ZIP-файла, Ñто может занÑть некоторое времÑ.",
+"Your storage is full, files can not be updated or synced anymore!" => "Ваше хранилище переполнено, фалы больше не могут быть обновлены или Ñинхронизированы!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Ваше хранилище почти полно ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Идёт подготовка к Ñкачке Вашего файла. Это может занÑть некоторое времÑ, еÑли фалы большие.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðевозможно загрузить файл,\n так как он имеет нулевой размер или ÑвлÑетÑÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸ÐµÐ¹",
"Upload Error" => "Ошибка загрузки",
"Close" => "Закрыть",
-"Pending" => "Ожидающий решениÑ",
"1 file uploading" => "загрузка 1 файла",
"{count} files uploading" => "{количеÑтво} загружено файлов",
"Upload cancelled." => "Загрузка отменена",
"File upload is in progress. Leaving the page now will cancel the upload." => "ПроцеÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла. ЕÑли покинуть Ñтраницу ÑейчаÑ, загрузка будет отменена.",
"URL cannot be empty." => "URL не должен быть пуÑтым.",
-"{count} files scanned" => "{количеÑтво} файлов отÑканировано",
-"error while scanning" => "ошибка при Ñканировании",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ðеверное Ð¸Ð¼Ñ Ð¿Ð°Ð¿ÐºÐ¸. ИÑпользование Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ 'Опубликовано' зарезервировано Owncloud",
"Name" => "ИмÑ",
"Size" => "Размер",
"Modified" => "Изменен",
@@ -40,6 +47,7 @@
"{count} folders" => "{количеÑтво} папок",
"1 file" => "1 файл",
"{count} files" => "{количеÑтво} файлов",
+"Upload" => "Загрузить ",
"File handling" => "Работа Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸",
"Maximum upload size" => "МакÑимальный размер загружаемого файла",
"max. possible: " => "МакÑимально возможный",
@@ -52,12 +60,14 @@
"Text file" => "ТекÑтовый файл",
"Folder" => "Папка",
"From link" => "По ÑÑылке",
-"Upload" => "Загрузить ",
+"Trash bin" => "Корзина",
"Cancel upload" => "Отмена загрузки",
"Nothing in here. Upload something!" => "ЗдеÑÑŒ ничего нет. Загрузите что-нибудь!",
"Download" => "Загрузить",
+"Unshare" => "Скрыть",
"Upload too large" => "Загрузка Ñлишком велика",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Размер файлов, которые Ð’Ñ‹ пытаетеÑÑŒ загрузить, превышает макÑимально допуÑтимый размер Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ на данный Ñервер.",
"Files are being scanned, please wait." => "Файлы ÑканируютÑÑ, пожалуйÑта, подождите.",
-"Current scanning" => "Текущее Ñканирование"
+"Current scanning" => "Текущее Ñканирование",
+"Upgrading filesystem cache..." => "Обновление кÑша файловой ÑиÑтемы... "
);
diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php
index e1e06c4f814..de2b8906845 100644
--- a/apps/files/l10n/si_LK.php
+++ b/apps/files/l10n/si_LK.php
@@ -7,26 +7,24 @@
"Missing a temporary folder" => "à¶­à·à·€à¶šà·à¶½à·’à¶š ෆොල්ඩරයක් සොයà·à¶œà¶­ නොහà·à¶š",
"Failed to write to disk" => "à¶­à·à¶§à·’ගත කිරීම à¶…à·ƒà·à¶»à·Šà¶®à¶šà¶ºà·’",
"Files" => "ගොනු",
-"Unshare" => "නොබෙදු",
"Delete" => "මකන්න",
"Rename" => "à¶±à·à·€à¶­ නම් කරන්න",
"replace" => "à¶´à·Šâ€à¶»à¶­à·’ස්ථà·à¶´à¶±à¶º කරන්න",
"suggest name" => "නමක් යà·à¶¢à¶±à· කරන්න",
"cancel" => "අත් හරින්න",
"undo" => "නිෂ්ප්â€à¶»à¶· කරන්න",
-"generating ZIP-file, it may take some time." => "ගොනුවක් සෑදෙමින් පවතී. කෙටි වේලà·à·€à¶šà·Š ගත විය à·„à·à¶š",
"Upload Error" => "උඩුගත කිරීමේ දà·à·à¶ºà¶šà·Š",
"Close" => "වසන්න",
"1 file uploading" => "1 ගොනුවක් උඩගත කෙරේ",
"Upload cancelled." => "උඩුගත කිරීම අත් හරින්න ලදී",
"File upload is in progress. Leaving the page now will cancel the upload." => "උඩුගතකිරීමක් සිදුවේ. පිටුව à·„à·à¶» යà·à¶¸à·™à¶±à·Š එය à¶±à·à·€à¶­à·™à¶±à·” ඇත",
"URL cannot be empty." => "යොමුව හිස් විය නොහà·à¶š",
-"error while scanning" => "පරීක්ෂ෠කිරීමේදී දà·à·‚යක්",
"Name" => "නම",
"Size" => "à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º",
"Modified" => "වෙනස් කළ",
"1 folder" => "1 ෆොල්ඩරයක්",
"1 file" => "1 ගොනුවක්",
+"Upload" => "උඩුගත කිරීම",
"File handling" => "ගොනු පරිහරණය",
"Maximum upload size" => "උඩුගත කිරීමක උපරිම à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º",
"max. possible: " => "à·„à·à¶šà·’ උපරිමය:",
@@ -39,10 +37,10 @@
"Text file" => "පෙළ ගොනුව",
"Folder" => "à·†à·à¶½à·Šà¶©à¶»à¶º",
"From link" => "යොමුවෙන්",
-"Upload" => "උඩුගත කිරීම",
"Cancel upload" => "උඩුගත කිරීම අත් හරින්න",
"Nothing in here. Upload something!" => "මෙහි කිසිවක් නොමà·à¶­. යමක් උඩුගත කරන්න",
"Download" => "à¶¶à·à¶œà¶­ කිරීම",
+"Unshare" => "නොබෙදු",
"Upload too large" => "උඩුගත කිරීම විà·à·à¶½ à·€à·à¶©à·’ය",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ඔබ උඩුගත කිරීමට à¶­à·à¶­à·Š කරන ගොනු මෙම සේවà·à¶¯à·à¶ºà¶šà¶ºà· උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විà·à·à¶½à¶­à·Šà·€à¶ºà¶§ වඩ෠වà·à¶©à·’ය",
"Files are being scanned, please wait." => "ගොනු පරික්ෂ෠කෙරේ. මඳක් à¶»à·à¶³à·“ සිටින්න",
diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php
index 003b1aff225..64ba7420d34 100644
--- a/apps/files/l10n/sk_SK.php
+++ b/apps/files/l10n/sk_SK.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nie je možné presunúť %s - súbor s týmto menom už existuje",
+"Could not move %s" => "Nie je možné presunúť %s",
+"Unable to rename file" => "Nemožno premenovať súbor",
"No file was uploaded. Unknown error" => "Žiaden súbor nebol odoslaný. Neznáma chyba",
"There is no error, the file uploaded with success" => "Nenastala žiadna chyba, súbor bol úspešne nahraný",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Nahraný súbor predÄil konfiguraÄnú direktívu upload_max_filesize v súbore php.ini:",
@@ -7,10 +10,13 @@
"No file was uploaded" => "Žiaden súbor nebol nahraný",
"Missing a temporary folder" => "Chýbajúci doÄasný prieÄinok",
"Failed to write to disk" => "Zápis na disk sa nepodaril",
+"Not enough storage available" => "Nedostatok dostupného úložného priestoru",
+"Invalid directory." => "Neplatný prieÄinok",
"Files" => "Súbory",
-"Unshare" => "Nezdielať",
+"Delete permanently" => "Zmazať trvalo",
"Delete" => "Odstrániť",
"Rename" => "Premenovať",
+"Pending" => "Čaká sa",
"{new_name} already exists" => "{new_name} už existuje",
"replace" => "nahradiť",
"suggest name" => "pomôcť s menom",
@@ -18,21 +24,22 @@
"replaced {new_name}" => "prepísaný {new_name}",
"undo" => "vrátiť",
"replaced {new_name} with {old_name}" => "prepísaný {new_name} súborom {old_name}",
-"unshared {files}" => "zdieľanie zrušené pre {files}",
-"deleted {files}" => "zmazané {files}",
+"perform delete operation" => "vykonať zmazanie",
+"'.' is an invalid file name." => "'.' je neplatné meno súboru.",
+"File name cannot be empty." => "Meno súboru nemôže byť prázdne",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.",
-"generating ZIP-file, it may take some time." => "generujem ZIP-súbor, môže to chvíľu trvať.",
+"Your storage is full, files can not be updated or synced anymore!" => "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nemôžem nahraÅ¥ súbor lebo je to prieÄinok alebo má 0 bajtov.",
"Upload Error" => "Chyba odosielania",
"Close" => "Zavrieť",
-"Pending" => "Čaká sa",
"1 file uploading" => "1 súbor sa posiela ",
"{count} files uploading" => "{count} súborov odosielaných",
"Upload cancelled." => "Odosielanie zrušené",
"File upload is in progress. Leaving the page now will cancel the upload." => "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
"URL cannot be empty." => "URL nemôže byť prázdne",
-"{count} files scanned" => "{count} súborov prehľadaných",
-"error while scanning" => "chyba poÄas kontroly",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatné meno prieÄinka. Používanie mena 'Shared' je vyhradené len pre Owncloud",
"Name" => "Meno",
"Size" => "Veľkosť",
"Modified" => "Upravené",
@@ -40,10 +47,11 @@
"{count} folders" => "{count} prieÄinkov",
"1 file" => "1 súbor",
"{count} files" => "{count} súborov",
-"File handling" => "Nastavenie správanie k súborom",
+"Upload" => "Odoslať",
+"File handling" => "Nastavenie správania sa k súborom",
"Maximum upload size" => "Maximálna veľkosť odosielaného súboru",
"max. possible: " => "najväÄÅ¡ie možné:",
-"Needed for multi-file and folder downloads." => "Vyžadované pre sťahovanie viacerých súborov a adresárov.",
+"Needed for multi-file and folder downloads." => "Vyžadované pre sÅ¥ahovanie viacerých súborov a prieÄinkov.",
"Enable ZIP-download" => "Povoliť sťahovanie ZIP súborov",
"0 is unlimited" => "0 znamená neobmedzené",
"Maximum input size for ZIP files" => "NajväÄÅ¡ia veľkosÅ¥ ZIP súborov",
@@ -52,12 +60,14 @@
"Text file" => "Textový súbor",
"Folder" => "PrieÄinok",
"From link" => "Z odkazu",
-"Upload" => "Odoslať",
+"Trash bin" => "Kôš",
"Cancel upload" => "Zrušiť odosielanie",
"Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte nieÄo!",
"Download" => "Stiahnuť",
+"Unshare" => "Nezdielať",
"Upload too large" => "Odosielaný súbor je príliš veľký",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
"Files are being scanned, please wait." => "Čakajte, súbory sú prehľadávané.",
-"Current scanning" => "Práve prehliadané"
+"Current scanning" => "Práve prezerané",
+"Upgrading filesystem cache..." => "Aktualizujem medzipamäť súborového systému..."
);
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index 2a0f4506386..6a379459f0e 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -8,9 +8,9 @@
"Missing a temporary folder" => "Manjka zaÄasna mapa",
"Failed to write to disk" => "Pisanje na disk je spodletelo",
"Files" => "Datoteke",
-"Unshare" => "Odstrani iz souporabe",
"Delete" => "Izbriši",
"Rename" => "Preimenuj",
+"Pending" => "V Äakanju ...",
"{new_name} already exists" => "{new_name} že obstaja",
"replace" => "zamenjaj",
"suggest name" => "predlagaj ime",
@@ -18,21 +18,15 @@
"replaced {new_name}" => "zamenjano je ime {new_name}",
"undo" => "razveljavi",
"replaced {new_name} with {old_name}" => "zamenjano ime {new_name} z imenom {old_name}",
-"unshared {files}" => "odstranjeno iz souporabe {files}",
-"deleted {files}" => "izbrisano {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neveljavno ime, znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni.",
-"generating ZIP-file, it may take some time." => "Ustvarjanje datoteke ZIP. To lahko traja nekaj Äasa.",
"Unable to upload your file as it is a directory or has 0 bytes" => "PoÅ¡iljanje ni mogoÄe, saj gre za mapo, ali pa je datoteka velikosti 0 bajtov.",
"Upload Error" => "Napaka med nalaganjem",
"Close" => "Zapri",
-"Pending" => "V Äakanju ...",
"1 file uploading" => "Pošiljanje 1 datoteke",
"{count} files uploading" => "nalagam {count} datotek",
"Upload cancelled." => "Pošiljanje je preklicano.",
"File upload is in progress. Leaving the page now will cancel the upload." => "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.",
"URL cannot be empty." => "Naslov URL ne sme biti prazen.",
-"{count} files scanned" => "{count} files scanned",
-"error while scanning" => "napaka med pregledovanjem datotek",
"Name" => "Ime",
"Size" => "Velikost",
"Modified" => "Spremenjeno",
@@ -40,6 +34,7 @@
"{count} folders" => "{count} map",
"1 file" => "1 datoteka",
"{count} files" => "{count} datotek",
+"Upload" => "Pošlji",
"File handling" => "Upravljanje z datotekami",
"Maximum upload size" => "NajveÄja velikost za poÅ¡iljanja",
"max. possible: " => "najveÄ mogoÄe:",
@@ -52,10 +47,10 @@
"Text file" => "Besedilna datoteka",
"Folder" => "Mapa",
"From link" => "Iz povezave",
-"Upload" => "Pošlji",
"Cancel upload" => "PrekliÄi poÅ¡iljanje",
"Nothing in here. Upload something!" => "Tukaj ni niÄesar. Naložite kaj!",
"Download" => "Prejmi",
+"Unshare" => "Odstrani iz souporabe",
"Upload too large" => "Nalaganje ni mogoÄe, ker je preveliko",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite naložiti, presegajo najveÄjo dovoljeno velikost na tem strežniku.",
"Files are being scanned, please wait." => "Poteka preuÄevanje datotek, poÄakajte ...",
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
index ecde8be4cc0..e50d6612c4c 100644
--- a/apps/files/l10n/sr.php
+++ b/apps/files/l10n/sr.php
@@ -7,9 +7,9 @@
"Missing a temporary folder" => "ÐедоÑтаје привремена фаÑцикла",
"Failed to write to disk" => "Ðе могу да пишем на диÑк",
"Files" => "Датотеке",
-"Unshare" => "Укини дељење",
"Delete" => "Обриши",
"Rename" => "Преименуј",
+"Pending" => "Ðа чекању",
"{new_name} already exists" => "{new_name} већ поÑтоји",
"replace" => "замени",
"suggest name" => "предложи назив",
@@ -17,20 +17,14 @@
"replaced {new_name}" => "замењено {new_name}",
"undo" => "опозови",
"replaced {new_name} with {old_name}" => "замењено {new_name} Ñа {old_name}",
-"unshared {files}" => "укинуто дељење {files}",
-"deleted {files}" => "обриÑано {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "ÐеиÑправан назив. Следећи знакови ниÑу дозвољени: \\, /, <, >, :, \", |, ? и *.",
-"generating ZIP-file, it may take some time." => "правим ZIP датотеку…",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðе могу да отпремим датотеку као фаÑциклу или она има 0 бајтова",
"Upload Error" => "Грешка при отпремању",
"Close" => "Затвори",
-"Pending" => "Ðа чекању",
"1 file uploading" => "Отпремам 1 датотеку",
"{count} files uploading" => "Отпремам {count} датотеке/а",
"Upload cancelled." => "Отпремање је прекинуто.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Отпремање датотеке је у току. Ðко Ñада напуÑтите Ñтраницу, прекинућете отпремање.",
-"{count} files scanned" => "Скенирано датотека: {count}",
-"error while scanning" => "грешка при Ñкенирању",
"Name" => "Ðазив",
"Size" => "Величина",
"Modified" => "Измењено",
@@ -38,6 +32,7 @@
"{count} folders" => "{count} фаÑцикле/и",
"1 file" => "1 датотека",
"{count} files" => "{count} датотеке/а",
+"Upload" => "Отпреми",
"File handling" => "Управљање датотекама",
"Maximum upload size" => "Ðајвећа величина датотеке",
"max. possible: " => "највећа величина:",
@@ -50,10 +45,10 @@
"Text file" => "текÑтуална датотека",
"Folder" => "фаÑцикла",
"From link" => "Са везе",
-"Upload" => "Отпреми",
"Cancel upload" => "Прекини отпремање",
"Nothing in here. Upload something!" => "Овде нема ничег. Отпремите нешто!",
"Download" => "Преузми",
+"Unshare" => "Укини дељење",
"Upload too large" => "Датотека је превелика",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеке које желите да отпремите прелазе ограничење у величини.",
"Files are being scanned, please wait." => "Скенирам датотеке…",
diff --git a/apps/files/l10n/sr@latin.php b/apps/files/l10n/sr@latin.php
index fddaf5840ce..0fda24532dc 100644
--- a/apps/files/l10n/sr@latin.php
+++ b/apps/files/l10n/sr@latin.php
@@ -10,9 +10,9 @@
"Name" => "Ime",
"Size" => "VeliÄina",
"Modified" => "Zadnja izmena",
+"Upload" => "Pošalji",
"Maximum upload size" => "Maksimalna veliÄina poÅ¡iljke",
"Save" => "Snimi",
-"Upload" => "Pošalji",
"Nothing in here. Upload something!" => "Ovde nema niÄeg. PoÅ¡aljite neÅ¡to!",
"Download" => "Preuzmi",
"Upload too large" => "Pošiljka je prevelika",
diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php
index 7277ec17852..5e484ec1304 100644
--- a/apps/files/l10n/sv.php
+++ b/apps/files/l10n/sv.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Kunde inte flytta %s - Det finns redan en fil med detta namn",
+"Could not move %s" => "Kan inte flytta %s",
+"Unable to rename file" => "Kan inte byta namn på filen",
"No file was uploaded. Unknown error" => "Ingen fil uppladdad. Okänt fel",
"There is no error, the file uploaded with success" => "Inga fel uppstod. Filen laddades upp utan problem",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uppladdade filen överskrider upload_max_filesize direktivet php.ini:",
@@ -7,12 +10,13 @@
"No file was uploaded" => "Ingen fil blev uppladdad",
"Missing a temporary folder" => "Saknar en tillfällig mapp",
"Failed to write to disk" => "Misslyckades spara till disk",
-"Not enough space available" => "Inte tillräckligt med utrymme tillgängligt",
+"Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt",
"Invalid directory." => "Felaktig mapp.",
"Files" => "Filer",
-"Unshare" => "Sluta dela",
+"Delete permanently" => "Radera permanent",
"Delete" => "Radera",
"Rename" => "Byt namn",
+"Pending" => "Väntar",
"{new_name} already exists" => "{new_name} finns redan",
"replace" => "ersätt",
"suggest name" => "föreslå namn",
@@ -20,24 +24,22 @@
"replaced {new_name}" => "ersatt {new_name}",
"undo" => "Ã¥ngra",
"replaced {new_name} with {old_name}" => "ersatt {new_name} med {old_name}",
-"unshared {files}" => "stoppad delning {files}",
-"deleted {files}" => "raderade {files}",
+"perform delete operation" => "utför raderingen",
"'.' is an invalid file name." => "'.' är ett ogiltigt filnamn.",
"File name cannot be empty." => "Filnamn kan inte vara tomt.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
-"generating ZIP-file, it may take some time." => "genererar ZIP-fil, det kan ta lite tid.",
+"Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan ej längre laddas upp eller synkas!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Din nedladdning förbereds. Det kan ta tid om det är stora filer.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes.",
"Upload Error" => "Uppladdningsfel",
"Close" => "Stäng",
-"Pending" => "Väntar",
"1 file uploading" => "1 filuppladdning",
"{count} files uploading" => "{count} filer laddas upp",
"Upload cancelled." => "Uppladdning avbruten.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
"URL cannot be empty." => "URL kan inte vara tom.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud",
-"{count} files scanned" => "{count} filer skannade",
-"error while scanning" => "fel vid skanning",
"Name" => "Namn",
"Size" => "Storlek",
"Modified" => "Ändrad",
@@ -45,6 +47,7 @@
"{count} folders" => "{count} mappar",
"1 file" => "1 fil",
"{count} files" => "{count} filer",
+"Upload" => "Ladda upp",
"File handling" => "Filhantering",
"Maximum upload size" => "Maximal storlek att ladda upp",
"max. possible: " => "max. möjligt:",
@@ -57,12 +60,14 @@
"Text file" => "Textfil",
"Folder" => "Mapp",
"From link" => "Från länk",
-"Upload" => "Ladda upp",
+"Trash bin" => "Papperskorg",
"Cancel upload" => "Avbryt uppladdning",
"Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!",
"Download" => "Ladda ner",
+"Unshare" => "Sluta dela",
"Upload too large" => "För stor uppladdning",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.",
"Files are being scanned, please wait." => "Filer skannas, var god vänta",
-"Current scanning" => "Aktuell skanning"
+"Current scanning" => "Aktuell skanning",
+"Upgrading filesystem cache..." => "Uppgraderar filsystemets cache..."
);
diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php
index 16cab5cf963..069a2ac5823 100644
--- a/apps/files/l10n/ta_LK.php
+++ b/apps/files/l10n/ta_LK.php
@@ -7,9 +7,9 @@
"Missing a temporary folder" => "ஒர௠தறà¯à®•ாலிகமான கோபà¯à®ªà¯à®±à¯ˆà®¯à¯ˆ காணவிலà¯à®²à¯ˆ",
"Failed to write to disk" => "வடà¯à®Ÿà®¿à®²à¯ எழà¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ",
"Files" => "கோபà¯à®ªà¯à®•ளà¯",
-"Unshare" => "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯",
"Delete" => "அழிகà¯à®•",
"Rename" => "பெயரà¯à®®à®¾à®±à¯à®±à®®à¯",
+"Pending" => "நிலà¯à®µà¯ˆà®¯à®¿à®²à¯à®³à¯à®³",
"{new_name} already exists" => "{new_name} à®à®±à¯à®•னவே உளà¯à®³à®¤à¯",
"replace" => "மாறà¯à®±à®¿à®Ÿà¯à®•",
"suggest name" => "பெயரை பரிநà¯à®¤à¯à®°à¯ˆà®•à¯à®•",
@@ -17,21 +17,15 @@
"replaced {new_name}" => "மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ {new_name}",
"undo" => "à®®à¯à®©à¯ செயல௠நீகà¯à®•ம௠",
"replaced {new_name} with {old_name}" => "{new_name} ஆனத௠{old_name} இனால௠மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
-"unshared {files}" => "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯ {கோபà¯à®ªà¯à®•ளà¯}",
-"deleted {files}" => "நீகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ {கோபà¯à®ªà¯à®•ளà¯}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± பெயரà¯,'\\', '/', '<', '>', ':', '\"', '|', '?' மறà¯à®±à¯à®®à¯ '*' ஆகியன அனà¯à®®à®¤à®¿à®•à¯à®•பà¯à®ªà®Ÿà®®à®¾à®Ÿà¯à®Ÿà®¾à®¤à¯.",
-"generating ZIP-file, it may take some time." => " ZIP கோபà¯à®ªà¯ உரà¯à®µà®¾à®•à¯à®•பà¯à®ªà®Ÿà¯à®•ினà¯à®±à®¤à¯, இத௠சில நேரம௠ஆகலாமà¯.",
"Unable to upload your file as it is a directory or has 0 bytes" => "அடைவ௠அலà¯à®²à®¤à¯ 0 bytes ஠கொணà¯à®Ÿà¯à®³à¯à®³à®¤à®¾à®²à¯ உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கோபà¯à®ªà¯ˆ பதிவேறà¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ",
"Upload Error" => "பதிவேறà¯à®±à®²à¯ வழà¯",
"Close" => "மூடà¯à®•",
-"Pending" => "நிலà¯à®µà¯ˆà®¯à®¿à®²à¯à®³à¯à®³",
"1 file uploading" => "1 கோபà¯à®ªà¯ பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®•ிறதà¯",
"{count} files uploading" => "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®•ள௠பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®•ினà¯à®±à®¤à¯",
"Upload cancelled." => "பதிவேறà¯à®±à®²à¯ இரதà¯à®¤à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯",
"File upload is in progress. Leaving the page now will cancel the upload." => "கோபà¯à®ªà¯ பதிவேறà¯à®±à®®à¯ செயலà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ உளà¯à®³à®¤à¯. இநà¯à®¤à®ªà¯ பகà¯à®•தà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வெறியேறà¯à®µà®¤à®¾à®©à®¤à¯ பதிவேறà¯à®±à®²à¯ˆ இரதà¯à®¤à¯ செயà¯à®¯à¯à®®à¯.",
"URL cannot be empty." => "URL வெறà¯à®®à¯ˆà®¯à®¾à®• இரà¯à®•à¯à®•à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯.",
-"{count} files scanned" => "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®•ள௠வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
-"error while scanning" => "வரà¯à®Ÿà¯à®®à¯ போதான வழà¯",
"Name" => "பெயரà¯",
"Size" => "அளவà¯",
"Modified" => "மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
@@ -39,6 +33,7 @@
"{count} folders" => "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®±à¯ˆà®•ளà¯",
"1 file" => "1 கோபà¯à®ªà¯",
"{count} files" => "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®•ளà¯",
+"Upload" => "பதிவேறà¯à®±à¯à®•",
"File handling" => "கோபà¯à®ªà¯ கையாளà¯à®¤à®²à¯",
"Maximum upload size" => "பதிவேறà¯à®±à®•à¯à®•ூடிய ஆககà¯à®•ூடிய அளவ௠",
"max. possible: " => "ஆகக௠கூடியதà¯:",
@@ -51,10 +46,10 @@
"Text file" => "கோபà¯à®ªà¯ உரை",
"Folder" => "கோபà¯à®ªà¯à®±à¯ˆ",
"From link" => "இணைபà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯",
-"Upload" => "பதிவேறà¯à®±à¯à®•",
"Cancel upload" => "பதிவேறà¯à®±à®²à¯ˆ இரதà¯à®¤à¯ செயà¯à®•",
"Nothing in here. Upload something!" => "இஙà¯à®•௠ஒனà¯à®±à¯à®®à¯ இலà¯à®²à¯ˆ. à®à®¤à®¾à®µà®¤à¯ பதிவேறà¯à®±à¯à®•!",
"Download" => "பதிவிறகà¯à®•à¯à®•",
+"Unshare" => "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯",
"Upload too large" => "பதிவேறà¯à®±à®²à¯ மிகபà¯à®ªà¯†à®°à®¿à®¯à®¤à¯",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "நீஙà¯à®•ள௠பதிவேறà¯à®± à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à¯à®®à¯ கோபà¯à®ªà¯à®•ளானத௠இநà¯à®¤ சேவையகதà¯à®¤à®¿à®²à¯ கோபà¯à®ªà¯ பதிவேறà¯à®±à®•à¯à®•ூடிய ஆககà¯à®•ூடிய அளவிலà¯à®®à¯ கூடியதà¯.",
"Files are being scanned, please wait." => "கோபà¯à®ªà¯à®•ள௠வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®•ினà¯à®±à®©, தயவà¯à®šà¯†à®¯à¯à®¤à¯ காதà¯à®¤à®¿à®°à¯à®™à¯à®•ளà¯.",
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index 3fda142a4e9..fce74874f13 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่à¹à¸¥à¹‰à¸§",
+"Could not move %s" => "ไม่สามารถย้าย %s ได้",
+"Unable to rename file" => "ไม่สามารถเปลี่ยนชื่อไฟล์ได้",
"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",
@@ -7,10 +10,12 @@
"No file was uploaded" => "ยังไม่มีไฟล์ที่ถูà¸à¸­à¸±à¸žà¹‚หลด",
"Missing a temporary folder" => "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£à¸Šà¸±à¹ˆà¸§à¸„ราวเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢",
"Failed to write to disk" => "เขียนข้อมูลลงà¹à¸œà¹ˆà¸™à¸”ิสà¸à¹Œà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§",
+"Not enough storage available" => "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
+"Invalid directory." => "ไดเร็à¸à¸—อรี่ไม่ถูà¸à¸•้อง",
"Files" => "ไฟล์",
-"Unshare" => "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล",
"Delete" => "ลบ",
"Rename" => "เปลี่ยนชื่อ",
+"Pending" => "อยู่ระหว่างดำเนินà¸à¸²à¸£",
"{new_name} already exists" => "{new_name} มีอยู่à¹à¸¥à¹‰à¸§à¹ƒà¸™à¸£à¸°à¸šà¸š",
"replace" => "à¹à¸—นที่",
"suggest name" => "à¹à¸™à¸°à¸™à¸³à¸Šà¸·à¹ˆà¸­",
@@ -18,21 +23,22 @@
"replaced {new_name}" => "à¹à¸—นที่ {new_name} à¹à¸¥à¹‰à¸§",
"undo" => "เลิà¸à¸—ำ",
"replaced {new_name} with {old_name}" => "à¹à¸—นที่ {new_name} ด้วย {old_name} à¹à¸¥à¹‰à¸§",
-"unshared {files}" => "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¹à¸¥à¹‰à¸§ {files} ไฟล์",
-"deleted {files}" => "ลบไฟล์à¹à¸¥à¹‰à¸§ {files} ไฟล์",
+"perform delete operation" => "ดำเนินà¸à¸²à¸£à¸•ามคำสั่งลบ",
+"'.' is an invalid file name." => "'.' เป็นชื่อไฟล์ที่ไม่ถูà¸à¸•้อง",
+"File name cannot be empty." => "ชื่อไฟล์ไม่สามารถเว้นว่างได้",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "ชื่อที่ใช้ไม่ถูà¸à¸•้อง, '\\', '/', '<', '>', ':', '\"', '|', '?' à¹à¸¥à¸° '*' ไม่ได้รับอนุà¸à¸²à¸•ให้ใช้งานได้",
-"generating ZIP-file, it may take some time." => "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์บีบอัด ZIP อาจใช้เวลาสัà¸à¸„รู่",
+"Your storage is full, files can not be updated or synced anymore!" => "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลของคุณเต็มà¹à¸¥à¹‰à¸§ ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีà¸à¸•่อไป",
+"Your storage is almost full ({usedSpacePercent}%)" => "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลของคุณใà¸à¸¥à¹‰à¹€à¸•็มà¹à¸¥à¹‰à¸§ ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "à¸à¸³à¸¥à¸±à¸‡à¹€à¸•รียมดาวน์โหลดข้อมูล หาà¸à¹„ฟล์มีขนาดใหà¸à¹ˆ อาจใช้เวลาสัà¸à¸„รู่",
"Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจาà¸à¹„ฟล์ดังà¸à¸¥à¹ˆà¸²à¸§à¹€à¸›à¹‡à¸™à¹„ดเร็à¸à¸—อรี่หรือมีขนาด 0 ไบต์",
"Upload Error" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด",
"Close" => "ปิด",
-"Pending" => "อยู่ระหว่างดำเนินà¸à¸²à¸£",
"1 file uploading" => "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹‚หลดไฟล์ 1 ไฟล์",
"{count} files uploading" => "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹‚หลด {count} ไฟล์",
"Upload cancelled." => "à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸¢à¸à¹€à¸¥à¸´à¸",
"File upload is in progress. Leaving the page now will cancel the upload." => "à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดไฟล์à¸à¸³à¸¥à¸±à¸‡à¸­à¸¢à¸¹à¹ˆà¹ƒà¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸”ำเนินà¸à¸²à¸£ à¸à¸²à¸£à¸­à¸­à¸à¸ˆà¸²à¸à¸«à¸™à¹‰à¸²à¹€à¸§à¹‡à¸šà¸™à¸µà¹‰à¸ˆà¸°à¸—ำให้à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸¢à¸à¹€à¸¥à¸´à¸",
"URL cannot be empty." => "URL ไม่สามารถเว้นว่างได้",
-"{count} files scanned" => "สà¹à¸à¸™à¹„ฟล์à¹à¸¥à¹‰à¸§ {count} ไฟล์",
-"error while scanning" => "พบข้อผิดพลาดในระหว่างà¸à¸²à¸£à¸ªà¹à¸à¸™à¹„ฟล์",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "ชื่อโฟลเดอร์ไม่ถูà¸à¸•้อง à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ 'à¹à¸Šà¸£à¹Œ' สงวนไว้สำหรับ Owncloud เท่านั้น",
"Name" => "ชื่อ",
"Size" => "ขนาด",
"Modified" => "ปรับปรุงล่าสุด",
@@ -40,6 +46,7 @@
"{count} folders" => "{count} โฟลเดอร์",
"1 file" => "1 ไฟล์",
"{count} files" => "{count} ไฟล์",
+"Upload" => "อัพโหลด",
"File handling" => "à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¹„ฟล์",
"Maximum upload size" => "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
"max. possible: " => "จำนวนสูงสุดที่สามารถทำได้: ",
@@ -52,12 +59,13 @@
"Text file" => "ไฟล์ข้อความ",
"Folder" => "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£",
"From link" => "จาà¸à¸¥à¸´à¸‡à¸à¹Œ",
-"Upload" => "อัพโหลด",
"Cancel upload" => "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด",
"Nothing in here. Upload something!" => "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ à¸à¸£à¸¸à¸“าอัพโหลดไฟล์!",
"Download" => "ดาวน์โหลด",
+"Unshare" => "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล",
"Upload too large" => "ไฟล์ที่อัพโหลดมีขนาดใหà¸à¹ˆà¹€à¸à¸´à¸™à¹„ป",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเà¸à¸´à¸™à¸à¸§à¹ˆà¸²à¸‚นาดสูงสุดที่à¸à¸³à¸«à¸™à¸”ไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
"Files are being scanned, please wait." => "ไฟล์à¸à¸³à¸¥à¸±à¸‡à¸­à¸¢à¸¹à¹ˆà¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸à¸²à¸£à¸ªà¹à¸à¸™, à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่.",
-"Current scanning" => "ไฟล์ที่à¸à¸³à¸¥à¸±à¸‡à¸ªà¹à¸à¸™à¸­à¸¢à¸¹à¹ˆà¸‚ณะนี้"
+"Current scanning" => "ไฟล์ที่à¸à¸³à¸¥à¸±à¸‡à¸ªà¹à¸à¸™à¸­à¸¢à¸¹à¹ˆà¸‚ณะนี้",
+"Upgrading filesystem cache..." => "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹€à¸à¸£à¸”หน่วยความจำà¹à¸„ชของระบบไฟล์..."
);
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
index b32da7de25e..f6943f1f4d1 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s taşınamadı. Bu isimde dosya zaten var.",
+"Could not move %s" => "%s taşınamadı",
+"Unable to rename file" => "Dosya adı değiştirilemedi",
"No file was uploaded. Unknown error" => "Dosya yüklenmedi. Bilinmeyen hata",
"There is no error, the file uploaded with success" => "Bir hata yok, dosya başarıyla yüklendi",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "php.ini dosyasında upload_max_filesize ile belirtilen dosya yükleme sınırı aşıldı.",
@@ -7,10 +10,11 @@
"No file was uploaded" => "Hiç dosya yüklenmedi",
"Missing a temporary folder" => "Geçici bir klasör eksik",
"Failed to write to disk" => "Diske yazılamadı",
+"Invalid directory." => "Geçersiz dizin.",
"Files" => "Dosyalar",
-"Unshare" => "Paylaşılmayan",
"Delete" => "Sil",
"Rename" => "İsim değiştir.",
+"Pending" => "Bekliyor",
"{new_name} already exists" => "{new_name} zaten mevcut",
"replace" => "deÄŸiÅŸtir",
"suggest name" => "Öneri ad",
@@ -18,21 +22,19 @@
"replaced {new_name}" => "deÄŸiÅŸtirilen {new_name}",
"undo" => "geri al",
"replaced {new_name} with {old_name}" => "{new_name} ismi {old_name} ile deÄŸiÅŸtirildi",
-"unshared {files}" => "paylaşılmamış {files}",
-"deleted {files}" => "silinen {files}",
+"'.' is an invalid file name." => "'.' geçersiz dosya adı.",
+"File name cannot be empty." => "Dosya adı boş olamaz.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir.",
-"generating ZIP-file, it may take some time." => "ZIP dosyası oluşturuluyor, biraz sürebilir.",
+"Your download is being prepared. This might take some time if the files are big." => "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi",
"Upload Error" => "Yükleme hatası",
"Close" => "Kapat",
-"Pending" => "Bekliyor",
"1 file uploading" => "1 dosya yüklendi",
"{count} files uploading" => "{count} dosya yükleniyor",
"Upload cancelled." => "Yükleme iptal edildi.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur.",
"URL cannot be empty." => "URL boÅŸ olamaz.",
-"{count} files scanned" => "{count} dosya tarandı",
-"error while scanning" => "tararamada hata oluÅŸdu",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir.",
"Name" => "Ad",
"Size" => "Boyut",
"Modified" => "DeÄŸiÅŸtirilme",
@@ -40,6 +42,7 @@
"{count} folders" => "{count} dizin",
"1 file" => "1 dosya",
"{count} files" => "{count} dosya",
+"Upload" => "Yükle",
"File handling" => "Dosya taşıma",
"Maximum upload size" => "Maksimum yükleme boyutu",
"max. possible: " => "mümkün olan en fazla: ",
@@ -52,10 +55,10 @@
"Text file" => "Metin dosyası",
"Folder" => "Klasör",
"From link" => "Bağlantıdan",
-"Upload" => "Yükle",
"Cancel upload" => "Yüklemeyi iptal et",
"Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!",
"Download" => "İndir",
+"Unshare" => "Paylaşılmayan",
"Upload too large" => "Yüklemeniz çok büyük",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor.",
"Files are being scanned, please wait." => "Dosyalar taranıyor, lütfen bekleyin.",
diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index eba48a41cb6..7e499e6c2c8 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -7,10 +7,12 @@
"No file was uploaded" => "Ðе відвантажено жодного файлу",
"Missing a temporary folder" => "ВідÑутній тимчаÑовий каталог",
"Failed to write to disk" => "ÐевдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати на диÑк",
+"Invalid directory." => "Ðевірний каталог.",
"Files" => "Файли",
-"Unshare" => "Заборонити доÑтуп",
+"Delete permanently" => "Видалити назавжди",
"Delete" => "Видалити",
"Rename" => "Перейменувати",
+"Pending" => "ОчікуваннÑ",
"{new_name} already exists" => "{new_name} вже Ñ–Ñнує",
"replace" => "заміна",
"suggest name" => "запропонуйте назву",
@@ -18,21 +20,22 @@
"replaced {new_name}" => "замінено {new_name}",
"undo" => "відмінити",
"replaced {new_name} with {old_name}" => "замінено {new_name} на {old_name}",
-"unshared {files}" => "неопубліковано {files}",
-"deleted {files}" => "видалено {files}",
+"perform delete operation" => "виконати операцію видаленнÑ",
+"'.' is an invalid file name." => "'.' це невірне ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ.",
+"File name cannot be empty." => " Ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ не може бути порожнім.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ðевірне ім'Ñ, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені.",
-"generating ZIP-file, it may take some time." => "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ZIP-файлу, це може зайнÑти певний чаÑ.",
+"Your storage is full, files can not be updated or synced anymore!" => "Ваше Ñховище переповнене, файли більше не можуть бути оновлені або Ñинхронізовані !",
+"Your storage is almost full ({usedSpacePercent}%)" => "Ваше Ñховище майже повне ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Ваше Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð³Ð¾Ñ‚ÑƒÑ”Ñ‚ÑŒÑÑ. Це може зайнÑти деÑкий чаÑ, Ñкщо файли завеликі.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðеможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт",
"Upload Error" => "Помилка завантаженнÑ",
"Close" => "Закрити",
-"Pending" => "ОчікуваннÑ",
"1 file uploading" => "1 файл завантажуєтьÑÑ",
"{count} files uploading" => "{count} файлів завантажуєтьÑÑ",
"Upload cancelled." => "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾.",
"File upload is in progress. Leaving the page now will cancel the upload." => "ВиконуєтьÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ. Ð—Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ†Ñ–Ñ”Ñ— Ñторінки приведе до відміни завантаженнÑ.",
"URL cannot be empty." => "URL не може бути пуÑтим.",
-"{count} files scanned" => "{count} файлів проÑкановано",
-"error while scanning" => "помилка при Ñкануванні",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ðевірне ім'Ñ Ñ‚ÐµÐºÐ¸. ВикориÑÑ‚Ð°Ð½Ð½Ñ \"Shared\" зарезервовано Owncloud",
"Name" => "Ім'Ñ",
"Size" => "Розмір",
"Modified" => "Змінено",
@@ -40,6 +43,7 @@
"{count} folders" => "{count} папок",
"1 file" => "1 файл",
"{count} files" => "{count} файлів",
+"Upload" => "Відвантажити",
"File handling" => "Робота з файлами",
"Maximum upload size" => "МакÑимальний розмір відвантажень",
"max. possible: " => "макÑ.можливе:",
@@ -52,12 +56,13 @@
"Text file" => "ТекÑтовий файл",
"Folder" => "Папка",
"From link" => "З поÑиланнÑ",
-"Upload" => "Відвантажити",
"Cancel upload" => "Перервати завантаженнÑ",
"Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!",
"Download" => "Завантажити",
+"Unshare" => "Заборонити доÑтуп",
"Upload too large" => "Файл занадто великий",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файли,що ви намагаєтеÑÑŒ відвантажити перевищують макÑимальний дозволений розмір файлів на цьому Ñервері.",
"Files are being scanned, please wait." => "Файли ÑкануютьÑÑ, зачекайте, будь-лаÑка.",
-"Current scanning" => "Поточне ÑкануваннÑ"
+"Current scanning" => "Поточне ÑкануваннÑ",
+"Upgrading filesystem cache..." => "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐµÑˆÐ° файлової ÑиÑтеми..."
);
diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php
index 7d5c5290502..b069246f017 100644
--- a/apps/files/l10n/vi.php
+++ b/apps/files/l10n/vi.php
@@ -1,15 +1,22 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Không thể di chuyển %s - Äã có tên file này trên hệ thống",
+"Could not move %s" => "Không thể di chuyển %s",
+"Unable to rename file" => "Không thể đổi tên file",
"No file was uploaded. Unknown error" => "Không có tập tin nào được tải lên. Lỗi không xác định",
"There is no error, the file uploaded with success" => "Không có lỗi, các tập tin đã được tải lên thành công",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "The uploaded file exceeds the upload_max_filesize directive in php.ini: ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Kích thước những tập tin tải lên vượt quá MAX_FILE_SIZE đã được quy định",
"The uploaded file was only partially uploaded" => "Tập tin tải lên mới chỉ tải lên được một phần",
"No file was uploaded" => "Không có tập tin nào được tải lên",
"Missing a temporary folder" => "Không tìm thấy thư mục tạm",
"Failed to write to disk" => "Không thể ghi ",
+"Not enough storage available" => "Không đủ không gian lưu trữ",
+"Invalid directory." => "Thư mục không hợp lệ",
"Files" => "Tập tin",
-"Unshare" => "Không chia sẽ",
+"Delete permanently" => "Xóa vĩnh vễn",
"Delete" => "Xóa",
"Rename" => "Sửa tên",
+"Pending" => "Chá»",
"{new_name} already exists" => "{new_name} đã tồn tại",
"replace" => "thay thế",
"suggest name" => "tên gợi ý",
@@ -17,21 +24,22 @@
"replaced {new_name}" => "đã thay thế {new_name}",
"undo" => "lùi lại",
"replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}",
-"unshared {files}" => "hủy chia sẽ {files}",
-"deleted {files}" => "đã xóa {files}",
+"perform delete operation" => "thực hiện việc xóa",
+"'.' is an invalid file name." => "'.' là một tên file không hợp lệ",
+"File name cannot be empty." => "Tên file không được rỗng",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng.",
-"generating ZIP-file, it may take some time." => "Tạo tập tin ZIP, Ä‘iá»u này có thể làm mất má»™t chút thá»i gian",
+"Your storage is full, files can not be updated or synced anymore!" => "Your storage is full, files can not be updated or synced anymore!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Your storage is almost full ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte",
"Upload Error" => "Tải lên lỗi",
"Close" => "Äóng",
-"Pending" => "Chá»",
"1 file uploading" => "1 tệp tin đang được tải lên",
"{count} files uploading" => "{count} tập tin đang tải lên",
"Upload cancelled." => "Hủy tải lên",
"File upload is in progress. Leaving the page now will cancel the upload." => "Tập tin tải lên Ä‘ang được xá»­ lý. Nếu bạn rá»i khá»i trang bây giá» sẽ há»§y quá trình này.",
"URL cannot be empty." => "URL không được để trống.",
-"{count} files scanned" => "{count} tập tin đã được quét",
-"error while scanning" => "lỗi trong khi quét",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Invalid folder name. Usage of 'Shared' is reserved by Owncloud",
"Name" => "Tên",
"Size" => "Kích cỡ",
"Modified" => "Thay đổi",
@@ -39,6 +47,7 @@
"{count} folders" => "{count} thư mục",
"1 file" => "1 tập tin",
"{count} files" => "{count} tập tin",
+"Upload" => "Tải lên",
"File handling" => "Xử lý tập tin",
"Maximum upload size" => "Kích thước tối đa ",
"max. possible: " => "tối đa cho phép:",
@@ -51,12 +60,13 @@
"Text file" => "Tập tin văn bản",
"Folder" => "Thư mục",
"From link" => "Từ liên kết",
-"Upload" => "Tải lên",
"Cancel upload" => "Há»§y upload",
"Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !",
"Download" => "Tải xuống",
+"Unshare" => "Không chia sẽ",
"Upload too large" => "Tập tin tải lên quá lớn",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
"Files are being scanned, please wait." => "Tập tin Ä‘ang được quét ,vui lòng chá».",
-"Current scanning" => "Hiện tại đang quét"
+"Current scanning" => "Hiện tại đang quét",
+"Upgrading filesystem cache..." => "Upgrading filesystem cache..."
);
diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php
index e60df8291a9..727b8038000 100644
--- a/apps/files/l10n/zh_CN.GB2312.php
+++ b/apps/files/l10n/zh_CN.GB2312.php
@@ -7,9 +7,9 @@
"Missing a temporary folder" => "丢失了一个临时文件夹",
"Failed to write to disk" => "写ç£ç›˜å¤±è´¥",
"Files" => "文件",
-"Unshare" => "å–æ¶ˆå…±äº«",
"Delete" => "删除",
"Rename" => "é‡å‘½å",
+"Pending" => "Pending",
"{new_name} already exists" => "{new_name} 已存在",
"replace" => "替æ¢",
"suggest name" => "推èåç§°",
@@ -17,20 +17,14 @@
"replaced {new_name}" => "å·²æ›¿æ¢ {new_name}",
"undo" => "撤销",
"replaced {new_name} with {old_name}" => "已用 {old_name} æ›¿æ¢ {new_name}",
-"unshared {files}" => "未分享的 {files}",
-"deleted {files}" => "已删除的 {files}",
-"generating ZIP-file, it may take some time." => "正在生æˆZIP文件,è¿™å¯èƒ½éœ€è¦ç‚¹æ—¶é—´",
"Unable to upload your file as it is a directory or has 0 bytes" => "ä¸èƒ½ä¸Šä¼ ä½ æŒ‡å®šçš„æ–‡ä»¶,å¯èƒ½å› ä¸ºå®ƒæ˜¯ä¸ªæ–‡ä»¶å¤¹æˆ–者大å°ä¸º0",
"Upload Error" => "上传错误",
"Close" => "关闭",
-"Pending" => "Pending",
"1 file uploading" => "1 个文件正在上传",
"{count} files uploading" => "{count} 个文件正在上传",
"Upload cancelled." => "ä¸Šä¼ å–æ¶ˆäº†",
"File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传。关闭页é¢ä¼šå–消上传。",
"URL cannot be empty." => "网å€ä¸èƒ½ä¸ºç©ºã€‚",
-"{count} files scanned" => "{count} 个文件已扫æ",
-"error while scanning" => "扫æå‡ºé”™",
"Name" => "åå­—",
"Size" => "大å°",
"Modified" => "修改日期",
@@ -38,6 +32,7 @@
"{count} folders" => "{count} 个文件夹",
"1 file" => "1 个文件",
"{count} files" => "{count} 个文件",
+"Upload" => "上传",
"File handling" => "文件处ç†ä¸­",
"Maximum upload size" => "最大上传大å°",
"max. possible: " => "最大å¯èƒ½",
@@ -50,10 +45,10 @@
"Text file" => "文本文档",
"Folder" => "文件夹",
"From link" => "æ¥è‡ªé“¾æŽ¥",
-"Upload" => "上传",
"Cancel upload" => "å–æ¶ˆä¸Šä¼ ",
"Nothing in here. Upload something!" => "这里没有东西.上传点什么!",
"Download" => "下载",
+"Unshare" => "å–æ¶ˆå…±äº«",
"Upload too large" => "上传的文件太大了",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "你正在试图上传的文件超过了此æœåŠ¡å™¨æ”¯æŒçš„æœ€å¤§çš„æ–‡ä»¶å¤§å°.",
"Files are being scanned, please wait." => "æ­£åœ¨æ‰«ææ–‡ä»¶,请ç¨å€™.",
diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php
index 0b26a4b174f..569aaf1b0ae 100644
--- a/apps/files/l10n/zh_CN.php
+++ b/apps/files/l10n/zh_CN.php
@@ -1,4 +1,7 @@
<?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "无法移动 %s - åŒå文件已存在",
+"Could not move %s" => "无法移动 %s",
+"Unable to rename file" => "无法é‡å‘½å文件",
"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: " => "上传文件大å°å·²è¶…过php.ini中upload_max_filesize所规定的值",
@@ -7,10 +10,11 @@
"No file was uploaded" => "文件没有上传",
"Missing a temporary folder" => "缺少临时目录",
"Failed to write to disk" => "写入ç£ç›˜å¤±è´¥",
+"Invalid directory." => "无效文件夹。",
"Files" => "文件",
-"Unshare" => "å–æ¶ˆåˆ†äº«",
"Delete" => "删除",
"Rename" => "é‡å‘½å",
+"Pending" => "æ“作等待中",
"{new_name} already exists" => "{new_name} 已存在",
"replace" => "替æ¢",
"suggest name" => "建议åç§°",
@@ -18,21 +22,19 @@
"replaced {new_name}" => "æ›¿æ¢ {new_name}",
"undo" => "撤销",
"replaced {new_name} with {old_name}" => "已将 {old_name}æ›¿æ¢æˆ {new_name}",
-"unshared {files}" => "å–æ¶ˆäº†å…±äº« {files}",
-"deleted {files}" => "删除了 {files}",
+"'.' is an invalid file name." => "'.' 是一个无效的文件å。",
+"File name cannot be empty." => "文件åä¸èƒ½ä¸ºç©ºã€‚",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "无效å称,'\\', '/', '<', '>', ':', '\"', '|', '?' å’Œ '*' ä¸è¢«å…许使用。",
-"generating ZIP-file, it may take some time." => "æ­£åœ¨ç”Ÿæˆ ZIP 文件,å¯èƒ½éœ€è¦ä¸€äº›æ—¶é—´",
+"Your download is being prepared. This might take some time if the files are big." => "下载正在准备中。如果文件较大å¯èƒ½ä¼šèŠ±è´¹ä¸€äº›æ—¶é—´ã€‚",
"Unable to upload your file as it is a directory or has 0 bytes" => "无法上传文件,因为它是一个目录或者大å°ä¸º 0 字节",
"Upload Error" => "上传错误",
"Close" => "关闭",
-"Pending" => "æ“作等待中",
"1 file uploading" => "1个文件上传中",
"{count} files uploading" => "{count} 个文件上传中",
"Upload cancelled." => "ä¸Šä¼ å·²å–æ¶ˆ",
"File upload is in progress. Leaving the page now will cancel the upload." => "æ–‡ä»¶æ­£åœ¨ä¸Šä¼ ä¸­ã€‚çŽ°åœ¨ç¦»å¼€æ­¤é¡µä¼šå¯¼è‡´ä¸Šä¼ åŠ¨ä½œè¢«å–æ¶ˆã€‚",
"URL cannot be empty." => "URLä¸èƒ½ä¸ºç©º",
-"{count} files scanned" => "{count} 个文件已扫æã€‚",
-"error while scanning" => "æ‰«ææ—¶å‡ºé”™",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "无效文件夹å。'共享' 是 Owncloud 预留的文件夹å。",
"Name" => "åç§°",
"Size" => "大å°",
"Modified" => "修改日期",
@@ -40,6 +42,7 @@
"{count} folders" => "{count} 个文件夹",
"1 file" => "1 个文件",
"{count} files" => "{count} 个文件",
+"Upload" => "上传",
"File handling" => "文件处ç†",
"Maximum upload size" => "最大上传大å°",
"max. possible: " => "最大å…许: ",
@@ -52,10 +55,10 @@
"Text file" => "文本文件",
"Folder" => "文件夹",
"From link" => "æ¥è‡ªé“¾æŽ¥",
-"Upload" => "上传",
"Cancel upload" => "å–æ¶ˆä¸Šä¼ ",
"Nothing in here. Upload something!" => "这里还什么都没有。上传些东西å§ï¼",
"Download" => "下载",
+"Unshare" => "å–æ¶ˆåˆ†äº«",
"Upload too large" => "上传文件过大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您正å°è¯•上传的文件超过了此æœåС噍å¯ä»¥ä¸Šä¼ çš„æœ€å¤§å®¹é‡é™åˆ¶",
"Files are being scanned, please wait." => "文件正在被扫æï¼Œè¯·ç¨å€™ã€‚",
diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php
index 03ced5f0cbf..5249dfdbc5f 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -1,18 +1,22 @@
<?php $TRANSLATIONS = array(
-"No file was uploaded. Unknown error" => "沒有檔案被上傳. 未知的錯誤.",
+"Could not move %s - File with this name already exists" => "無法移動 %s - åŒå的檔案已經存在",
+"Could not move %s" => "無法移動 %s",
+"Unable to rename file" => "ç„¡æ³•é‡æ–°å‘½å檔案",
+"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: " => "上傳的檔案大å°è¶…éŽ php.ini 當中 upload_max_filesize åƒæ•¸çš„設定:",
-"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "ä¸Šå‚³é»¨æ¡ˆçš„è¶…éŽ HTML 表單中指定 MAX_FILE_SIZE é™åˆ¶",
-"The uploaded file was only partially uploaded" => "åªæœ‰éƒ¨åˆ†æª”案被上傳",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "上傳的檔案大å°è¶…éŽ HTML 表單中 MAX_FILE_SIZE çš„é™åˆ¶",
+"The uploaded file was only partially uploaded" => "åªæœ‰æª”案的一部分被上傳",
"No file was uploaded" => "無已上傳檔案",
"Missing a temporary folder" => "éºå¤±æš«å­˜è³‡æ–™å¤¾",
"Failed to write to disk" => "寫入硬碟失敗",
-"Not enough space available" => "沒有足夠的å¯ç”¨ç©ºé–“",
+"Not enough storage available" => "儲存空間ä¸è¶³",
"Invalid directory." => "無效的資料夾。",
"Files" => "檔案",
-"Unshare" => "å–æ¶ˆå…±äº«",
+"Delete permanently" => "永久刪除",
"Delete" => "刪除",
"Rename" => "釿–°å‘½å",
+"Pending" => "等候中",
"{new_name} already exists" => "{new_name} 已經存在",
"replace" => "å–代",
"suggest name" => "建議檔å",
@@ -20,24 +24,22 @@
"replaced {new_name}" => "å·²å–代 {new_name}",
"undo" => "復原",
"replaced {new_name} with {old_name}" => "使用 {new_name} å–代 {old_name}",
-"unshared {files}" => "åœæ­¢åˆ†äº« {files}",
-"deleted {files}" => "已刪除 {files}",
+"perform delete operation" => "進行刪除動作",
"'.' is an invalid file name." => "'.' 是ä¸åˆæ³•的檔å。",
"File name cannot be empty." => "檔åä¸èƒ½ç‚ºç©ºã€‚",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔åä¸åˆæ³•,ä¸å…許 '\\', '/', '<', '>', ':', '\"', '|', '?' å’Œ '*' 。",
-"generating ZIP-file, it may take some time." => "產生壓縮檔, 它å¯èƒ½éœ€è¦ä¸€æ®µæ™‚é–“.",
+"Your storage is full, files can not be updated or synced anymore!" => "æ‚¨çš„å„²å­˜ç©ºé–“å·²æ»¿ï¼Œæ²’æœ‰è¾¦æ³•å†æ›´æ–°æˆ–æ˜¯åŒæ­¥æª”案ï¼",
+"Your storage is almost full ({usedSpacePercent}%)" => "æ‚¨çš„å„²å­˜ç©ºé–“å¿«è¦æ»¿äº† ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "æ­£åœ¨æº–å‚™æ‚¨çš„ä¸‹è¼‰ï¼Œè‹¥æ‚¨çš„æª”æ¡ˆè¼ƒå¤§ï¼Œå°‡æœƒéœ€è¦æ›´å¤šæ™‚間。",
"Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案因為它å¯èƒ½æ˜¯ä¸€å€‹ç›®éŒ„或檔案大å°ç‚º0",
"Upload Error" => "上傳發生錯誤",
"Close" => "關閉",
-"Pending" => "等候中",
"1 file uploading" => "1 個檔案正在上傳",
"{count} files uploading" => "{count} 個檔案正在上傳",
"Upload cancelled." => "ä¸Šå‚³å–æ¶ˆ",
-"File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中. 離開此é é¢å°‡æœƒå–消上傳.",
-"URL cannot be empty." => "URLä¸èƒ½ç‚ºç©ºç™½.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中。離開此é é¢å°‡æœƒå–消上傳。",
+"URL cannot be empty." => "URL ä¸èƒ½ç‚ºç©ºç™½.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "無效的資料夾å稱,'Shared' 的使用被 Owncloud ä¿ç•™",
-"{count} files scanned" => "{count} 個檔案已掃æ",
-"error while scanning" => "æŽƒææ™‚發生錯誤",
"Name" => "å稱",
"Size" => "大å°",
"Modified" => "修改",
@@ -45,24 +47,27 @@
"{count} folders" => "{count} 個資料夾",
"1 file" => "1 個檔案",
"{count} files" => "{count} 個檔案",
+"Upload" => "上傳",
"File handling" => "檔案處ç†",
-"Maximum upload size" => "最大上傳容é‡",
-"max. possible: " => "最大å…許: ",
-"Needed for multi-file and folder downloads." => "é‡å°å¤šæª”案和目錄下載是必填的",
+"Maximum upload size" => "最大上傳檔案大å°",
+"max. possible: " => "最大å…許:",
+"Needed for multi-file and folder downloads." => "é‡å°å¤šæª”案和目錄下載是必填的。",
"Enable ZIP-download" => "啟用 Zip 下載",
"0 is unlimited" => "0代表沒有é™åˆ¶",
-"Maximum input size for ZIP files" => "é‡å°ZIP檔案最大輸入大å°",
+"Maximum input size for ZIP files" => "é‡å° ZIP 檔案最大輸入大å°",
"Save" => "儲存",
"New" => "新增",
"Text file" => "文字檔",
"Folder" => "資料夾",
"From link" => "從連çµ",
-"Upload" => "上傳",
+"Trash bin" => "回收筒",
"Cancel upload" => "å–æ¶ˆä¸Šå‚³",
-"Nothing in here. Upload something!" => "沒有任何æ±è¥¿ã€‚請上傳內容!",
+"Nothing in here. Upload something!" => "沒有任何æ±è¥¿ã€‚請上傳內容ï¼",
"Download" => "下載",
+"Unshare" => "å–æ¶ˆå…±äº«",
"Upload too large" => "上傳éŽå¤§",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "你試圖上傳的檔案已超éŽä¼ºæœå™¨çš„æœ€å¤§å®¹é‡é™åˆ¶ã€‚ ",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您試圖上傳的檔案已超éŽä¼ºæœå™¨çš„æœ€å¤§æª”案大å°é™åˆ¶ã€‚ ",
"Files are being scanned, please wait." => "æ­£åœ¨æŽƒææª”案,請ç¨ç­‰ã€‚",
-"Current scanning" => "ç›®å‰æŽƒæ"
+"Current scanning" => "ç›®å‰æŽƒæ",
+"Upgrading filesystem cache..." => "正在更新檔案系統快å–..."
);
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
new file mode 100644
index 00000000000..f2b1f142e9b
--- /dev/null
+++ b/apps/files/lib/helper.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace OCA\files\lib;
+
+class Helper
+{
+ public static function buildFileStorageStatistics($dir) {
+ $l = new \OC_L10N('files');
+ $maxUploadFilesize = \OCP\Util::maxUploadFilesize($dir);
+ $maxHumanFilesize = \OCP\Util::humanFileSize($maxUploadFilesize);
+ $maxHumanFilesize = $l->t('Upload') . ' max. ' . $maxHumanFilesize;
+
+ // information about storage capacities
+ $storageInfo = \OC_Helper::getStorageInfo();
+
+ return array('uploadMaxFilesize' => $maxUploadFilesize,
+ 'maxHumanFilesize' => $maxHumanFilesize,
+ 'usedSpacePercent' => (int)$storageInfo['relative']);
+ }
+}
diff --git a/apps/files/settings.php b/apps/files/settings.php
index 52ec9fd0fe3..8687f013137 100644
--- a/apps/files/settings.php
+++ b/apps/files/settings.php
@@ -21,10 +21,6 @@
*
*/
-
-// Init owncloud
-
-
// Check if we are a user
OCP\User::checkLoggedIn();
@@ -36,7 +32,7 @@ OCP\Util::addscript( "files", "files" );
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
$files = array();
-foreach( OC_Files::getdirectorycontent( $dir ) as $i ) {
+foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) {
$i["date"] = date( $CONFIG_DATEFORMAT, $i["mtime"] );
$files[] = $i;
}
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index 2e0772443f2..60756db4014 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -35,6 +35,11 @@
<a href="#" class="svg" onclick="return false;"></a>
</form>
</div>
+ <?php if ($_['trash'] ): ?>
+ <div id="trash" class="button">
+ <a><?php echo $l->t('Trash bin');?></a>
+ </div>
+ <?php endif; ?>
<div id="uploadprogresswrapper">
<div id="uploadprogressbar"></div>
<input type="button" class="stop" style="display:none"
@@ -42,7 +47,6 @@
onclick="javascript:Files.cancelUploads();"
/>
</div>
-
</div>
<div id="file_action_panel"></div>
<?php else:?>
@@ -50,7 +54,6 @@
<?php endif;?>
<input type="hidden" name="permissions" value="<?php echo $_['permissions']; ?>" id="permissions">
</div>
-<div id='notification'></div>
<?php if (isset($_['files']) and $_['isCreatable'] and count($_['files'])==0):?>
<div id="emptyfolder"><?php echo $l->t('Nothing in here. Upload something!')?></div>
@@ -115,3 +118,4 @@
<!-- config hints for javascript -->
<input type="hidden" name="allowZipDownload" id="allowZipDownload" value="<?php echo $_['allowZipDownload']; ?>" />
+<input type="hidden" name="usedSpacePercent" id="usedSpacePercent" value="<?php echo $_['usedSpacePercent']; ?>" />
diff --git a/apps/files/templates/part.breadcrumb.php b/apps/files/templates/part.breadcrumb.php
index a298f1ccc4b..4cc2c4dce9e 100644
--- a/apps/files/templates/part.breadcrumb.php
+++ b/apps/files/templates/part.breadcrumb.php
@@ -1,10 +1,16 @@
- <?php for($i=0; $i<count($_["breadcrumb"]); $i++):
- $crumb = $_["breadcrumb"][$i];
- $dir = str_replace('+', '%20', urlencode($crumb["dir"]));
- $dir = str_replace('%2F', '/', $dir); ?>
- <div class="crumb <?php if($i == count($_["breadcrumb"])-1) echo 'last';?> svg"
- data-dir='<?php echo $dir;?>'
- style='background-image:url("<?php echo OCP\image_path('core', 'breadcrumb.png');?>")'>
- <a href="<?php echo $_['baseURL'].$dir; ?>"><?php echo OCP\Util::sanitizeHTML($crumb["name"]); ?></a>
- </div>
- <?php endfor; \ No newline at end of file
+<?php if(count($_["breadcrumb"])):?>
+ <div class="crumb">
+ <a href="<?php echo $_['baseURL']; ?>">
+ <img src="<?php echo OCP\image_path('core','places/home.svg');?>" class="svg" />
+ </a>
+ </div>
+<?php endif;?>
+<?php for($i=0; $i<count($_["breadcrumb"]); $i++):
+ $crumb = $_["breadcrumb"][$i];
+ $dir = str_replace('+', '%20', urlencode($crumb["dir"]));
+ $dir = str_replace('%2F', '/', $dir); ?>
+ <div class="crumb <?php if($i == count($_["breadcrumb"])-1) echo 'last';?> svg"
+ data-dir='<?php echo $dir;?>'>
+ <a href="<?php echo $_['baseURL'].$dir; ?>"><?php echo OCP\Util::sanitizeHTML($crumb["name"]); ?></a>
+ </div>
+<?php endfor;
diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php
index 4c765adb7af..3c6c5dbd267 100644
--- a/apps/files/templates/part.list.php
+++ b/apps/files/templates/part.list.php
@@ -1,70 +1,64 @@
- <script type="text/javascript">
- <?php if ( array_key_exists('publicListView', $_) && $_['publicListView'] == true ) :?>
- var publicListView = true;
+<input type="hidden" id="disableSharing" data-status="<?php echo $_['disableSharing']; ?>">
+
+<?php foreach($_['files'] as $file):
+ $simple_file_size = OCP\simple_file_size($file['size']);
+ // the bigger the file, the darker the shade of grey; megabytes*2
+ $simple_size_color = intval(200-$file['size']/(1024*1024)*2);
+ if($simple_size_color<0) $simple_size_color = 0;
+ $relative_modified_date = OCP\relative_modified_date($file['mtime']);
+ // the older the file, the brighter the shade of grey; days*14
+ $relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
+ if($relative_date_color>200) $relative_date_color = 200;
+ $name = str_replace('+', '%20', urlencode($file['name']));
+ $name = str_replace('%2F', '/', $name);
+ $directory = str_replace('+', '%20', urlencode($file['directory']));
+ $directory = str_replace('%2F', '/', $directory); ?>
+ <tr data-id="<?php echo $file['fileid']; ?>"
+ data-file="<?php echo $name;?>"
+ data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>"
+ data-mime="<?php echo $file['mimetype']?>"
+ data-size='<?php echo $file['size'];?>'
+ data-permissions='<?php echo $file['permissions']; ?>'>
+ <td class="filename svg"
+ <?php if($file['type'] == 'dir'): ?>
+ style="background-image:url(<?php echo OCP\mimetype_icon('dir'); ?>)"
<?php else: ?>
- var publicListView = false;
+ style="background-image:url(<?php echo OCP\mimetype_icon($file['mimetype']); ?>)"
<?php endif; ?>
- </script>
-
- <?php foreach($_['files'] as $file):
- $simple_file_size = OCP\simple_file_size($file['size']);
- // the bigger the file, the darker the shade of grey; megabytes*2
- $simple_size_color = intval(200-$file['size']/(1024*1024)*2);
- if($simple_size_color<0) $simple_size_color = 0;
- $relative_modified_date = OCP\relative_modified_date($file['mtime']);
- // the older the file, the brighter the shade of grey; days*14
- $relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
- if($relative_date_color>200) $relative_date_color = 200;
- $name = str_replace('+', '%20', urlencode($file['name']));
- $name = str_replace('%2F', '/', $name);
- $directory = str_replace('+', '%20', urlencode($file['directory']));
- $directory = str_replace('%2F', '/', $directory); ?>
- <tr data-id="<?php echo $file['id']; ?>"
- data-file="<?php echo $name;?>"
- data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>"
- data-mime="<?php echo $file['mimetype']?>"
- data-size='<?php echo $file['size'];?>'
- data-permissions='<?php echo $file['permissions']; ?>'>
- <td class="filename svg"
- <?php if($file['type'] == 'dir'): ?>
- style="background-image:url(<?php echo OCP\mimetype_icon('dir'); ?>)"
- <?php else: ?>
- style="background-image:url(<?php echo OCP\mimetype_icon($file['mimetype']); ?>)"
- <?php endif; ?>
- >
- <?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
- <?php if($file['type'] == 'dir'): ?>
- <a class="name" href="<?php $_['baseURL'].$directory.'/'.$name; ?>)" title="">
- <?php else: ?>
- <a class="name" href="<?php echo $_['downloadURL'].$directory.'/'.$name; ?>" title="">
- <?php endif; ?>
- <span class="nametext">
- <?php if($file['type'] == 'dir'):?>
- <?php echo htmlspecialchars($file['name']);?>
- <?php else:?>
- <?php echo htmlspecialchars($file['basename']);?><span
- class='extension'><?php echo $file['extension'];?></span>
- <?php endif;?>
- </span>
- <?php if($file['type'] == 'dir'):?>
- <span class="uploadtext" currentUploads="0">
- </span>
- <?php endif;?>
- </a>
- </td>
- <td class="filesize"
- title="<?php echo OCP\human_file_size($file['size']); ?>"
- style="color:rgb(<?php echo $simple_size_color.','.$simple_size_color.','.$simple_size_color ?>)">
- <?php echo $simple_file_size; ?>
- </td>
- <td class="date">
- <span class="modified"
- title="<?php echo $file['date']; ?>"
- style="color:rgb(<?php echo $relative_date_color.','
- .$relative_date_color.','
- .$relative_date_color ?>)">
- <?php echo $relative_modified_date; ?>
- </span>
- </td>
- </tr>
- <?php endforeach; \ No newline at end of file
+ >
+ <?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
+ <?php if($file['type'] == 'dir'): ?>
+ <a class="name" href="<?php echo $_['baseURL'].$directory.'/'.$name; ?>" title="">
+ <?php else: ?>
+ <a class="name" href="<?php echo $_['downloadURL'].$directory.'/'.$name; ?>" title="">
+ <?php endif; ?>
+ <span class="nametext">
+ <?php if($file['type'] == 'dir'):?>
+ <?php echo htmlspecialchars($file['name']);?>
+ <?php else:?>
+ <?php echo htmlspecialchars($file['basename']);?><span
+ class='extension'><?php echo $file['extension'];?></span>
+ <?php endif;?>
+ </span>
+ <?php if($file['type'] == 'dir'):?>
+ <span class="uploadtext" currentUploads="0">
+ </span>
+ <?php endif;?>
+ </a>
+ </td>
+ <td class="filesize"
+ title="<?php echo OCP\human_file_size($file['size']); ?>"
+ style="color:rgb(<?php echo $simple_size_color.','.$simple_size_color.','.$simple_size_color ?>)">
+ <?php echo $simple_file_size; ?>
+ </td>
+ <td class="date">
+ <span class="modified"
+ title="<?php echo $file['date']; ?>"
+ style="color:rgb(<?php echo $relative_date_color.','
+ .$relative_date_color.','
+ .$relative_date_color ?>)">
+ <?php echo $relative_modified_date; ?>
+ </span>
+ </td>
+ </tr>
+<?php endforeach;
diff --git a/apps/files/templates/upgrade.php b/apps/files/templates/upgrade.php
new file mode 100644
index 00000000000..de6cc713028
--- /dev/null
+++ b/apps/files/templates/upgrade.php
@@ -0,0 +1,4 @@
+<div id="upgrade">
+ <?php echo $l->t('Upgrading filesystem cache...');?>
+ <div id="progressbar" />
+</div>
diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php
index 2a30d0beb67..08728622525 100644
--- a/apps/files_encryption/appinfo/app.php
+++ b/apps/files_encryption/appinfo/app.php
@@ -1,21 +1,48 @@
<?php
-OC::$CLASSPATH['OC_Crypt'] = 'apps/files_encryption/lib/crypt.php';
-OC::$CLASSPATH['OC_CryptStream'] = 'apps/files_encryption/lib/cryptstream.php';
-OC::$CLASSPATH['OC_FileProxy_Encryption'] = 'apps/files_encryption/lib/proxy.php';
+OC::$CLASSPATH['OCA\Encryption\Crypt'] = 'apps/files_encryption/lib/crypt.php';
+OC::$CLASSPATH['OCA\Encryption\Hooks'] = 'apps/files_encryption/hooks/hooks.php';
+OC::$CLASSPATH['OCA\Encryption\Util'] = 'apps/files_encryption/lib/util.php';
+OC::$CLASSPATH['OCA\Encryption\Keymanager'] = 'apps/files_encryption/lib/keymanager.php';
+OC::$CLASSPATH['OCA\Encryption\Stream'] = 'apps/files_encryption/lib/stream.php';
+OC::$CLASSPATH['OCA\Encryption\Proxy'] = 'apps/files_encryption/lib/proxy.php';
+OC::$CLASSPATH['OCA\Encryption\Session'] = 'apps/files_encryption/lib/session.php';
-OC_FileProxy::register(new OC_FileProxy_Encryption());
+OC_FileProxy::register( new OCA\Encryption\Proxy() );
-OCP\Util::connectHook('OC_User', 'post_login', 'OC_Crypt', 'loginListener');
+// User-related hooks
+OCP\Util::connectHook( 'OC_User', 'post_login', 'OCA\Encryption\Hooks', 'login' );
+OCP\Util::connectHook( 'OC_User', 'pre_setPassword','OCA\Encryption\Hooks', 'setPassphrase' );
-stream_wrapper_register('crypt', 'OC_CryptStream');
+// Sharing-related hooks
+OCP\Util::connectHook( 'OCP\Share', 'post_shared', 'OCA\Encryption\Hooks', 'postShared' );
+OCP\Util::connectHook( 'OCP\Share', 'pre_unshare', 'OCA\Encryption\Hooks', 'preUnshare' );
+OCP\Util::connectHook( 'OCP\Share', 'pre_unshareAll', 'OCA\Encryption\Hooks', 'preUnshareAll' );
-// force the user to re-loggin if the encryption key isn't unlocked
-// (happens when a user is logged in before the encryption app is enabled)
-if ( ! isset($_SESSION['enckey']) and OCP\User::isLoggedIn()) {
+// Webdav-related hooks
+OCP\Util::connectHook( 'OC_Webdav_Properties', 'update', 'OCA\Encryption\Hooks', 'updateKeyfile' );
+
+stream_wrapper_register( 'crypt', 'OCA\Encryption\Stream' );
+
+$session = new OCA\Encryption\Session();
+
+if (
+ ! $session->getPrivateKey( \OCP\USER::getUser() )
+ && OCP\User::isLoggedIn()
+ && OCA\Encryption\Crypt::mode() == 'server'
+) {
+
+ // Force the user to log-in again if the encryption key isn't unlocked
+ // (happens when a user is logged in before the encryption app is
+ // enabled)
OCP\User::logout();
- header("Location: ".OC::$WEBROOT.'/');
+
+ header( "Location: " . OC::$WEBROOT.'/' );
+
exit();
+
}
-OCP\App::registerAdmin('files_encryption', 'settings'); \ No newline at end of file
+// Register settings scripts
+OCP\App::registerAdmin( 'files_encryption', 'settings' );
+OCP\App::registerPersonal( 'files_encryption', 'settings-personal' );
diff --git a/apps/files_encryption/appinfo/database.xml b/apps/files_encryption/appinfo/database.xml
new file mode 100644
index 00000000000..d294c35d63d
--- /dev/null
+++ b/apps/files_encryption/appinfo/database.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<database>
+ <name>*dbname*</name>
+ <create>true</create>
+ <overwrite>false</overwrite>
+ <charset>utf8</charset>
+ <table>
+ <name>*dbprefix*encryption</name>
+ <declaration>
+ <field>
+ <name>uid</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+ <field>
+ <name>mode</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+ </declaration>
+ </table>
+</database> \ No newline at end of file
diff --git a/apps/files_encryption/appinfo/info.xml b/apps/files_encryption/appinfo/info.xml
index 48a28fde78a..39ea155488f 100644
--- a/apps/files_encryption/appinfo/info.xml
+++ b/apps/files_encryption/appinfo/info.xml
@@ -2,10 +2,10 @@
<info>
<id>files_encryption</id>
<name>Encryption</name>
- <description>Server side encryption of files. DEPRECATED. This app is no longer supported and will be replaced with an improved version in ownCloud 5. Only enable this features if you want to read old encrypted data. Warning: You will lose your data if you enable this App and forget your password. Encryption is not yet compatible with LDAP.</description>
+ <description>Server side encryption of files. Warning: You will lose your data if you enable this App and forget your password. Encryption is not yet compatible with LDAP.</description>
<licence>AGPL</licence>
- <author>Robin Appelman</author>
- <require>4.9</require>
+ <author>Sam Tuke</author>
+ <require>4</require>
<shipped>true</shipped>
<types>
<filesystem/>
diff --git a/apps/files_encryption/appinfo/spec.txt b/apps/files_encryption/appinfo/spec.txt
new file mode 100644
index 00000000000..2d22dffe08d
--- /dev/null
+++ b/apps/files_encryption/appinfo/spec.txt
@@ -0,0 +1,19 @@
+Encrypted files
+---------------
+
+- Each encrypted file has at least two components: the encrypted data file
+ ('catfile'), and it's corresponding key file ('keyfile'). Shared files have an
+ additional key file ('share key'). The catfile contains the encrypted data
+ concatenated with delimiter text, followed by the initialisation vector ('IV'),
+ and padding. e.g.:
+
+ [encrypted data string][delimiter][IV][padding]
+ [anhAAjAmcGXqj1X9g==][00iv00][MSHU5N5gECP7aAg7][xx] (square braces added)
+
+Notes
+-----
+
+- The user passphrase is required in order to set up or upgrade the app. New
+ keypair generation, and the re-encryption of legacy encrypted files requires
+ it. Therefore an appinfo/update.php script cannot be used, and upgrade logic
+ is handled in the login hook listener. \ No newline at end of file
diff --git a/apps/files_encryption/appinfo/version b/apps/files_encryption/appinfo/version
index 2f4536184bc..1d71ef97443 100644
--- a/apps/files_encryption/appinfo/version
+++ b/apps/files_encryption/appinfo/version
@@ -1 +1 @@
-0.2 \ No newline at end of file
+0.3 \ No newline at end of file
diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
new file mode 100644
index 00000000000..2731d5a92f7
--- /dev/null
+++ b/apps/files_encryption/hooks/hooks.php
@@ -0,0 +1,191 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Sam Tuke
+ * @copyright 2012 Sam Tuke samtuke@owncloud.org
+ *
+ * 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 OCA\Encryption;
+
+/**
+ * Class for hook specific logic
+ */
+
+class Hooks {
+
+ // TODO: use passphrase for encrypting private key that is separate to
+ // the login password
+
+ /**
+ * @brief Startup encryption backend upon user login
+ * @note This method should never be called for users using client side encryption
+ */
+ public static function login( $params ) {
+
+ // Manually initialise Filesystem{} singleton with correct
+ // fake root path, in order to avoid fatal webdav errors
+ \OC\Files\Filesystem::init( $params['uid'], $params['uid'] . '/' . 'files' . '/' );
+
+ $view = new \OC_FilesystemView( '/' );
+
+ $util = new Util( $view, $params['uid'] );
+
+ // Check files_encryption infrastructure is ready for action
+ if ( ! $util->ready() ) {
+
+ \OC_Log::write( 'Encryption library', 'User account "' . $params['uid'] . '" is not ready for encryption; configuration started', \OC_Log::DEBUG );
+
+ return $util->setupServerSide( $params['password'] );
+
+ }
+
+ \OC_FileProxy::$enabled = false;
+
+ $encryptedKey = Keymanager::getPrivateKey( $view, $params['uid'] );
+
+ \OC_FileProxy::$enabled = true;
+
+ $privateKey = Crypt::symmetricDecryptFileContent( $encryptedKey, $params['password'] );
+
+ $session = new Session();
+
+ $session->setPrivateKey( $privateKey, $params['uid'] );
+
+ $view1 = new \OC_FilesystemView( '/' . $params['uid'] );
+
+ // Set legacy encryption key if it exists, to support
+ // depreciated encryption system
+ if (
+ $view1->file_exists( 'encryption.key' )
+ && $encLegacyKey = $view1->file_get_contents( 'encryption.key' )
+ ) {
+
+ $plainLegacyKey = Crypt::legacyDecrypt( $encLegacyKey, $params['password'] );
+
+ $session->setLegacyKey( $plainLegacyKey );
+
+ }
+
+ $publicKey = Keymanager::getPublicKey( $view, $params['uid'] );
+
+ // Encrypt existing user files:
+ // This serves to upgrade old versions of the encryption
+ // app (see appinfo/spec.txt)
+ if (
+ $util->encryptAll( $publicKey, '/' . $params['uid'] . '/' . 'files', $session->getLegacyKey(), $params['password'] )
+ ) {
+
+ \OC_Log::write(
+ 'Encryption library', 'Encryption of existing files belonging to "' . $params['uid'] . '" started at login'
+ , \OC_Log::INFO
+ );
+
+ }
+
+ return true;
+
+ }
+
+ /**
+ * @brief Change a user's encryption passphrase
+ * @param array $params keys: uid, password
+ */
+ public static function setPassphrase( $params ) {
+
+ // Only attempt to change passphrase if server-side encryption
+ // is in use (client-side encryption does not have access to
+ // the necessary keys)
+ if ( Crypt::mode() == 'server' ) {
+
+ $session = new Session();
+
+ // Get existing decrypted private key
+ $privateKey = $session->getPrivateKey();
+
+ // Encrypt private key with new user pwd as passphrase
+ $encryptedPrivateKey = Crypt::symmetricEncryptFileContent( $privateKey, $params['password'] );
+
+ // Save private key
+ Keymanager::setPrivateKey( $encryptedPrivateKey );
+
+ // NOTE: Session does not need to be updated as the
+ // private key has not changed, only the passphrase
+ // used to decrypt it has changed
+
+ }
+
+ }
+
+ /**
+ * @brief update the encryption key of the file uploaded by the client
+ */
+ public static function updateKeyfile( $params ) {
+
+ if ( Crypt::mode() == 'client' ) {
+
+ if ( isset( $params['properties']['key'] ) ) {
+
+ $view = new \OC_FilesystemView( '/' );
+ $userId = \OCP\User::getUser();
+
+ Keymanager::setFileKey( $view, $params['path'], $userId, $params['properties']['key'] );
+
+ } else {
+
+ \OC_Log::write(
+ 'Encryption library', "Client side encryption is enabled but the client doesn't provide a encryption key for the file!"
+ , \OC_Log::ERROR
+ );
+
+ error_log( "Client side encryption is enabled but the client doesn't provide an encryption key for the file!" );
+
+ }
+
+ }
+
+ }
+
+ /**
+ * @brief
+ */
+ public static function postShared( $params ) {
+ }
+
+ /**
+ * @brief
+ */
+ public static function preUnshare( $params ) {
+
+ // Delete existing catfile
+
+ // Generate new catfile and env keys
+
+ // Save env keys to user folders
+ }
+
+ /**
+ * @brief
+ */
+ public static function preUnshareAll( $params ) {
+
+ trigger_error( "preUnshareAll" );
+
+ }
+
+}
diff --git a/apps/files_encryption/js/settings.js b/apps/files_encryption/js/settings.js
index 6fc70eba7f6..0be857bb73e 100644
--- a/apps/files_encryption/js/settings.js
+++ b/apps/files_encryption/js/settings.js
@@ -9,16 +9,11 @@ $(document).ready(function(){
$('#encryption_blacklist').multiSelect({
oncheck:blackListChange,
onuncheck:blackListChange,
- createText:'...',
+ createText:'...'
});
-
+
function blackListChange(){
var blackList=$('#encryption_blacklist').val().join(',');
OC.AppConfig.setValue('files_encryption','type_blacklist',blackList);
}
-
- $('#enable_encryption').change(function(){
- var checked=$('#enable_encryption').is(':checked');
- OC.AppConfig.setValue('files_encryption','enable_encryption',(checked)?'true':'false');
- });
-});
+}) \ No newline at end of file
diff --git a/apps/files_encryption/l10n/ar.php b/apps/files_encryption/l10n/ar.php
index 756a9d72799..375fbd9a9a6 100644
--- a/apps/files_encryption/l10n/ar.php
+++ b/apps/files_encryption/l10n/ar.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "التشÙير",
-"Exclude the following file types from encryption" => "استبعد أنواع Ø§Ù„Ù…Ù„ÙØ§Øª التالية من التشÙير",
-"None" => "لا شيء",
-"Enable Encryption" => "ØªÙØ¹ÙŠÙ„ التشÙير"
+"None" => "لا شيء"
);
diff --git a/apps/files_encryption/l10n/bg_BG.php b/apps/files_encryption/l10n/bg_BG.php
index cb1613ef375..07a97f5f8a6 100644
--- a/apps/files_encryption/l10n/bg_BG.php
+++ b/apps/files_encryption/l10n/bg_BG.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Криптиране",
-"Enable Encryption" => "Включване на криптирането",
-"None" => "ÐÑма",
-"Exclude the following file types from encryption" => "Изключване на Ñледните файлови типове от криптирането"
+"None" => "ÐÑма"
);
diff --git a/apps/files_encryption/l10n/bn_BD.php b/apps/files_encryption/l10n/bn_BD.php
new file mode 100644
index 00000000000..43767d56518
--- /dev/null
+++ b/apps/files_encryption/l10n/bn_BD.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "সংকেতায়ন",
+"None" => "কোনটিই নয়"
+);
diff --git a/apps/files_encryption/l10n/ca.php b/apps/files_encryption/l10n/ca.php
index 8e087b34620..0c661353a77 100644
--- a/apps/files_encryption/l10n/ca.php
+++ b/apps/files_encryption/l10n/ca.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Encriptatge",
-"Exclude the following file types from encryption" => "Exclou els tipus de fitxers següents de l'encriptatge",
-"None" => "Cap",
-"Enable Encryption" => "Activa l'encriptatge"
+"File encryption is enabled." => "L'encriptació de fitxers està activada.",
+"The following file types will not be encrypted:" => "Els tipus de fitxers següents no s'encriptaran:",
+"Exclude the following file types from encryption:" => "Exclou els tipus de fitxers següents de l'encriptatge:",
+"None" => "Cap"
);
diff --git a/apps/files_encryption/l10n/cs_CZ.php b/apps/files_encryption/l10n/cs_CZ.php
index 9be2be98092..d225688a079 100644
--- a/apps/files_encryption/l10n/cs_CZ.php
+++ b/apps/files_encryption/l10n/cs_CZ.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Šifrování",
-"Exclude the following file types from encryption" => "Při šifrování vynechat následující typy souborů",
-"None" => "Žádné",
-"Enable Encryption" => "Povolit šifrování"
+"File encryption is enabled." => "Šifrování je povoleno.",
+"The following file types will not be encrypted:" => "Následující typy souborů nebudou šifrovány:",
+"Exclude the following file types from encryption:" => "Vyjmout následující typy souborů ze šifrování:",
+"None" => "Žádné"
);
diff --git a/apps/files_encryption/l10n/da.php b/apps/files_encryption/l10n/da.php
index 144c9f97084..e52ecb868af 100644
--- a/apps/files_encryption/l10n/da.php
+++ b/apps/files_encryption/l10n/da.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Kryptering",
-"Exclude the following file types from encryption" => "Ekskluder følgende filtyper fra kryptering",
-"None" => "Ingen",
-"Enable Encryption" => "Aktivér kryptering"
+"None" => "Ingen"
);
diff --git a/apps/files_encryption/l10n/de.php b/apps/files_encryption/l10n/de.php
index d486a82322b..3dc586fe06c 100644
--- a/apps/files_encryption/l10n/de.php
+++ b/apps/files_encryption/l10n/de.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Verschlüsselung",
-"Exclude the following file types from encryption" => "Die folgenden Dateitypen von der Verschlüsselung ausnehmen",
-"None" => "Keine",
-"Enable Encryption" => "Verschlüsselung aktivieren"
+"None" => "Keine"
);
diff --git a/apps/files_encryption/l10n/de_DE.php b/apps/files_encryption/l10n/de_DE.php
index d486a82322b..b942c659f9e 100644
--- a/apps/files_encryption/l10n/de_DE.php
+++ b/apps/files_encryption/l10n/de_DE.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Verschlüsselung",
-"Exclude the following file types from encryption" => "Die folgenden Dateitypen von der Verschlüsselung ausnehmen",
-"None" => "Keine",
-"Enable Encryption" => "Verschlüsselung aktivieren"
+"File encryption is enabled." => "Datei-Verschlüsselung ist aktiviert",
+"The following file types will not be encrypted:" => "Die folgenden Datei-Typen werden nicht verschlüsselt:",
+"Exclude the following file types from encryption:" => "Die folgenden Datei-Typen von der Verschlüsselung ausnehmen:",
+"None" => "Keine"
);
diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php
index 40a7c6a3672..0031a731944 100644
--- a/apps/files_encryption/l10n/el.php
+++ b/apps/files_encryption/l10n/el.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "ΚÏυπτογÏάφηση",
-"Exclude the following file types from encryption" => "ΕξαίÏεση των παÏακάτω Ï„Ïπων αÏχείων από την κÏυπτογÏάφηση",
-"None" => "Καμία",
-"Enable Encryption" => "ΕνεÏγοποίηση ΚÏυπτογÏάφησης"
+"File encryption is enabled." => "Η κÏυπτογÏάφηση αÏχείων είναι ενεÏγή.",
+"The following file types will not be encrypted:" => "Οι παÏακάτω Ï„Ïποι αÏχείων δεν θα κÏυπτογÏαφηθοÏν:",
+"Exclude the following file types from encryption:" => "ΕξαίÏεση των παÏακάτω Ï„Ïπων αÏχείων από την κÏυπτογÏάφηση:",
+"None" => "Καμία"
);
diff --git a/apps/files_encryption/l10n/eo.php b/apps/files_encryption/l10n/eo.php
index af3c9ae98e4..50847062c3b 100644
--- a/apps/files_encryption/l10n/eo.php
+++ b/apps/files_encryption/l10n/eo.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Ĉifrado",
-"Exclude the following file types from encryption" => "Malinkluzivigi la jenajn dosiertipojn el ĉifrado",
-"None" => "Nenio",
-"Enable Encryption" => "Kapabligi ĉifradon"
+"None" => "Nenio"
);
diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php
index b7e7601b35f..4ea87b92e7c 100644
--- a/apps/files_encryption/l10n/es.php
+++ b/apps/files_encryption/l10n/es.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Cifrado",
-"Exclude the following file types from encryption" => "Excluir del cifrado los siguientes tipos de archivo",
-"None" => "Ninguno",
-"Enable Encryption" => "Habilitar cifrado"
+"File encryption is enabled." => "La encriptacion de archivo esta activada.",
+"The following file types will not be encrypted:" => "Los siguientes tipos de archivo no seran encriptados:",
+"Exclude the following file types from encryption:" => "Excluir los siguientes tipos de archivo de la encriptacion:",
+"None" => "Ninguno"
);
diff --git a/apps/files_encryption/l10n/es_AR.php b/apps/files_encryption/l10n/es_AR.php
index a15c37e730e..52c77827848 100644
--- a/apps/files_encryption/l10n/es_AR.php
+++ b/apps/files_encryption/l10n/es_AR.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Encriptación",
-"Exclude the following file types from encryption" => "Exceptuar de la encriptación los siguientes tipos de archivo",
-"None" => "Ninguno",
-"Enable Encryption" => "Habilitar encriptación"
+"None" => "Ninguno"
);
diff --git a/apps/files_encryption/l10n/et_EE.php b/apps/files_encryption/l10n/et_EE.php
index a7cd9395bf0..07f1a48fb0b 100644
--- a/apps/files_encryption/l10n/et_EE.php
+++ b/apps/files_encryption/l10n/et_EE.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Krüpteerimine",
-"Exclude the following file types from encryption" => "Järgnevaid failitüüpe ära krüpteeri",
-"None" => "Pole",
-"Enable Encryption" => "Luba krüpteerimine"
+"None" => "Pole"
);
diff --git a/apps/files_encryption/l10n/eu.php b/apps/files_encryption/l10n/eu.php
index 57b6a4927bf..b4f7be2c840 100644
--- a/apps/files_encryption/l10n/eu.php
+++ b/apps/files_encryption/l10n/eu.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Enkriptazioa",
-"Exclude the following file types from encryption" => "Ez enkriptatu hurrengo fitxategi motak",
-"None" => "Bat ere ez",
-"Enable Encryption" => "Gaitu enkriptazioa"
+"None" => "Bat ere ez"
);
diff --git a/apps/files_encryption/l10n/fa.php b/apps/files_encryption/l10n/fa.php
index 01582e48e60..21ad7e56566 100644
--- a/apps/files_encryption/l10n/fa.php
+++ b/apps/files_encryption/l10n/fa.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "رمزگذاری",
-"Exclude the following file types from encryption" => "نادیده Ú¯Ø±ÙØªÙ† ÙØ§ÛŒÙ„ های زیر برای رمز گذاری",
-"None" => "هیچ‌کدام",
-"Enable Encryption" => "ÙØ¹Ø§Ù„ کردن رمزگذاری"
+"None" => "هیچ‌کدام"
);
diff --git a/apps/files_encryption/l10n/fi_FI.php b/apps/files_encryption/l10n/fi_FI.php
index 5796499a26c..1e1dc4a1218 100644
--- a/apps/files_encryption/l10n/fi_FI.php
+++ b/apps/files_encryption/l10n/fi_FI.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Salaus",
-"Exclude the following file types from encryption" => "Jätä seuraavat tiedostotyypit salaamatta",
-"None" => "Ei mitään",
-"Enable Encryption" => "Käytä salausta"
+"None" => "Ei mitään"
);
diff --git a/apps/files_encryption/l10n/fr.php b/apps/files_encryption/l10n/fr.php
index c9367d1a312..88f1e4a393f 100644
--- a/apps/files_encryption/l10n/fr.php
+++ b/apps/files_encryption/l10n/fr.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Chiffrement",
-"Exclude the following file types from encryption" => "Ne pas chiffrer les fichiers dont les types sont les suivants",
-"None" => "Aucun",
-"Enable Encryption" => "Activer le chiffrement"
+"File encryption is enabled." => "Le chiffrement des fichiers est activé",
+"The following file types will not be encrypted:" => "Les fichiers de types suivants ne seront pas chiffrés :",
+"Exclude the following file types from encryption:" => "Ne pas chiffrer les fichiers dont les types sont les suivants :",
+"None" => "Aucun"
);
diff --git a/apps/files_encryption/l10n/gl.php b/apps/files_encryption/l10n/gl.php
index 91d155ccad3..3210f715453 100644
--- a/apps/files_encryption/l10n/gl.php
+++ b/apps/files_encryption/l10n/gl.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Cifrado",
-"Exclude the following file types from encryption" => "Excluír os seguintes tipos de ficheiro do cifrado",
-"None" => "Nada",
-"Enable Encryption" => "Activar o cifrado"
+"File encryption is enabled." => "O cifrado de ficheiros está activado",
+"The following file types will not be encrypted:" => "Os seguintes tipos de ficheiros non van seren cifrados:",
+"Exclude the following file types from encryption:" => "Excluír os seguintes tipos de ficheiros do cifrado:",
+"None" => "Ningún"
);
diff --git a/apps/files_encryption/l10n/he.php b/apps/files_encryption/l10n/he.php
index 0332d59520a..cbb74bfee9a 100644
--- a/apps/files_encryption/l10n/he.php
+++ b/apps/files_encryption/l10n/he.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "הצפנה",
-"Enable Encryption" => "הפעל הצפנה",
-"None" => "כלו×",
-"Exclude the following file types from encryption" => "×”×•×¦× ×ת סוגי ×”×§×‘×¦×™× ×”×‘××™× ×ž×”×¦×¤× ×”"
+"None" => "כלו×"
);
diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php
index 8ea0f731736..46f990bf38c 100644
--- a/apps/files_encryption/l10n/hu_HU.php
+++ b/apps/files_encryption/l10n/hu_HU.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Titkosítás",
-"Enable Encryption" => "A titkosítás engedélyezése",
-"None" => "Egyik sem",
-"Exclude the following file types from encryption" => "A következő fájltípusok kizárása a titkosításból"
+"None" => "Egyik sem"
);
diff --git a/apps/files_encryption/l10n/id.php b/apps/files_encryption/l10n/id.php
index 824ae883041..3f9a6c7d07f 100644
--- a/apps/files_encryption/l10n/id.php
+++ b/apps/files_encryption/l10n/id.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "enkripsi",
-"Exclude the following file types from encryption" => "pengecualian untuk tipe file berikut dari enkripsi",
-"None" => "tidak ada",
-"Enable Encryption" => "aktifkan enkripsi"
+"None" => "tidak ada"
);
diff --git a/apps/files_encryption/l10n/is.php b/apps/files_encryption/l10n/is.php
index 3210ecb4f8a..bd964185c45 100644
--- a/apps/files_encryption/l10n/is.php
+++ b/apps/files_encryption/l10n/is.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Dulkóðun",
-"Enable Encryption" => "Virkja dulkóðun",
-"None" => "Ekkert",
-"Exclude the following file types from encryption" => "Undanskilja eftirfarandi skráartegundir frá dulkóðun"
+"None" => "Ekkert"
);
diff --git a/apps/files_encryption/l10n/it.php b/apps/files_encryption/l10n/it.php
index 5136b061797..9ab9bc492a0 100644
--- a/apps/files_encryption/l10n/it.php
+++ b/apps/files_encryption/l10n/it.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Cifratura",
-"Exclude the following file types from encryption" => "Escludi i seguenti tipi di file dalla cifratura",
-"None" => "Nessuna",
-"Enable Encryption" => "Abilita cifratura"
+"File encryption is enabled." => "La cifratura dei file è abilitata.",
+"The following file types will not be encrypted:" => "I seguenti tipi di file non saranno cifrati:",
+"Exclude the following file types from encryption:" => "Escludi i seguenti tipi di file dalla cifratura:",
+"None" => "Nessuna"
);
diff --git a/apps/files_encryption/l10n/ja_JP.php b/apps/files_encryption/l10n/ja_JP.php
index 2c3e5410de3..35fba615aec 100644
--- a/apps/files_encryption/l10n/ja_JP.php
+++ b/apps/files_encryption/l10n/ja_JP.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "æš—å·åŒ–",
-"Exclude the following file types from encryption" => "æš—å·åŒ–ã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ•ァイルタイプ",
-"None" => "ãªã—",
-"Enable Encryption" => "æš—å·åŒ–を有効ã«ã™ã‚‹"
+"File encryption is enabled." => "ãƒ•ã‚¡ã‚¤ãƒ«ã®æš—å·åŒ–ã¯æœ‰åйã§ã™ã€‚",
+"The following file types will not be encrypted:" => "次ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—ã¯æš—å·åŒ–ã•れã¾ã›ã‚“:",
+"Exclude the following file types from encryption:" => "次ã®ãƒ•ァイルタイプを暗å·åŒ–ã‹ã‚‰é™¤å¤–:",
+"None" => "ãªã—"
);
diff --git a/apps/files_encryption/l10n/ko.php b/apps/files_encryption/l10n/ko.php
index 4702753435e..bd1580578c4 100644
--- a/apps/files_encryption/l10n/ko.php
+++ b/apps/files_encryption/l10n/ko.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "암호화",
-"Exclude the following file types from encryption" => "ë‹¤ìŒ íŒŒì¼ í˜•ì‹ì€ 암호화하지 않ìŒ",
-"None" => "ì—†ìŒ",
-"Enable Encryption" => "암호화 사용"
+"None" => "ì—†ìŒ"
);
diff --git a/apps/files_encryption/l10n/ku_IQ.php b/apps/files_encryption/l10n/ku_IQ.php
index bd8977ac515..02c030014fa 100644
--- a/apps/files_encryption/l10n/ku_IQ.php
+++ b/apps/files_encryption/l10n/ku_IQ.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "نهێنیکردن",
-"Exclude the following file types from encryption" => "به‌ربه‌ست کردنی ئه‌م جۆره‌ په‌ڕگانه له‌ نهێنیکردن",
-"None" => "هیچ",
-"Enable Encryption" => "چالاکردنی نهێنیکردن"
+"None" => "هیچ"
);
diff --git a/apps/files_encryption/l10n/lt_LT.php b/apps/files_encryption/l10n/lt_LT.php
index b939df164c8..67769c8f365 100644
--- a/apps/files_encryption/l10n/lt_LT.php
+++ b/apps/files_encryption/l10n/lt_LT.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Å ifravimas",
-"Exclude the following file types from encryption" => "Nešifruoti pasirinkto tipo failų",
-"None" => "Nieko",
-"Enable Encryption" => "Įjungti šifravimą"
+"None" => "Nieko"
);
diff --git a/apps/files_encryption/l10n/lv.php b/apps/files_encryption/l10n/lv.php
new file mode 100644
index 00000000000..fc31ccdb92d
--- /dev/null
+++ b/apps/files_encryption/l10n/lv.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Šifrēšana",
+"File encryption is enabled." => "Datņu šifrēšana ir aktivēta.",
+"The following file types will not be encrypted:" => "SekojoÅ¡Äs datnes netiks Å¡ifrÄ“tas:",
+"Exclude the following file types from encryption:" => "Sekojošos datņu tipus izslēgt no šifrēšanas:",
+"None" => "Nav"
+);
diff --git a/apps/files_encryption/l10n/mk.php b/apps/files_encryption/l10n/mk.php
index dfcaed9f37e..513606fadc3 100644
--- a/apps/files_encryption/l10n/mk.php
+++ b/apps/files_encryption/l10n/mk.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Енкрипција",
-"Exclude the following file types from encryption" => "ИÑклучи ги Ñледните типови на датотеки од енкрипција",
-"None" => "Ðишто",
-"Enable Encryption" => "Овозможи енкрипција"
+"None" => "Ðишто"
);
diff --git a/apps/files_encryption/l10n/nb_NO.php b/apps/files_encryption/l10n/nb_NO.php
index e65df7b6ce3..e52ecb868af 100644
--- a/apps/files_encryption/l10n/nb_NO.php
+++ b/apps/files_encryption/l10n/nb_NO.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Kryptering",
-"Exclude the following file types from encryption" => "Ekskluder følgende filer fra kryptering",
-"None" => "Ingen",
-"Enable Encryption" => "Slå på kryptering"
+"None" => "Ingen"
);
diff --git a/apps/files_encryption/l10n/nl.php b/apps/files_encryption/l10n/nl.php
index 1ea56006fc3..b1cba96aad7 100644
--- a/apps/files_encryption/l10n/nl.php
+++ b/apps/files_encryption/l10n/nl.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Versleuteling",
-"Exclude the following file types from encryption" => "Versleutel de volgende bestand types niet",
-"None" => "Geen",
-"Enable Encryption" => "Zet versleuteling aan"
+"File encryption is enabled." => "Bestandsversleuteling geactiveerd.",
+"The following file types will not be encrypted:" => "De volgende bestandstypen zullen niet worden versleuteld:",
+"Exclude the following file types from encryption:" => "Sluit de volgende bestandstypen uit van versleuteling:",
+"None" => "Geen"
);
diff --git a/apps/files_encryption/l10n/pl.php b/apps/files_encryption/l10n/pl.php
index 5cfc707450e..505e8659f08 100644
--- a/apps/files_encryption/l10n/pl.php
+++ b/apps/files_encryption/l10n/pl.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Szyfrowanie",
-"Exclude the following file types from encryption" => "Wyłącz następujące typy plików z szyfrowania",
-"None" => "Brak",
-"Enable Encryption" => "Włącz szyfrowanie"
+"None" => "Brak"
);
diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php
index 5c02f52217f..2b4af2a8772 100644
--- a/apps/files_encryption/l10n/pt_BR.php
+++ b/apps/files_encryption/l10n/pt_BR.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Criptografia",
-"Exclude the following file types from encryption" => "Excluir os seguintes tipos de arquivo da criptografia",
-"None" => "Nenhuma",
-"Enable Encryption" => "Habilitar Criptografia"
+"None" => "Nenhuma"
);
diff --git a/apps/files_encryption/l10n/pt_PT.php b/apps/files_encryption/l10n/pt_PT.php
index 570462b414f..1c46011fc10 100644
--- a/apps/files_encryption/l10n/pt_PT.php
+++ b/apps/files_encryption/l10n/pt_PT.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Encriptação",
-"Exclude the following file types from encryption" => "Excluir da encriptação os seguintes tipo de ficheiros",
-"None" => "Nenhum",
-"Enable Encryption" => "Activar Encriptação"
+"File encryption is enabled." => "A encriptação de ficheiros está ligada",
+"The following file types will not be encrypted:" => "Os seguintes ficheiros não serão encriptados:",
+"Exclude the following file types from encryption:" => "Excluir da encriptação os seguintes tipos de ficheiro:",
+"None" => "Nenhum"
);
diff --git a/apps/files_encryption/l10n/ro.php b/apps/files_encryption/l10n/ro.php
index 97f3f262d76..a5a6fb3cb78 100644
--- a/apps/files_encryption/l10n/ro.php
+++ b/apps/files_encryption/l10n/ro.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "ÃŽncriptare",
-"Exclude the following file types from encryption" => "Exclude următoarele tipuri de fișiere de la încriptare",
-"None" => "Niciuna",
-"Enable Encryption" => "Activare încriptare"
+"None" => "Niciuna"
);
diff --git a/apps/files_encryption/l10n/ru.php b/apps/files_encryption/l10n/ru.php
index 3a7e84b6d01..22c1e3da374 100644
--- a/apps/files_encryption/l10n/ru.php
+++ b/apps/files_encryption/l10n/ru.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Шифрование",
-"Exclude the following file types from encryption" => "ИÑключить шифрование Ñледующих типов файлов",
-"None" => "Ðичего",
-"Enable Encryption" => "Включить шифрование"
+"File encryption is enabled." => "Шифрование файла включено.",
+"The following file types will not be encrypted:" => "Следующие типы файлов не будут зашифрованы:",
+"Exclude the following file types from encryption:" => "ИÑключить Ñледующие типы файлов из шифрованных:",
+"None" => "Ðичего"
);
diff --git a/apps/files_encryption/l10n/ru_RU.php b/apps/files_encryption/l10n/ru_RU.php
index 1328b0d0359..7222235485c 100644
--- a/apps/files_encryption/l10n/ru_RU.php
+++ b/apps/files_encryption/l10n/ru_RU.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Шифрование",
-"Exclude the following file types from encryption" => "ИÑключите Ñледующие типы файлов из шифрованиÑ",
-"None" => "Ðи один",
-"Enable Encryption" => "Включить шифрование"
+"None" => "Ðи один"
);
diff --git a/apps/files_encryption/l10n/si_LK.php b/apps/files_encryption/l10n/si_LK.php
index a29884afffd..d9cec4b7220 100644
--- a/apps/files_encryption/l10n/si_LK.php
+++ b/apps/files_encryption/l10n/si_LK.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "ගුප්ත කේතනය",
-"Exclude the following file types from encryption" => "මෙම ගොනු වර්ග ගුප්ත කේතනය කිරීමෙන් à¶¶à·à·„à·à¶»à·€ තබන්න",
-"None" => "කිසිවක් à¶±à·à¶­",
-"Enable Encryption" => "ගුප්ත කේතනය සක්â€à¶»à·’ය කරන්න"
+"None" => "කිසිවක් à¶±à·à¶­"
);
diff --git a/apps/files_encryption/l10n/sk_SK.php b/apps/files_encryption/l10n/sk_SK.php
index 598f1294f6e..bebb6234710 100644
--- a/apps/files_encryption/l10n/sk_SK.php
+++ b/apps/files_encryption/l10n/sk_SK.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Å ifrovanie",
-"Exclude the following file types from encryption" => "Vynechať nasledujúce súbory pri šifrovaní",
-"None" => "Žiadne",
-"Enable Encryption" => "Zapnúť šifrovanie"
+"File encryption is enabled." => "Šifrovanie súborov nastavené.",
+"The following file types will not be encrypted:" => "Uvedené typy súborov nebudú šifrované:",
+"Exclude the following file types from encryption:" => "Nešifrovať uvedené typy súborov",
+"None" => "Žiadne"
);
diff --git a/apps/files_encryption/l10n/sl.php b/apps/files_encryption/l10n/sl.php
index f62fe781c6a..45272f1ee06 100644
--- a/apps/files_encryption/l10n/sl.php
+++ b/apps/files_encryption/l10n/sl.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Å ifriranje",
-"Exclude the following file types from encryption" => "Navedene vrste datotek naj ne bodo šifrirane",
-"None" => "Brez",
-"Enable Encryption" => "OmogoÄi Å¡ifriranje"
+"None" => "Brez"
);
diff --git a/apps/files_encryption/l10n/sr.php b/apps/files_encryption/l10n/sr.php
index 4718780ee52..91f7fc62a90 100644
--- a/apps/files_encryption/l10n/sr.php
+++ b/apps/files_encryption/l10n/sr.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Шифровање",
-"Exclude the following file types from encryption" => "Ðе шифруј Ñледеће типове датотека",
-"None" => "Ðишта",
-"Enable Encryption" => "Омогући шифровање"
+"None" => "Ðишта"
);
diff --git a/apps/files_encryption/l10n/sv.php b/apps/files_encryption/l10n/sv.php
index 0a477f83460..e214a937a1d 100644
--- a/apps/files_encryption/l10n/sv.php
+++ b/apps/files_encryption/l10n/sv.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Kryptering",
-"Exclude the following file types from encryption" => "Exkludera följande filtyper från kryptering",
-"None" => "Ingen",
-"Enable Encryption" => "Aktivera kryptering"
+"File encryption is enabled." => "Filkryptering är aktiverat.",
+"The following file types will not be encrypted:" => "Följande filtyper kommer inte att krypteras:",
+"Exclude the following file types from encryption:" => "Exkludera följande filtyper från kryptering:",
+"None" => "Ingen"
);
diff --git a/apps/files_encryption/l10n/ta_LK.php b/apps/files_encryption/l10n/ta_LK.php
index 1d1ef74007e..152e631d0fc 100644
--- a/apps/files_encryption/l10n/ta_LK.php
+++ b/apps/files_encryption/l10n/ta_LK.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "மறைகà¯à®•à¯à®±à®¿à®¯à¯€à®Ÿà¯",
-"Exclude the following file types from encryption" => "மறைகà¯à®•à¯à®±à®¿à®¯à®¾à®•à¯à®•லில௠பினà¯à®µà®°à¯à®®à¯ கோபà¯à®ªà¯ வகைகளை நீகà¯à®•வà¯à®®à¯",
-"None" => "ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à¯ˆ",
-"Enable Encryption" => "மறைகà¯à®•à¯à®±à®¿à®¯à®¾à®•à¯à®•லை இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•"
+"None" => "ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à¯ˆ"
);
diff --git a/apps/files_encryption/l10n/th_TH.php b/apps/files_encryption/l10n/th_TH.php
index c2685de6e3a..e46d2491186 100644
--- a/apps/files_encryption/l10n/th_TH.php
+++ b/apps/files_encryption/l10n/th_TH.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "à¸à¸²à¸£à¹€à¸‚้ารหัส",
-"Exclude the following file types from encryption" => "ไม่ต้องรวมชนิดของไฟล์ดังต่อไปนี้จาà¸à¸à¸²à¸£à¹€à¸‚้ารหัส",
-"None" => "ไม่ต้อง",
-"Enable Encryption" => "เปิดใช้งานà¸à¸²à¸£à¹€à¸‚้ารหัส"
+"None" => "ไม่ต้อง"
);
diff --git a/apps/files_encryption/l10n/tr.php b/apps/files_encryption/l10n/tr.php
index 474ee42b842..0868d0a6905 100644
--- a/apps/files_encryption/l10n/tr.php
+++ b/apps/files_encryption/l10n/tr.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Åžifreleme",
-"Enable Encryption" => "Åžifrelemeyi EtkinleÅŸtir",
-"None" => "Hiçbiri",
-"Exclude the following file types from encryption" => "Aşağıdaki dosya tiplerini şifrelemeye dahil etme"
+"None" => "Hiçbiri"
);
diff --git a/apps/files_encryption/l10n/uk.php b/apps/files_encryption/l10n/uk.php
index 3c15bb28436..8236c5afefd 100644
--- a/apps/files_encryption/l10n/uk.php
+++ b/apps/files_encryption/l10n/uk.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "ШифруваннÑ",
-"Exclude the following file types from encryption" => "Ðе шифрувати файли наÑтупних типів",
-"None" => "Жоден",
-"Enable Encryption" => "Включити шифруваннÑ"
+"None" => "Жоден"
);
diff --git a/apps/files_encryption/l10n/vi.php b/apps/files_encryption/l10n/vi.php
index 6365084fdc6..0a88d1b2db6 100644
--- a/apps/files_encryption/l10n/vi.php
+++ b/apps/files_encryption/l10n/vi.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Mã hóa",
-"Exclude the following file types from encryption" => "Loại trừ các loại tập tin sau đây từ mã hóa",
-"None" => "Không có gì hết",
-"Enable Encryption" => "BẬT mã hóa"
+"File encryption is enabled." => "Mã hóa file đã mở",
+"The following file types will not be encrypted:" => "Loại file sau sẽ không được mã hóa",
+"Exclude the following file types from encryption:" => "Việc mã hóa không bao gồm loại file sau",
+"None" => "Không có gì hết"
);
diff --git a/apps/files_encryption/l10n/zh_CN.GB2312.php b/apps/files_encryption/l10n/zh_CN.GB2312.php
index 297444fcf55..12d903e6567 100644
--- a/apps/files_encryption/l10n/zh_CN.GB2312.php
+++ b/apps/files_encryption/l10n/zh_CN.GB2312.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "加密",
-"Exclude the following file types from encryption" => "从加密中排除如下文件类型",
-"None" => "æ— ",
-"Enable Encryption" => "å¯ç”¨åР坆"
+"None" => "æ— "
);
diff --git a/apps/files_encryption/l10n/zh_CN.php b/apps/files_encryption/l10n/zh_CN.php
index 1e1247d15ff..867d000f2ed 100644
--- a/apps/files_encryption/l10n/zh_CN.php
+++ b/apps/files_encryption/l10n/zh_CN.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "加密",
-"Exclude the following file types from encryption" => "从加密中排除列出的文件类型",
-"None" => "None",
-"Enable Encryption" => "å¼€å¯åР坆"
+"None" => "None"
);
diff --git a/apps/files_encryption/l10n/zh_TW.php b/apps/files_encryption/l10n/zh_TW.php
index 4c62130cf4f..1655e171433 100644
--- a/apps/files_encryption/l10n/zh_TW.php
+++ b/apps/files_encryption/l10n/zh_TW.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"Encryption" => "加密",
-"Exclude the following file types from encryption" => "下列的檔案類型ä¸åР坆",
-"None" => "ç„¡",
-"Enable Encryption" => "啟用加密"
+"None" => "ç„¡"
);
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index 666fedb4e1b..c7a414c5080 100644..100755
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -1,220 +1,695 @@
-<?php
-/**
- * ownCloud
- *
- * @author Frank Karlitschek
- * @copyright 2012 Frank Karlitschek frank@owncloud.org
- *
- * 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/>.
- *
- */
-
-
-
-// Todo:
-// - Crypt/decrypt button in the userinterface
-// - Setting if crypto should be on by default
-// - Add a setting "Don´t encrypt files larger than xx because of performance reasons"
-// - Transparent decrypt/encrypt in filesystem.php. Autodetect if a file is encrypted (.encrypted extension)
-// - Don't use a password directly as encryption key, but a key which is stored on the server and encrypted with the
-// user password. -> password change faster
-// - IMPORTANT! Check if the block lenght of the encrypted data stays the same
-
-
-require_once 'Crypt_Blowfish/Blowfish.php';
-
-/**
- * This class is for crypting and decrypting
- */
-class OC_Crypt {
- static private $bf = null;
-
- public static function loginListener($params) {
- self::init($params['uid'], $params['password']);
- }
-
- public static function init($login, $password) {
- $view=new OC_FilesystemView('/');
- if ( ! $view->file_exists('/'.$login)) {
- $view->mkdir('/'.$login);
- }
-
- OC_FileProxy::$enabled=false;
- if ( ! $view->file_exists('/'.$login.'/encryption.key')) {// does key exist?
- OC_Crypt::createkey($login, $password);
- }
- $key=$view->file_get_contents('/'.$login.'/encryption.key');
- OC_FileProxy::$enabled=true;
- $_SESSION['enckey']=OC_Crypt::decrypt($key, $password);
- }
-
-
- /**
- * get the blowfish encryption handeler for a key
- * @param string $key (optional)
- * @return Crypt_Blowfish
- *
- * if the key is left out, the default handeler will be used
- */
- public static function getBlowfish($key='') {
- if ($key) {
- return new Crypt_Blowfish($key);
- } else {
- if ( ! isset($_SESSION['enckey'])) {
- return false;
- }
- if ( ! self::$bf) {
- self::$bf=new Crypt_Blowfish($_SESSION['enckey']);
- }
- return self::$bf;
- }
- }
-
- public static function createkey($username, $passcode) {
- // generate a random key
- $key=mt_rand(10000, 99999).mt_rand(10000, 99999).mt_rand(10000, 99999).mt_rand(10000, 99999);
-
- // encrypt the key with the passcode of the user
- $enckey=OC_Crypt::encrypt($key, $passcode);
-
- // Write the file
- $proxyEnabled=OC_FileProxy::$enabled;
- OC_FileProxy::$enabled=false;
- $view=new OC_FilesystemView('/'.$username);
- $view->file_put_contents('/encryption.key', $enckey);
- OC_FileProxy::$enabled=$proxyEnabled;
- }
-
- public static function changekeypasscode($oldPassword, $newPassword) {
- if (OCP\User::isLoggedIn()) {
- $username=OCP\USER::getUser();
- $view=new OC_FilesystemView('/'.$username);
-
- // read old key
- $key=$view->file_get_contents('/encryption.key');
-
- // decrypt key with old passcode
- $key=OC_Crypt::decrypt($key, $oldPassword);
-
- // encrypt again with new passcode
- $key=OC_Crypt::encrypt($key, $newPassword);
-
- // store the new key
- $view->file_put_contents('/encryption.key', $key );
- }
- }
-
- /**
- * @brief encrypts an content
- * @param $content the cleartext message you want to encrypt
- * @param $key the encryption key (optional)
- * @returns encrypted content
- *
- * This function encrypts an content
- */
- public static function encrypt( $content, $key='') {
- $bf = self::getBlowfish($key);
- return $bf->encrypt($content);
- }
-
- /**
- * @brief decryption of an content
- * @param $content the cleartext message you want to decrypt
- * @param $key the encryption key (optional)
- * @returns cleartext content
- *
- * This function decrypts an content
- */
- public static function decrypt( $content, $key='') {
- $bf = self::getBlowfish($key);
- $data=$bf->decrypt($content);
- return $data;
- }
-
- /**
- * @brief encryption of a file
- * @param string $source
- * @param string $target
- * @param string $key the decryption key
- *
- * This function encrypts a file
- */
- public static function encryptFile( $source, $target, $key='') {
- $handleread = fopen($source, "rb");
- if ($handleread!=false) {
- $handlewrite = fopen($target, "wb");
- while (!feof($handleread)) {
- $content = fread($handleread, 8192);
- $enccontent=OC_CRYPT::encrypt( $content, $key);
- fwrite($handlewrite, $enccontent);
- }
- fclose($handlewrite);
- fclose($handleread);
- }
- }
-
-
- /**
- * @brief decryption of a file
- * @param string $source
- * @param string $target
- * @param string $key the decryption key
- *
- * This function decrypts a file
- */
- public static function decryptFile( $source, $target, $key='') {
- $handleread = fopen($source, "rb");
- if ($handleread!=false) {
- $handlewrite = fopen($target, "wb");
- while (!feof($handleread)) {
- $content = fread($handleread, 8192);
- $enccontent=OC_CRYPT::decrypt( $content, $key);
- if (feof($handleread)) {
- $enccontent=rtrim($enccontent, "\0");
- }
- fwrite($handlewrite, $enccontent);
- }
- fclose($handlewrite);
- fclose($handleread);
- }
- }
-
- /**
- * encrypt data in 8192b sized blocks
- */
- public static function blockEncrypt($data, $key='') {
- $result='';
- while (strlen($data)) {
- $result.=self::encrypt(substr($data, 0, 8192), $key);
- $data=substr($data, 8192);
- }
- return $result;
- }
-
- /**
- * decrypt data in 8192b sized blocks
- */
- public static function blockDecrypt($data, $key='', $maxLength=0) {
- $result='';
- while (strlen($data)) {
- $result.=self::decrypt(substr($data, 0, 8192), $key);
- $data=substr($data, 8192);
- }
- if ($maxLength>0) {
- return substr($result, 0, $maxLength);
- } else {
- return rtrim($result, "\0");
- }
- }
-}
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Sam Tuke, Frank Karlitschek, Robin Appelman
+ * @copyright 2012 Sam Tuke samtuke@owncloud.com,
+ * Robin Appelman icewind@owncloud.com, Frank Karlitschek
+ * frank@owncloud.org
+ *
+ * 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 OCA\Encryption;
+
+require_once 'Crypt_Blowfish/Blowfish.php';
+
+// Todo:
+// - Add a setting "Don´t encrypt files larger than xx because of performance"
+// - Don't use a password directly as encryption key. but a key which is
+// stored on the server and encrypted with the user password. -> change pass
+// faster
+
+/**
+ * Class for common cryptography functionality
+ */
+
+class Crypt {
+
+ /**
+ * @brief return encryption mode client or server side encryption
+ * @param string user name (use system wide setting if name=null)
+ * @return string 'client' or 'server'
+ */
+ public static function mode( $user = null ) {
+
+ return 'server';
+
+ }
+
+ /**
+ * @brief Create a new encryption keypair
+ * @return array publicKey, privatekey
+ */
+ public static function createKeypair() {
+
+ $res = openssl_pkey_new();
+
+ // Get private key
+ openssl_pkey_export( $res, $privateKey );
+
+ // Get public key
+ $publicKey = openssl_pkey_get_details( $res );
+
+ $publicKey = $publicKey['key'];
+
+ return( array( 'publicKey' => $publicKey, 'privateKey' => $privateKey ) );
+
+ }
+
+ /**
+ * @brief Add arbitrary padding to encrypted data
+ * @param string $data data to be padded
+ * @return padded data
+ * @note In order to end up with data exactly 8192 bytes long we must
+ * add two letters. It is impossible to achieve exactly 8192 length
+ * blocks with encryption alone, hence padding is added to achieve the
+ * required length.
+ */
+ public static function addPadding( $data ) {
+
+ $padded = $data . 'xx';
+
+ return $padded;
+
+ }
+
+ /**
+ * @brief Remove arbitrary padding to encrypted data
+ * @param string $padded padded data to remove padding from
+ * @return unpadded data on success, false on error
+ */
+ public static function removePadding( $padded ) {
+
+ if ( substr( $padded, -2 ) == 'xx' ) {
+
+ $data = substr( $padded, 0, -2 );
+
+ return $data;
+
+ } else {
+
+ // TODO: log the fact that unpadded data was submitted for removal of padding
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Check if a file's contents contains an IV and is symmetrically encrypted
+ * @return true / false
+ * @note see also OCA\Encryption\Util->isEncryptedPath()
+ */
+ public static function isCatfile( $content ) {
+
+ if ( !$content ) {
+
+ return false;
+
+ }
+
+ $noPadding = self::removePadding( $content );
+
+ // Fetch encryption metadata from end of file
+ $meta = substr( $noPadding, -22 );
+
+ // Fetch IV from end of file
+ $iv = substr( $meta, -16 );
+
+ // Fetch identifier from start of metadata
+ $identifier = substr( $meta, 0, 6 );
+
+ if ( $identifier == '00iv00') {
+
+ return true;
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * Check if a file is encrypted according to database file cache
+ * @param string $path
+ * @return bool
+ */
+ public static function isEncryptedMeta( $path ) {
+
+ // TODO: Use DI to get \OC\Files\Filesystem out of here
+
+ // Fetch all file metadata from DB
+ $metadata = \OC\Files\Filesystem::getFileInfo( $path, '' );
+
+ // Return encryption status
+ return isset( $metadata['encrypted'] ) and ( bool )$metadata['encrypted'];
+
+ }
+
+ /**
+ * @brief Check if a file is encrypted via legacy system
+ * @param string $relPath The path of the file, relative to user/data;
+ * e.g. filename or /Docs/filename, NOT admin/files/filename
+ * @return true / false
+ */
+ public static function isLegacyEncryptedContent( $data, $relPath ) {
+
+ // Fetch all file metadata from DB
+ $metadata = \OC\Files\Filesystem::getFileInfo( $relPath, '' );
+
+ // If a file is flagged with encryption in DB, but isn't a
+ // valid content + IV combination, it's probably using the
+ // legacy encryption system
+ if (
+ isset( $metadata['encrypted'] )
+ and $metadata['encrypted'] === true
+ and ! self::isCatfile( $data )
+ ) {
+
+ return true;
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Symmetrically encrypt a string
+ * @returns encrypted file
+ */
+ public static function encrypt( $plainContent, $iv, $passphrase = '' ) {
+
+ if ( $encryptedContent = openssl_encrypt( $plainContent, 'AES-128-CFB', $passphrase, false, $iv ) ) {
+
+ return $encryptedContent;
+
+ } else {
+
+ \OC_Log::write( 'Encryption library', 'Encryption (symmetric) of content failed', \OC_Log::ERROR );
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Symmetrically decrypt a string
+ * @returns decrypted file
+ */
+ public static function decrypt( $encryptedContent, $iv, $passphrase ) {
+
+ if ( $plainContent = openssl_decrypt( $encryptedContent, 'AES-128-CFB', $passphrase, false, $iv ) ) {
+
+ return $plainContent;
+
+
+ } else {
+
+ throw new \Exception( 'Encryption library: Decryption (symmetric) of content failed' );
+
+ }
+
+ }
+
+ /**
+ * @brief Concatenate encrypted data with its IV and padding
+ * @param string $content content to be concatenated
+ * @param string $iv IV to be concatenated
+ * @returns string concatenated content
+ */
+ public static function concatIv ( $content, $iv ) {
+
+ $combined = $content . '00iv00' . $iv;
+
+ return $combined;
+
+ }
+
+ /**
+ * @brief Split concatenated data and IV into respective parts
+ * @param string $catFile concatenated data to be split
+ * @returns array keys: encrypted, iv
+ */
+ public static function splitIv ( $catFile ) {
+
+ // Fetch encryption metadata from end of file
+ $meta = substr( $catFile, -22 );
+
+ // Fetch IV from end of file
+ $iv = substr( $meta, -16 );
+
+ // Remove IV and IV identifier text to expose encrypted content
+ $encrypted = substr( $catFile, 0, -22 );
+
+ $split = array(
+ 'encrypted' => $encrypted
+ , 'iv' => $iv
+ );
+
+ return $split;
+
+ }
+
+ /**
+ * @brief Symmetrically encrypts a string and returns keyfile content
+ * @param $plainContent content to be encrypted in keyfile
+ * @returns encrypted content combined with IV
+ * @note IV need not be specified, as it will be stored in the returned keyfile
+ * and remain accessible therein.
+ */
+ public static function symmetricEncryptFileContent( $plainContent, $passphrase = '' ) {
+
+ if ( !$plainContent ) {
+
+ return false;
+
+ }
+
+ $iv = self::generateIv();
+
+ if ( $encryptedContent = self::encrypt( $plainContent, $iv, $passphrase ) ) {
+
+ // Combine content to encrypt with IV identifier and actual IV
+ $catfile = self::concatIv( $encryptedContent, $iv );
+
+ $padded = self::addPadding( $catfile );
+
+ return $padded;
+
+ } else {
+
+ \OC_Log::write( 'Encryption library', 'Encryption (symmetric) of keyfile content failed', \OC_Log::ERROR );
+
+ return false;
+
+ }
+
+ }
+
+
+ /**
+ * @brief Symmetrically decrypts keyfile content
+ * @param string $source
+ * @param string $target
+ * @param string $key the decryption key
+ * @returns decrypted content
+ *
+ * This function decrypts a file
+ */
+ public static function symmetricDecryptFileContent( $keyfileContent, $passphrase = '' ) {
+
+ if ( !$keyfileContent ) {
+
+ throw new \Exception( 'Encryption library: no data provided for decryption' );
+
+ }
+
+ // Remove padding
+ $noPadding = self::removePadding( $keyfileContent );
+
+ // Split into enc data and catfile
+ $catfile = self::splitIv( $noPadding );
+
+ if ( $plainContent = self::decrypt( $catfile['encrypted'], $catfile['iv'], $passphrase ) ) {
+
+ return $plainContent;
+
+ }
+
+ }
+
+ /**
+ * @brief Creates symmetric keyfile content using a generated key
+ * @param string $plainContent content to be encrypted
+ * @returns array keys: key, encrypted
+ * @note symmetricDecryptFileContent() can be used to decrypt files created using this method
+ *
+ * This function decrypts a file
+ */
+ public static function symmetricEncryptFileContentKeyfile( $plainContent ) {
+
+ $key = self::generateKey();
+
+ if( $encryptedContent = self::symmetricEncryptFileContent( $plainContent, $key ) ) {
+
+ return array(
+ 'key' => $key
+ , 'encrypted' => $encryptedContent
+ );
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Create asymmetrically encrypted keyfile content using a generated key
+ * @param string $plainContent content to be encrypted
+ * @returns array keys: key, encrypted
+ * @note symmetricDecryptFileContent() can be used to decrypt files created using this method
+ *
+ * This function decrypts a file
+ */
+ public static function multiKeyEncrypt( $plainContent, array $publicKeys ) {
+
+ // Set empty vars to be set by openssl by reference
+ $sealed = '';
+ $envKeys = array();
+
+ if( openssl_seal( $plainContent, $sealed, $envKeys, $publicKeys ) ) {
+
+ return array(
+ 'keys' => $envKeys
+ , 'encrypted' => $sealed
+ );
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Asymmetrically encrypt a file using multiple public keys
+ * @param string $plainContent content to be encrypted
+ * @returns string $plainContent decrypted string
+ * @note symmetricDecryptFileContent() can be used to decrypt files created using this method
+ *
+ * This function decrypts a file
+ */
+ public static function multiKeyDecrypt( $encryptedContent, $envKey, $privateKey ) {
+
+ if ( !$encryptedContent ) {
+
+ return false;
+
+ }
+
+ if ( openssl_open( $encryptedContent, $plainContent, $envKey, $privateKey ) ) {
+
+ return $plainContent;
+
+ } else {
+
+ \OC_Log::write( 'Encryption library', 'Decryption (asymmetric) of sealed content failed', \OC_Log::ERROR );
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Asymmetrically encrypt a string using a public key
+ * @returns encrypted file
+ */
+ public static function keyEncrypt( $plainContent, $publicKey ) {
+
+ openssl_public_encrypt( $plainContent, $encryptedContent, $publicKey );
+
+ return $encryptedContent;
+
+ }
+
+ /**
+ * @brief Asymetrically decrypt a file using a private key
+ * @returns decrypted file
+ */
+ public static function keyDecrypt( $encryptedContent, $privatekey ) {
+
+ openssl_private_decrypt( $encryptedContent, $plainContent, $privatekey );
+
+ return $plainContent;
+
+ }
+
+ /**
+ * @brief Encrypts content symmetrically and generates keyfile asymmetrically
+ * @returns array containing catfile and new keyfile.
+ * keys: data, key
+ * @note this method is a wrapper for combining other crypt class methods
+ */
+ public static function keyEncryptKeyfile( $plainContent, $publicKey ) {
+
+ // Encrypt plain data, generate keyfile & encrypted file
+ $cryptedData = self::symmetricEncryptFileContentKeyfile( $plainContent );
+
+ // Encrypt keyfile
+ $cryptedKey = self::keyEncrypt( $cryptedData['key'], $publicKey );
+
+ return array( 'data' => $cryptedData['encrypted'], 'key' => $cryptedKey );
+
+ }
+
+ /**
+ * @brief Takes catfile, keyfile, and private key, and
+ * performs decryption
+ * @returns decrypted content
+ * @note this method is a wrapper for combining other crypt class methods
+ */
+ public static function keyDecryptKeyfile( $catfile, $keyfile, $privateKey ) {
+
+ // Decrypt the keyfile with the user's private key
+ $decryptedKeyfile = self::keyDecrypt( $keyfile, $privateKey );
+
+ // Decrypt the catfile symmetrically using the decrypted keyfile
+ $decryptedData = self::symmetricDecryptFileContent( $catfile, $decryptedKeyfile );
+
+ return $decryptedData;
+
+ }
+
+ /**
+ * @brief Symmetrically encrypt a file by combining encrypted component data blocks
+ */
+ public static function symmetricBlockEncryptFileContent( $plainContent, $key ) {
+
+ $crypted = '';
+
+ $remaining = $plainContent;
+
+ $testarray = array();
+
+ while( strlen( $remaining ) ) {
+
+ //echo "\n\n\$block = ".substr( $remaining, 0, 6126 );
+
+ // Encrypt a chunk of unencrypted data and add it to the rest
+ $block = self::symmetricEncryptFileContent( substr( $remaining, 0, 6126 ), $key );
+
+ $padded = self::addPadding( $block );
+
+ $crypted .= $block;
+
+ $testarray[] = $block;
+
+ // Remove the data already encrypted from remaining unencrypted data
+ $remaining = substr( $remaining, 6126 );
+
+ }
+
+ return $crypted;
+
+ }
+
+
+ /**
+ * @brief Symmetrically decrypt a file by combining encrypted component data blocks
+ */
+ public static function symmetricBlockDecryptFileContent( $crypted, $key ) {
+
+ $decrypted = '';
+
+ $remaining = $crypted;
+
+ $testarray = array();
+
+ while( strlen( $remaining ) ) {
+
+ $testarray[] = substr( $remaining, 0, 8192 );
+
+ // Decrypt a chunk of unencrypted data and add it to the rest
+ $decrypted .= self::symmetricDecryptFileContent( $remaining, $key );
+
+ // Remove the data already encrypted from remaining unencrypted data
+ $remaining = substr( $remaining, 8192 );
+
+ }
+
+ return $decrypted;
+
+ }
+
+ /**
+ * @brief Generates a pseudo random initialisation vector
+ * @return String $iv generated IV
+ */
+ public static function generateIv() {
+
+ if ( $random = openssl_random_pseudo_bytes( 12, $strong ) ) {
+
+ if ( !$strong ) {
+
+ // If OpenSSL indicates randomness is insecure, log error
+ \OC_Log::write( 'Encryption library', 'Insecure symmetric key was generated using openssl_random_pseudo_bytes()', \OC_Log::WARN );
+
+ }
+
+ // We encode the iv purely for string manipulation
+ // purposes - it gets decoded before use
+ $iv = base64_encode( $random );
+
+ return $iv;
+
+ } else {
+
+ throw new \Exception( 'Generating IV failed' );
+
+ }
+
+ }
+
+ /**
+ * @brief Generate a pseudo random 1024kb ASCII key
+ * @returns $key Generated key
+ */
+ public static function generateKey() {
+
+ // Generate key
+ if ( $key = base64_encode( openssl_random_pseudo_bytes( 183, $strong ) ) ) {
+
+ if ( !$strong ) {
+
+ // If OpenSSL indicates randomness is insecure, log error
+ throw new \Exception ( 'Encryption library, Insecure symmetric key was generated using openssl_random_pseudo_bytes()' );
+
+ }
+
+ return $key;
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Get the blowfish encryption handeler for a key
+ * @param $key string (optional)
+ * @return Crypt_Blowfish blowfish object
+ *
+ * if the key is left out, the default handeler will be used
+ */
+ public static function getBlowfish( $key = '' ) {
+
+ if ( $key ) {
+
+ return new \Crypt_Blowfish( $key );
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ public static function legacyCreateKey( $passphrase ) {
+
+ // Generate a random integer
+ $key = mt_rand( 10000, 99999 ) . mt_rand( 10000, 99999 ) . mt_rand( 10000, 99999 ) . mt_rand( 10000, 99999 );
+
+ // Encrypt the key with the passphrase
+ $legacyEncKey = self::legacyEncrypt( $key, $passphrase );
+
+ return $legacyEncKey;
+
+ }
+
+ /**
+ * @brief encrypts content using legacy blowfish system
+ * @param $content the cleartext message you want to encrypt
+ * @param $key the encryption key (optional)
+ * @returns encrypted content
+ *
+ * This function encrypts an content
+ */
+ public static function legacyEncrypt( $content, $passphrase = '' ) {
+
+ $bf = self::getBlowfish( $passphrase );
+
+ return $bf->encrypt( $content );
+
+ }
+
+ /**
+ * @brief decrypts content using legacy blowfish system
+ * @param $content the cleartext message you want to decrypt
+ * @param $key the encryption key (optional)
+ * @returns cleartext content
+ *
+ * This function decrypts an content
+ */
+ public static function legacyDecrypt( $content, $passphrase = '' ) {
+
+ $bf = self::getBlowfish( $passphrase );
+
+ $decrypted = $bf->decrypt( $content );
+
+ $trimmed = rtrim( $decrypted, "\0" );
+
+ return $trimmed;
+
+ }
+
+ public static function legacyKeyRecryptKeyfile( $legacyEncryptedContent, $legacyPassphrase, $publicKey, $newPassphrase ) {
+
+ $decrypted = self::legacyDecrypt( $legacyEncryptedContent, $legacyPassphrase );
+
+ $recrypted = self::keyEncryptKeyfile( $decrypted, $publicKey );
+
+ return $recrypted;
+
+ }
+
+ /**
+ * @brief Re-encryptes a legacy blowfish encrypted file using AES with integrated IV
+ * @param $legacyContent the legacy encrypted content to re-encrypt
+ * @returns cleartext content
+ *
+ * This function decrypts an content
+ */
+ public static function legacyRecrypt( $legacyContent, $legacyPassphrase, $newPassphrase ) {
+
+ // TODO: write me
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/files_encryption/lib/cryptstream.php b/apps/files_encryption/lib/cryptstream.php
deleted file mode 100644
index d516c0c21b2..00000000000
--- a/apps/files_encryption/lib/cryptstream.php
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Robin Appelman
- * @copyright 2011 Robin Appelman icewind1991@gmail.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/>.
- *
- */
-
-/**
- * transparently encrypted filestream
- *
- * you can use it as wrapper around an existing stream by setting
- * OC_CryptStream::$sourceStreams['foo']=array('path'=>$path, 'stream'=>$stream)
- * and then fopen('crypt://streams/foo');
- */
-
-class OC_CryptStream{
- public static $sourceStreams=array();
- private $source;
- private $path;
- private $meta=array();//header/meta for source stream
- private $writeCache;
- private $size;
- private static $rootView;
-
- public function stream_open($path, $mode, $options, &$opened_path) {
- if ( ! self::$rootView) {
- self::$rootView=new OC_FilesystemView('');
- }
- $path=str_replace('crypt://', '', $path);
- if (dirname($path)=='streams' and isset(self::$sourceStreams[basename($path)])) {
- $this->source=self::$sourceStreams[basename($path)]['stream'];
- $this->path=self::$sourceStreams[basename($path)]['path'];
- $this->size=self::$sourceStreams[basename($path)]['size'];
- } else {
- $this->path=$path;
- if ($mode=='w' or $mode=='w+' or $mode=='wb' or $mode=='wb+') {
- $this->size=0;
- } else {
- $this->size=self::$rootView->filesize($path, $mode);
- }
- OC_FileProxy::$enabled=false;//disable fileproxies so we can open the source file
- $this->source=self::$rootView->fopen($path, $mode);
- OC_FileProxy::$enabled=true;
- if ( ! is_resource($this->source)) {
- OCP\Util::writeLog('files_encryption', 'failed to open '.$path, OCP\Util::ERROR);
- }
- }
- if (is_resource($this->source)) {
- $this->meta=stream_get_meta_data($this->source);
- }
- return is_resource($this->source);
- }
-
- public function stream_seek($offset, $whence=SEEK_SET) {
- $this->flush();
- fseek($this->source, $offset, $whence);
- }
-
- public function stream_tell() {
- return ftell($this->source);
- }
-
- public function stream_read($count) {
- //$count will always be 8192 https://bugs.php.net/bug.php?id=21641
- //This makes this function a lot simpler but will breake everything the moment it's fixed
- $this->writeCache='';
- if ($count!=8192) {
- OCP\Util::writeLog('files_encryption',
- 'php bug 21641 no longer holds, decryption will not work',
- OCP\Util::FATAL);
- die();
- }
- $pos=ftell($this->source);
- $data=fread($this->source, 8192);
- if (strlen($data)) {
- $result=OC_Crypt::decrypt($data);
- } else {
- $result='';
- }
- $length=$this->size-$pos;
- if ($length<8192) {
- $result=substr($result, 0, $length);
- }
- return $result;
- }
-
- public function stream_write($data) {
- $length=strlen($data);
- $currentPos=ftell($this->source);
- if ($this->writeCache) {
- $data=$this->writeCache.$data;
- $this->writeCache='';
- }
- if ($currentPos%8192!=0) {
- //make sure we always start on a block start
- fseek($this->source, -($currentPos%8192), SEEK_CUR);
- $encryptedBlock=fread($this->source, 8192);
- fseek($this->source, -($currentPos%8192), SEEK_CUR);
- $block=OC_Crypt::decrypt($encryptedBlock);
- $data=substr($block, 0, $currentPos%8192).$data;
- fseek($this->source, -($currentPos%8192), SEEK_CUR);
- }
- $currentPos=ftell($this->source);
- while ($remainingLength=strlen($data)>0) {
- if ($remainingLength<8192) {
- $this->writeCache=$data;
- $data='';
- } else {
- $encrypted=OC_Crypt::encrypt(substr($data, 0, 8192));
- fwrite($this->source, $encrypted);
- $data=substr($data, 8192);
- }
- }
- $this->size=max($this->size, $currentPos+$length);
- return $length;
- }
-
- public function stream_set_option($option, $arg1, $arg2) {
- switch($option) {
- case STREAM_OPTION_BLOCKING:
- stream_set_blocking($this->source, $arg1);
- break;
- case STREAM_OPTION_READ_TIMEOUT:
- stream_set_timeout($this->source, $arg1, $arg2);
- break;
- case STREAM_OPTION_WRITE_BUFFER:
- stream_set_write_buffer($this->source, $arg1, $arg2);
- }
- }
-
- public function stream_stat() {
- return fstat($this->source);
- }
-
- public function stream_lock($mode) {
- flock($this->source, $mode);
- }
-
- public function stream_flush() {
- return fflush($this->source);
- }
-
- public function stream_eof() {
- return feof($this->source);
- }
-
- private function flush() {
- if ($this->writeCache) {
- $encrypted=OC_Crypt::encrypt($this->writeCache);
- fwrite($this->source, $encrypted);
- $this->writeCache='';
- }
- }
-
- public function stream_close() {
- $this->flush();
- if ($this->meta['mode']!='r' and $this->meta['mode']!='rb') {
- OC_FileCache::put($this->path, array('encrypted'=>true, 'size'=>$this->size), '');
- }
- return fclose($this->source);
- }
-}
diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
new file mode 100755
index 00000000000..95587797154
--- /dev/null
+++ b/apps/files_encryption/lib/keymanager.php
@@ -0,0 +1,323 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle
+ * @copyright 2012 Bjoern Schiessle <schiessle@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 OCA\Encryption;
+
+/**
+ * @brief Class to manage storage and retrieval of encryption keys
+ * @note Where a method requires a view object, it's root must be '/'
+ */
+class Keymanager {
+
+ /**
+ * @brief retrieve the ENCRYPTED private key from a user
+ *
+ * @return string private key or false
+ * @note the key returned by this method must be decrypted before use
+ */
+ public static function getPrivateKey( \OC_FilesystemView $view, $user ) {
+
+ $path = '/' . $user . '/' . 'files_encryption' . '/' . $user.'.private.key';
+
+ $key = $view->file_get_contents( $path );
+
+ return $key;
+ }
+
+ /**
+ * @brief retrieve public key for a specified user
+ * @param \OC_FilesystemView $view
+ * @param $userId
+ * @return string public key or false
+ */
+ public static function getPublicKey( \OC_FilesystemView $view, $userId ) {
+
+ return $view->file_get_contents( '/public-keys/' . '/' . $userId . '.public.key' );
+
+ }
+
+ /**
+ * @brief retrieve both keys from a user (private and public)
+ * @param \OC_FilesystemView $view
+ * @param $userId
+ * @return array keys: privateKey, publicKey
+ */
+ public static function getUserKeys( \OC_FilesystemView $view, $userId ) {
+
+ return array(
+ 'publicKey' => self::getPublicKey( $view, $userId )
+ , 'privateKey' => self::getPrivateKey( $view, $userId )
+ );
+
+ }
+
+ /**
+ * @brief Retrieve public keys of all users with access to a file
+ * @param string $path Path to file
+ * @return array of public keys for the given file
+ * @note Checks that the sharing app is enabled should be performed
+ * by client code, that isn't checked here
+ */
+ public static function getPublicKeys( \OC_FilesystemView $view, $userId, $filePath ) {
+
+ $path = ltrim( $path, '/' );
+
+ $filepath = '/' . $userId . '/files/' . $filePath;
+
+ // Check if sharing is enabled
+ if ( OC_App::isEnabled( 'files_sharing' ) ) {
+
+
+
+ } else {
+
+ // check if it is a file owned by the user and not shared at all
+ $userview = new \OC_FilesystemView( '/'.$userId.'/files/' );
+
+ if ( $userview->file_exists( $path ) ) {
+
+ $users[] = $userId;
+
+ }
+
+ }
+
+ $view = new \OC_FilesystemView( '/public-keys/' );
+
+ $keylist = array();
+
+ $count = 0;
+
+ foreach ( $users as $user ) {
+
+ $keylist['key'.++$count] = $view->file_get_contents( $user.'.public.key' );
+
+ }
+
+ return $keylist;
+
+ }
+
+ /**
+ * @brief store file encryption key
+ *
+ * @param string $path relative path of the file, including filename
+ * @param string $key
+ * @return bool true/false
+ * @note The keyfile is not encrypted here. Client code must
+ * asymmetrically encrypt the keyfile before passing it to this method
+ */
+ public static function setFileKey( \OC_FilesystemView $view, $path, $userId, $catfile ) {
+
+ $basePath = '/' . $userId . '/files_encryption/keyfiles';
+
+ $targetPath = self::keySetPreparation( $view, $path, $basePath, $userId );
+
+ if ( $view->is_dir( $basePath . '/' . $targetPath ) ) {
+
+
+
+ } else {
+
+ // Save the keyfile in parallel directory
+ return $view->file_put_contents( $basePath . '/' . $targetPath . '.key', $catfile );
+
+ }
+
+ }
+
+ /**
+ * @brief retrieve keyfile for an encrypted file
+ * @param \OC_FilesystemView $view
+ * @param $userId
+ * @param $filePath
+ * @internal param \OCA\Encryption\file $string name
+ * @return string file key or false
+ * @note The keyfile returned is asymmetrically encrypted. Decryption
+ * of the keyfile must be performed by client code
+ */
+ public static function getFileKey( \OC_FilesystemView $view, $userId, $filePath ) {
+
+ $filePath_f = ltrim( $filePath, '/' );
+
+ $catfilePath = '/' . $userId . '/files_encryption/keyfiles/' . $filePath_f . '.key';
+
+ if ( $view->file_exists( $catfilePath ) ) {
+
+ return $view->file_get_contents( $catfilePath );
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Delete a keyfile
+ *
+ * @param OC_FilesystemView $view
+ * @param string $userId username
+ * @param string $path path of the file the key belongs to
+ * @return bool Outcome of unlink operation
+ * @note $path must be relative to data/user/files. e.g. mydoc.txt NOT
+ * /data/admin/files/mydoc.txt
+ */
+ public static function deleteFileKey( \OC_FilesystemView $view, $userId, $path ) {
+
+ $trimmed = ltrim( $path, '/' );
+ $keyPath = '/' . $userId . '/files_encryption/keyfiles/' . $trimmed . '.key';
+
+ // Unlink doesn't tell us if file was deleted (not found returns
+ // true), so we perform our own test
+ if ( $view->file_exists( $keyPath ) ) {
+
+ return $view->unlink( $keyPath );
+
+ } else {
+
+ \OC_Log::write( 'Encryption library', 'Could not delete keyfile; does not exist: "' . $keyPath, \OC_Log::ERROR );
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief store private key from the user
+ * @param string key
+ * @return bool
+ * @note Encryption of the private key must be performed by client code
+ * as no encryption takes place here
+ */
+ public static function setPrivateKey( $key ) {
+
+ $user = \OCP\User::getUser();
+
+ $view = new \OC_FilesystemView( '/' . $user . '/files_encryption' );
+
+ \OC_FileProxy::$enabled = false;
+
+ if ( !$view->file_exists( '' ) )
+ $view->mkdir( '' );
+
+ return $view->file_put_contents( $user . '.private.key', $key );
+
+ }
+
+ /**
+ * @brief store private keys from the user
+ *
+ * @param string privatekey
+ * @param string publickey
+ * @return bool true/false
+ */
+ public static function setUserKeys($privatekey, $publickey) {
+
+ return ( self::setPrivateKey( $privatekey ) && self::setPublicKey( $publickey ) );
+
+ }
+
+ /**
+ * @brief store public key of the user
+ *
+ * @param string key
+ * @return bool true/false
+ */
+ public static function setPublicKey( $key ) {
+
+ $view = new \OC_FilesystemView( '/public-keys' );
+
+ \OC_FileProxy::$enabled = false;
+
+ if ( !$view->file_exists( '' ) )
+ $view->mkdir( '' );
+
+ return $view->file_put_contents( \OCP\User::getUser() . '.public.key', $key );
+
+
+ }
+
+ /**
+ * @brief store file encryption key
+ *
+ * @param string $path relative path of the file, including filename
+ * @param string $key
+ * @param null $view
+ * @param string $dbClassName
+ * @return bool true/false
+ * @note The keyfile is not encrypted here. Client code must
+ * asymmetrically encrypt the keyfile before passing it to this method
+ */
+ public static function setShareKey( \OC_FilesystemView $view, $path, $userId, $shareKey ) {
+
+ $basePath = '/' . $userId . '/files_encryption/share-keys';
+
+ $shareKeyPath = self::keySetPreparation( $view, $path, $basePath, $userId );
+
+ return $view->file_put_contents( $basePath . '/' . $shareKeyPath . '.shareKey', $shareKey );
+
+ }
+
+ /**
+ * @brief Make preparations to vars and filesystem for saving a keyfile
+ */
+ public static function keySetPreparation( \OC_FilesystemView $view, $path, $basePath, $userId ) {
+
+ $targetPath = ltrim( $path, '/' );
+
+ $path_parts = pathinfo( $targetPath );
+
+ // If the file resides within a subdirectory, create it
+ if (
+ isset( $path_parts['dirname'] )
+ && ! $view->file_exists( $basePath . '/' . $path_parts['dirname'] )
+ ) {
+
+ $view->mkdir( $basePath . '/' . $path_parts['dirname'] );
+
+ }
+
+ return $targetPath;
+
+ }
+
+ /**
+ * @brief Fetch the legacy encryption key from user files
+ * @param string $login used to locate the legacy key
+ * @param string $passphrase used to decrypt the legacy key
+ * @return true / false
+ *
+ * if the key is left out, the default handler will be used
+ */
+ public function getLegacyKey() {
+
+ $user = \OCP\User::getUser();
+ $view = new \OC_FilesystemView( '/' . $user );
+ return $view->file_get_contents( 'encryption.key' );
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index e8dbd95c29d..55cddf2bec8 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -3,8 +3,9 @@
/**
* ownCloud
*
-* @author Robin Appelman
-* @copyright 2011 Robin Appelman icewind1991@gmail.com
+* @author Sam Tuke, Robin Appelman
+* @copyright 2012 Sam Tuke samtuke@owncloud.com, Robin Appelman
+* icewind1991@gmail.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -22,111 +23,367 @@
*/
/**
- * transparent encryption
- */
+* @brief Encryption proxy which handles filesystem operations before and after
+* execution and encrypts, and handles keyfiles accordingly. Used for
+* webui.
+*/
+
+namespace OCA\Encryption;
-class OC_FileProxy_Encryption extends OC_FileProxy{
- private static $blackList=null; //mimetypes blacklisted from encryption
- private static $enableEncryption=null;
+class Proxy extends \OC_FileProxy {
+ private static $blackList = null; //mimetypes blacklisted from encryption
+
+ private static $enableEncryption = null;
+
/**
- * check if a file should be encrypted during write
+ * Check if a file requires encryption
* @param string $path
* @return bool
+ *
+ * Tests if server side encryption is enabled, and file is allowed by blacklists
*/
- private static function shouldEncrypt($path) {
- if (is_null(self::$enableEncryption)) {
- self::$enableEncryption=(OCP\Config::getAppValue('files_encryption', 'enable_encryption', 'true')=='true');
+ private static function shouldEncrypt( $path ) {
+
+ if ( is_null( self::$enableEncryption ) ) {
+
+ if (
+ \OCP\Config::getAppValue( 'files_encryption', 'enable_encryption', 'true' ) == 'true'
+ && Crypt::mode() == 'server'
+ ) {
+
+ self::$enableEncryption = true;
+
+ } else {
+
+ self::$enableEncryption = false;
+
+ }
+
}
- if ( ! self::$enableEncryption) {
+
+ if ( !self::$enableEncryption ) {
+
return false;
+
}
- if (is_null(self::$blackList)) {
- self::$blackList=explode(',', OCP\Config::getAppValue('files_encryption',
- 'type_blacklist',
- 'jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg'));
+
+ if ( is_null(self::$blackList ) ) {
+
+ self::$blackList = explode(',', \OCP\Config::getAppValue( 'files_encryption', 'type_blacklist', 'jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg' ) );
+
}
- if (self::isEncrypted($path)) {
+
+ if ( Crypt::isCatfile( $path ) ) {
+
return true;
+
}
- $extension=substr($path, strrpos($path, '.')+1);
- if (array_search($extension, self::$blackList)===false) {
+
+ $extension = substr( $path, strrpos( $path, '.' ) +1 );
+
+ if ( array_search( $extension, self::$blackList ) === false ) {
+
return true;
+
}
+
+ return false;
}
-
+
+ public function preFile_put_contents( $path, &$data ) {
+
+ if ( self::shouldEncrypt( $path ) ) {
+
+ if ( !is_resource( $data ) ) { //stream put contents should have been converted to fopen
+
+ $userId = \OCP\USER::getUser();
+
+ $rootView = new \OC_FilesystemView( '/' );
+
+ // Set the filesize for userland, before encrypting
+ $size = strlen( $data );
+
+ // Disable encryption proxy to prevent recursive calls
+ \OC_FileProxy::$enabled = false;
+
+ // TODO: Check if file is shared, if so, use multiKeyEncrypt
+
+ // Encrypt plain data and fetch key
+ $encrypted = Crypt::keyEncryptKeyfile( $data, Keymanager::getPublicKey( $rootView, $userId ) );
+
+ // Replace plain content with encrypted content by reference
+ $data = $encrypted['data'];
+
+ $filePath = explode( '/', $path );
+
+ $filePath = array_slice( $filePath, 3 );
+
+ $filePath = '/' . implode( '/', $filePath );
+
+ // TODO: make keyfile dir dynamic from app config
+
+ $view = new \OC_FilesystemView( '/' );
+
+ // Save keyfile for newly encrypted file in parallel directory tree
+ Keymanager::setFileKey( $view, $filePath, $userId, $encrypted['key'] );
+
+ // Update the file cache with file info
+ \OC\Files\Filesystem::putFileInfo( $path, array( 'encrypted'=>true, 'size' => $size ), '' );
+
+ // Re-enable proxy - our work is done
+ \OC_FileProxy::$enabled = true;
+
+ }
+ }
+
+ }
+
/**
- * check if a file is encrypted
- * @param string $path
- * @return bool
+ * @param string $path Path of file from which has been read
+ * @param string $data Data that has been read from file
*/
- private static function isEncrypted($path) {
- $metadata=OC_FileCache_Cached::get($path, '');
- return isset($metadata['encrypted']) and (bool)$metadata['encrypted'];
- }
+ public function postFile_get_contents( $path, $data ) {
+
+ // TODO: Use dependency injection to add required args for view and user etc. to this method
- public function preFile_put_contents($path,&$data) {
- if (self::shouldEncrypt($path)) {
- if ( ! is_resource($data)) {//stream put contents should have been converter to fopen
- $size=strlen($data);
- $data=OC_Crypt::blockEncrypt($data);
- OC_FileCache::put($path, array('encrypted'=>true,'size'=>$size), '');
- }
+ // Disable encryption proxy to prevent recursive calls
+ \OC_FileProxy::$enabled = false;
+
+ // If data is a catfile
+ if (
+ Crypt::mode() == 'server'
+ && Crypt::isCatfile( $data )
+ ) {
+
+ $split = explode( '/', $path );
+
+ $filePath = array_slice( $split, 3 );
+
+ $filePath = '/' . implode( '/', $filePath );
+
+ //$cached = \OC\Files\Filesystem::getFileInfo( $path, '' );
+
+ $view = new \OC_FilesystemView( '' );
+
+ $userId = \OCP\USER::getUser();
+
+ // TODO: Check if file is shared, if so, use multiKeyDecrypt
+
+ $encryptedKeyfile = Keymanager::getFileKey( $view, $userId, $filePath );
+
+ $session = new Session();
+
+ $decrypted = Crypt::keyDecryptKeyfile( $data, $encryptedKeyfile, $session->getPrivateKey( $split[1] ) );
+
+ } elseif (
+ Crypt::mode() == 'server'
+ && isset( $_SESSION['legacyenckey'] )
+ && Crypt::isEncryptedMeta( $path )
+ ) {
+
+ $decrypted = Crypt::legacyDecrypt( $data, $_SESSION['legacyenckey'] );
+
}
+
+ \OC_FileProxy::$enabled = true;
+
+ if ( ! isset( $decrypted ) ) {
+
+ $decrypted = $data;
+
+ }
+
+ return $decrypted;
+
}
-
- public function postFile_get_contents($path, $data) {
- if (self::isEncrypted($path)) {
- $cached=OC_FileCache_Cached::get($path, '');
- $data=OC_Crypt::blockDecrypt($data, '', $cached['size']);
+
+ /**
+ * @brief When a file is deleted, remove its keyfile also
+ */
+ public function preUnlink( $path ) {
+
+ // Disable encryption proxy to prevent recursive calls
+ \OC_FileProxy::$enabled = false;
+
+ $view = new \OC_FilesystemView( '/' );
+
+ $userId = \OCP\USER::getUser();
+
+ // Format path to be relative to user files dir
+ $trimmed = ltrim( $path, '/' );
+ $split = explode( '/', $trimmed );
+ $sliced = array_slice( $split, 2 );
+ $relPath = implode( '/', $sliced );
+
+ if ( $view->is_dir( $path ) ) {
+
+ // Dirs must be handled separately as deleteFileKey
+ // doesn't handle them
+ $view->unlink( $userId . '/' . 'files_encryption' . '/' . 'keyfiles' . '/'. $relPath );
+
+ } else {
+
+ // Delete keyfile so it isn't orphaned
+ $result = Keymanager::deleteFileKey( $view, $userId, $relPath );
+
+ \OC_FileProxy::$enabled = true;
+
+ return $result;
+
}
- return $data;
+
}
- public function postFopen($path,&$result) {
- if ( ! $result) {
+ /**
+ * @brief When a file is renamed, rename its keyfile also
+ * @return bool Result of rename()
+ * @note This is pre rather than post because using post didn't work
+ */
+ public function preRename( $oldPath, $newPath ) {
+
+ // Disable encryption proxy to prevent recursive calls
+ \OC_FileProxy::$enabled = false;
+
+ $view = new \OC_FilesystemView( '/' );
+
+ $userId = \OCP\USER::getUser();
+
+ // Format paths to be relative to user files dir
+ $oldTrimmed = ltrim( $oldPath, '/' );
+ $oldSplit = explode( '/', $oldTrimmed );
+ $oldSliced = array_slice( $oldSplit, 2 );
+ $oldRelPath = implode( '/', $oldSliced );
+ $oldKeyfilePath = $userId . '/' . 'files_encryption' . '/' . 'keyfiles' . '/' . $oldRelPath . '.key';
+
+ $newTrimmed = ltrim( $newPath, '/' );
+ $newSplit = explode( '/', $newTrimmed );
+ $newSliced = array_slice( $newSplit, 2 );
+ $newRelPath = implode( '/', $newSliced );
+ $newKeyfilePath = $userId . '/' . 'files_encryption' . '/' . 'keyfiles' . '/' . $newRelPath . '.key';
+
+ // Rename keyfile so it isn't orphaned
+ $result = $view->rename( $oldKeyfilePath, $newKeyfilePath );
+
+ \OC_FileProxy::$enabled = true;
+
+ return $result;
+
+ }
+
+ public function postFopen( $path, &$result ){
+
+ if ( !$result ) {
+
return $result;
+
}
- $meta=stream_get_meta_data($result);
- if (self::isEncrypted($path)) {
- fclose($result);
- $result=fopen('crypt://'.$path, $meta['mode']);
- } elseif (self::shouldEncrypt($path) and $meta['mode']!='r' and $meta['mode']!='rb') {
- if (OC_Filesystem::file_exists($path) and OC_Filesystem::filesize($path)>0) {
- //first encrypt the target file so we don't end up with a half encrypted file
- OCP\Util::writeLog('files_encryption', 'Decrypting '.$path.' before writing', OCP\Util::DEBUG);
- $tmp=fopen('php://temp');
- OCP\Files::streamCopy($result, $tmp);
- fclose($result);
- OC_Filesystem::file_put_contents($path, $tmp);
- fclose($tmp);
+
+ // Reformat path for use with OC_FSV
+ $path_split = explode( '/', $path );
+ $path_f = implode( array_slice( $path_split, 3 ) );
+
+ // Disable encryption proxy to prevent recursive calls
+ \OC_FileProxy::$enabled = false;
+
+ $meta = stream_get_meta_data( $result );
+
+ $view = new \OC_FilesystemView( '' );
+
+ $util = new Util( $view, \OCP\USER::getUser());
+
+ // If file is already encrypted, decrypt using crypto protocol
+ if (
+ Crypt::mode() == 'server'
+ && $util->isEncryptedPath( $path )
+ ) {
+
+ // Close the original encrypted file
+ fclose( $result );
+
+ // Open the file using the crypto stream wrapper
+ // protocol and let it do the decryption work instead
+ $result = fopen( 'crypt://' . $path_f, $meta['mode'] );
+
+
+ } elseif (
+ self::shouldEncrypt( $path )
+ and $meta ['mode'] != 'r'
+ and $meta['mode'] != 'rb'
+ ) {
+ // If the file is not yet encrypted, but should be
+ // encrypted when it's saved (it's not read only)
+
+ // NOTE: this is the case for new files saved via WebDAV
+
+ if (
+ $view->file_exists( $path )
+ and $view->filesize( $path ) > 0
+ ) {
+ $x = $view->file_get_contents( $path );
+
+ $tmp = tmpfile();
+
+// // Make a temporary copy of the original file
+// \OCP\Files::streamCopy( $result, $tmp );
+//
+// // Close the original stream, we'll return another one
+// fclose( $result );
+//
+// $view->file_put_contents( $path_f, $tmp );
+//
+// fclose( $tmp );
+
}
- $result=fopen('crypt://'.$path, $meta['mode']);
+
+ $result = fopen( 'crypt://'.$path_f, $meta['mode'] );
+
}
+
+ // Re-enable the proxy
+ \OC_FileProxy::$enabled = true;
+
return $result;
+
}
- public function postGetMimeType($path, $mime) {
- if (self::isEncrypted($path)) {
- $mime=OCP\Files::getMimeType('crypt://'.$path, 'w');
+ public function postGetMimeType( $path, $mime ) {
+
+ if ( Crypt::isCatfile( $path ) ) {
+
+ $mime = \OCP\Files::getMimeType( 'crypt://' . $path, 'w' );
+
}
+
return $mime;
+
}
- public function postStat($path, $data) {
- if (self::isEncrypted($path)) {
- $cached=OC_FileCache_Cached::get($path, '');
- $data['size']=$cached['size'];
+ public function postStat( $path, $data ) {
+
+ if ( Crypt::isCatfile( $path ) ) {
+
+ $cached = \OC\Files\Filesystem::getFileInfo( $path, '' );
+
+ $data['size'] = $cached['size'];
+
}
+
return $data;
}
- public function postFileSize($path, $size) {
- if (self::isEncrypted($path)) {
- $cached=OC_FileCache_Cached::get($path, '');
+ public function postFileSize( $path, $size ) {
+
+ if ( Crypt::isCatfile( $path ) ) {
+
+ $cached = \OC\Files\Filesystem::getFileInfo( $path, '' );
+
return $cached['size'];
+
} else {
+
return $size;
+
}
}
}
diff --git a/apps/files_encryption/lib/session.php b/apps/files_encryption/lib/session.php
new file mode 100644
index 00000000000..769a40b359f
--- /dev/null
+++ b/apps/files_encryption/lib/session.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Sam Tuke
+ * @copyright 2012 Sam Tuke samtuke@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 OCA\Encryption;
+
+/**
+ * Class for handling encryption related session data
+ */
+
+class Session {
+
+ /**
+ * @brief Sets user private key to session
+ * @return bool
+ *
+ */
+ public function setPrivateKey( $privateKey ) {
+
+ $_SESSION['privateKey'] = $privateKey;
+
+ return true;
+
+ }
+
+ /**
+ * @brief Gets user private key from session
+ * @returns string $privateKey The user's plaintext private key
+ *
+ */
+ public function getPrivateKey() {
+
+ if (
+ isset( $_SESSION['privateKey'] )
+ && !empty( $_SESSION['privateKey'] )
+ ) {
+
+ return $_SESSION['privateKey'];
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Sets user legacy key to session
+ * @return bool
+ *
+ */
+ public function setLegacyKey( $legacyKey ) {
+
+ if ( $_SESSION['legacyKey'] = $legacyKey ) {
+
+ return true;
+
+ }
+
+ }
+
+ /**
+ * @brief Gets user legacy key from session
+ * @returns string $legacyKey The user's plaintext legacy key
+ *
+ */
+ public function getLegacyKey() {
+
+ if (
+ isset( $_SESSION['legacyKey'] )
+ && !empty( $_SESSION['legacyKey'] )
+ ) {
+
+ return $_SESSION['legacyKey'];
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
new file mode 100644
index 00000000000..65d7d57a05a
--- /dev/null
+++ b/apps/files_encryption/lib/stream.php
@@ -0,0 +1,495 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2012 Sam Tuke <samtuke@owncloud.com>, 2011 Robin Appelman
+ * <icewind1991@gmail.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/>.
+ *
+ */
+
+/**
+ * transparently encrypted filestream
+ *
+ * you can use it as wrapper around an existing stream by setting CryptStream::$sourceStreams['foo']=array('path'=>$path,'stream'=>$stream)
+ * and then fopen('crypt://streams/foo');
+ */
+
+namespace OCA\Encryption;
+
+/**
+ * @brief Provides 'crypt://' stream wrapper protocol.
+ * @note We use a stream wrapper because it is the most secure way to handle
+ * decrypted content transfers. There is no safe way to decrypt the entire file
+ * somewhere on the server, so we have to encrypt and decrypt blocks on the fly.
+ * @note Paths used with this protocol MUST BE RELATIVE. Use URLs like:
+ * crypt://filename, or crypt://subdirectory/filename, NOT
+ * crypt:///home/user/owncloud/data. Otherwise keyfiles will be put in
+ * [owncloud]/data/user/files_encryption/keyfiles/home/user/owncloud/data and
+ * will not be accessible to other methods.
+ * @note Data read and written must always be 8192 bytes long, as this is the
+ * buffer size used internally by PHP. The encryption process makes the input
+ * data longer, and input is chunked into smaller pieces in order to result in
+ * a 8192 encrypted block size.
+ */
+class Stream {
+
+ public static $sourceStreams = array();
+
+ // TODO: make all below properties private again once unit testing is
+ // configured correctly
+ public $rawPath; // The raw path received by stream_open
+ public $path_f; // The raw path formatted to include username and data dir
+ private $userId;
+ private $handle; // Resource returned by fopen
+ private $path;
+ private $readBuffer; // For streams that dont support seeking
+ private $meta = array(); // Header / meta for source stream
+ private $count;
+ private $writeCache;
+ public $size;
+ private $publicKey;
+ private $keyfile;
+ private $encKeyfile;
+ private static $view; // a fsview object set to user dir
+ private $rootView; // a fsview object set to '/'
+
+ public function stream_open( $path, $mode, $options, &$opened_path ) {
+
+ // Get access to filesystem via filesystemview object
+ if ( !self::$view ) {
+
+ self::$view = new \OC_FilesystemView( $this->userId . '/' );
+
+ }
+
+ // Set rootview object if necessary
+ if ( ! $this->rootView ) {
+
+ $this->rootView = new \OC_FilesystemView( $this->userId . '/' );
+
+ }
+
+ $this->userId = \OCP\User::getUser();
+
+ // Get the bare file path
+ $path = str_replace( 'crypt://', '', $path );
+
+ $this->rawPath = $path;
+
+ $this->path_f = $this->userId . '/files/' . $path;
+
+ if (
+ dirname( $path ) == 'streams'
+ and isset( self::$sourceStreams[basename( $path )] )
+ ) {
+
+ // Is this just for unit testing purposes?
+
+ $this->handle = self::$sourceStreams[basename( $path )]['stream'];
+
+ $this->path = self::$sourceStreams[basename( $path )]['path'];
+
+ $this->size = self::$sourceStreams[basename( $path )]['size'];
+
+ } else {
+
+ if (
+ $mode == 'w'
+ or $mode == 'w+'
+ or $mode == 'wb'
+ or $mode == 'wb+'
+ ) {
+
+ $this->size = 0;
+
+ } else {
+
+
+
+ $this->size = self::$view->filesize( $this->path_f, $mode );
+
+ //$this->size = filesize( $path );
+
+ }
+
+ // Disable fileproxies so we can open the source file without recursive encryption
+ \OC_FileProxy::$enabled = false;
+
+ //$this->handle = fopen( $path, $mode );
+
+ $this->handle = self::$view->fopen( $this->path_f, $mode );
+
+ \OC_FileProxy::$enabled = true;
+
+ if ( !is_resource( $this->handle ) ) {
+
+ \OCP\Util::writeLog( 'files_encryption', 'failed to open '.$path, \OCP\Util::ERROR );
+
+ }
+
+ }
+
+ if ( is_resource( $this->handle ) ) {
+
+ $this->meta = stream_get_meta_data( $this->handle );
+
+ }
+
+ return is_resource( $this->handle );
+
+ }
+
+ public function stream_seek( $offset, $whence = SEEK_SET ) {
+
+ $this->flush();
+
+ fseek( $this->handle, $offset, $whence );
+
+ }
+
+ public function stream_tell() {
+ return ftell($this->handle);
+ }
+
+ public function stream_read( $count ) {
+
+ $this->writeCache = '';
+
+ if ( $count != 8192 ) {
+
+ // $count will always be 8192 https://bugs.php.net/bug.php?id=21641
+ // This makes this function a lot simpler, but will break this class if the above 'bug' gets 'fixed'
+ \OCP\Util::writeLog( 'files_encryption', 'PHP "bug" 21641 no longer holds, decryption system requires refactoring', \OCP\Util::FATAL );
+
+ die();
+
+ }
+
+// $pos = ftell( $this->handle );
+//
+ // Get the data from the file handle
+ $data = fread( $this->handle, 8192 );
+
+ if ( strlen( $data ) ) {
+
+ $this->getKey();
+
+ $result = Crypt::symmetricDecryptFileContent( $data, $this->keyfile );
+
+ } else {
+
+ $result = '';
+
+ }
+
+// $length = $this->size - $pos;
+//
+// if ( $length < 8192 ) {
+//
+// $result = substr( $result, 0, $length );
+//
+// }
+
+ return $result;
+
+ }
+
+ /**
+ * @brief Encrypt and pad data ready for writing to disk
+ * @param string $plainData data to be encrypted
+ * @param string $key key to use for encryption
+ * @return encrypted data on success, false on failure
+ */
+ public function preWriteEncrypt( $plainData, $key ) {
+
+ // Encrypt data to 'catfile', which includes IV
+ if ( $encrypted = Crypt::symmetricEncryptFileContent( $plainData, $key ) ) {
+
+ return $encrypted;
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Get the keyfile for the current file, generate one if necessary
+ * @param bool $generate if true, a new key will be generated if none can be found
+ * @return bool true on key found and set, false on key not found and new key generated and set
+ */
+ public function getKey() {
+
+ // If a keyfile already exists for a file named identically to
+ // file to be written
+ if ( self::$view->file_exists( $this->userId . '/'. 'files_encryption' . '/' . 'keyfiles' . '/' . $this->rawPath . '.key' ) ) {
+
+ // TODO: add error handling for when file exists but no
+ // keyfile
+
+ // Fetch existing keyfile
+ $this->encKeyfile = Keymanager::getFileKey( $this->rootView, $this->userId, $this->rawPath );
+
+ $this->getUser();
+
+ $session = new Session();
+
+ $privateKey = $session->getPrivateKey( $this->userId );
+
+ $this->keyfile = Crypt::keyDecrypt( $this->encKeyfile, $privateKey );
+
+ return true;
+
+ } else {
+
+ return false;
+
+ }
+
+ }
+
+ public function getuser() {
+
+ // Only get the user again if it isn't already set
+ if ( empty( $this->userId ) ) {
+
+ // TODO: Move this user call out of here - it belongs
+ // elsewhere
+ $this->userId = \OCP\User::getUser();
+
+ }
+
+ // TODO: Add a method for getting the user in case OCP\User::
+ // getUser() doesn't work (can that scenario ever occur?)
+
+ }
+
+ /**
+ * @brief Handle plain data from the stream, and write it in 8192 byte blocks
+ * @param string $data data to be written to disk
+ * @note the data will be written to the path stored in the stream handle, set in stream_open()
+ * @note $data is only ever be a maximum of 8192 bytes long. This is set by PHP internally. stream_write() is called multiple times in a loop on data larger than 8192 bytes
+ * @note Because the encryption process used increases the length of $data, a writeCache is used to carry over data which would not fit in the required block size
+ * @note Padding is added to each encrypted block to ensure that the resulting block is exactly 8192 bytes. This is removed during stream_read
+ * @note PHP automatically updates the file pointer after writing data to reflect it's length. There is generally no need to update the poitner manually using fseek
+ */
+ public function stream_write( $data ) {
+
+ // Disable the file proxies so that encryption is not
+ // automatically attempted when the file is written to disk -
+ // we are handling that separately here and we don't want to
+ // get into an infinite loop
+ \OC_FileProxy::$enabled = false;
+
+ // Get the length of the unencrypted data that we are handling
+ $length = strlen( $data );
+
+ // So far this round, no data has been written
+ $written = 0;
+
+ // Find out where we are up to in the writing of data to the
+ // file
+ $pointer = ftell( $this->handle );
+
+ // Make sure the userId is set
+ $this->getuser();
+
+ // TODO: Check if file is shared, if so, use multiKeyEncrypt and
+ // save shareKeys in necessary user directories
+
+ // Get / generate the keyfile for the file we're handling
+ // If we're writing a new file (not overwriting an existing
+ // one), save the newly generated keyfile
+ if ( ! $this->getKey() ) {
+
+ $this->keyfile = Crypt::generateKey();
+
+ $this->publicKey = Keymanager::getPublicKey( $this->rootView, $this->userId );
+
+ $this->encKeyfile = Crypt::keyEncrypt( $this->keyfile, $this->publicKey );
+
+ $view = new \OC_FilesystemView( '/' );
+ $userId = \OCP\User::getUser();
+
+ // Save the new encrypted file key
+ Keymanager::setFileKey( $view, $this->rawPath, $userId, $this->encKeyfile );
+
+ }
+
+ // If extra data is left over from the last round, make sure it
+ // is integrated into the next 6126 / 8192 block
+ if ( $this->writeCache ) {
+
+ // Concat writeCache to start of $data
+ $data = $this->writeCache . $data;
+
+ // Clear the write cache, ready for resuse - it has been
+ // flushed and its old contents processed
+ $this->writeCache = '';
+
+ }
+//
+// // Make sure we always start on a block start
+ if ( 0 != ( $pointer % 8192 ) ) {
+ // if the current position of
+ // file indicator is not aligned to a 8192 byte block, fix it
+ // so that it is
+
+// fseek( $this->handle, - ( $pointer % 8192 ), SEEK_CUR );
+//
+// $pointer = ftell( $this->handle );
+//
+// $unencryptedNewBlock = fread( $this->handle, 8192 );
+//
+// fseek( $this->handle, - ( $currentPos % 8192 ), SEEK_CUR );
+//
+// $block = Crypt::symmetricDecryptFileContent( $unencryptedNewBlock, $this->keyfile );
+//
+// $x = substr( $block, 0, $currentPos % 8192 );
+//
+// $data = $x . $data;
+//
+// fseek( $this->handle, - ( $currentPos % 8192 ), SEEK_CUR );
+//
+ }
+
+// $currentPos = ftell( $this->handle );
+
+// // While there still remains somed data to be processed & written
+ while( strlen( $data ) > 0 ) {
+//
+// // Remaining length for this iteration, not of the
+// // entire file (may be greater than 8192 bytes)
+// $remainingLength = strlen( $data );
+//
+// // If data remaining to be written is less than the
+// // size of 1 6126 byte block
+ if ( strlen( $data ) < 6126 ) {
+
+ // Set writeCache to contents of $data
+ // The writeCache will be carried over to the
+ // next write round, and added to the start of
+ // $data to ensure that written blocks are
+ // always the correct length. If there is still
+ // data in writeCache after the writing round
+ // has finished, then the data will be written
+ // to disk by $this->flush().
+ $this->writeCache = $data;
+
+ // Clear $data ready for next round
+ $data = '';
+//
+ } else {
+
+ // Read the chunk from the start of $data
+ $chunk = substr( $data, 0, 6126 );
+
+ $encrypted = $this->preWriteEncrypt( $chunk, $this->keyfile );
+
+ // Write the data chunk to disk. This will be
+ // attended to the last data chunk if the file
+ // being handled totals more than 6126 bytes
+ fwrite( $this->handle, $encrypted );
+
+ $writtenLen = strlen( $encrypted );
+ //fseek( $this->handle, $writtenLen, SEEK_CUR );
+
+ // Remove the chunk we just processed from
+ // $data, leaving only unprocessed data in $data
+ // var, for handling on the next round
+ $data = substr( $data, 6126 );
+
+ }
+
+ }
+
+ $this->size = max( $this->size, $pointer + $length );
+
+ return $length;
+
+ }
+
+
+ public function stream_set_option( $option, $arg1, $arg2 ) {
+ switch($option) {
+ case STREAM_OPTION_BLOCKING:
+ stream_set_blocking( $this->handle, $arg1 );
+ break;
+ case STREAM_OPTION_READ_TIMEOUT:
+ stream_set_timeout( $this->handle, $arg1, $arg2 );
+ break;
+ case STREAM_OPTION_WRITE_BUFFER:
+ stream_set_write_buffer( $this->handle, $arg1, $arg2 );
+ }
+ }
+
+ public function stream_stat() {
+ return fstat($this->handle);
+ }
+
+ public function stream_lock( $mode ) {
+ flock( $this->handle, $mode );
+ }
+
+ public function stream_flush() {
+
+ return fflush( $this->handle );
+ // Not a typo: http://php.net/manual/en/function.fflush.php
+
+ }
+
+ public function stream_eof() {
+ return feof($this->handle);
+ }
+
+ private function flush() {
+
+ if ( $this->writeCache ) {
+
+ // Set keyfile property for file in question
+ $this->getKey();
+
+ $encrypted = $this->preWriteEncrypt( $this->writeCache, $this->keyfile );
+
+ fwrite( $this->handle, $encrypted );
+
+ $this->writeCache = '';
+
+ }
+
+ }
+
+ public function stream_close() {
+
+ $this->flush();
+
+ if (
+ $this->meta['mode']!='r'
+ and $this->meta['mode']!='rb'
+ ) {
+
+ \OC\Files\Filesystem::putFileInfo( $this->path, array( 'encrypted' => true, 'size' => $this->size ), '' );
+
+ }
+
+ return fclose( $this->handle );
+
+ }
+
+}
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
new file mode 100644
index 00000000000..52bc74db27a
--- /dev/null
+++ b/apps/files_encryption/lib/util.php
@@ -0,0 +1,476 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Sam Tuke, Frank Karlitschek
+ * @copyright 2012 Sam Tuke samtuke@owncloud.com,
+ * Frank Karlitschek frank@owncloud.org
+ *
+ * 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/>.
+ *
+ */
+
+// Todo:
+// - Crypt/decrypt button in the userinterface
+// - Setting if crypto should be on by default
+// - Add a setting "Don´t encrypt files larger than xx because of performance
+// reasons"
+// - Transparent decrypt/encrypt in filesystem.php. Autodetect if a file is
+// encrypted (.encrypted extension)
+// - Don't use a password directly as encryption key. but a key which is
+// stored on the server and encrypted with the user password. -> password
+// change faster
+// - IMPORTANT! Check if the block lenght of the encrypted data stays the same
+
+namespace OCA\Encryption;
+
+/**
+ * @brief Class for utilities relating to encrypted file storage system
+ * @param OC_FilesystemView $view expected to have OC '/' as root path
+ * @param string $userId ID of the logged in user
+ * @param int $client indicating status of client side encryption. Currently
+ * unused, likely to become obsolete shortly
+ */
+
+class Util {
+
+
+ // Web UI:
+
+ //// DONE: files created via web ui are encrypted
+ //// DONE: file created & encrypted via web ui are readable in web ui
+ //// DONE: file created & encrypted via web ui are readable via webdav
+
+
+ // WebDAV:
+
+ //// DONE: new data filled files added via webdav get encrypted
+ //// DONE: new data filled files added via webdav are readable via webdav
+ //// DONE: reading unencrypted files when encryption is enabled works via
+ //// webdav
+ //// DONE: files created & encrypted via web ui are readable via webdav
+
+
+ // Legacy support:
+
+ //// DONE: add method to check if file is encrypted using new system
+ //// DONE: add method to check if file is encrypted using old system
+ //// DONE: add method to fetch legacy key
+ //// DONE: add method to decrypt legacy encrypted data
+
+
+ // Admin UI:
+
+ //// DONE: changing user password also changes encryption passphrase
+
+ //// TODO: add support for optional recovery in case of lost passphrase / keys
+ //// TODO: add admin optional required long passphrase for users
+ //// TODO: add UI buttons for encrypt / decrypt everything
+ //// TODO: implement flag system to allow user to specify encryption by folder, subfolder, etc.
+
+
+ // Sharing:
+
+ //// TODO: add support for encrypting to multiple public keys
+ //// TODO: add support for decrypting to multiple private keys
+
+
+ // Integration testing:
+
+ //// TODO: test new encryption with versioning
+ //// TODO: test new encryption with sharing
+ //// TODO: test new encryption with proxies
+
+
+ private $view; // OC_FilesystemView object for filesystem operations
+ private $userId; // ID of the currently logged-in user
+ private $pwd; // User Password
+ private $client; // Client side encryption mode flag
+ private $publicKeyDir; // Dir containing all public user keys
+ private $encryptionDir; // Dir containing user's files_encryption
+ private $keyfilesPath; // Dir containing user's keyfiles
+ private $shareKeysPath; // Dir containing env keys for shared files
+ private $publicKeyPath; // Path to user's public key
+ private $privateKeyPath; // Path to user's private key
+
+ public function __construct( \OC_FilesystemView $view, $userId, $client = false ) {
+
+ $this->view = $view;
+ $this->userId = $userId;
+ $this->client = $client;
+ $this->userDir = '/' . $this->userId;
+ $this->userFilesDir = '/' . $this->userId . '/' . 'files';
+ $this->publicKeyDir = '/' . 'public-keys';
+ $this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption';
+ $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles';
+ $this->shareKeysPath = $this->encryptionDir . '/' . 'share-keys';
+ $this->publicKeyPath = $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
+ $this->privateKeyPath = $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
+
+ }
+
+ public function ready() {
+
+ if(
+ !$this->view->file_exists( $this->encryptionDir )
+ or !$this->view->file_exists( $this->keyfilesPath )
+ or !$this->view->file_exists( $this->shareKeysPath )
+ or !$this->view->file_exists( $this->publicKeyPath )
+ or !$this->view->file_exists( $this->privateKeyPath )
+ ) {
+
+ return false;
+
+ } else {
+
+ return true;
+
+ }
+
+ }
+
+ /**
+ * @brief Sets up user folders and keys for serverside encryption
+ * @param $passphrase passphrase to encrypt server-stored private key with
+ */
+ public function setupServerSide( $passphrase = null ) {
+
+ // Create user dir
+ if( !$this->view->file_exists( $this->userDir ) ) {
+
+ $this->view->mkdir( $this->userDir );
+
+ }
+
+ // Create user files dir
+ if( !$this->view->file_exists( $this->userFilesDir ) ) {
+
+ $this->view->mkdir( $this->userFilesDir );
+
+ }
+
+ // Create shared public key directory
+ if( !$this->view->file_exists( $this->publicKeyDir ) ) {
+
+ $this->view->mkdir( $this->publicKeyDir );
+
+ }
+
+ // Create encryption app directory
+ if( !$this->view->file_exists( $this->encryptionDir ) ) {
+
+ $this->view->mkdir( $this->encryptionDir );
+
+ }
+
+ // Create mirrored keyfile directory
+ if( !$this->view->file_exists( $this->keyfilesPath ) ) {
+
+ $this->view->mkdir( $this->keyfilesPath );
+
+ }
+
+ // Create mirrored share env keys directory
+ if( !$this->view->file_exists( $this->shareKeysPath ) ) {
+
+ $this->view->mkdir( $this->shareKeysPath );
+
+ }
+
+ // Create user keypair
+ if (
+ ! $this->view->file_exists( $this->publicKeyPath )
+ or ! $this->view->file_exists( $this->privateKeyPath )
+ ) {
+
+ // Generate keypair
+ $keypair = Crypt::createKeypair();
+
+ \OC_FileProxy::$enabled = false;
+
+ // Save public key
+ $this->view->file_put_contents( $this->publicKeyPath, $keypair['publicKey'] );
+
+ // Encrypt private key with user pwd as passphrase
+ $encryptedPrivateKey = Crypt::symmetricEncryptFileContent( $keypair['privateKey'], $passphrase );
+
+ // Save private key
+ $this->view->file_put_contents( $this->privateKeyPath, $encryptedPrivateKey );
+
+ \OC_FileProxy::$enabled = true;
+
+ }
+
+ return true;
+
+ }
+
+ /**
+ * @brief Find all files and their encryption status within a directory
+ * @param string $directory The path of the parent directory to search
+ * @return mixed false if 0 found, array on success. Keys: name, path
+
+ * @note $directory needs to be a path relative to OC data dir. e.g.
+ * /admin/files NOT /backup OR /home/www/oc/data/admin/files
+ */
+ public function findFiles( $directory ) {
+
+ // Disable proxy - we don't want files to be decrypted before
+ // we handle them
+ \OC_FileProxy::$enabled = false;
+
+ $found = array( 'plain' => array(), 'encrypted' => array(), 'legacy' => array() );
+
+ if (
+ $this->view->is_dir( $directory )
+ && $handle = $this->view->opendir( $directory )
+ ) {
+
+ while ( false !== ( $file = readdir( $handle ) ) ) {
+
+ if (
+ $file != "."
+ && $file != ".."
+ ) {
+
+ $filePath = $directory . '/' . $this->view->getRelativePath( '/' . $file );
+ $relPath = $this->stripUserFilesPath( $filePath );
+
+ // If the path is a directory, search
+ // its contents
+ if ( $this->view->is_dir( $filePath ) ) {
+
+ $this->findFiles( $filePath );
+
+ // If the path is a file, determine
+ // its encryption status
+ } elseif ( $this->view->is_file( $filePath ) ) {
+
+ // Disable proxies again, some-
+ // where they got re-enabled :/
+ \OC_FileProxy::$enabled = false;
+
+ $data = $this->view->file_get_contents( $filePath );
+
+ // If the file is encrypted
+ // NOTE: If the userId is
+ // empty or not set, file will
+ // detected as plain
+ // NOTE: This is inefficient;
+ // scanning every file like this
+ // will eat server resources :(
+ if (
+ Keymanager::getFileKey( $this->view, $this->userId, $file )
+ && Crypt::isCatfile( $data )
+ ) {
+
+ $found['encrypted'][] = array( 'name' => $file, 'path' => $filePath );
+
+ // If the file uses old
+ // encryption system
+ } elseif ( Crypt::isLegacyEncryptedContent( $this->view->file_get_contents( $filePath ), $relPath ) ) {
+
+ $found['legacy'][] = array( 'name' => $file, 'path' => $filePath );
+
+ // If the file is not encrypted
+ } else {
+
+ $found['plain'][] = array( 'name' => $file, 'path' => $filePath );
+
+ }
+
+ }
+
+ }
+
+ }
+
+ \OC_FileProxy::$enabled = true;
+
+ if ( empty( $found ) ) {
+
+ return false;
+
+ } else {
+
+ return $found;
+
+ }
+
+ }
+
+ \OC_FileProxy::$enabled = true;
+
+ return false;
+
+ }
+
+ /**
+ * @brief Check if a given path identifies an encrypted file
+ * @return true / false
+ */
+ public function isEncryptedPath( $path ) {
+
+ // Disable encryption proxy so data retreived is in its
+ // original form
+ \OC_FileProxy::$enabled = false;
+
+ $data = $this->view->file_get_contents( $path );
+
+ \OC_FileProxy::$enabled = true;
+
+ return Crypt::isCatfile( $data );
+
+ }
+
+ /**
+ * @brief Format a path to be relative to the /user/files/ directory
+ */
+ public function stripUserFilesPath( $path ) {
+
+ $trimmed = ltrim( $path, '/' );
+ $split = explode( '/', $trimmed );
+ $sliced = array_slice( $split, 2 );
+ $relPath = implode( '/', $sliced );
+
+ return $relPath;
+
+ }
+
+ /**
+ * @brief Encrypt all files in a directory
+ * @param string $publicKey the public key to encrypt files with
+ * @param string $dirPath the directory whose files will be encrypted
+ * @note Encryption is recursive
+ */
+ public function encryptAll( $publicKey, $dirPath, $legacyPassphrase = null, $newPassphrase = null ) {
+
+ if ( $found = $this->findFiles( $dirPath ) ) {
+
+ // Disable proxy to prevent file being encrypted twice
+ \OC_FileProxy::$enabled = false;
+
+ // Encrypt unencrypted files
+ foreach ( $found['plain'] as $plainFile ) {
+
+ // Fetch data from file
+ $plainData = $this->view->file_get_contents( $plainFile['path'] );
+
+ // Encrypt data, generate catfile
+ $encrypted = Crypt::keyEncryptKeyfile( $plainData, $publicKey );
+
+ $relPath = $this->stripUserFilesPath( $plainFile['path'] );
+
+ // Save keyfile
+ Keymanager::setFileKey( $this->view, $relPath, $this->userId, $encrypted['key'] );
+
+ // Overwrite the existing file with the encrypted one
+ $this->view->file_put_contents( $plainFile['path'], $encrypted['data'] );
+
+ $size = strlen( $encrypted['data'] );
+
+ // Add the file to the cache
+ \OC\Files\Filesystem::putFileInfo( $plainFile['path'], array( 'encrypted'=>true, 'size' => $size ), '' );
+
+ }
+
+ // Encrypt legacy encrypted files
+ if (
+ ! empty( $legacyPassphrase )
+ && ! empty( $newPassphrase )
+ ) {
+
+ foreach ( $found['legacy'] as $legacyFile ) {
+
+ // Fetch data from file
+ $legacyData = $this->view->file_get_contents( $legacyFile['path'] );
+
+ // Recrypt data, generate catfile
+ $recrypted = Crypt::legacyKeyRecryptKeyfile( $legacyData, $legacyPassphrase, $publicKey, $newPassphrase );
+
+ $relPath = $this->stripUserFilesPath( $legacyFile['path'] );
+
+ // Save keyfile
+ Keymanager::setFileKey( $this->view, $relPath, $this->userId, $recrypted['key'] );
+
+ // Overwrite the existing file with the encrypted one
+ $this->view->file_put_contents( $legacyFile['path'], $recrypted['data'] );
+
+ $size = strlen( $recrypted['data'] );
+
+ // Add the file to the cache
+ \OC\Files\Filesystem::putFileInfo( $legacyFile['path'], array( 'encrypted'=>true, 'size' => $size ), '' );
+
+ }
+
+ }
+
+ \OC_FileProxy::$enabled = true;
+
+ // If files were found, return true
+ return true;
+
+ } else {
+
+ // If no files were found, return false
+ return false;
+
+ }
+
+ }
+
+ /**
+ * @brief Return important encryption related paths
+ * @param string $pathName Name of the directory to return the path of
+ * @return string path
+ */
+ public function getPath( $pathName ) {
+
+ switch ( $pathName ) {
+
+ case 'publicKeyDir':
+
+ return $this->publicKeyDir;
+
+ break;
+
+ case 'encryptionDir':
+
+ return $this->encryptionDir;
+
+ break;
+
+ case 'keyfilesPath':
+
+ return $this->keyfilesPath;
+
+ break;
+
+ case 'publicKeyPath':
+
+ return $this->publicKeyPath;
+
+ break;
+
+ case 'privateKeyPath':
+
+ return $this->privateKeyPath;
+
+ break;
+
+ }
+
+ }
+
+}
diff --git a/apps/files_encryption/settings-personal.php b/apps/files_encryption/settings-personal.php
new file mode 100644
index 00000000000..af0273cfdc4
--- /dev/null
+++ b/apps/files_encryption/settings-personal.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Copyright (c) 2013 Sam Tuke <samtuke@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+$tmpl = new OCP\Template( 'files_encryption', 'settings-personal');
+
+$blackList = explode( ',', \OCP\Config::getAppValue( 'files_encryption', 'type_blacklist', 'jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg' ) );
+
+$tmpl->assign( 'blacklist', $blackList );
+
+return $tmpl->fetchPage();
+
+return null;
diff --git a/apps/files_encryption/settings.php b/apps/files_encryption/settings.php
index 94ff5ab94ba..d1260f44e9f 100644
--- a/apps/files_encryption/settings.php
+++ b/apps/files_encryption/settings.php
@@ -6,17 +6,16 @@
* See the COPYING-README file.
*/
-OC_Util::checkAdminUser();
+\OC_Util::checkAdminUser();
-$tmpl = new OCP\Template( 'files_encryption', 'settings');
-$blackList=explode(',', OCP\Config::getAppValue('files_encryption',
- 'type_blacklist',
- 'jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg'));
-$enabled=(OCP\Config::getAppValue('files_encryption', 'enable_encryption', 'true')=='true');
-$tmpl->assign('blacklist', $blackList);
-$tmpl->assign('encryption_enabled', $enabled);
+$tmpl = new OCP\Template( 'files_encryption', 'settings' );
-OCP\Util::addscript('files_encryption', 'settings');
-OCP\Util::addscript('core', 'multiselect');
+$blackList = explode( ',', \OCP\Config::getAppValue( 'files_encryption', 'type_blacklist', 'jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg' ) );
+
+$tmpl->assign( 'blacklist', $blackList );
+$tmpl->assign( 'encryption_mode', \OC_Appconfig::getValue( 'files_encryption', 'mode', 'none' ) );
+
+\OCP\Util::addscript( 'files_encryption', 'settings' );
+\OCP\Util::addscript( 'core', 'multiselect' );
return $tmpl->fetchPage();
diff --git a/apps/files_encryption/templates/settings-personal.php b/apps/files_encryption/templates/settings-personal.php
new file mode 100644
index 00000000000..47467c52c08
--- /dev/null
+++ b/apps/files_encryption/templates/settings-personal.php
@@ -0,0 +1,22 @@
+<form id="encryption">
+ <fieldset class="personalblock">
+ <legend>
+ <?php echo $l->t( 'Encryption' ); ?>
+ </legend>
+ <p>
+ <?php echo $l->t( 'File encryption is enabled.' ); ?>
+ </p>
+ <?php if ( ! empty( $_["blacklist"] ) ): ?>
+ <p>
+ <?php $l->t( 'The following file types will not be encrypted:' ); ?>
+ </p>
+ <ul>
+ <?php foreach( $_["blacklist"] as $type ): ?>
+ <li>
+ <?php echo $type; ?>
+ </li>
+ <?php endforeach; ?>
+ </ul>
+ <?php endif; ?>
+ </fieldset>
+</form>
diff --git a/apps/files_encryption/templates/settings.php b/apps/files_encryption/templates/settings.php
index 268b1a80ccd..f7ef8a8efe6 100644
--- a/apps/files_encryption/templates/settings.php
+++ b/apps/files_encryption/templates/settings.php
@@ -1,14 +1,20 @@
-<form id="calendar">
+<form id="encryption">
<fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Encryption');?></strong></legend>
- <input type='checkbox'<?php if ($_['encryption_enabled']): ?> checked="checked"<?php endif; ?>
- id='enable_encryption' ></input>
- <label for='enable_encryption'><?php echo $l->t('Enable Encryption')?></label><br />
- <select id='encryption_blacklist' title="<?php echo $l->t('None')?>" multiple="multiple">
- <?php foreach ($_['blacklist'] as $type): ?>
- <option selected="selected" value="<?php echo $type;?>"><?php echo $type;?></option>
+
+ <p>
+ <strong><?php echo $l->t( 'Encryption' ); ?></strong>
+
+ <?php echo $l->t( "Exclude the following file types from encryption:" ); ?>
+ <br />
+
+ <select
+ id='encryption_blacklist'
+ title="<?php echo $l->t( 'None' )?>"
+ multiple="multiple">
+ <?php foreach($_["blacklist"] as $type): ?>
+ <option selected="selected" value="<?php echo $type; ?>"> <?php echo $type; ?> </option>
<?php endforeach;?>
- </select><br />
- <?php echo $l->t('Exclude the following file types from encryption'); ?>
+ </select>
+ </p>
</fieldset>
</form>
diff --git a/apps/files_encryption/tests/binary b/apps/files_encryption/test/binary
index 79bc99479da..79bc99479da 100644
--- a/apps/files_encryption/tests/binary
+++ b/apps/files_encryption/test/binary
Binary files differ
diff --git a/apps/files_encryption/test/crypt.php b/apps/files_encryption/test/crypt.php
new file mode 100755
index 00000000000..aa87ec32821
--- /dev/null
+++ b/apps/files_encryption/test/crypt.php
@@ -0,0 +1,667 @@
+<?php
+/**
+ * Copyright (c) 2012 Sam Tuke <samtuke@owncloud.com>, and
+ * Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+//require_once "PHPUnit/Framework/TestCase.php";
+require_once realpath( dirname(__FILE__).'/../../../3rdparty/Crypt_Blowfish/Blowfish.php' );
+require_once realpath( dirname(__FILE__).'/../../../lib/base.php' );
+require_once realpath( dirname(__FILE__).'/../lib/crypt.php' );
+require_once realpath( dirname(__FILE__).'/../lib/keymanager.php' );
+require_once realpath( dirname(__FILE__).'/../lib/proxy.php' );
+require_once realpath( dirname(__FILE__).'/../lib/stream.php' );
+require_once realpath( dirname(__FILE__).'/../lib/util.php' );
+require_once realpath( dirname(__FILE__).'/../appinfo/app.php' );
+
+use OCA\Encryption;
+
+// This has to go here because otherwise session errors arise, and the private
+// encryption key needs to be saved in the session
+\OC_User::login( 'admin', 'admin' );
+
+/**
+ * @note It would be better to use Mockery here for mocking out the session
+ * handling process, and isolate calls to session class and data from the unit
+ * tests relating to them (stream etc.). However getting mockery to work and
+ * overload classes whilst also using the OC autoloader is difficult due to
+ * load order Pear errors.
+ */
+
+class Test_Crypt extends \PHPUnit_Framework_TestCase {
+
+ function setUp() {
+
+ // set content for encrypting / decrypting in tests
+ $this->dataLong = file_get_contents( realpath( dirname(__FILE__).'/../lib/crypt.php' ) );
+ $this->dataShort = 'hats';
+ $this->dataUrl = realpath( dirname(__FILE__).'/../lib/crypt.php' );
+ $this->legacyData = realpath( dirname(__FILE__).'/legacy-text.txt' );
+ $this->legacyEncryptedData = realpath( dirname(__FILE__).'/legacy-encrypted-text.txt' );
+ $this->randomKey = Encryption\Crypt::generateKey();
+
+ $keypair = Encryption\Crypt::createKeypair();
+ $this->genPublicKey = $keypair['publicKey'];
+ $this->genPrivateKey = $keypair['privateKey'];
+
+ $this->view = new \OC_FilesystemView( '/' );
+
+ \OC_User::setUserId( 'admin' );
+ $this->userId = 'admin';
+ $this->pass = 'admin';
+
+ \OC_Filesystem::init( '/' );
+ \OC_Filesystem::mount( 'OC_Filestorage_Local', array('datadir' => \OC_User::getHome($this->userId)), '/' );
+
+ }
+
+ function tearDown() {
+
+ }
+
+ function testGenerateKey() {
+
+ # TODO: use more accurate (larger) string length for test confirmation
+
+ $key = Encryption\Crypt::generateKey();
+
+ $this->assertTrue( strlen( $key ) > 16 );
+
+ }
+
+ function testGenerateIv() {
+
+ $iv = Encryption\Crypt::generateIv();
+
+ $this->assertEquals( 16, strlen( $iv ) );
+
+ return $iv;
+
+ }
+
+ /**
+ * @depends testGenerateIv
+ */
+ function testConcatIv( $iv ) {
+
+ $catFile = Encryption\Crypt::concatIv( $this->dataLong, $iv );
+
+ // Fetch encryption metadata from end of file
+ $meta = substr( $catFile, -22 );
+
+ $identifier = substr( $meta, 0, 6);
+
+ // Fetch IV from end of file
+ $foundIv = substr( $meta, 6 );
+
+ $this->assertEquals( '00iv00', $identifier );
+
+ $this->assertEquals( $iv, $foundIv );
+
+ // Remove IV and IV identifier text to expose encrypted content
+ $data = substr( $catFile, 0, -22 );
+
+ $this->assertEquals( $this->dataLong, $data );
+
+ return array(
+ 'iv' => $iv
+ , 'catfile' => $catFile
+ );
+
+ }
+
+ /**
+ * @depends testConcatIv
+ */
+ function testSplitIv( $testConcatIv ) {
+
+ // Split catfile into components
+ $splitCatfile = Encryption\Crypt::splitIv( $testConcatIv['catfile'] );
+
+ // Check that original IV and split IV match
+ $this->assertEquals( $testConcatIv['iv'], $splitCatfile['iv'] );
+
+ // Check that original data and split data match
+ $this->assertEquals( $this->dataLong, $splitCatfile['encrypted'] );
+
+ }
+
+ function testAddPadding() {
+
+ $padded = Encryption\Crypt::addPadding( $this->dataLong );
+
+ $padding = substr( $padded, -2 );
+
+ $this->assertEquals( 'xx' , $padding );
+
+ return $padded;
+
+ }
+
+ /**
+ * @depends testAddPadding
+ */
+ function testRemovePadding( $padded ) {
+
+ $noPadding = Encryption\Crypt::RemovePadding( $padded );
+
+ $this->assertEquals( $this->dataLong, $noPadding );
+
+ }
+
+ function testEncrypt() {
+
+ $random = openssl_random_pseudo_bytes( 13 );
+
+ $iv = substr( base64_encode( $random ), 0, -4 ); // i.e. E5IG033j+mRNKrht
+
+ $crypted = Encryption\Crypt::encrypt( $this->dataUrl, $iv, 'hat' );
+
+ $this->assertNotEquals( $this->dataUrl, $crypted );
+
+ }
+
+ function testDecrypt() {
+
+ $random = openssl_random_pseudo_bytes( 13 );
+
+ $iv = substr( base64_encode( $random ), 0, -4 ); // i.e. E5IG033j+mRNKrht
+
+ $crypted = Encryption\Crypt::encrypt( $this->dataUrl, $iv, 'hat' );
+
+ $decrypt = Encryption\Crypt::decrypt( $crypted, $iv, 'hat' );
+
+ $this->assertEquals( $this->dataUrl, $decrypt );
+
+ }
+
+ function testSymmetricEncryptFileContent() {
+
+ # TODO: search in keyfile for actual content as IV will ensure this test always passes
+
+ $crypted = Encryption\Crypt::symmetricEncryptFileContent( $this->dataShort, 'hat' );
+
+ $this->assertNotEquals( $this->dataShort, $crypted );
+
+
+ $decrypt = Encryption\Crypt::symmetricDecryptFileContent( $crypted, 'hat' );
+
+ $this->assertEquals( $this->dataShort, $decrypt );
+
+ }
+
+ // These aren't used for now
+// function testSymmetricBlockEncryptShortFileContent() {
+//
+// $crypted = Encryption\Crypt::symmetricBlockEncryptFileContent( $this->dataShort, $this->randomKey );
+//
+// $this->assertNotEquals( $this->dataShort, $crypted );
+//
+//
+// $decrypt = Encryption\Crypt::symmetricBlockDecryptFileContent( $crypted, $this->randomKey );
+//
+// $this->assertEquals( $this->dataShort, $decrypt );
+//
+// }
+//
+// function testSymmetricBlockEncryptLongFileContent() {
+//
+// $crypted = Encryption\Crypt::symmetricBlockEncryptFileContent( $this->dataLong, $this->randomKey );
+//
+// $this->assertNotEquals( $this->dataLong, $crypted );
+//
+//
+// $decrypt = Encryption\Crypt::symmetricBlockDecryptFileContent( $crypted, $this->randomKey );
+//
+// $this->assertEquals( $this->dataLong, $decrypt );
+//
+// }
+
+ function testSymmetricStreamEncryptShortFileContent() {
+
+ $filename = 'tmp-'.time();
+
+ $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataShort );
+
+ // Test that data was successfully written
+ $this->assertTrue( is_int( $cryptedFile ) );
+
+
+ // Get file contents without using any wrapper to get it's actual contents on disk
+ $retreivedCryptedFile = $this->view->file_get_contents( $this->userId . '/files/' . $filename );
+
+ // Check that the file was encrypted before being written to disk
+ $this->assertNotEquals( $this->dataShort, $retreivedCryptedFile );
+
+ // Get private key
+ $encryptedPrivateKey = Encryption\Keymanager::getPrivateKey( $this->view, $this->userId );
+
+ $decryptedPrivateKey = Encryption\Crypt::symmetricDecryptFileContent( $encryptedPrivateKey, $this->pass );
+
+
+ // Get keyfile
+ $encryptedKeyfile = Encryption\Keymanager::getFileKey( $this->view, $this->userId, $filename );
+
+ $decryptedKeyfile = Encryption\Crypt::keyDecrypt( $encryptedKeyfile, $decryptedPrivateKey );
+
+
+ // Manually decrypt
+ $manualDecrypt = Encryption\Crypt::symmetricBlockDecryptFileContent( $retreivedCryptedFile, $decryptedKeyfile );
+
+ // Check that decrypted data matches
+ $this->assertEquals( $this->dataShort, $manualDecrypt );
+
+ }
+
+ /**
+ * @brief Test that data that is written by the crypto stream wrapper
+ * @note Encrypted data is manually prepared and decrypted here to avoid dependency on success of stream_read
+ * @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
+ * reassembly of its data
+ */
+ function testSymmetricStreamEncryptLongFileContent() {
+
+ // Generate a a random filename
+ $filename = 'tmp-'.time();
+
+ // Save long data as encrypted file using stream wrapper
+ $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataLong.$this->dataLong );
+
+ // Test that data was successfully written
+ $this->assertTrue( is_int( $cryptedFile ) );
+
+ // Get file contents without using any wrapper to get it's actual contents on disk
+ $retreivedCryptedFile = $this->view->file_get_contents( $this->userId . '/files/' . $filename );
+
+// echo "\n\n\$retreivedCryptedFile = $retreivedCryptedFile\n\n";
+
+ // Check that the file was encrypted before being written to disk
+ $this->assertNotEquals( $this->dataLong.$this->dataLong, $retreivedCryptedFile );
+
+ // Manuallly split saved file into separate IVs and encrypted chunks
+ $r = preg_split('/(00iv00.{16,18})/', $retreivedCryptedFile, NULL, PREG_SPLIT_DELIM_CAPTURE);
+
+ //print_r($r);
+
+ // Join IVs and their respective data chunks
+ $e = array( $r[0].$r[1], $r[2].$r[3], $r[4].$r[5], $r[6].$r[7], $r[8].$r[9], $r[10].$r[11], $r[12].$r[13] );//.$r[11], $r[12].$r[13], $r[14] );
+
+ //print_r($e);
+
+
+ // Get private key
+ $encryptedPrivateKey = Encryption\Keymanager::getPrivateKey( $this->view, $this->userId );
+
+ $decryptedPrivateKey = Encryption\Crypt::symmetricDecryptFileContent( $encryptedPrivateKey, $this->pass );
+
+
+ // Get keyfile
+ $encryptedKeyfile = Encryption\Keymanager::getFileKey( $this->view, $this->userId, $filename );
+
+ $decryptedKeyfile = Encryption\Crypt::keyDecrypt( $encryptedKeyfile, $decryptedPrivateKey );
+
+
+ // Set var for reassembling decrypted content
+ $decrypt = '';
+
+ // Manually decrypt chunk
+ foreach ($e as $e) {
+
+// echo "\n\$e = $e";
+
+ $chunkDecrypt = Encryption\Crypt::symmetricDecryptFileContent( $e, $decryptedKeyfile );
+
+ // Assemble decrypted chunks
+ $decrypt .= $chunkDecrypt;
+
+// echo "\n\$chunkDecrypt = $chunkDecrypt";
+
+ }
+
+// echo "\n\$decrypt = $decrypt";
+
+ $this->assertEquals( $this->dataLong.$this->dataLong, $decrypt );
+
+ // Teardown
+
+ $this->view->unlink( $filename );
+
+ Encryption\Keymanager::deleteFileKey( $filename );
+
+ }
+
+ /**
+ * @brief Test that data that is read by the crypto stream wrapper
+ */
+ function testSymmetricStreamDecryptShortFileContent() {
+
+ $filename = 'tmp-'.time();
+
+ // Save long data as encrypted file using stream wrapper
+ $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataShort );
+
+ // Test that data was successfully written
+ $this->assertTrue( is_int( $cryptedFile ) );
+
+
+ // Get file contents without using any wrapper to get it's actual contents on disk
+ $retreivedCryptedFile = $this->view->file_get_contents( $this->userId . '/files/' . $filename );
+
+ $decrypt = file_get_contents( 'crypt://' . $filename );
+
+ $this->assertEquals( $this->dataShort, $decrypt );
+
+ }
+
+ function testSymmetricStreamDecryptLongFileContent() {
+
+ $filename = 'tmp-'.time();
+
+ // Save long data as encrypted file using stream wrapper
+ $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataLong );
+
+ // Test that data was successfully written
+ $this->assertTrue( is_int( $cryptedFile ) );
+
+
+ // Get file contents without using any wrapper to get it's actual contents on disk
+ $retreivedCryptedFile = $this->view->file_get_contents( $this->userId . '/files/' . $filename );
+
+ $decrypt = file_get_contents( 'crypt://' . $filename );
+
+ $this->assertEquals( $this->dataLong, $decrypt );
+
+ }
+
+ // Is this test still necessary?
+// function testSymmetricBlockStreamDecryptFileContent() {
+//
+// \OC_User::setUserId( 'admin' );
+//
+// // Disable encryption proxy to prevent unwanted en/decryption
+// \OC_FileProxy::$enabled = false;
+//
+// $cryptedFile = file_put_contents( 'crypt://' . '/blockEncrypt', $this->dataUrl );
+//
+// // Disable encryption proxy to prevent unwanted en/decryption
+// \OC_FileProxy::$enabled = false;
+//
+// echo "\n\n\$cryptedFile = " . $this->view->file_get_contents( '/blockEncrypt' );
+//
+// $retreivedCryptedFile = file_get_contents( 'crypt://' . '/blockEncrypt' );
+//
+// $this->assertEquals( $this->dataUrl, $retreivedCryptedFile );
+//
+// \OC_FileProxy::$enabled = false;
+//
+// }
+
+ function testSymmetricEncryptFileContentKeyfile() {
+
+ # TODO: search in keyfile for actual content as IV will ensure this test always passes
+
+ $crypted = Encryption\Crypt::symmetricEncryptFileContentKeyfile( $this->dataUrl );
+
+ $this->assertNotEquals( $this->dataUrl, $crypted['encrypted'] );
+
+
+ $decrypt = Encryption\Crypt::symmetricDecryptFileContent( $crypted['encrypted'], $crypted['key'] );
+
+ $this->assertEquals( $this->dataUrl, $decrypt );
+
+ }
+
+ function testIsEncryptedContent() {
+
+ $this->assertFalse( Encryption\Crypt::isCatfile( $this->dataUrl ) );
+
+ $this->assertFalse( Encryption\Crypt::isCatfile( $this->legacyEncryptedData ) );
+
+ $keyfileContent = Encryption\Crypt::symmetricEncryptFileContent( $this->dataUrl, 'hat' );
+
+ $this->assertTrue( Encryption\Crypt::isCatfile( $keyfileContent ) );
+
+ }
+
+ function testMultiKeyEncrypt() {
+
+ # TODO: search in keyfile for actual content as IV will ensure this test always passes
+
+ $pair1 = Encryption\Crypt::createKeypair();
+
+ $this->assertEquals( 2, count( $pair1 ) );
+
+ $this->assertTrue( strlen( $pair1['publicKey'] ) > 1 );
+
+ $this->assertTrue( strlen( $pair1['privateKey'] ) > 1 );
+
+
+ $crypted = Encryption\Crypt::multiKeyEncrypt( $this->dataUrl, array( $pair1['publicKey'] ) );
+
+ $this->assertNotEquals( $this->dataUrl, $crypted['encrypted'] );
+
+
+ $decrypt = Encryption\Crypt::multiKeyDecrypt( $crypted['encrypted'], $crypted['keys'][0], $pair1['privateKey'] );
+
+ $this->assertEquals( $this->dataUrl, $decrypt );
+
+ }
+
+ function testKeyEncrypt() {
+
+ // Generate keypair
+ $pair1 = Encryption\Crypt::createKeypair();
+
+ // Encrypt data
+ $crypted = Encryption\Crypt::keyEncrypt( $this->dataUrl, $pair1['publicKey'] );
+
+ $this->assertNotEquals( $this->dataUrl, $crypted );
+
+ // Decrypt data
+ $decrypt = Encryption\Crypt::keyDecrypt( $crypted, $pair1['privateKey'] );
+
+ $this->assertEquals( $this->dataUrl, $decrypt );
+
+ }
+
+ // What is the point of this test? It doesn't use keyEncryptKeyfile()
+ function testKeyEncryptKeyfile() {
+
+ # TODO: Don't repeat encryption from previous tests, use PHPUnit test interdependency instead
+
+ // Generate keypair
+ $pair1 = Encryption\Crypt::createKeypair();
+
+ // Encrypt plain data, generate keyfile & encrypted file
+ $cryptedData = Encryption\Crypt::symmetricEncryptFileContentKeyfile( $this->dataUrl );
+
+ // Encrypt keyfile
+ $cryptedKey = Encryption\Crypt::keyEncrypt( $cryptedData['key'], $pair1['publicKey'] );
+
+ // Decrypt keyfile
+ $decryptKey = Encryption\Crypt::keyDecrypt( $cryptedKey, $pair1['privateKey'] );
+
+ // Decrypt encrypted file
+ $decryptData = Encryption\Crypt::symmetricDecryptFileContent( $cryptedData['encrypted'], $decryptKey );
+
+ $this->assertEquals( $this->dataUrl, $decryptData );
+
+ }
+
+ /**
+ * @brief test functionality of keyEncryptKeyfile() and
+ * keyDecryptKeyfile()
+ */
+ function testKeyDecryptKeyfile() {
+
+ $encrypted = Encryption\Crypt::keyEncryptKeyfile( $this->dataShort, $this->genPublicKey );
+
+ $this->assertNotEquals( $encrypted['data'], $this->dataShort );
+
+ $decrypted = Encryption\Crypt::keyDecryptKeyfile( $encrypted['data'], $encrypted['key'], $this->genPrivateKey );
+
+ $this->assertEquals( $decrypted, $this->dataShort );
+
+ }
+
+
+ /**
+ * @brief test encryption using legacy blowfish method
+ */
+ function testLegacyEncryptShort() {
+
+ $crypted = Encryption\Crypt::legacyEncrypt( $this->dataShort, $this->pass );
+
+ $this->assertNotEquals( $this->dataShort, $crypted );
+
+ # TODO: search inencrypted text for actual content to ensure it
+ # genuine transformation
+
+ return $crypted;
+
+ }
+
+ /**
+ * @brief test decryption using legacy blowfish method
+ * @depends testLegacyEncryptShort
+ */
+ function testLegacyDecryptShort( $crypted ) {
+
+ $decrypted = Encryption\Crypt::legacyDecrypt( $crypted, $this->pass );
+
+ $this->assertEquals( $this->dataShort, $decrypted );
+
+ }
+
+ /**
+ * @brief test encryption using legacy blowfish method
+ */
+ function testLegacyEncryptLong() {
+
+ $crypted = Encryption\Crypt::legacyEncrypt( $this->dataLong, $this->pass );
+
+ $this->assertNotEquals( $this->dataLong, $crypted );
+
+ # TODO: search inencrypted text for actual content to ensure it
+ # genuine transformation
+
+ return $crypted;
+
+ }
+
+ /**
+ * @brief test decryption using legacy blowfish method
+ * @depends testLegacyEncryptLong
+ */
+ function testLegacyDecryptLong( $crypted ) {
+
+ $decrypted = Encryption\Crypt::legacyDecrypt( $crypted, $this->pass );
+
+ $this->assertEquals( $this->dataLong, $decrypted );
+
+ }
+
+ /**
+ * @brief test generation of legacy encryption key
+ * @depends testLegacyDecryptShort
+ */
+ function testLegacyCreateKey() {
+
+ // Create encrypted key
+ $encKey = Encryption\Crypt::legacyCreateKey( $this->pass );
+
+ // Decrypt key
+ $key = Encryption\Crypt::legacyDecrypt( $encKey, $this->pass );
+
+ $this->assertTrue( is_numeric( $key ) );
+
+ // Check that key is correct length
+ $this->assertEquals( 20, strlen( $key ) );
+
+ }
+
+ /**
+ * @brief test decryption using legacy blowfish method
+ * @depends testLegacyEncryptLong
+ */
+ function testLegacyKeyRecryptKeyfileEncrypt( $crypted ) {
+
+ $recrypted = Encryption\Crypt::LegacyKeyRecryptKeyfile( $crypted, $this->pass, $this->genPublicKey, $this->pass );
+
+ $this->assertNotEquals( $this->dataLong, $recrypted['data'] );
+
+ return $recrypted;
+
+ # TODO: search inencrypted text for actual content to ensure it
+ # genuine transformation
+
+ }
+
+// function testEncryption(){
+//
+// $key=uniqid();
+// $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
+// $source=file_get_contents($file); //nice large text file
+// $encrypted=OC_Encryption\Crypt::encrypt($source,$key);
+// $decrypted=OC_Encryption\Crypt::decrypt($encrypted,$key);
+// $decrypted=rtrim($decrypted, "\0");
+// $this->assertNotEquals($encrypted,$source);
+// $this->assertEquals($decrypted,$source);
+//
+// $chunk=substr($source,0,8192);
+// $encrypted=OC_Encryption\Crypt::encrypt($chunk,$key);
+// $this->assertEquals(strlen($chunk),strlen($encrypted));
+// $decrypted=OC_Encryption\Crypt::decrypt($encrypted,$key);
+// $decrypted=rtrim($decrypted, "\0");
+// $this->assertEquals($decrypted,$chunk);
+//
+// $encrypted=OC_Encryption\Crypt::blockEncrypt($source,$key);
+// $decrypted=OC_Encryption\Crypt::blockDecrypt($encrypted,$key);
+// $this->assertNotEquals($encrypted,$source);
+// $this->assertEquals($decrypted,$source);
+//
+// $tmpFileEncrypted=OCP\Files::tmpFile();
+// OC_Encryption\Crypt::encryptfile($file,$tmpFileEncrypted,$key);
+// $encrypted=file_get_contents($tmpFileEncrypted);
+// $decrypted=OC_Encryption\Crypt::blockDecrypt($encrypted,$key);
+// $this->assertNotEquals($encrypted,$source);
+// $this->assertEquals($decrypted,$source);
+//
+// $tmpFileDecrypted=OCP\Files::tmpFile();
+// OC_Encryption\Crypt::decryptfile($tmpFileEncrypted,$tmpFileDecrypted,$key);
+// $decrypted=file_get_contents($tmpFileDecrypted);
+// $this->assertEquals($decrypted,$source);
+//
+// $file=OC::$SERVERROOT.'/core/img/weather-clear.png';
+// $source=file_get_contents($file); //binary file
+// $encrypted=OC_Encryption\Crypt::encrypt($source,$key);
+// $decrypted=OC_Encryption\Crypt::decrypt($encrypted,$key);
+// $decrypted=rtrim($decrypted, "\0");
+// $this->assertEquals($decrypted,$source);
+//
+// $encrypted=OC_Encryption\Crypt::blockEncrypt($source,$key);
+// $decrypted=OC_Encryption\Crypt::blockDecrypt($encrypted,$key);
+// $this->assertEquals($decrypted,$source);
+//
+// }
+//
+// function testBinary(){
+// $key=uniqid();
+//
+// $file=__DIR__.'/binary';
+// $source=file_get_contents($file); //binary file
+// $encrypted=OC_Encryption\Crypt::encrypt($source,$key);
+// $decrypted=OC_Encryption\Crypt::decrypt($encrypted,$key);
+//
+// $decrypted=rtrim($decrypted, "\0");
+// $this->assertEquals($decrypted,$source);
+//
+// $encrypted=OC_Encryption\Crypt::blockEncrypt($source,$key);
+// $decrypted=OC_Encryption\Crypt::blockDecrypt($encrypted,$key,strlen($source));
+// $this->assertEquals($decrypted,$source);
+// }
+
+}
diff --git a/apps/files_encryption/test/keymanager.php b/apps/files_encryption/test/keymanager.php
new file mode 100644
index 00000000000..bf453fe3163
--- /dev/null
+++ b/apps/files_encryption/test/keymanager.php
@@ -0,0 +1,130 @@
+<?php
+/**
+ * Copyright (c) 2012 Sam Tuke <samtuke@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+//require_once "PHPUnit/Framework/TestCase.php";
+require_once realpath( dirname(__FILE__).'/../../../lib/base.php' );
+require_once realpath( dirname(__FILE__).'/../lib/crypt.php' );
+require_once realpath( dirname(__FILE__).'/../lib/keymanager.php' );
+require_once realpath( dirname(__FILE__).'/../lib/proxy.php' );
+require_once realpath( dirname(__FILE__).'/../lib/stream.php' );
+require_once realpath( dirname(__FILE__).'/../lib/util.php' );
+require_once realpath( dirname(__FILE__).'/../appinfo/app.php' );
+
+use OCA\Encryption;
+
+// This has to go here because otherwise session errors arise, and the private
+// encryption key needs to be saved in the session
+\OC_User::login( 'admin', 'admin' );
+
+class Test_Keymanager extends \PHPUnit_Framework_TestCase {
+
+ function setUp() {
+
+ \OC_FileProxy::$enabled = false;
+
+ // set content for encrypting / decrypting in tests
+ $this->dataLong = file_get_contents( realpath( dirname(__FILE__).'/../lib/crypt.php' ) );
+ $this->dataShort = 'hats';
+ $this->dataUrl = realpath( dirname(__FILE__).'/../lib/crypt.php' );
+ $this->legacyData = realpath( dirname(__FILE__).'/legacy-text.txt' );
+ $this->legacyEncryptedData = realpath( dirname(__FILE__).'/legacy-encrypted-text.txt' );
+ $this->randomKey = Encryption\Crypt::generateKey();
+
+ $keypair = Encryption\Crypt::createKeypair();
+ $this->genPublicKey = $keypair['publicKey'];
+ $this->genPrivateKey = $keypair['privateKey'];
+
+ $this->view = new \OC_FilesystemView( '/' );
+
+ \OC_User::setUserId( 'admin' );
+ $this->userId = 'admin';
+ $this->pass = 'admin';
+
+ \OC_Filesystem::init( '/' );
+ \OC_Filesystem::mount( 'OC_Filestorage_Local', array('datadir' => \OC_User::getHome($this->userId)), '/' );
+
+ }
+
+ function tearDown(){
+
+ \OC_FileProxy::$enabled = true;
+
+ }
+
+ function testGetPrivateKey() {
+
+ $key = Encryption\Keymanager::getPrivateKey( $this->view, $this->userId );
+
+ // Will this length vary? Perhaps we should use a range instead
+ $this->assertEquals( 2296, strlen( $key ) );
+
+ }
+
+ function testGetPublicKey() {
+
+ $key = Encryption\Keymanager::getPublicKey( $this->view, $this->userId );
+
+ $this->assertEquals( 451, strlen( $key ) );
+
+ $this->assertEquals( '-----BEGIN PUBLIC KEY-----', substr( $key, 0, 26 ) );
+ }
+
+ function testSetFileKey() {
+
+ # NOTE: This cannot be tested until we are able to break out
+ # of the FileSystemView data directory root
+
+ $key = Encryption\Crypt::symmetricEncryptFileContentKeyfile( $this->randomKey, 'hat' );
+
+ $path = 'unittest-'.time().'txt';
+
+ //$view = new \OC_FilesystemView( '/' . $this->userId . '/files_encryption/keyfiles' );
+
+ Encryption\Keymanager::setFileKey( $this->view, $path, $this->userId, $key['key'] );
+
+ }
+
+// /**
+// * @depends testGetPrivateKey
+// */
+// function testGetPrivateKey_decrypt() {
+//
+// $key = Encryption\Keymanager::getPrivateKey( $this->view, $this->userId );
+//
+// # TODO: replace call to Crypt with a mock object?
+// $decrypted = Encryption\Crypt::symmetricDecryptFileContent( $key, $this->passphrase );
+//
+// $this->assertEquals( 1704, strlen( $decrypted ) );
+//
+// $this->assertEquals( '-----BEGIN PRIVATE KEY-----', substr( $decrypted, 0, 27 ) );
+//
+// }
+
+ function testGetUserKeys() {
+
+ $keys = Encryption\Keymanager::getUserKeys( $this->view, $this->userId );
+
+ $this->assertEquals( 451, strlen( $keys['publicKey'] ) );
+ $this->assertEquals( '-----BEGIN PUBLIC KEY-----', substr( $keys['publicKey'], 0, 26 ) );
+ $this->assertEquals( 2296, strlen( $keys['privateKey'] ) );
+
+ }
+
+ function testGetPublicKeys() {
+
+ # TODO: write me
+
+ }
+
+ function testGetFileKey() {
+
+// Encryption\Keymanager::getFileKey( $this->view, $this->userId, $this->filePath );
+
+ }
+
+}
diff --git a/apps/files_encryption/test/legacy-encrypted-text.txt b/apps/files_encryption/test/legacy-encrypted-text.txt
new file mode 100644
index 00000000000..cb5bf50550d
--- /dev/null
+++ b/apps/files_encryption/test/legacy-encrypted-text.txt
Binary files differ
diff --git a/apps/files_encryption/test/proxy.php b/apps/files_encryption/test/proxy.php
new file mode 100644
index 00000000000..709730f7609
--- /dev/null
+++ b/apps/files_encryption/test/proxy.php
@@ -0,0 +1,220 @@
+<?php
+/**
+ * Copyright (c) 2012 Sam Tuke <samtuke@owncloud.com>,
+ * and Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// require_once "PHPUnit/Framework/TestCase.php";
+// require_once realpath( dirname(__FILE__).'/../../../lib/base.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Generator.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/MockInterface.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Mock.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Container.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Configuration.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/CompositeExpectation.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/ExpectationDirector.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Expectation.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Exception.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/CountValidator/CountValidatorAbstract.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/CountValidator/Exception.php' );
+// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/CountValidator/Exact.php' );
+//
+// use \Mockery as m;
+// use OCA\Encryption;
+
+// class Test_Util extends \PHPUnit_Framework_TestCase {
+//
+// public function setUp() {
+//
+// $this->proxy = new Encryption\Proxy();
+//
+// $this->tmpFileName = "tmpFile-".time();
+//
+// $this->privateKey = file_get_contents( realpath( dirname(__FILE__).'/data/admin.public.key' ) );
+// $this->publicKey = file_get_contents( realpath( dirname(__FILE__).'/data/admin.private.key' ) );
+// $this->encDataShort = file_get_contents( realpath( dirname(__FILE__).'/data/yoga-manchester-enc' ) );
+// $this->encDataShortKey = file_get_contents( realpath( dirname(__FILE__).'/data/yoga-manchester.key' ) );
+//
+// $this->dataShort = file_get_contents( realpath( dirname(__FILE__).'/data/yoga-manchester' ) );
+// $this->dataLong = file_get_contents( realpath( dirname(__FILE__).'/../lib/crypt.php' ) );
+// $this->longDataPath = realpath( dirname(__FILE__).'/../lib/crypt.php' );
+//
+// $this->data1 = file_get_contents( realpath( dirname(__FILE__).'/../../../data/admin/files/enc-test.txt' ) );
+//
+// \OC_FileProxy::$enabled = false;
+// $this->Encdata1 = file_get_contents( realpath( dirname(__FILE__).'/../../../data/admin/files/enc-test.txt' ) );
+// \OC_FileProxy::$enabled = true;
+//
+// $this->userId = 'admin';
+// $this->pass = 'admin';
+//
+// $this->session = new Encryption\Session();
+//
+// $this->session->setPrivateKey(
+// '-----BEGIN PRIVATE KEY-----
+// MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDiH3EA4EpFA7Fx
+// s2dyyfL5jwXeYXrTqQJ6DqKgGn8VsbT3eu8R9KzM2XitVwZe8c8L52DvJ06o5vg0
+// GqPYxilFdOFJe/ggac5Tq8UmJiZS4EqYEMwxBIfIyWTxeGV06/0HOwnVAkqHMcBz
+// 64qldtgi5O8kZMEM2/gKBgU0kMLJzM+8oEWhL1+gsUWQhxd8cKLXypS6iWgqFJrz
+// f/X0hJsJR+gyYxNpahtnjzd/LxLAETrOMsl2tue+BAxmjbAM0aG0NEM0div+b59s
+// 2uz/iWbxImp5pOdYVKcVW89D4XBMyGegR40trV2VwiuX1blKCfdjMsJhiaL9pymp
+// ug1wzyQFAgMBAAECggEAK6c+PZkPPXuVCgpEcliiW6NM0r2m5K3AGKgypQ34csu3
+// z/8foCvIIFPrhCtEw5eTDQ1CHWlNOjY8vHJYJ0U6Onpx86nHIRrMBkMm8FJ1G5LJ
+// U8oKYXwqaozWu/cuPwA//OFc6I5krOzh5n8WaRMkbrgbor8AtebRX74By0AXGrXe
+// cswJI7zR96oFn4Dm7Pgvpg5Zhk1vFJ+w6QtH+4DDJ6PBvlZsRkGxYBLGVd/3qhAI
+// sBAyjFlSzuP4eCRhHOhHC/e4gmAH9evFVXB88jFyRZm3K+jQ5W5CwrVRBCV2lph6
+// 2B6P7CBJN+IjGKMhy+75y13UvvKPv9IwH8Fzl2x1gQKBgQD8qQOr7a6KhSj16wQE
+// jim2xqt9gQ2jH5No405NrKs/PFQQZnzD4YseQsiK//NUjOJiUhaT+L5jhIpzINHt
+// RJpt3bGkEZmLyjdjgTpB3GwZdXa28DNK9VdXZ19qIl/ZH0qAjKmJCRahUDASMnVi
+// M4Pkk9yx9ZIKkri4TcuMWqc0DQKBgQDlHKBTITZq/arYPD6Nl3NsoOdqVRqJrGay
+// 0TjXAVbBXe46+z5lnMsqwXb79nx14hdmSEsZULrw/3f+MnQbdjMTYLFP24visZg9
+// MN8vAiALiiiR1a+Crz+DTA1Q8sGOMVCMqMDmD7QBys3ZuWxuapm0txAiIYUtsjJZ
+// XN76T4nZ2QKBgQCHaT3igzwsWTmesxowJtEMeGWomeXpKx8h89EfqA8PkRGsyIDN
+// qq+YxEoe1RZgljEuaLhZDdNcGsjo8woPk9kAUPTH7fbRCMuutK+4ZJ469s1tNkcH
+// QX5SBcEJbOrZvv967ehe3VQXmJZq6kgnHVzuwKBjcC2ZJRGDFY6l5l/+cQKBgCqh
+// +Adf/8NK7paMJ0urqfPFwSodKfICXZ3apswDWMRkmSbqh4La+Uc8dsqN5Dz/VEFZ
+// JHhSeGbN8uMfOlG93eU2MehdPxtw1pZUWMNjjtj23XO9ooob2CKzbSrp8TBnZsi1
+// widNNr66oTFpeo7VUUK6acsgF6sYJJxSVr+XO1yJAoGAEhvitq8shNKcEY0xCipS
+// k1kbgyS7KKB7opVxI5+ChEqyUDijS3Y9FZixrRIWE6i2uGu86UG+v2lbKvSbM4Qm
+// xvbOcX9OVMnlRb7n8woOP10UMY+ZE2x+YEUXQTLtPYq7F66e1OfxltstMxLQA+3d
+// Y1d5piFV8PXK3Fg2F+Cj5qg=
+// -----END PRIVATE KEY-----
+// '
+// , $this->userId
+// );
+//
+// \OC_User::setUserId( $this->userId );
+//
+// }
+//
+// public function testpreFile_get_contents() {
+//
+// // This won't work for now because mocking of the static keymanager class isn't working :(
+//
+// // $mock = m::mock( 'alias:OCA\Encryption\Keymanager' );
+// //
+// // $mock->shouldReceive( 'getFileKey' )->times(2)->andReturn( $this->encDataShort );
+// //
+// // $encrypted = $this->proxy->postFile_get_contents( 'data/'.$this->tmpFileName, $this->encDataShortKey );
+// //
+// // $this->assertNotEquals( $this->dataShort, $encrypted );
+//
+// $decrypted = $this->proxy->postFile_get_contents( 'data/admin/files/enc-test.txt', $this->data1 );
+//
+// }
+//
+// }
+
+// class Test_CryptProxy extends PHPUnit_Framework_TestCase {
+// private $oldConfig;
+// private $oldKey;
+//
+// public function setUp(){
+// $user=OC_User::getUser();
+//
+// $this->oldConfig=OCP\Config::getAppValue('files_encryption','enable_encryption','true');
+// OCP\Config::setAppValue('files_encryption','enable_encryption','true');
+// $this->oldKey=isset($_SESSION['privateKey'])?$_SESSION['privateKey']:null;
+//
+//
+// //set testing key
+// $_SESSION['privateKey']=md5(time());
+//
+// //clear all proxies and hooks so we can do clean testing
+// OC_FileProxy::clearProxies();
+// OC_Hook::clear('OC_Filesystem');
+//
+// //enable only the encryption hook
+// OC_FileProxy::register(new OC_FileProxy_Encryption());
+//
+// //set up temporary storage
+// OC_Filesystem::clearMounts();
+// OC_Filesystem::mount('OC_Filestorage_Temporary',array(),'/');
+//
+// OC_Filesystem::init('/'.$user.'/files');
+//
+// //set up the users home folder in the temp storage
+// $rootView=new OC_FilesystemView('');
+// $rootView->mkdir('/'.$user);
+// $rootView->mkdir('/'.$user.'/files');
+// }
+//
+// public function tearDown(){
+// OCP\Config::setAppValue('files_encryption','enable_encryption',$this->oldConfig);
+// if(!is_null($this->oldKey)){
+// $_SESSION['privateKey']=$this->oldKey;
+// }
+// }
+//
+// public function testSimple(){
+// $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
+// $original=file_get_contents($file);
+//
+// OC_Filesystem::file_put_contents('/file',$original);
+//
+// OC_FileProxy::$enabled=false;
+// $stored=OC_Filesystem::file_get_contents('/file');
+// OC_FileProxy::$enabled=true;
+//
+// $fromFile=OC_Filesystem::file_get_contents('/file');
+// $this->assertNotEquals($original,$stored);
+// $this->assertEquals(strlen($original),strlen($fromFile));
+// $this->assertEquals($original,$fromFile);
+//
+// }
+//
+// public function testView(){
+// $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
+// $original=file_get_contents($file);
+//
+// $rootView=new OC_FilesystemView('');
+// $view=new OC_FilesystemView('/'.OC_User::getUser());
+// $userDir='/'.OC_User::getUser().'/files';
+//
+// $rootView->file_put_contents($userDir.'/file',$original);
+//
+// OC_FileProxy::$enabled=false;
+// $stored=$rootView->file_get_contents($userDir.'/file');
+// OC_FileProxy::$enabled=true;
+//
+// $this->assertNotEquals($original,$stored);
+// $fromFile=$rootView->file_get_contents($userDir.'/file');
+// $this->assertEquals($original,$fromFile);
+//
+// $fromFile=$view->file_get_contents('files/file');
+// $this->assertEquals($original,$fromFile);
+// }
+//
+// public function testBinary(){
+// $file=__DIR__.'/binary';
+// $original=file_get_contents($file);
+//
+// OC_Filesystem::file_put_contents('/file',$original);
+//
+// OC_FileProxy::$enabled=false;
+// $stored=OC_Filesystem::file_get_contents('/file');
+// OC_FileProxy::$enabled=true;
+//
+// $fromFile=OC_Filesystem::file_get_contents('/file');
+// $this->assertNotEquals($original,$stored);
+// $this->assertEquals(strlen($original),strlen($fromFile));
+// $this->assertEquals($original,$fromFile);
+//
+// $file=__DIR__.'/zeros';
+// $original=file_get_contents($file);
+//
+// OC_Filesystem::file_put_contents('/file',$original);
+//
+// OC_FileProxy::$enabled=false;
+// $stored=OC_Filesystem::file_get_contents('/file');
+// OC_FileProxy::$enabled=true;
+//
+// $fromFile=OC_Filesystem::file_get_contents('/file');
+// $this->assertNotEquals($original,$stored);
+// $this->assertEquals(strlen($original),strlen($fromFile));
+// }
+// }
diff --git a/apps/files_encryption/test/stream.php b/apps/files_encryption/test/stream.php
new file mode 100644
index 00000000000..ba82ac80eab
--- /dev/null
+++ b/apps/files_encryption/test/stream.php
@@ -0,0 +1,226 @@
+// <?php
+// /**
+// * Copyright (c) 2012 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 OCA\Encryption;
+//
+// class Test_Stream extends \PHPUnit_Framework_TestCase {
+//
+// function setUp() {
+//
+// \OC_Filesystem::mount( 'OC_Filestorage_Local', array(), '/' );
+//
+// $this->empty = '';
+//
+// $this->stream = new Stream();
+//
+// $this->dataLong = file_get_contents( realpath( dirname(__FILE__).'/../lib/crypt.php' ) );
+// $this->dataShort = 'hats';
+//
+// $this->emptyTmpFilePath = \OCP\Files::tmpFile();
+//
+// $this->dataTmpFilePath = \OCP\Files::tmpFile();
+//
+// file_put_contents( $this->dataTmpFilePath, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis. Curabitur dapibus enim sit amet elit pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros. Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est." );
+//
+// }
+//
+// function testStreamOpen() {
+//
+// $stream1 = new Stream();
+//
+// $handle1 = $stream1->stream_open( $this->emptyTmpFilePath, 'wb', array(), $this->empty );
+//
+// // Test that resource was returned successfully
+// $this->assertTrue( $handle1 );
+//
+// // Test that file has correct size
+// $this->assertEquals( 0, $stream1->size );
+//
+// // Test that path is correct
+// $this->assertEquals( $this->emptyTmpFilePath, $stream1->rawPath );
+//
+// $stream2 = new Stream();
+//
+// $handle2 = $stream2->stream_open( 'crypt://' . $this->emptyTmpFilePath, 'wb', array(), $this->empty );
+//
+// // Test that protocol identifier is removed from path
+// $this->assertEquals( $this->emptyTmpFilePath, $stream2->rawPath );
+//
+// // "Stat failed error" prevents this test from executing
+// // $stream3 = new Stream();
+// //
+// // $handle3 = $stream3->stream_open( $this->dataTmpFilePath, 'r', array(), $this->empty );
+// //
+// // $this->assertEquals( 0, $stream3->size );
+//
+// }
+//
+// function testStreamWrite() {
+//
+// $stream1 = new Stream();
+//
+// $handle1 = $stream1->stream_open( $this->emptyTmpFilePath, 'r+b', array(), $this->empty );
+//
+// # what about the keymanager? there is no key for the newly created temporary file!
+//
+// $stream1->stream_write( $this->dataShort );
+//
+// }
+//
+// // function getStream( $id, $mode, $size ) {
+// //
+// // if ( $id === '' ) {
+// //
+// // $id = uniqid();
+// // }
+// //
+// //
+// // if ( !isset( $this->tmpFiles[$id] ) ) {
+// //
+// // // If tempfile with given name does not already exist, create it
+// //
+// // $file = OCP\Files::tmpFile();
+// //
+// // $this->tmpFiles[$id] = $file;
+// //
+// // } else {
+// //
+// // $file = $this->tmpFiles[$id];
+// //
+// // }
+// //
+// // $stream = fopen( $file, $mode );
+// //
+// // Stream::$sourceStreams[$id] = array( 'path' => 'dummy' . $id, 'stream' => $stream, 'size' => $size );
+// //
+// // return fopen( 'crypt://streams/'.$id, $mode );
+// //
+// // }
+// //
+// // function testStream( ){
+// //
+// // $stream = $this->getStream( 'test1', 'w', strlen( 'foobar' ) );
+// //
+// // fwrite( $stream, 'foobar' );
+// //
+// // fclose( $stream );
+// //
+// //
+// // $stream = $this->getStream( 'test1', 'r', strlen( 'foobar' ) );
+// //
+// // $data = fread( $stream, 6 );
+// //
+// // fclose( $stream );
+// //
+// // $this->assertEquals( 'foobar', $data );
+// //
+// //
+// // $file = OC::$SERVERROOT.'/3rdparty/MDB2.php';
+// //
+// // $source = fopen( $file, 'r' );
+// //
+// // $target = $this->getStream( 'test2', 'w', 0 );
+// //
+// // OCP\Files::streamCopy( $source, $target );
+// //
+// // fclose( $target );
+// //
+// // fclose( $source );
+// //
+// //
+// // $stream = $this->getStream( 'test2', 'r', filesize( $file ) );
+// //
+// // $data = stream_get_contents( $stream );
+// //
+// // $original = file_get_contents( $file );
+// //
+// // $this->assertEquals( strlen( $original ), strlen( $data ) );
+// //
+// // $this->assertEquals( $original, $data );
+// //
+// // }
+//
+// }
+//
+// // class Test_CryptStream extends PHPUnit_Framework_TestCase {
+// // private $tmpFiles=array();
+// //
+// // function testStream(){
+// // $stream=$this->getStream('test1','w',strlen('foobar'));
+// // fwrite($stream,'foobar');
+// // fclose($stream);
+// //
+// // $stream=$this->getStream('test1','r',strlen('foobar'));
+// // $data=fread($stream,6);
+// // fclose($stream);
+// // $this->assertEquals('foobar',$data);
+// //
+// // $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
+// // $source=fopen($file,'r');
+// // $target=$this->getStream('test2','w',0);
+// // OCP\Files::streamCopy($source,$target);
+// // fclose($target);
+// // fclose($source);
+// //
+// // $stream=$this->getStream('test2','r',filesize($file));
+// // $data=stream_get_contents($stream);
+// // $original=file_get_contents($file);
+// // $this->assertEquals(strlen($original),strlen($data));
+// // $this->assertEquals($original,$data);
+// // }
+// //
+// // /**
+// // * get a cryptstream to a temporary file
+// // * @param string $id
+// // * @param string $mode
+// // * @param int size
+// // * @return resource
+// // */
+// // function getStream($id,$mode,$size){
+// // if($id===''){
+// // $id=uniqid();
+// // }
+// // if(!isset($this->tmpFiles[$id])){
+// // $file=OCP\Files::tmpFile();
+// // $this->tmpFiles[$id]=$file;
+// // }else{
+// // $file=$this->tmpFiles[$id];
+// // }
+// // $stream=fopen($file,$mode);
+// // OC_CryptStream::$sourceStreams[$id]=array('path'=>'dummy'.$id,'stream'=>$stream,'size'=>$size);
+// // return fopen('crypt://streams/'.$id,$mode);
+// // }
+// //
+// // function testBinary(){
+// // $file=__DIR__.'/binary';
+// // $source=file_get_contents($file);
+// //
+// // $stream=$this->getStream('test','w',strlen($source));
+// // fwrite($stream,$source);
+// // fclose($stream);
+// //
+// // $stream=$this->getStream('test','r',strlen($source));
+// // $data=stream_get_contents($stream);
+// // fclose($stream);
+// // $this->assertEquals(strlen($data),strlen($source));
+// // $this->assertEquals($source,$data);
+// //
+// // $file=__DIR__.'/zeros';
+// // $source=file_get_contents($file);
+// //
+// // $stream=$this->getStream('test2','w',strlen($source));
+// // fwrite($stream,$source);
+// // fclose($stream);
+// //
+// // $stream=$this->getStream('test2','r',strlen($source));
+// // $data=stream_get_contents($stream);
+// // fclose($stream);
+// // $this->assertEquals(strlen($data),strlen($source));
+// // $this->assertEquals($source,$data);
+// // }
+// // }
diff --git a/apps/files_encryption/test/util.php b/apps/files_encryption/test/util.php
new file mode 100755
index 00000000000..1cdeff8008d
--- /dev/null
+++ b/apps/files_encryption/test/util.php
@@ -0,0 +1,225 @@
+<?php
+/**
+ * Copyright (c) 2012 Sam Tuke <samtuke@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+//require_once "PHPUnit/Framework/TestCase.php";
+require_once realpath( dirname(__FILE__).'/../../../lib/base.php' );
+require_once realpath( dirname(__FILE__).'/../lib/crypt.php' );
+require_once realpath( dirname(__FILE__).'/../lib/keymanager.php' );
+require_once realpath( dirname(__FILE__).'/../lib/proxy.php' );
+require_once realpath( dirname(__FILE__).'/../lib/stream.php' );
+require_once realpath( dirname(__FILE__).'/../lib/util.php' );
+require_once realpath( dirname(__FILE__).'/../appinfo/app.php' );
+
+// Load mockery files
+require_once 'Mockery/Loader.php';
+require_once 'Hamcrest/Hamcrest.php';
+$loader = new \Mockery\Loader;
+$loader->register();
+
+use \Mockery as m;
+use OCA\Encryption;
+
+class Test_Enc_Util extends \PHPUnit_Framework_TestCase {
+
+ function setUp() {
+
+ \OC_Filesystem::mount( 'OC_Filestorage_Local', array(), '/' );
+
+ // set content for encrypting / decrypting in tests
+ $this->dataUrl = realpath( dirname(__FILE__).'/../lib/crypt.php' );
+ $this->dataShort = 'hats';
+ $this->dataLong = file_get_contents( realpath( dirname(__FILE__).'/../lib/crypt.php' ) );
+ $this->legacyData = realpath( dirname(__FILE__).'/legacy-text.txt' );
+ $this->legacyEncryptedData = realpath( dirname(__FILE__).'/legacy-encrypted-text.txt' );
+
+ $this->userId = 'admin';
+ $this->pass = 'admin';
+
+ $keypair = Encryption\Crypt::createKeypair();
+
+ $this->genPublicKey = $keypair['publicKey'];
+ $this->genPrivateKey = $keypair['privateKey'];
+
+ $this->publicKeyDir = '/' . 'public-keys';
+ $this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption';
+ $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles';
+ $this->publicKeyPath = $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
+ $this->privateKeyPath = $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
+
+ $this->view = new \OC_FilesystemView( '/' );
+
+ $this->mockView = m::mock('OC_FilesystemView');
+ $this->util = new Encryption\Util( $this->mockView, $this->userId );
+
+ }
+
+ function tearDown(){
+
+ m::close();
+
+ }
+
+ /**
+ * @brief test that paths set during User construction are correct
+ */
+ function testKeyPaths() {
+
+ $mockView = m::mock('OC_FilesystemView');
+
+ $util = new Encryption\Util( $mockView, $this->userId );
+
+ $this->assertEquals( $this->publicKeyDir, $util->getPath( 'publicKeyDir' ) );
+ $this->assertEquals( $this->encryptionDir, $util->getPath( 'encryptionDir' ) );
+ $this->assertEquals( $this->keyfilesPath, $util->getPath( 'keyfilesPath' ) );
+ $this->assertEquals( $this->publicKeyPath, $util->getPath( 'publicKeyPath' ) );
+ $this->assertEquals( $this->privateKeyPath, $util->getPath( 'privateKeyPath' ) );
+
+ }
+
+ /**
+ * @brief test setup of encryption directories when they don't yet exist
+ */
+ function testSetupServerSideNotSetup() {
+
+ $mockView = m::mock('OC_FilesystemView');
+
+ $mockView->shouldReceive( 'file_exists' )->times(5)->andReturn( false );
+ $mockView->shouldReceive( 'mkdir' )->times(4)->andReturn( true );
+ $mockView->shouldReceive( 'file_put_contents' )->withAnyArgs();
+
+ $util = new Encryption\Util( $mockView, $this->userId );
+
+ $this->assertEquals( true, $util->setupServerSide( $this->pass ) );
+
+ }
+
+ /**
+ * @brief test setup of encryption directories when they already exist
+ */
+ function testSetupServerSideIsSetup() {
+
+ $mockView = m::mock('OC_FilesystemView');
+
+ $mockView->shouldReceive( 'file_exists' )->times(6)->andReturn( true );
+ $mockView->shouldReceive( 'file_put_contents' )->withAnyArgs();
+
+ $util = new Encryption\Util( $mockView, $this->userId );
+
+ $this->assertEquals( true, $util->setupServerSide( $this->pass ) );
+
+ }
+
+ /**
+ * @brief test checking whether account is ready for encryption, when it isn't ready
+ */
+ function testReadyNotReady() {
+
+ $mockView = m::mock('OC_FilesystemView');
+
+ $mockView->shouldReceive( 'file_exists' )->times(1)->andReturn( false );
+
+ $util = new Encryption\Util( $mockView, $this->userId );
+
+ $this->assertEquals( false, $util->ready() );
+
+ # TODO: Add more tests here to check that if any of the dirs are
+ # then false will be returned. Use strict ordering?
+
+ }
+
+ /**
+ * @brief test checking whether account is ready for encryption, when it is ready
+ */
+ function testReadyIsReady() {
+
+ $mockView = m::mock('OC_FilesystemView');
+
+ $mockView->shouldReceive( 'file_exists' )->times(3)->andReturn( true );
+
+ $util = new Encryption\Util( $mockView, $this->userId );
+
+ $this->assertEquals( true, $util->ready() );
+
+ # TODO: Add more tests here to check that if any of the dirs are
+ # then false will be returned. Use strict ordering?
+
+ }
+
+ function testFindFiles() {
+
+// $this->view->chroot( "/data/{$this->userId}/files" );
+
+ $util = new Encryption\Util( $this->view, $this->userId );
+
+ $files = $util->findFiles( '/', 'encrypted' );
+
+ var_dump( $files );
+
+ # TODO: Add more tests here to check that if any of the dirs are
+ # then false will be returned. Use strict ordering?
+
+ }
+
+// /**
+// * @brief test decryption using legacy blowfish method
+// * @depends testLegacyEncryptLong
+// */
+// function testLegacyKeyRecryptKeyfileDecrypt( $recrypted ) {
+//
+// $decrypted = Encryption\Crypt::keyDecryptKeyfile( $recrypted['data'], $recrypted['key'], $this->genPrivateKey );
+//
+// $this->assertEquals( $this->dataLong, $decrypted );
+//
+// }
+
+// // Cannot use this test for now due to hidden dependencies in OC_FileCache
+// function testIsLegacyEncryptedContent() {
+//
+// $keyfileContent = OCA\Encryption\Crypt::symmetricEncryptFileContent( $this->legacyEncryptedData, 'hat' );
+//
+// $this->assertFalse( OCA\Encryption\Crypt::isLegacyEncryptedContent( $keyfileContent, '/files/admin/test.txt' ) );
+//
+// OC_FileCache::put( '/admin/files/legacy-encrypted-test.txt', $this->legacyEncryptedData );
+//
+// $this->assertTrue( OCA\Encryption\Crypt::isLegacyEncryptedContent( $this->legacyEncryptedData, '/files/admin/test.txt' ) );
+//
+// }
+
+// // Cannot use this test for now due to need for different root in OC_Filesystem_view class
+// function testGetLegacyKey() {
+//
+// $c = new \OCA\Encryption\Util( $view, false );
+//
+// $bool = $c->getLegacyKey( 'admin' );
+//
+// $this->assertTrue( $bool );
+//
+// $this->assertTrue( $c->legacyKey );
+//
+// $this->assertTrue( is_int( $c->legacyKey ) );
+//
+// $this->assertTrue( strlen( $c->legacyKey ) == 20 );
+//
+// }
+
+// // Cannot use this test for now due to need for different root in OC_Filesystem_view class
+// function testLegacyDecrypt() {
+//
+// $c = new OCA\Encryption\Util( $this->view, false );
+//
+// $bool = $c->getLegacyKey( 'admin' );
+//
+// $encrypted = $c->legacyEncrypt( $this->data, $c->legacyKey );
+//
+// $decrypted = $c->legacyDecrypt( $encrypted, $c->legacyKey );
+//
+// $this->assertEquals( $decrypted, $this->data );
+//
+// }
+
+} \ No newline at end of file
diff --git a/apps/files_encryption/tests/zeros b/apps/files_encryption/test/zeros
index ff982acf423..ff982acf423 100644
--- a/apps/files_encryption/tests/zeros
+++ b/apps/files_encryption/test/zeros
Binary files differ
diff --git a/apps/files_encryption/tests/encryption.php b/apps/files_encryption/tests/encryption.php
deleted file mode 100644
index 0e119f55bea..00000000000
--- a/apps/files_encryption/tests/encryption.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class Test_Encryption extends UnitTestCase {
- function testEncryption() {
- $key=uniqid();
- $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
- $source=file_get_contents($file); //nice large text file
- $encrypted=OC_Crypt::encrypt($source, $key);
- $decrypted=OC_Crypt::decrypt($encrypted, $key);
- $decrypted=rtrim($decrypted, "\0");
- $this->assertNotEqual($encrypted, $source);
- $this->assertEqual($decrypted, $source);
-
- $chunk=substr($source, 0, 8192);
- $encrypted=OC_Crypt::encrypt($chunk, $key);
- $this->assertEqual(strlen($chunk), strlen($encrypted));
- $decrypted=OC_Crypt::decrypt($encrypted, $key);
- $decrypted=rtrim($decrypted, "\0");
- $this->assertEqual($decrypted, $chunk);
-
- $encrypted=OC_Crypt::blockEncrypt($source, $key);
- $decrypted=OC_Crypt::blockDecrypt($encrypted, $key);
- $this->assertNotEqual($encrypted, $source);
- $this->assertEqual($decrypted, $source);
-
- $tmpFileEncrypted=OCP\Files::tmpFile();
- OC_Crypt::encryptfile($file, $tmpFileEncrypted, $key);
- $encrypted=file_get_contents($tmpFileEncrypted);
- $decrypted=OC_Crypt::blockDecrypt($encrypted, $key);
- $this->assertNotEqual($encrypted, $source);
- $this->assertEqual($decrypted, $source);
-
- $tmpFileDecrypted=OCP\Files::tmpFile();
- OC_Crypt::decryptfile($tmpFileEncrypted, $tmpFileDecrypted, $key);
- $decrypted=file_get_contents($tmpFileDecrypted);
- $this->assertEqual($decrypted, $source);
-
- $file=OC::$SERVERROOT.'/core/img/weather-clear.png';
- $source=file_get_contents($file); //binary file
- $encrypted=OC_Crypt::encrypt($source, $key);
- $decrypted=OC_Crypt::decrypt($encrypted, $key);
- $decrypted=rtrim($decrypted, "\0");
- $this->assertEqual($decrypted, $source);
-
- $encrypted=OC_Crypt::blockEncrypt($source, $key);
- $decrypted=OC_Crypt::blockDecrypt($encrypted, $key);
- $this->assertEqual($decrypted, $source);
-
- }
-
- function testBinary() {
- $key=uniqid();
-
- $file=__DIR__.'/binary';
- $source=file_get_contents($file); //binary file
- $encrypted=OC_Crypt::encrypt($source, $key);
- $decrypted=OC_Crypt::decrypt($encrypted, $key);
-
- $decrypted=rtrim($decrypted, "\0");
- $this->assertEqual($decrypted, $source);
-
- $encrypted=OC_Crypt::blockEncrypt($source, $key);
- $decrypted=OC_Crypt::blockDecrypt($encrypted, $key, strlen($source));
- $this->assertEqual($decrypted, $source);
- }
-}
diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php
deleted file mode 100644
index 5aa617e7472..00000000000
--- a/apps/files_encryption/tests/proxy.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class Test_CryptProxy extends UnitTestCase {
- private $oldConfig;
- private $oldKey;
-
- public function setUp() {
- $user=OC_User::getUser();
-
- $this->oldConfig=OCP\Config::getAppValue('files_encryption','enable_encryption', 'true');
- OCP\Config::setAppValue('files_encryption', 'enable_encryption', 'true');
- $this->oldKey=isset($_SESSION['enckey'])?$_SESSION['enckey']:null;
-
-
- //set testing key
- $_SESSION['enckey']=md5(time());
-
- //clear all proxies and hooks so we can do clean testing
- OC_FileProxy::clearProxies();
- OC_Hook::clear('OC_Filesystem');
-
- //enable only the encryption hook
- OC_FileProxy::register(new OC_FileProxy_Encryption());
-
- //set up temporary storage
- OC_Filesystem::clearMounts();
- OC_Filesystem::mount('OC_Filestorage_Temporary', array(), '/');
-
- OC_Filesystem::init('/'.$user.'/files');
-
- //set up the users home folder in the temp storage
- $rootView=new OC_FilesystemView('');
- $rootView->mkdir('/'.$user);
- $rootView->mkdir('/'.$user.'/files');
- }
-
- public function tearDown() {
- OCP\Config::setAppValue('files_encryption', 'enable_encryption', $this->oldConfig);
- if ( ! is_null($this->oldKey)) {
- $_SESSION['enckey']=$this->oldKey;
- }
- }
-
- public function testSimple() {
- $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
- $original=file_get_contents($file);
-
- OC_Filesystem::file_put_contents('/file', $original);
-
- OC_FileProxy::$enabled=false;
- $stored=OC_Filesystem::file_get_contents('/file');
- OC_FileProxy::$enabled=true;
-
- $fromFile=OC_Filesystem::file_get_contents('/file');
- $this->assertNotEqual($original, $stored);
- $this->assertEqual(strlen($original), strlen($fromFile));
- $this->assertEqual($original, $fromFile);
-
- }
-
- public function testView() {
- $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
- $original=file_get_contents($file);
-
- $rootView=new OC_FilesystemView('');
- $view=new OC_FilesystemView('/'.OC_User::getUser());
- $userDir='/'.OC_User::getUser().'/files';
-
- $rootView->file_put_contents($userDir.'/file', $original);
-
- OC_FileProxy::$enabled=false;
- $stored=$rootView->file_get_contents($userDir.'/file');
- OC_FileProxy::$enabled=true;
-
- $this->assertNotEqual($original, $stored);
- $fromFile=$rootView->file_get_contents($userDir.'/file');
- $this->assertEqual($original, $fromFile);
-
- $fromFile=$view->file_get_contents('files/file');
- $this->assertEqual($original, $fromFile);
- }
-
- public function testBinary() {
- $file=__DIR__.'/binary';
- $original=file_get_contents($file);
-
- OC_Filesystem::file_put_contents('/file', $original);
-
- OC_FileProxy::$enabled=false;
- $stored=OC_Filesystem::file_get_contents('/file');
- OC_FileProxy::$enabled=true;
-
- $fromFile=OC_Filesystem::file_get_contents('/file');
- $this->assertNotEqual($original, $stored);
- $this->assertEqual(strlen($original), strlen($fromFile));
- $this->assertEqual($original, $fromFile);
-
- $file=__DIR__.'/zeros';
- $original=file_get_contents($file);
-
- OC_Filesystem::file_put_contents('/file', $original);
-
- OC_FileProxy::$enabled=false;
- $stored=OC_Filesystem::file_get_contents('/file');
- OC_FileProxy::$enabled=true;
-
- $fromFile=OC_Filesystem::file_get_contents('/file');
- $this->assertNotEqual($original, $stored);
- $this->assertEqual(strlen($original), strlen($fromFile));
- }
-}
diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php
deleted file mode 100644
index e4af17d47b5..00000000000
--- a/apps/files_encryption/tests/stream.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class Test_CryptStream extends UnitTestCase {
- private $tmpFiles=array();
-
- function testStream() {
- $stream=$this->getStream('test1', 'w', strlen('foobar'));
- fwrite($stream, 'foobar');
- fclose($stream);
-
- $stream=$this->getStream('test1', 'r', strlen('foobar'));
- $data=fread($stream, 6);
- fclose($stream);
- $this->assertEqual('foobar', $data);
-
- $file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
- $source=fopen($file, 'r');
- $target=$this->getStream('test2', 'w', 0);
- OCP\Files::streamCopy($source, $target);
- fclose($target);
- fclose($source);
-
- $stream=$this->getStream('test2', 'r', filesize($file));
- $data=stream_get_contents($stream);
- $original=file_get_contents($file);
- $this->assertEqual(strlen($original), strlen($data));
- $this->assertEqual($original, $data);
- }
-
- /**
- * get a cryptstream to a temporary file
- * @param string $id
- * @param string $mode
- * @param int size
- * @return resource
- */
- function getStream($id, $mode, $size) {
- if ($id==='') {
- $id=uniqid();
- }
- if ( ! isset($this->tmpFiles[$id])) {
- $file=OCP\Files::tmpFile();
- $this->tmpFiles[$id]=$file;
- } else {
- $file=$this->tmpFiles[$id];
- }
- $stream=fopen($file, $mode);
- OC_CryptStream::$sourceStreams[$id]=array('path'=>'dummy'.$id, 'stream'=>$stream, 'size'=>$size);
- return fopen('crypt://streams/'.$id, $mode);
- }
-
- function testBinary() {
- $file=__DIR__.'/binary';
- $source=file_get_contents($file);
-
- $stream=$this->getStream('test', 'w', strlen($source));
- fwrite($stream, $source);
- fclose($stream);
-
- $stream=$this->getStream('test', 'r', strlen($source));
- $data=stream_get_contents($stream);
- fclose($stream);
- $this->assertEqual(strlen($data), strlen($source));
- $this->assertEqual($source, $data);
-
- $file=__DIR__.'/zeros';
- $source=file_get_contents($file);
-
- $stream=$this->getStream('test2', 'w', strlen($source));
- fwrite($stream, $source);
- fclose($stream);
-
- $stream=$this->getStream('test2', 'r', strlen($source));
- $data=stream_get_contents($stream);
- fclose($stream);
- $this->assertEqual(strlen($data), strlen($source));
- $this->assertEqual($source, $data);
- }
-}
diff --git a/apps/files_external/3rdparty/phpseclib/AUTHORS b/apps/files_external/3rdparty/phpseclib/AUTHORS
new file mode 100644
index 00000000000..7bae8ab94e1
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/AUTHORS
@@ -0,0 +1,3 @@
+phpseclib Lead Developer: TerraFrost (Jim Wigginton)
+
+phpseclib Developers: monnerat (Patrick Monnerat) \ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/LICENSE b/apps/files_external/3rdparty/phpseclib/LICENSE
new file mode 100644
index 00000000000..6ecd9b9bec1
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/LICENSE
@@ -0,0 +1,21 @@
+Copyright 2007-2012 TerraFrost and other contributors
+http://phpseclib.sourceforge.net/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/README.md b/apps/files_external/3rdparty/phpseclib/README.md
new file mode 100644
index 00000000000..fbd58bd82b1
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/README.md
@@ -0,0 +1,16 @@
+# phpseclib - PHP Secure Communications Library
+
+[![Build Status](https://secure.travis-ci.org/phpseclib/phpseclib.png?branch=master)](http://travis-ci.org/phpseclib/phpseclib)
+
+MIT-licensed pure-PHP implementations of an arbitrary-precision integer
+arithmetic library, fully PKCS#1 (v2.1) compliant RSA, DES, 3DES, RC4, Rijndael,
+AES, SSH-1, SSH-2, SFTP, and X.509
+
+* [Download (0.3.1)](http://sourceforge.net/projects/phpseclib/files/phpseclib0.3.1.zip/download)
+* [Browse Git](https://github.com/phpseclib/phpseclib)
+* [Documentation](http://phpseclib.sourceforge.net/)
+* [Support](http://www.frostjedi.com/phpbb/viewforum.php?f=46)
+* [Code Coverage Report](http://phpseclib.bantux.org/code_coverage/latest/)
+
+<img src="http://phpseclib.sourceforge.net/pear-icon.png" alt="PEAR Channel" width="16" height="16">
+PEAR Channel: [phpseclib.sourceforge.net](http://phpseclib.sourceforge.net/pear.htm)
diff --git a/apps/files_external/3rdparty/phpseclib/composer.json b/apps/files_external/3rdparty/phpseclib/composer.json
new file mode 100644
index 00000000000..11008cd81d1
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/composer.json
@@ -0,0 +1,48 @@
+{
+ "name": "phpseclib/phpseclib",
+ "type": "library",
+ "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+ "keywords": [
+ "security",
+ "crypto",
+ "cryptography",
+ "encryption",
+ "signature",
+ "signing",
+ "rsa",
+ "aes",
+ "ssh",
+ "sftp",
+ "x509",
+ "x.509",
+ "asn1",
+ "asn.1",
+ "BigInteger"
+ ],
+ "homepage": "http://phpseclib.sourceforge.net",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Jim Wigginton",
+ "email": "terrafrost@php.net",
+ "role": "Developer"
+ }
+ ],
+ "require": {
+ "php": ">=5.0.0"
+ },
+ "suggest": {
+ "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
+ "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+ "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP >= 4.3.3."
+ },
+ "include-path": ["phpseclib/"],
+ "autoload": {
+ "psr-0": {
+ "Crypt": "phpseclib/",
+ "File": "phpseclib/",
+ "Math": "phpseclib/",
+ "Net": "phpseclib/"
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php
new file mode 100644
index 00000000000..bc05adf67a7
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php
@@ -0,0 +1,946 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of AES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * If {@link Crypt_AES::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
+ * {@link Crypt_AES::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's 136-bits
+ * it'll be null-padded to 160-bits and 160 bits will be the key length until {@link Crypt_Rijndael::setKey() setKey()}
+ * is called, again, at which point, it'll be recalculated.
+ *
+ * Since Crypt_AES extends Crypt_Rijndael, some functions are available to be called that, in the context of AES, don't
+ * make a whole lot of sense. {@link Crypt_AES::setBlockLength() setBlockLength()}, for instance. Calling that function,
+ * however possible, won't do anything (AES has a fixed block length whereas Rijndael has a variable one).
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/AES.php');
+ *
+ * $aes = new Crypt_AES();
+ *
+ * $aes->setKey('abcdefghijklmnop');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $aes->decrypt($aes->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Crypt
+ * @package Crypt_AES
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVIII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: AES.php,v 1.7 2010/02/09 06:10:25 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Crypt_Rijndael
+ */
+if (!class_exists('Crypt_Rijndael')) {
+ require_once 'Rijndael.php';
+}
+
+/**#@+
+ * @access public
+ * @see Crypt_AES::encrypt()
+ * @see Crypt_AES::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_AES_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_AES_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_AES_MODE_CBC', 2);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
+ */
+define('CRYPT_AES_MODE_CFB', 3);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
+ */
+define('CRYPT_AES_MODE_OFB', 4);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_AES::Crypt_AES()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_AES_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_AES_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of AES.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_AES
+ */
+class Crypt_AES extends Crypt_Rijndael {
+ /**
+ * mcrypt resource for encryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_AES::encrypt()
+ * @var String
+ * @access private
+ */
+ var $enmcrypt;
+
+ /**
+ * mcrypt resource for decryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_AES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $demcrypt;
+
+ /**
+ * mcrypt resource for CFB mode
+ *
+ * @see Crypt_AES::encrypt()
+ * @see Crypt_AES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $ecb;
+
+ /**
+ * The SubByte S-Box
+ *
+ * @see Crypt_AES::_encryptBlock()
+ * @var Array
+ * @access intern
+ */
+ var $sbox = array(
+ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+ );
+
+ /**
+ * The inverse SubByte S-Box
+ *
+ * @see Crypt_AES::_decryptBlock()
+ * @var Array
+ * @access intern
+ */
+ var $isbox = array(
+ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+ );
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be
+ * CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC. If not explictly set, CRYPT_AES_MODE_CBC will be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_AES
+ * @access public
+ */
+ function Crypt_AES($mode = CRYPT_AES_MODE_CBC)
+ {
+ if ( !defined('CRYPT_AES_MODE') ) {
+ switch (true) {
+ case extension_loaded('mcrypt') && in_array('rijndael-128', mcrypt_list_algorithms()):
+ define('CRYPT_AES_MODE', CRYPT_AES_MODE_MCRYPT);
+ break;
+ default:
+ define('CRYPT_AES_MODE', CRYPT_AES_MODE_INTERNAL);
+ }
+ }
+
+ switch ( CRYPT_AES_MODE ) {
+ case CRYPT_AES_MODE_MCRYPT:
+ switch ($mode) {
+ case CRYPT_AES_MODE_ECB:
+ $this->paddable = true;
+ $this->mode = MCRYPT_MODE_ECB;
+ break;
+ case CRYPT_AES_MODE_CTR:
+ // ctr doesn't have a constant associated with it even though it appears to be fairly widely
+ // supported. in lieu of knowing just how widely supported it is, i've, for now, opted not to
+ // include a compatibility layer. the layer has been implemented but, for now, is commented out.
+ $this->mode = 'ctr';
+ //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_AES_MODE_CTR;
+ break;
+ case CRYPT_AES_MODE_CFB:
+ $this->mode = 'ncfb';
+ break;
+ case CRYPT_AES_MODE_OFB:
+ $this->mode = MCRYPT_MODE_NOFB;
+ break;
+ case CRYPT_AES_MODE_CBC:
+ default:
+ $this->paddable = true;
+ $this->mode = MCRYPT_MODE_CBC;
+ }
+
+ break;
+ default:
+ switch ($mode) {
+ case CRYPT_AES_MODE_ECB:
+ $this->paddable = true;
+ $this->mode = CRYPT_RIJNDAEL_MODE_ECB;
+ break;
+ case CRYPT_AES_MODE_CTR:
+ $this->mode = CRYPT_RIJNDAEL_MODE_CTR;
+ break;
+ case CRYPT_AES_MODE_CFB:
+ $this->mode = CRYPT_RIJNDAEL_MODE_CFB;
+ break;
+ case CRYPT_AES_MODE_OFB:
+ $this->mode = CRYPT_RIJNDAEL_MODE_OFB;
+ break;
+ case CRYPT_AES_MODE_CBC:
+ default:
+ $this->paddable = true;
+ $this->mode = CRYPT_RIJNDAEL_MODE_CBC;
+ }
+ }
+
+ if (CRYPT_AES_MODE == CRYPT_AES_MODE_INTERNAL) {
+ parent::Crypt_Rijndael($this->mode);
+ }
+ }
+
+ /**
+ * Extended Crypt_Rijndael::_setup()
+ *
+ * Optimizing the key schedule arrays ($w, $dw) for _encryptBlock() and _decryptBlock() after Crypt_Rijndael::_setup()
+ *
+ * @see Crypt_Rijndael::_setup()
+ * @access private
+ */
+ function _setup()
+ {
+ if (!$this->changed) {
+ return;
+ }
+
+ $this->w = $this->dw = array();
+ parent::_setup();
+
+ $this->dw = array_reverse($this->dw);
+ $w = array_pop($this->w);
+ $dw = array_pop($this->dw);
+ foreach ($this->w as $r => $wr) {
+ foreach ($wr as $c => $wc) {
+ $w[] = $wc;
+ $dw[] = $this->dw[$r][$c];
+ }
+ }
+ $this->w = $w;
+ $this->dw = $dw;
+ }
+
+ /**
+ * Dummy function
+ *
+ * Since Crypt_AES extends Crypt_Rijndael, this function is, technically, available, but it doesn't do anything.
+ *
+ * @access public
+ * @param Integer $length
+ */
+ function setBlockLength($length)
+ {
+ return;
+ }
+
+ /**
+ * Sets the initialization vector. (optional)
+ *
+ * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used. If not explictly set, it'll be assumed
+ * to be all zero's.
+ *
+ * @access public
+ * @param String $iv
+ */
+ function setIV($iv)
+ {
+ parent::setIV($iv);
+ if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
+ $this->changed = true;
+ }
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * $plaintext will be padded with up to 16 additional bytes. Other AES implementations may or may not pad in the
+ * same manner. Other common approaches to padding and the reasons why it's necessary are discussed in the following
+ * URL:
+ *
+ * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+ *
+ * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
+ * strlen($plaintext) will still need to be a multiple of 16, however, arbitrary values can be added to make it that
+ * length.
+ *
+ * @see Crypt_AES::decrypt()
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
+ $this->_mcryptSetup();
+
+ // re: http://phpseclib.sourceforge.net/cfb-demo.phps
+ // using mcrypt's default handing of CFB the above would output two different things. using phpseclib's
+ // rewritten CFB implementation the above outputs the same thing twice.
+ if ($this->mode == 'ncfb' && $this->continuousBuffer) {
+ $iv = &$this->encryptIV;
+ $pos = &$this->enbuffer['pos'];
+ $len = strlen($plaintext);
+ $ciphertext = '';
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = 16 - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+ $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+ $this->enbuffer['enmcrypt_init'] = true;
+ }
+ if ($len >= 16) {
+ if ($this->enbuffer['enmcrypt_init'] === false || $len > 280) {
+ if ($this->enbuffer['enmcrypt_init'] === true) {
+ mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
+ $this->enbuffer['enmcrypt_init'] = false;
+ }
+ $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 16));
+ $iv = substr($ciphertext, -16);
+ $len%= 16;
+ } else {
+ while ($len >= 16) {
+ $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 16);
+ $ciphertext.= $iv;
+ $len-= 16;
+ $i+= 16;
+ }
+ }
+ }
+
+ if ($len) {
+ $iv = mcrypt_generic($this->ecb, $iv);
+ $block = $iv ^ substr($plaintext, -$len);
+ $iv = substr_replace($iv, $block, 0, $len);
+ $ciphertext.= $block;
+ $pos = $len;
+ }
+
+ return $ciphertext;
+ }
+
+ if ($this->paddable) {
+ $plaintext = $this->_pad($plaintext);
+ }
+
+ $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
+ }
+
+ return $ciphertext;
+ }
+
+ return parent::encrypt($plaintext);
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * If strlen($ciphertext) is not a multiple of 16, null bytes will be added to the end of the string until it is.
+ *
+ * @see Crypt_AES::encrypt()
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
+ $this->_mcryptSetup();
+
+ if ($this->mode == 'ncfb' && $this->continuousBuffer) {
+ $iv = &$this->decryptIV;
+ $pos = &$this->debuffer['pos'];
+ $len = strlen($ciphertext);
+ $plaintext = '';
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = 16 - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+ $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+ $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+ }
+ if ($len >= 16) {
+ $cb = substr($ciphertext, $i, $len - $len % 16);
+ $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
+ $iv = substr($cb, -16);
+ $len%= 16;
+ }
+ if ($len) {
+ $iv = mcrypt_generic($this->ecb, $iv);
+ $plaintext.= $iv ^ substr($ciphertext, -$len);
+ $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
+ $pos = $len;
+ }
+
+ return $plaintext;
+ }
+
+ if ($this->paddable) {
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 15) & 0xFFFFFFF0, chr(0));
+ }
+
+ $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
+ }
+
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ return parent::decrypt($ciphertext);
+ }
+
+ /**
+ * Setup mcrypt
+ *
+ * Validates all the variables.
+ *
+ * @access private
+ */
+ function _mcryptSetup()
+ {
+ if (!$this->changed) {
+ return;
+ }
+
+ if (!$this->explicit_key_length) {
+ // this just copied from Crypt_Rijndael::_setup()
+ $length = strlen($this->key) >> 2;
+ if ($length > 8) {
+ $length = 8;
+ } else if ($length < 4) {
+ $length = 4;
+ }
+ $this->Nk = $length;
+ $this->key_size = $length << 2;
+ }
+
+ switch ($this->Nk) {
+ case 4: // 128
+ $this->key_size = 16;
+ break;
+ case 5: // 160
+ case 6: // 192
+ $this->key_size = 24;
+ break;
+ case 7: // 224
+ case 8: // 256
+ $this->key_size = 32;
+ }
+
+ $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0));
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, 16), 16, chr(0));
+
+ if (!isset($this->enmcrypt)) {
+ $mode = $this->mode;
+ //$mode = $this->mode == CRYPT_AES_MODE_CTR ? MCRYPT_MODE_ECB : $this->mode;
+
+ $this->demcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, '');
+ $this->enmcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, '');
+
+ if ($mode == 'ncfb') {
+ $this->ecb = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
+ }
+
+ } // else should mcrypt_generic_deinit be called?
+
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
+
+ if ($this->mode == 'ncfb') {
+ mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
+ }
+
+ $this->changed = false;
+ }
+
+ /**
+ * Encrypts a block
+ *
+ * Optimized over Crypt_Rijndael's implementation by means of loop unrolling.
+ *
+ * @see Crypt_Rijndael::_encryptBlock()
+ * @access private
+ * @param String $in
+ * @return String
+ */
+ function _encryptBlock($in)
+ {
+ $state = unpack('N*', $in);
+
+ $sbox = $this->sbox;
+ $w = $this->w;
+ $t0 = $this->t0;
+ $t1 = $this->t1;
+ $t2 = $this->t2;
+ $t3 = $this->t3;
+
+ // addRoundKey
+ $s0 = $state[1] ^ $w[4];
+ $s1 = $state[2] ^ $w[5];
+ $s2 = $state[3] ^ $w[6];
+ $s3 = $state[4] ^ $w[7];
+
+ // shiftRows + subWord + mixColumns + addRoundKey
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[8];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[9];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[10];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[11];
+
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[12];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[13];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[14];
+ $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[15];
+
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[16];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[17];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[18];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[19];
+
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[20];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[21];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[22];
+ $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[23];
+
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[24];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[25];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[26];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[27];
+
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[28];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[29];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[30];
+ $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[31];
+
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[32];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[33];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[34];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[35];
+
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[36];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[37];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[38];
+ $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[39];
+
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[40];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[41];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[42];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[43];
+
+ switch ($this->Nr) {
+ case 10:
+ break;
+
+ case 14:
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46];
+ $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47];
+
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51];
+
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[52];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[53];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[54];
+ $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[55];
+
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[56];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[57];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[58];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[59];
+ break;
+
+ case 12:
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46];
+ $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47];
+
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51];
+ break;
+
+ case 13:
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46];
+ $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47];
+
+ $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48];
+ $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49];
+ $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50];
+ $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51];
+
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[52];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[53];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[54];
+ $e3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[55];
+ // Note: Here we skip $s3 but using $e3
+
+ $e0 = $s0;
+ $e1 = $s1;
+ $e2 = $s2;
+ // $e3 = $s3;
+ break;
+
+ default: // 11
+ $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44];
+ $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45];
+ $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46];
+ $e3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47];
+ // Note: Here we skip $s3 but using $e3
+
+ $e0 = $s0;
+ $e1 = $s1;
+ $e2 = $s2;
+ // $e3 = $s3;
+ }
+
+ // subWord
+ $e0 = $sbox[$e0 & 0xff] | ($sbox[($e0 >> 8) & 0xff] << 8) | ($sbox[($e0 >> 16) & 0xff] << 16) | ($sbox[($e0 >> 24) & 0xff] << 24);
+ $e1 = $sbox[$e1 & 0xff] | ($sbox[($e1 >> 8) & 0xff] << 8) | ($sbox[($e1 >> 16) & 0xff] << 16) | ($sbox[($e1 >> 24) & 0xff] << 24);
+ $e2 = $sbox[$e2 & 0xff] | ($sbox[($e2 >> 8) & 0xff] << 8) | ($sbox[($e2 >> 16) & 0xff] << 16) | ($sbox[($e2 >> 24) & 0xff] << 24);
+ $e3 = $sbox[$e3 & 0xff] | ($sbox[($e3 >> 8) & 0xff] << 8) | ($sbox[($e3 >> 16) & 0xff] << 16) | ($sbox[($e3 >> 24) & 0xff] << 24);
+
+ // shiftRows + addRoundKey
+ return pack('N*',
+ ($e0 & 0xFF000000) ^ ($e1 & 0x00FF0000) ^ ($e2 & 0x0000FF00) ^ ($e3 & 0x000000FF) ^ $w[0],
+ ($e1 & 0xFF000000) ^ ($e2 & 0x00FF0000) ^ ($e3 & 0x0000FF00) ^ ($e0 & 0x000000FF) ^ $w[1],
+ ($e2 & 0xFF000000) ^ ($e3 & 0x00FF0000) ^ ($e0 & 0x0000FF00) ^ ($e1 & 0x000000FF) ^ $w[2],
+ ($e3 & 0xFF000000) ^ ($e0 & 0x00FF0000) ^ ($e1 & 0x0000FF00) ^ ($e2 & 0x000000FF) ^ $w[3]
+ );
+ }
+
+ /**
+ * Decrypts a block
+ *
+ * Optimized over Crypt_Rijndael's implementation by means of loop unrolling.
+ *
+ * @see Crypt_Rijndael::_decryptBlock()
+ * @access private
+ * @param String $in
+ * @return String
+ */
+ function _decryptBlock($in)
+ {
+ $state = unpack('N*', $in);
+
+ $sbox = $this->isbox;
+ $dw = $this->dw;
+ $dt0 = $this->dt0;
+ $dt1 = $this->dt1;
+ $dt2 = $this->dt2;
+ $dt3 = $this->dt3;
+
+ // addRoundKey
+ $s0 = $state[1] ^ $dw[4];
+ $s1 = $state[2] ^ $dw[5];
+ $s2 = $state[3] ^ $dw[6];
+ $s3 = $state[4] ^ $dw[7];
+
+ // invShiftRows + invSubBytes + invMixColumns + addRoundKey
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[8];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[9];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[10];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[11];
+
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[12];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[13];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[14];
+ $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[15];
+
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[16];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[17];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[18];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[19];
+
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[20];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[21];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[22];
+ $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[23];
+
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[24];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[25];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[26];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[27];
+
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[28];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[29];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[30];
+ $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[31];
+
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[32];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[33];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[34];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[35];
+
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[36];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[37];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[38];
+ $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[39];
+
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[40];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[41];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[42];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[43];
+
+ switch ($this->Nr) {
+ case 10:
+ break;
+
+ case 14:
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46];
+ $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47];
+
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51];
+
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[52];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[53];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[54];
+ $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[55];
+
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[56];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[57];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[58];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[59];
+ break;
+
+ case 12:
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46];
+ $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47];
+
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51];
+ break;
+
+ case 13:
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46];
+ $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47];
+
+ $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48];
+ $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49];
+ $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50];
+ $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51];
+
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[52];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[53];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[54];
+ $e3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[55];
+ // Note: Here we skip $s3 but using $e3
+
+ $e0 = $s0;
+ $e1 = $s1;
+ $e2 = $s2;
+ // $e3 = $s3;
+ break;
+
+ default: // 11
+ $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44];
+ $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45];
+ $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46];
+ $e3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47];
+ // Note: Here we skip $s3 but using $e3
+
+ $e0 = $s0;
+ $e1 = $s1;
+ $e2 = $s2;
+ // $e3 = $s3;
+ }
+
+ // invSubWord
+ $e0 = $sbox[$e0 & 0xff] | ($sbox[($e0 >> 8) & 0xff] << 8) | ($sbox[($e0 >> 16) & 0xff] << 16) | ($sbox[($e0 >> 24) & 0xff] << 24);
+ $e1 = $sbox[$e1 & 0xff] | ($sbox[($e1 >> 8) & 0xff] << 8) | ($sbox[($e1 >> 16) & 0xff] << 16) | ($sbox[($e1 >> 24) & 0xff] << 24);
+ $e2 = $sbox[$e2 & 0xff] | ($sbox[($e2 >> 8) & 0xff] << 8) | ($sbox[($e2 >> 16) & 0xff] << 16) | ($sbox[($e2 >> 24) & 0xff] << 24);
+ $e3 = $sbox[$e3 & 0xff] | ($sbox[($e3 >> 8) & 0xff] << 8) | ($sbox[($e3 >> 16) & 0xff] << 16) | ($sbox[($e3 >> 24) & 0xff] << 24);
+
+ // invShiftRows + addRoundKey
+ return pack('N*',
+ ($e0 & 0xFF000000) ^ ($e3 & 0x00FF0000) ^ ($e2 & 0x0000FF00) ^ ($e1 & 0x000000FF) ^ $dw[0],
+ ($e1 & 0xFF000000) ^ ($e0 & 0x00FF0000) ^ ($e3 & 0x0000FF00) ^ ($e2 & 0x000000FF) ^ $dw[1],
+ ($e2 & 0xFF000000) ^ ($e1 & 0x00FF0000) ^ ($e0 & 0x0000FF00) ^ ($e3 & 0x000000FF) ^ $dw[2],
+ ($e3 & 0xFF000000) ^ ($e2 & 0x00FF0000) ^ ($e1 & 0x0000FF00) ^ ($e0 & 0x000000FF) ^ $dw[3]
+ );
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_Rijndael::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ parent::enableContinuousBuffer();
+
+ if (CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT) {
+ $this->enbuffer['enmcrypt_init'] = true;
+ $this->debuffer['demcrypt_init'] = true;
+ }
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ parent::disableContinuousBuffer();
+
+ if (CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT) {
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
+ }
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1:
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php
new file mode 100644
index 00000000000..1197a50ab72
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php
@@ -0,0 +1,1334 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of DES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * Useful resources are as follows:
+ *
+ * - {@link http://en.wikipedia.org/wiki/DES_supplementary_material Wikipedia: DES supplementary material}
+ * - {@link http://www.itl.nist.gov/fipspubs/fip46-2.htm FIPS 46-2 - (DES), Data Encryption Standard}
+ * - {@link http://www.cs.eku.edu/faculty/styer/460/Encrypt/JS-DES.html JavaScript DES Example}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/DES.php');
+ *
+ * $des = new Crypt_DES();
+ *
+ * $des->setKey('abcdefgh');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $des->decrypt($des->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Crypt
+ * @package Crypt_DES
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: DES.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_DES::_prepareKey()
+ * @see Crypt_DES::_processBlock()
+ */
+/**
+ * Contains array_reverse($keys[CRYPT_DES_DECRYPT])
+ */
+define('CRYPT_DES_ENCRYPT', 0);
+/**
+ * Contains array_reverse($keys[CRYPT_DES_ENCRYPT])
+ */
+define('CRYPT_DES_DECRYPT', 1);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_DES::encrypt()
+ * @see Crypt_DES::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_DES_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_DES_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_DES_MODE_CBC', 2);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
+ */
+define('CRYPT_DES_MODE_CFB', 3);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
+ */
+define('CRYPT_DES_MODE_OFB', 4);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_DES::Crypt_DES()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_DES_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_DES_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of DES.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_DES
+ */
+class Crypt_DES {
+ /**
+ * The Key Schedule
+ *
+ * @see Crypt_DES::setKey()
+ * @var Array
+ * @access private
+ */
+ var $keys = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * The Encryption Mode
+ *
+ * @see Crypt_DES::Crypt_DES()
+ * @var Integer
+ * @access private
+ */
+ var $mode;
+
+ /**
+ * Continuous Buffer status
+ *
+ * @see Crypt_DES::enableContinuousBuffer()
+ * @var Boolean
+ * @access private
+ */
+ var $continuousBuffer = false;
+
+ /**
+ * Padding status
+ *
+ * @see Crypt_DES::enablePadding()
+ * @var Boolean
+ * @access private
+ */
+ var $padding = true;
+
+ /**
+ * The Initialization Vector
+ *
+ * @see Crypt_DES::setIV()
+ * @var String
+ * @access private
+ */
+ var $iv = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_DES::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $encryptIV = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_DES::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $decryptIV = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * mcrypt resource for encryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_DES::encrypt()
+ * @var String
+ * @access private
+ */
+ var $enmcrypt;
+
+ /**
+ * mcrypt resource for decryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_DES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $demcrypt;
+
+ /**
+ * Does the enmcrypt resource need to be (re)initialized?
+ *
+ * @see Crypt_DES::setKey()
+ * @see Crypt_DES::setIV()
+ * @var Boolean
+ * @access private
+ */
+ var $enchanged = true;
+
+ /**
+ * Does the demcrypt resource need to be (re)initialized?
+ *
+ * @see Crypt_DES::setKey()
+ * @see Crypt_DES::setIV()
+ * @var Boolean
+ * @access private
+ */
+ var $dechanged = true;
+
+ /**
+ * Is the mode one that is paddable?
+ *
+ * @see Crypt_DES::Crypt_DES()
+ * @var Boolean
+ * @access private
+ */
+ var $paddable = false;
+
+ /**
+ * Encryption buffer for CTR, OFB and CFB modes
+ *
+ * @see Crypt_DES::encrypt()
+ * @var Array
+ * @access private
+ */
+ var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+
+ /**
+ * Decryption buffer for CTR, OFB and CFB modes
+ *
+ * @see Crypt_DES::decrypt()
+ * @var Array
+ * @access private
+ */
+ var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true);
+
+ /**
+ * mcrypt resource for CFB mode
+ *
+ * @see Crypt_DES::encrypt()
+ * @see Crypt_DES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $ecb;
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be
+ * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC. If not explictly set, CRYPT_DES_MODE_CBC will be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_DES
+ * @access public
+ */
+ function Crypt_DES($mode = CRYPT_DES_MODE_CBC)
+ {
+ if ( !defined('CRYPT_DES_MODE') ) {
+ switch (true) {
+ case extension_loaded('mcrypt') && in_array('des', mcrypt_list_algorithms()):
+ define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT);
+ break;
+ default:
+ define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL);
+ }
+ }
+
+ switch ( CRYPT_DES_MODE ) {
+ case CRYPT_DES_MODE_MCRYPT:
+ switch ($mode) {
+ case CRYPT_DES_MODE_ECB:
+ $this->paddable = true;
+ $this->mode = MCRYPT_MODE_ECB;
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $this->mode = 'ctr';
+ //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_DES_MODE_CTR;
+ break;
+ case CRYPT_DES_MODE_CFB:
+ $this->mode = 'ncfb';
+ $this->ecb = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '');
+ break;
+ case CRYPT_DES_MODE_OFB:
+ $this->mode = MCRYPT_MODE_NOFB;
+ break;
+ case CRYPT_DES_MODE_CBC:
+ default:
+ $this->paddable = true;
+ $this->mode = MCRYPT_MODE_CBC;
+ }
+ $this->enmcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, '');
+ $this->demcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, '');
+
+ break;
+ default:
+ switch ($mode) {
+ case CRYPT_DES_MODE_ECB:
+ case CRYPT_DES_MODE_CBC:
+ $this->paddable = true;
+ $this->mode = $mode;
+ break;
+ case CRYPT_DES_MODE_CTR:
+ case CRYPT_DES_MODE_CFB:
+ case CRYPT_DES_MODE_OFB:
+ $this->mode = $mode;
+ break;
+ default:
+ $this->paddable = true;
+ $this->mode = CRYPT_DES_MODE_CBC;
+ }
+ }
+ }
+
+ /**
+ * Sets the key.
+ *
+ * Keys can be of any length. DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we
+ * only use the first eight, if $key has more then eight characters in it, and pad $key with the
+ * null byte if it is less then eight characters long.
+ *
+ * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
+ *
+ * If the key is not explicitly set, it'll be assumed to be all zero's.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $this->keys = ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) ? str_pad(substr($key, 0, 8), 8, chr(0)) : $this->_prepareKey($key);
+ $this->enchanged = true;
+ $this->dechanged = true;
+ }
+
+ /**
+ * Sets the password.
+ *
+ * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+ * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}:
+ * $hash, $salt, $count
+ *
+ * @param String $password
+ * @param optional String $method
+ * @access public
+ */
+ function setPassword($password, $method = 'pbkdf2')
+ {
+ $key = '';
+
+ switch ($method) {
+ default: // 'pbkdf2'
+ list(, , $hash, $salt, $count) = func_get_args();
+ if (!isset($hash)) {
+ $hash = 'sha1';
+ }
+ // WPA and WPA2 use the SSID as the salt
+ if (!isset($salt)) {
+ $salt = 'phpseclib/salt';
+ }
+ // RFC2898#section-4.2 uses 1,000 iterations by default
+ // WPA and WPA2 use 4,096.
+ if (!isset($count)) {
+ $count = 1000;
+ }
+
+ if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+ }
+
+ $i = 1;
+ while (strlen($key) < 8) { // $dkLen == 8
+ //$dk.= $this->_pbkdf($password, $salt, $count, $i++);
+ $hmac = new Crypt_Hash();
+ $hmac->setHash($hash);
+ $hmac->setKey($password);
+ $f = $u = $hmac->hash($salt . pack('N', $i++));
+ for ($j = 2; $j <= $count; $j++) {
+ $u = $hmac->hash($u);
+ $f^= $u;
+ }
+ $key.= $f;
+ }
+ }
+
+ $this->setKey($key);
+ }
+
+ /**
+ * Sets the initialization vector. (optional)
+ *
+ * SetIV is not required when CRYPT_DES_MODE_ECB is being used. If not explictly set, it'll be assumed
+ * to be all zero's.
+ *
+ * @access public
+ * @param String $iv
+ */
+ function setIV($iv)
+ {
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0));
+ $this->enchanged = true;
+ $this->dechanged = true;
+ }
+
+ /**
+ * Generate CTR XOR encryption key
+ *
+ * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+ * plaintext / ciphertext in CTR mode.
+ *
+ * @see Crypt_DES::decrypt()
+ * @see Crypt_DES::encrypt()
+ * @access public
+ * @param String $iv
+ */
+ function _generate_xor(&$iv)
+ {
+ $xor = $iv;
+ for ($j = 4; $j <= 8; $j+=4) {
+ $temp = substr($iv, -$j, 4);
+ switch ($temp) {
+ case "\xFF\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+ break;
+ case "\x7F\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+ break 2;
+ default:
+ extract(unpack('Ncount', $temp));
+ $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+ break 2;
+ }
+ }
+
+ return $xor;
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * $plaintext will be padded with up to 8 additional bytes. Other DES implementations may or may not pad in the
+ * same manner. Other common approaches to padding and the reasons why it's necessary are discussed in the following
+ * URL:
+ *
+ * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+ *
+ * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
+ * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that
+ * length.
+ *
+ * @see Crypt_DES::decrypt()
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ if ($this->paddable) {
+ $plaintext = $this->_pad($plaintext);
+ }
+
+ if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+ if ($this->enchanged) {
+ mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV);
+ if ($this->mode == 'ncfb') {
+ mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0");
+ }
+ $this->enchanged = false;
+ }
+
+ if ($this->mode != 'ncfb' || !$this->continuousBuffer) {
+ $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+ } else {
+ $iv = &$this->encryptIV;
+ $pos = &$this->enbuffer['pos'];
+ $len = strlen($plaintext);
+ $ciphertext = '';
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = 8 - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+ $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+ $this->enbuffer['enmcrypt_init'] = true;
+ }
+ if ($len >= 8) {
+ if ($this->enbuffer['enmcrypt_init'] === false || $len > 600) {
+ if ($this->enbuffer['enmcrypt_init'] === true) {
+ mcrypt_generic_init($this->enmcrypt, $this->keys, $iv);
+ $this->enbuffer['enmcrypt_init'] = false;
+ }
+ $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 8));
+ $iv = substr($ciphertext, -8);
+ $len%= 8;
+ } else {
+ while ($len >= 8) {
+ $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 8);
+ $ciphertext.= $iv;
+ $len-= 8;
+ $i+= 8;
+ }
+ }
+ }
+ if ($len) {
+ $iv = mcrypt_generic($this->ecb, $iv);
+ $block = $iv ^ substr($plaintext, -$len);
+ $iv = substr_replace($iv, $block, 0, $len);
+ $ciphertext.= $block;
+ $pos = $len;
+ }
+ return $ciphertext;
+ }
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV);
+ }
+
+ return $ciphertext;
+ }
+
+ if (!is_array($this->keys)) {
+ $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0");
+ }
+
+ $buffer = &$this->enbuffer;
+ $continuousBuffer = $this->continuousBuffer;
+ $ciphertext = '';
+ switch ($this->mode) {
+ case CRYPT_DES_MODE_ECB:
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $ciphertext.= $this->_processBlock(substr($plaintext, $i, 8), CRYPT_DES_ENCRYPT);
+ }
+ break;
+ case CRYPT_DES_MODE_CBC:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $block = $this->_processBlock($block ^ $xor, CRYPT_DES_ENCRYPT);
+ $xor = $block;
+ $ciphertext.= $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $xor = $this->encryptIV;
+ if (strlen($buffer['encrypted'])) {
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $buffer['encrypted'].= $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT);
+ $key = $this->_string_shift($buffer['encrypted'], 8);
+ $ciphertext.= $block ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $key = $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT);
+ $ciphertext.= $block ^ $key;
+ }
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ if ($start = strlen($plaintext) & 7) {
+ $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted'];
+ }
+ }
+ break;
+ case CRYPT_DES_MODE_CFB:
+ if ($this->continuousBuffer) {
+ $iv = &$this->encryptIV;
+ $pos = &$buffer['pos'];
+ } else {
+ $iv = $this->encryptIV;
+ $pos = 0;
+ }
+ $len = strlen($plaintext);
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = 8 - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+ $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+ }
+ while ($len >= 8) {
+ $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT) ^ substr($plaintext, $i, 8);
+ $ciphertext.= $iv;
+ $len-= 8;
+ $i+= 8;
+ }
+ if ($len) {
+ $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT);
+ $block = $iv ^ substr($plaintext, $i);
+ $iv = substr_replace($iv, $block, 0, $len);
+ $ciphertext.= $block;
+ $pos = $len;
+ }
+ return $ciphertext;
+ case CRYPT_DES_MODE_OFB:
+ $xor = $this->encryptIV;
+ if (strlen($buffer['xor'])) {
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $buffer['xor'].= $xor;
+ $key = $this->_string_shift($buffer['xor'], 8);
+ $ciphertext.= substr($plaintext, $i, 8) ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $ciphertext.= substr($plaintext, $i, 8) ^ $xor;
+ }
+ $key = $xor;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ if ($start = strlen($plaintext) & 7) {
+ $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+ }
+ }
+ }
+
+ return $ciphertext;
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * If strlen($ciphertext) is not a multiple of 8, null bytes will be added to the end of the string until it is.
+ *
+ * @see Crypt_DES::encrypt()
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ if ($this->paddable) {
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0));
+ }
+
+ if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+ if ($this->dechanged) {
+ mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV);
+ if ($this->mode == 'ncfb') {
+ mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0");
+ }
+ $this->dechanged = false;
+ }
+
+ if ($this->mode != 'ncfb' || !$this->continuousBuffer) {
+ $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+ } else {
+ $iv = &$this->decryptIV;
+ $pos = &$this->debuffer['pos'];
+ $len = strlen($ciphertext);
+ $plaintext = '';
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = 8 - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+ $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+ }
+ if ($len >= 8) {
+ $cb = substr($ciphertext, $i, $len - $len % 8);
+ $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
+ $iv = substr($cb, -8);
+ $len%= 8;
+ }
+ if ($len) {
+ $iv = mcrypt_generic($this->ecb, $iv);
+ $plaintext.= $iv ^ substr($ciphertext, -$len);
+ $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
+ $pos = $len;
+ }
+ return $plaintext;
+ }
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV);
+ }
+
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ if (!is_array($this->keys)) {
+ $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0");
+ }
+
+ $buffer = &$this->debuffer;
+ $continuousBuffer = $this->continuousBuffer;
+ $plaintext = '';
+ switch ($this->mode) {
+ case CRYPT_DES_MODE_ECB:
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $plaintext.= $this->_processBlock(substr($ciphertext, $i, 8), CRYPT_DES_DECRYPT);
+ }
+ break;
+ case CRYPT_DES_MODE_CBC:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $plaintext.= $this->_processBlock($block, CRYPT_DES_DECRYPT) ^ $xor;
+ $xor = $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $xor = $this->decryptIV;
+ if (strlen($buffer['ciphertext'])) {
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $buffer['ciphertext'].= $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT);
+ $key = $this->_string_shift($buffer['ciphertext'], 8);
+ $plaintext.= $block ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $key = $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT);
+ $plaintext.= $block ^ $key;
+ }
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ if ($start = strlen($ciphertext) % 8) {
+ $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+ }
+ }
+ break;
+ case CRYPT_DES_MODE_CFB:
+ if ($this->continuousBuffer) {
+ $iv = &$this->decryptIV;
+ $pos = &$buffer['pos'];
+ } else {
+ $iv = $this->decryptIV;
+ $pos = 0;
+ }
+ $len = strlen($ciphertext);
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = 8 - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+ $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+ }
+ while ($len >= 8) {
+ $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT);
+ $cb = substr($ciphertext, $i, 8);
+ $plaintext.= $iv ^ $cb;
+ $iv = $cb;
+ $len-= 8;
+ $i+= 8;
+ }
+ if ($len) {
+ $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT);
+ $plaintext.= $iv ^ substr($ciphertext, $i);
+ $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
+ $pos = $len;
+ }
+ return $plaintext;
+ case CRYPT_DES_MODE_OFB:
+ $xor = $this->decryptIV;
+ if (strlen($buffer['xor'])) {
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $buffer['xor'].= $xor;
+ $key = $this->_string_shift($buffer['xor'], 8);
+ $plaintext.= substr($ciphertext, $i, 8) ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $plaintext.= substr($ciphertext, $i, 8) ^ $xor;
+ }
+ $key = $xor;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ if ($start = strlen($ciphertext) % 8) {
+ $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+ }
+ }
+ }
+
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets
+ * will yield different outputs:
+ *
+ * <code>
+ * echo $des->encrypt(substr($plaintext, 0, 8));
+ * echo $des->encrypt(substr($plaintext, 8, 8));
+ * </code>
+ * <code>
+ * echo $des->encrypt($plaintext);
+ * </code>
+ *
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
+ * another, as demonstrated with the following:
+ *
+ * <code>
+ * $des->encrypt(substr($plaintext, 0, 8));
+ * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ * <code>
+ * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ *
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
+ *
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
+ * however, they are also less intuitive and more likely to cause you problems.
+ *
+ * @see Crypt_DES::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ $this->continuousBuffer = true;
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_DES::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ $this->continuousBuffer = false;
+ $this->encryptIV = $this->iv;
+ $this->decryptIV = $this->iv;
+ $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+ $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true);
+
+ if (CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT) {
+ mcrypt_generic_init($this->enmcrypt, $this->keys, $this->iv);
+ mcrypt_generic_init($this->demcrypt, $this->keys, $this->iv);
+ }
+ }
+
+ /**
+ * Pad "packets".
+ *
+ * DES works by encrypting eight bytes at a time. If you ever need to encrypt or decrypt something that's not
+ * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight.
+ *
+ * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH1,
+ * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
+ * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+ * transmitted separately)
+ *
+ * @see Crypt_DES::disablePadding()
+ * @access public
+ */
+ function enablePadding()
+ {
+ $this->padding = true;
+ }
+
+ /**
+ * Do not pad packets.
+ *
+ * @see Crypt_DES::enablePadding()
+ * @access public
+ */
+ function disablePadding()
+ {
+ $this->padding = false;
+ }
+
+ /**
+ * Pads a string
+ *
+ * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8).
+ * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7)
+ *
+ * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+ * and padding will, hence forth, be enabled.
+ *
+ * @see Crypt_DES::_unpad()
+ * @access private
+ */
+ function _pad($text)
+ {
+ $length = strlen($text);
+
+ if (!$this->padding) {
+ if (($length & 7) == 0) {
+ return $text;
+ } else {
+ user_error("The plaintext's length ($length) is not a multiple of the block size (8)");
+ $this->padding = true;
+ }
+ }
+
+ $pad = 8 - ($length & 7);
+ return str_pad($text, $length + $pad, chr($pad));
+ }
+
+ /**
+ * Unpads a string
+ *
+ * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+ * and false will be returned.
+ *
+ * @see Crypt_DES::_pad()
+ * @access private
+ */
+ function _unpad($text)
+ {
+ if (!$this->padding) {
+ return $text;
+ }
+
+ $length = ord($text[strlen($text) - 1]);
+
+ if (!$length || $length > 8) {
+ return false;
+ }
+
+ return substr($text, 0, -$length);
+ }
+
+ /**
+ * Encrypts or decrypts a 64-bit block
+ *
+ * $mode should be either CRYPT_DES_ENCRYPT or CRYPT_DES_DECRYPT. See
+ * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general
+ * idea of what this function does.
+ *
+ * @access private
+ * @param String $block
+ * @param Integer $mode
+ * @return String
+ */
+ function _processBlock($block, $mode)
+ {
+ // s-boxes. in the official DES docs, they're described as being matrices that
+ // one accesses by using the first and last bits to determine the row and the
+ // middle four bits to determine the column. in this implementation, they've
+ // been converted to vectors
+ static $sbox = array(
+ array(
+ 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
+ 3, 10 ,10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
+ 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
+ 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13
+ ),
+ array(
+ 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
+ 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
+ 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
+ 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9
+ ),
+ array(
+ 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
+ 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
+ 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
+ 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12
+ ),
+ array(
+ 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
+ 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
+ 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
+ 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14
+ ),
+ array(
+ 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
+ 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
+ 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
+ 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3
+ ),
+ array(
+ 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
+ 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
+ 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
+ 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13
+ ),
+ array(
+ 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
+ 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
+ 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
+ 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12
+ ),
+ array(
+ 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
+ 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
+ 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
+ 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
+ )
+ );
+
+ $keys = $this->keys;
+
+ $temp = unpack('Na/Nb', $block);
+ $block = array($temp['a'], $temp['b']);
+
+ // because php does arithmetic right shifts, if the most significant bits are set, right
+ // shifting those into the correct position will add 1's - not 0's. this will intefere
+ // with the | operation unless a second & is done. so we isolate these bits and left shift
+ // them into place. we then & each block with 0x7FFFFFFF to prevennt 1's from being added
+ // for any other shifts.
+ $msb = array(
+ ($block[0] >> 31) & 1,
+ ($block[1] >> 31) & 1
+ );
+ $block[0] &= 0x7FFFFFFF;
+ $block[1] &= 0x7FFFFFFF;
+
+ // we isolate the appropriate bit in the appropriate integer and shift as appropriate. in
+ // some cases, there are going to be multiple bits in the same integer that need to be shifted
+ // in the same way. we combine those into one shift operation.
+ $block = array(
+ (($block[1] & 0x00000040) << 25) | (($block[1] & 0x00004000) << 16) |
+ (($block[1] & 0x00400001) << 7) | (($block[1] & 0x40000100) >> 2) |
+ (($block[0] & 0x00000040) << 21) | (($block[0] & 0x00004000) << 12) |
+ (($block[0] & 0x00400001) << 3) | (($block[0] & 0x40000100) >> 6) |
+ (($block[1] & 0x00000010) << 19) | (($block[1] & 0x00001000) << 10) |
+ (($block[1] & 0x00100000) << 1) | (($block[1] & 0x10000000) >> 8) |
+ (($block[0] & 0x00000010) << 15) | (($block[0] & 0x00001000) << 6) |
+ (($block[0] & 0x00100000) >> 3) | (($block[0] & 0x10000000) >> 12) |
+ (($block[1] & 0x00000004) << 13) | (($block[1] & 0x00000400) << 4) |
+ (($block[1] & 0x00040000) >> 5) | (($block[1] & 0x04000000) >> 14) |
+ (($block[0] & 0x00000004) << 9) | ( $block[0] & 0x00000400 ) |
+ (($block[0] & 0x00040000) >> 9) | (($block[0] & 0x04000000) >> 18) |
+ (($block[1] & 0x00010000) >> 11) | (($block[1] & 0x01000000) >> 20) |
+ (($block[0] & 0x00010000) >> 15) | (($block[0] & 0x01000000) >> 24)
+ ,
+ (($block[1] & 0x00000080) << 24) | (($block[1] & 0x00008000) << 15) |
+ (($block[1] & 0x00800002) << 6) | (($block[0] & 0x00000080) << 20) |
+ (($block[0] & 0x00008000) << 11) | (($block[0] & 0x00800002) << 2) |
+ (($block[1] & 0x00000020) << 18) | (($block[1] & 0x00002000) << 9) |
+ ( $block[1] & 0x00200000 ) | (($block[1] & 0x20000000) >> 9) |
+ (($block[0] & 0x00000020) << 14) | (($block[0] & 0x00002000) << 5) |
+ (($block[0] & 0x00200000) >> 4) | (($block[0] & 0x20000000) >> 13) |
+ (($block[1] & 0x00000008) << 12) | (($block[1] & 0x00000800) << 3) |
+ (($block[1] & 0x00080000) >> 6) | (($block[1] & 0x08000000) >> 15) |
+ (($block[0] & 0x00000008) << 8) | (($block[0] & 0x00000800) >> 1) |
+ (($block[0] & 0x00080000) >> 10) | (($block[0] & 0x08000000) >> 19) |
+ (($block[1] & 0x00000200) >> 3) | (($block[0] & 0x00000200) >> 7) |
+ (($block[1] & 0x00020000) >> 12) | (($block[1] & 0x02000000) >> 21) |
+ (($block[0] & 0x00020000) >> 16) | (($block[0] & 0x02000000) >> 25) |
+ ($msb[1] << 28) | ($msb[0] << 24)
+ );
+
+ for ($i = 0; $i < 16; $i++) {
+ // start of "the Feistel (F) function" - see the following URL:
+ // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
+ $temp = (($sbox[0][((($block[1] >> 27) & 0x1F) | (($block[1] & 1) << 5)) ^ $keys[$mode][$i][0]]) << 28)
+ | (($sbox[1][(($block[1] & 0x1F800000) >> 23) ^ $keys[$mode][$i][1]]) << 24)
+ | (($sbox[2][(($block[1] & 0x01F80000) >> 19) ^ $keys[$mode][$i][2]]) << 20)
+ | (($sbox[3][(($block[1] & 0x001F8000) >> 15) ^ $keys[$mode][$i][3]]) << 16)
+ | (($sbox[4][(($block[1] & 0x0001F800) >> 11) ^ $keys[$mode][$i][4]]) << 12)
+ | (($sbox[5][(($block[1] & 0x00001F80) >> 7) ^ $keys[$mode][$i][5]]) << 8)
+ | (($sbox[6][(($block[1] & 0x000001F8) >> 3) ^ $keys[$mode][$i][6]]) << 4)
+ | ( $sbox[7][((($block[1] & 0x1F) << 1) | (($block[1] >> 31) & 1)) ^ $keys[$mode][$i][7]]);
+
+ $msb = ($temp >> 31) & 1;
+ $temp &= 0x7FFFFFFF;
+ $newBlock = (($temp & 0x00010000) << 15) | (($temp & 0x02020120) << 5)
+ | (($temp & 0x00001800) << 17) | (($temp & 0x01000000) >> 10)
+ | (($temp & 0x00000008) << 24) | (($temp & 0x00100000) << 6)
+ | (($temp & 0x00000010) << 21) | (($temp & 0x00008000) << 9)
+ | (($temp & 0x00000200) << 12) | (($temp & 0x10000000) >> 27)
+ | (($temp & 0x00000040) << 14) | (($temp & 0x08000000) >> 8)
+ | (($temp & 0x00004000) << 4) | (($temp & 0x00000002) << 16)
+ | (($temp & 0x00442000) >> 6) | (($temp & 0x40800000) >> 15)
+ | (($temp & 0x00000001) << 11) | (($temp & 0x20000000) >> 20)
+ | (($temp & 0x00080000) >> 13) | (($temp & 0x00000004) << 3)
+ | (($temp & 0x04000000) >> 22) | (($temp & 0x00000480) >> 7)
+ | (($temp & 0x00200000) >> 19) | ($msb << 23);
+ // end of "the Feistel (F) function" - $newBlock is F's output
+
+ $temp = $block[1];
+ $block[1] = $block[0] ^ $newBlock;
+ $block[0] = $temp;
+ }
+
+ $msb = array(
+ ($block[0] >> 31) & 1,
+ ($block[1] >> 31) & 1
+ );
+ $block[0] &= 0x7FFFFFFF;
+ $block[1] &= 0x7FFFFFFF;
+
+ $block = array(
+ (($block[0] & 0x01000004) << 7) | (($block[1] & 0x01000004) << 6) |
+ (($block[0] & 0x00010000) << 13) | (($block[1] & 0x00010000) << 12) |
+ (($block[0] & 0x00000100) << 19) | (($block[1] & 0x00000100) << 18) |
+ (($block[0] & 0x00000001) << 25) | (($block[1] & 0x00000001) << 24) |
+ (($block[0] & 0x02000008) >> 2) | (($block[1] & 0x02000008) >> 3) |
+ (($block[0] & 0x00020000) << 4) | (($block[1] & 0x00020000) << 3) |
+ (($block[0] & 0x00000200) << 10) | (($block[1] & 0x00000200) << 9) |
+ (($block[0] & 0x00000002) << 16) | (($block[1] & 0x00000002) << 15) |
+ (($block[0] & 0x04000000) >> 11) | (($block[1] & 0x04000000) >> 12) |
+ (($block[0] & 0x00040000) >> 5) | (($block[1] & 0x00040000) >> 6) |
+ (($block[0] & 0x00000400) << 1) | ( $block[1] & 0x00000400 ) |
+ (($block[0] & 0x08000000) >> 20) | (($block[1] & 0x08000000) >> 21) |
+ (($block[0] & 0x00080000) >> 14) | (($block[1] & 0x00080000) >> 15) |
+ (($block[0] & 0x00000800) >> 8) | (($block[1] & 0x00000800) >> 9)
+ ,
+ (($block[0] & 0x10000040) << 3) | (($block[1] & 0x10000040) << 2) |
+ (($block[0] & 0x00100000) << 9) | (($block[1] & 0x00100000) << 8) |
+ (($block[0] & 0x00001000) << 15) | (($block[1] & 0x00001000) << 14) |
+ (($block[0] & 0x00000010) << 21) | (($block[1] & 0x00000010) << 20) |
+ (($block[0] & 0x20000080) >> 6) | (($block[1] & 0x20000080) >> 7) |
+ ( $block[0] & 0x00200000 ) | (($block[1] & 0x00200000) >> 1) |
+ (($block[0] & 0x00002000) << 6) | (($block[1] & 0x00002000) << 5) |
+ (($block[0] & 0x00000020) << 12) | (($block[1] & 0x00000020) << 11) |
+ (($block[0] & 0x40000000) >> 15) | (($block[1] & 0x40000000) >> 16) |
+ (($block[0] & 0x00400000) >> 9) | (($block[1] & 0x00400000) >> 10) |
+ (($block[0] & 0x00004000) >> 3) | (($block[1] & 0x00004000) >> 4) |
+ (($block[0] & 0x00800000) >> 18) | (($block[1] & 0x00800000) >> 19) |
+ (($block[0] & 0x00008000) >> 12) | (($block[1] & 0x00008000) >> 13) |
+ ($msb[0] << 7) | ($msb[1] << 6)
+ );
+
+ return pack('NN', $block[0], $block[1]);
+ }
+
+ /**
+ * Creates the key schedule.
+ *
+ * @access private
+ * @param String $key
+ * @return Array
+ */
+ function _prepareKey($key)
+ {
+ static $shifts = array( // number of key bits shifted per round
+ 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
+ );
+
+ // pad the key and remove extra characters as appropriate.
+ $key = str_pad(substr($key, 0, 8), 8, chr(0));
+
+ $temp = unpack('Na/Nb', $key);
+ $key = array($temp['a'], $temp['b']);
+ $msb = array(
+ ($key[0] >> 31) & 1,
+ ($key[1] >> 31) & 1
+ );
+ $key[0] &= 0x7FFFFFFF;
+ $key[1] &= 0x7FFFFFFF;
+
+ $key = array(
+ (($key[1] & 0x00000002) << 26) | (($key[1] & 0x00000204) << 17) |
+ (($key[1] & 0x00020408) << 8) | (($key[1] & 0x02040800) >> 1) |
+ (($key[0] & 0x00000002) << 22) | (($key[0] & 0x00000204) << 13) |
+ (($key[0] & 0x00020408) << 4) | (($key[0] & 0x02040800) >> 5) |
+ (($key[1] & 0x04080000) >> 10) | (($key[0] & 0x04080000) >> 14) |
+ (($key[1] & 0x08000000) >> 19) | (($key[0] & 0x08000000) >> 23) |
+ (($key[0] & 0x00000010) >> 1) | (($key[0] & 0x00001000) >> 10) |
+ (($key[0] & 0x00100000) >> 19) | (($key[0] & 0x10000000) >> 28)
+ ,
+ (($key[1] & 0x00000080) << 20) | (($key[1] & 0x00008000) << 11) |
+ (($key[1] & 0x00800000) << 2) | (($key[0] & 0x00000080) << 16) |
+ (($key[0] & 0x00008000) << 7) | (($key[0] & 0x00800000) >> 2) |
+ (($key[1] & 0x00000040) << 13) | (($key[1] & 0x00004000) << 4) |
+ (($key[1] & 0x00400000) >> 5) | (($key[1] & 0x40000000) >> 14) |
+ (($key[0] & 0x00000040) << 9) | ( $key[0] & 0x00004000 ) |
+ (($key[0] & 0x00400000) >> 9) | (($key[0] & 0x40000000) >> 18) |
+ (($key[1] & 0x00000020) << 6) | (($key[1] & 0x00002000) >> 3) |
+ (($key[1] & 0x00200000) >> 12) | (($key[1] & 0x20000000) >> 21) |
+ (($key[0] & 0x00000020) << 2) | (($key[0] & 0x00002000) >> 7) |
+ (($key[0] & 0x00200000) >> 16) | (($key[0] & 0x20000000) >> 25) |
+ (($key[1] & 0x00000010) >> 1) | (($key[1] & 0x00001000) >> 10) |
+ (($key[1] & 0x00100000) >> 19) | (($key[1] & 0x10000000) >> 28) |
+ ($msb[1] << 24) | ($msb[0] << 20)
+ );
+
+ $keys = array();
+ for ($i = 0; $i < 16; $i++) {
+ $key[0] <<= $shifts[$i];
+ $temp = ($key[0] & 0xF0000000) >> 28;
+ $key[0] = ($key[0] | $temp) & 0x0FFFFFFF;
+
+ $key[1] <<= $shifts[$i];
+ $temp = ($key[1] & 0xF0000000) >> 28;
+ $key[1] = ($key[1] | $temp) & 0x0FFFFFFF;
+
+ $temp = array(
+ (($key[1] & 0x00004000) >> 9) | (($key[1] & 0x00000800) >> 7) |
+ (($key[1] & 0x00020000) >> 14) | (($key[1] & 0x00000010) >> 2) |
+ (($key[1] & 0x08000000) >> 26) | (($key[1] & 0x00800000) >> 23)
+ ,
+ (($key[1] & 0x02400000) >> 20) | (($key[1] & 0x00000001) << 4) |
+ (($key[1] & 0x00002000) >> 10) | (($key[1] & 0x00040000) >> 18) |
+ (($key[1] & 0x00000080) >> 6)
+ ,
+ ( $key[1] & 0x00000020 ) | (($key[1] & 0x00000200) >> 5) |
+ (($key[1] & 0x00010000) >> 13) | (($key[1] & 0x01000000) >> 22) |
+ (($key[1] & 0x00000004) >> 1) | (($key[1] & 0x00100000) >> 20)
+ ,
+ (($key[1] & 0x00001000) >> 7) | (($key[1] & 0x00200000) >> 17) |
+ (($key[1] & 0x00000002) << 2) | (($key[1] & 0x00000100) >> 6) |
+ (($key[1] & 0x00008000) >> 14) | (($key[1] & 0x04000000) >> 26)
+ ,
+ (($key[0] & 0x00008000) >> 10) | ( $key[0] & 0x00000010 ) |
+ (($key[0] & 0x02000000) >> 22) | (($key[0] & 0x00080000) >> 17) |
+ (($key[0] & 0x00000200) >> 8) | (($key[0] & 0x00000002) >> 1)
+ ,
+ (($key[0] & 0x04000000) >> 21) | (($key[0] & 0x00010000) >> 12) |
+ (($key[0] & 0x00000020) >> 2) | (($key[0] & 0x00000800) >> 9) |
+ (($key[0] & 0x00800000) >> 22) | (($key[0] & 0x00000100) >> 8)
+ ,
+ (($key[0] & 0x00001000) >> 7) | (($key[0] & 0x00000088) >> 3) |
+ (($key[0] & 0x00020000) >> 14) | (($key[0] & 0x00000001) << 2) |
+ (($key[0] & 0x00400000) >> 21)
+ ,
+ (($key[0] & 0x00000400) >> 5) | (($key[0] & 0x00004000) >> 10) |
+ (($key[0] & 0x00000040) >> 3) | (($key[0] & 0x00100000) >> 18) |
+ (($key[0] & 0x08000000) >> 26) | (($key[0] & 0x01000000) >> 24)
+ );
+
+ $keys[] = $temp;
+ }
+
+ $temp = array(
+ CRYPT_DES_ENCRYPT => $keys,
+ CRYPT_DES_DECRYPT => array_reverse($keys)
+ );
+
+ return $temp;
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1:
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php
new file mode 100644
index 00000000000..c5d314f009f
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php
@@ -0,0 +1,825 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
+ *
+ * Uses hash() or mhash() if available and an internal implementation, otherwise. Currently supports the following:
+ *
+ * md2, md5, md5-96, sha1, sha1-96, sha256, sha384, and sha512
+ *
+ * If {@link Crypt_Hash::setKey() setKey()} is called, {@link Crypt_Hash::hash() hash()} will return the HMAC as opposed to
+ * the hash. If no valid algorithm is provided, sha1 will be used.
+ *
+ * PHP versions 4 and 5
+ *
+ * {@internal The variable names are the same as those in
+ * {@link http://tools.ietf.org/html/rfc2104#section-2 RFC2104}.}}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/Hash.php');
+ *
+ * $hash = new Crypt_Hash('sha1');
+ *
+ * $hash->setKey('abcdefg');
+ *
+ * echo base64_encode($hash->hash('abcdefg'));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Crypt
+ * @package Crypt_Hash
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: Hash.php,v 1.6 2009/11/23 23:37:07 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_Hash::Crypt_Hash()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_HASH_MODE_INTERNAL', 1);
+/**
+ * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+.
+ */
+define('CRYPT_HASH_MODE_MHASH', 2);
+/**
+ * Toggles the hash() implementation, which works on PHP 5.1.2+.
+ */
+define('CRYPT_HASH_MODE_HASH', 3);
+/**#@-*/
+
+/**
+ * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_Hash
+ */
+class Crypt_Hash {
+ /**
+ * Byte-length of compression blocks / key (Internal HMAC)
+ *
+ * @see Crypt_Hash::setAlgorithm()
+ * @var Integer
+ * @access private
+ */
+ var $b;
+
+ /**
+ * Byte-length of hash output (Internal HMAC)
+ *
+ * @see Crypt_Hash::setHash()
+ * @var Integer
+ * @access private
+ */
+ var $l = false;
+
+ /**
+ * Hash Algorithm
+ *
+ * @see Crypt_Hash::setHash()
+ * @var String
+ * @access private
+ */
+ var $hash;
+
+ /**
+ * Key
+ *
+ * @see Crypt_Hash::setKey()
+ * @var String
+ * @access private
+ */
+ var $key = false;
+
+ /**
+ * Outer XOR (Internal HMAC)
+ *
+ * @see Crypt_Hash::setKey()
+ * @var String
+ * @access private
+ */
+ var $opad;
+
+ /**
+ * Inner XOR (Internal HMAC)
+ *
+ * @see Crypt_Hash::setKey()
+ * @var String
+ * @access private
+ */
+ var $ipad;
+
+ /**
+ * Default Constructor.
+ *
+ * @param optional String $hash
+ * @return Crypt_Hash
+ * @access public
+ */
+ function Crypt_Hash($hash = 'sha1')
+ {
+ if ( !defined('CRYPT_HASH_MODE') ) {
+ switch (true) {
+ case extension_loaded('hash'):
+ define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_HASH);
+ break;
+ case extension_loaded('mhash'):
+ define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_MHASH);
+ break;
+ default:
+ define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_INTERNAL);
+ }
+ }
+
+ $this->setHash($hash);
+ }
+
+ /**
+ * Sets the key for HMACs
+ *
+ * Keys can be of any length.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key = false)
+ {
+ $this->key = $key;
+ }
+
+ /**
+ * Sets the hash function.
+ *
+ * @access public
+ * @param String $hash
+ */
+ function setHash($hash)
+ {
+ $hash = strtolower($hash);
+ switch ($hash) {
+ case 'md5-96':
+ case 'sha1-96':
+ $this->l = 12; // 96 / 8 = 12
+ break;
+ case 'md2':
+ case 'md5':
+ $this->l = 16;
+ break;
+ case 'sha1':
+ $this->l = 20;
+ break;
+ case 'sha256':
+ $this->l = 32;
+ break;
+ case 'sha384':
+ $this->l = 48;
+ break;
+ case 'sha512':
+ $this->l = 64;
+ }
+
+ switch ($hash) {
+ case 'md2':
+ $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_HASH && in_array('md2', hash_algos()) ?
+ CRYPT_HASH_MODE_HASH : CRYPT_HASH_MODE_INTERNAL;
+ break;
+ case 'sha384':
+ case 'sha512':
+ $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_MHASH ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE;
+ break;
+ default:
+ $mode = CRYPT_HASH_MODE;
+ }
+
+ switch ( $mode ) {
+ case CRYPT_HASH_MODE_MHASH:
+ switch ($hash) {
+ case 'md5':
+ case 'md5-96':
+ $this->hash = MHASH_MD5;
+ break;
+ case 'sha256':
+ $this->hash = MHASH_SHA256;
+ break;
+ case 'sha1':
+ case 'sha1-96':
+ default:
+ $this->hash = MHASH_SHA1;
+ }
+ return;
+ case CRYPT_HASH_MODE_HASH:
+ switch ($hash) {
+ case 'md5':
+ case 'md5-96':
+ $this->hash = 'md5';
+ return;
+ case 'md2':
+ case 'sha256':
+ case 'sha384':
+ case 'sha512':
+ $this->hash = $hash;
+ return;
+ case 'sha1':
+ case 'sha1-96':
+ default:
+ $this->hash = 'sha1';
+ }
+ return;
+ }
+
+ switch ($hash) {
+ case 'md2':
+ $this->b = 16;
+ $this->hash = array($this, '_md2');
+ break;
+ case 'md5':
+ case 'md5-96':
+ $this->b = 64;
+ $this->hash = array($this, '_md5');
+ break;
+ case 'sha256':
+ $this->b = 64;
+ $this->hash = array($this, '_sha256');
+ break;
+ case 'sha384':
+ case 'sha512':
+ $this->b = 128;
+ $this->hash = array($this, '_sha512');
+ break;
+ case 'sha1':
+ case 'sha1-96':
+ default:
+ $this->b = 64;
+ $this->hash = array($this, '_sha1');
+ }
+
+ $this->ipad = str_repeat(chr(0x36), $this->b);
+ $this->opad = str_repeat(chr(0x5C), $this->b);
+ }
+
+ /**
+ * Compute the HMAC.
+ *
+ * @access public
+ * @param String $text
+ * @return String
+ */
+ function hash($text)
+ {
+ $mode = is_array($this->hash) ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE;
+
+ if (!empty($this->key) || is_string($this->key)) {
+ switch ( $mode ) {
+ case CRYPT_HASH_MODE_MHASH:
+ $output = mhash($this->hash, $text, $this->key);
+ break;
+ case CRYPT_HASH_MODE_HASH:
+ $output = hash_hmac($this->hash, $text, $this->key, true);
+ break;
+ case CRYPT_HASH_MODE_INTERNAL:
+ /* "Applications that use keys longer than B bytes will first hash the key using H and then use the
+ resultant L byte string as the actual key to HMAC."
+
+ -- http://tools.ietf.org/html/rfc2104#section-2 */
+ $key = strlen($this->key) > $this->b ? call_user_func($this->hash, $this->key) : $this->key;
+
+ $key = str_pad($key, $this->b, chr(0)); // step 1
+ $temp = $this->ipad ^ $key; // step 2
+ $temp .= $text; // step 3
+ $temp = call_user_func($this->hash, $temp); // step 4
+ $output = $this->opad ^ $key; // step 5
+ $output.= $temp; // step 6
+ $output = call_user_func($this->hash, $output); // step 7
+ }
+ } else {
+ switch ( $mode ) {
+ case CRYPT_HASH_MODE_MHASH:
+ $output = mhash($this->hash, $text);
+ break;
+ case CRYPT_HASH_MODE_HASH:
+ $output = hash($this->hash, $text, true);
+ break;
+ case CRYPT_HASH_MODE_INTERNAL:
+ $output = call_user_func($this->hash, $text);
+ }
+ }
+
+ return substr($output, 0, $this->l);
+ }
+
+ /**
+ * Returns the hash length (in bytes)
+ *
+ * @access public
+ * @return Integer
+ */
+ function getLength()
+ {
+ return $this->l;
+ }
+
+ /**
+ * Wrapper for MD5
+ *
+ * @access private
+ * @param String $text
+ */
+ function _md5($m)
+ {
+ return pack('H*', md5($m));
+ }
+
+ /**
+ * Wrapper for SHA1
+ *
+ * @access private
+ * @param String $text
+ */
+ function _sha1($m)
+ {
+ return pack('H*', sha1($m));
+ }
+
+ /**
+ * Pure-PHP implementation of MD2
+ *
+ * See {@link http://tools.ietf.org/html/rfc1319 RFC1319}.
+ *
+ * @access private
+ * @param String $text
+ */
+ function _md2($m)
+ {
+ static $s = array(
+ 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6,
+ 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188,
+ 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24,
+ 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251,
+ 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63,
+ 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50,
+ 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165,
+ 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210,
+ 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157,
+ 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27,
+ 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
+ 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
+ 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65,
+ 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123,
+ 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233,
+ 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228,
+ 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
+ 31, 26, 219, 153, 141, 51, 159, 17, 131, 20
+ );
+
+ // Step 1. Append Padding Bytes
+ $pad = 16 - (strlen($m) & 0xF);
+ $m.= str_repeat(chr($pad), $pad);
+
+ $length = strlen($m);
+
+ // Step 2. Append Checksum
+ $c = str_repeat(chr(0), 16);
+ $l = chr(0);
+ for ($i = 0; $i < $length; $i+= 16) {
+ for ($j = 0; $j < 16; $j++) {
+ // RFC1319 incorrectly states that C[j] should be set to S[c xor L]
+ //$c[$j] = chr($s[ord($m[$i + $j] ^ $l)]);
+ // per <http://www.rfc-editor.org/errata_search.php?rfc=1319>, however, C[j] should be set to S[c xor L] xor C[j]
+ $c[$j] = chr($s[ord($m[$i + $j] ^ $l)] ^ ord($c[$j]));
+ $l = $c[$j];
+ }
+ }
+ $m.= $c;
+
+ $length+= 16;
+
+ // Step 3. Initialize MD Buffer
+ $x = str_repeat(chr(0), 48);
+
+ // Step 4. Process Message in 16-Byte Blocks
+ for ($i = 0; $i < $length; $i+= 16) {
+ for ($j = 0; $j < 16; $j++) {
+ $x[$j + 16] = $m[$i + $j];
+ $x[$j + 32] = $x[$j + 16] ^ $x[$j];
+ }
+ $t = chr(0);
+ for ($j = 0; $j < 18; $j++) {
+ for ($k = 0; $k < 48; $k++) {
+ $x[$k] = $t = $x[$k] ^ chr($s[ord($t)]);
+ //$t = $x[$k] = $x[$k] ^ chr($s[ord($t)]);
+ }
+ $t = chr(ord($t) + $j);
+ }
+ }
+
+ // Step 5. Output
+ return substr($x, 0, 16);
+ }
+
+ /**
+ * Pure-PHP implementation of SHA256
+ *
+ * See {@link http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-256_.28a_SHA-2_variant.29_pseudocode SHA-256 (a SHA-2 variant) pseudocode - Wikipedia}.
+ *
+ * @access private
+ * @param String $text
+ */
+ function _sha256($m)
+ {
+ if (extension_loaded('suhosin')) {
+ return pack('H*', sha256($m));
+ }
+
+ // Initialize variables
+ $hash = array(
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
+ );
+ // Initialize table of round constants
+ // (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)
+ static $k = array(
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
+ );
+
+ // Pre-processing
+ $length = strlen($m);
+ // to round to nearest 56 mod 64, we'll add 64 - (length + (64 - 56)) % 64
+ $m.= str_repeat(chr(0), 64 - (($length + 8) & 0x3F));
+ $m[$length] = chr(0x80);
+ // we don't support hashing strings 512MB long
+ $m.= pack('N2', 0, $length << 3);
+
+ // Process the message in successive 512-bit chunks
+ $chunks = str_split($m, 64);
+ foreach ($chunks as $chunk) {
+ $w = array();
+ for ($i = 0; $i < 16; $i++) {
+ extract(unpack('Ntemp', $this->_string_shift($chunk, 4)));
+ $w[] = $temp;
+ }
+
+ // Extend the sixteen 32-bit words into sixty-four 32-bit words
+ for ($i = 16; $i < 64; $i++) {
+ $s0 = $this->_rightRotate($w[$i - 15], 7) ^
+ $this->_rightRotate($w[$i - 15], 18) ^
+ $this->_rightShift( $w[$i - 15], 3);
+ $s1 = $this->_rightRotate($w[$i - 2], 17) ^
+ $this->_rightRotate($w[$i - 2], 19) ^
+ $this->_rightShift( $w[$i - 2], 10);
+ $w[$i] = $this->_add($w[$i - 16], $s0, $w[$i - 7], $s1);
+
+ }
+
+ // Initialize hash value for this chunk
+ list($a, $b, $c, $d, $e, $f, $g, $h) = $hash;
+
+ // Main loop
+ for ($i = 0; $i < 64; $i++) {
+ $s0 = $this->_rightRotate($a, 2) ^
+ $this->_rightRotate($a, 13) ^
+ $this->_rightRotate($a, 22);
+ $maj = ($a & $b) ^
+ ($a & $c) ^
+ ($b & $c);
+ $t2 = $this->_add($s0, $maj);
+
+ $s1 = $this->_rightRotate($e, 6) ^
+ $this->_rightRotate($e, 11) ^
+ $this->_rightRotate($e, 25);
+ $ch = ($e & $f) ^
+ ($this->_not($e) & $g);
+ $t1 = $this->_add($h, $s1, $ch, $k[$i], $w[$i]);
+
+ $h = $g;
+ $g = $f;
+ $f = $e;
+ $e = $this->_add($d, $t1);
+ $d = $c;
+ $c = $b;
+ $b = $a;
+ $a = $this->_add($t1, $t2);
+ }
+
+ // Add this chunk's hash to result so far
+ $hash = array(
+ $this->_add($hash[0], $a),
+ $this->_add($hash[1], $b),
+ $this->_add($hash[2], $c),
+ $this->_add($hash[3], $d),
+ $this->_add($hash[4], $e),
+ $this->_add($hash[5], $f),
+ $this->_add($hash[6], $g),
+ $this->_add($hash[7], $h)
+ );
+ }
+
+ // Produce the final hash value (big-endian)
+ return pack('N8', $hash[0], $hash[1], $hash[2], $hash[3], $hash[4], $hash[5], $hash[6], $hash[7]);
+ }
+
+ /**
+ * Pure-PHP implementation of SHA384 and SHA512
+ *
+ * @access private
+ * @param String $text
+ */
+ function _sha512($m)
+ {
+ if (!class_exists('Math_BigInteger')) {
+ require_once('Math/BigInteger.php');
+ }
+
+ static $init384, $init512, $k;
+
+ if (!isset($k)) {
+ // Initialize variables
+ $init384 = array( // initial values for SHA384
+ 'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939',
+ '67332667ffc00b31', '8eb44a8768581511', 'db0c2e0d64f98fa7', '47b5481dbefa4fa4'
+ );
+ $init512 = array( // initial values for SHA512
+ '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1',
+ '510e527fade682d1', '9b05688c2b3e6c1f', '1f83d9abfb41bd6b', '5be0cd19137e2179'
+ );
+
+ for ($i = 0; $i < 8; $i++) {
+ $init384[$i] = new Math_BigInteger($init384[$i], 16);
+ $init384[$i]->setPrecision(64);
+ $init512[$i] = new Math_BigInteger($init512[$i], 16);
+ $init512[$i]->setPrecision(64);
+ }
+
+ // Initialize table of round constants
+ // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409)
+ $k = array(
+ '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc',
+ '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118',
+ 'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2',
+ '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694',
+ 'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65',
+ '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5',
+ '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4',
+ 'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70',
+ '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df',
+ '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b',
+ 'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30',
+ 'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8',
+ '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8',
+ '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3',
+ '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec',
+ '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b',
+ 'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178',
+ '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b',
+ '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c',
+ '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817'
+ );
+
+ for ($i = 0; $i < 80; $i++) {
+ $k[$i] = new Math_BigInteger($k[$i], 16);
+ }
+ }
+
+ $hash = $this->l == 48 ? $init384 : $init512;
+
+ // Pre-processing
+ $length = strlen($m);
+ // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128
+ $m.= str_repeat(chr(0), 128 - (($length + 16) & 0x7F));
+ $m[$length] = chr(0x80);
+ // we don't support hashing strings 512MB long
+ $m.= pack('N4', 0, 0, 0, $length << 3);
+
+ // Process the message in successive 1024-bit chunks
+ $chunks = str_split($m, 128);
+ foreach ($chunks as $chunk) {
+ $w = array();
+ for ($i = 0; $i < 16; $i++) {
+ $temp = new Math_BigInteger($this->_string_shift($chunk, 8), 256);
+ $temp->setPrecision(64);
+ $w[] = $temp;
+ }
+
+ // Extend the sixteen 32-bit words into eighty 32-bit words
+ for ($i = 16; $i < 80; $i++) {
+ $temp = array(
+ $w[$i - 15]->bitwise_rightRotate(1),
+ $w[$i - 15]->bitwise_rightRotate(8),
+ $w[$i - 15]->bitwise_rightShift(7)
+ );
+ $s0 = $temp[0]->bitwise_xor($temp[1]);
+ $s0 = $s0->bitwise_xor($temp[2]);
+ $temp = array(
+ $w[$i - 2]->bitwise_rightRotate(19),
+ $w[$i - 2]->bitwise_rightRotate(61),
+ $w[$i - 2]->bitwise_rightShift(6)
+ );
+ $s1 = $temp[0]->bitwise_xor($temp[1]);
+ $s1 = $s1->bitwise_xor($temp[2]);
+ $w[$i] = $w[$i - 16]->copy();
+ $w[$i] = $w[$i]->add($s0);
+ $w[$i] = $w[$i]->add($w[$i - 7]);
+ $w[$i] = $w[$i]->add($s1);
+ }
+
+ // Initialize hash value for this chunk
+ $a = $hash[0]->copy();
+ $b = $hash[1]->copy();
+ $c = $hash[2]->copy();
+ $d = $hash[3]->copy();
+ $e = $hash[4]->copy();
+ $f = $hash[5]->copy();
+ $g = $hash[6]->copy();
+ $h = $hash[7]->copy();
+
+ // Main loop
+ for ($i = 0; $i < 80; $i++) {
+ $temp = array(
+ $a->bitwise_rightRotate(28),
+ $a->bitwise_rightRotate(34),
+ $a->bitwise_rightRotate(39)
+ );
+ $s0 = $temp[0]->bitwise_xor($temp[1]);
+ $s0 = $s0->bitwise_xor($temp[2]);
+ $temp = array(
+ $a->bitwise_and($b),
+ $a->bitwise_and($c),
+ $b->bitwise_and($c)
+ );
+ $maj = $temp[0]->bitwise_xor($temp[1]);
+ $maj = $maj->bitwise_xor($temp[2]);
+ $t2 = $s0->add($maj);
+
+ $temp = array(
+ $e->bitwise_rightRotate(14),
+ $e->bitwise_rightRotate(18),
+ $e->bitwise_rightRotate(41)
+ );
+ $s1 = $temp[0]->bitwise_xor($temp[1]);
+ $s1 = $s1->bitwise_xor($temp[2]);
+ $temp = array(
+ $e->bitwise_and($f),
+ $g->bitwise_and($e->bitwise_not())
+ );
+ $ch = $temp[0]->bitwise_xor($temp[1]);
+ $t1 = $h->add($s1);
+ $t1 = $t1->add($ch);
+ $t1 = $t1->add($k[$i]);
+ $t1 = $t1->add($w[$i]);
+
+ $h = $g->copy();
+ $g = $f->copy();
+ $f = $e->copy();
+ $e = $d->add($t1);
+ $d = $c->copy();
+ $c = $b->copy();
+ $b = $a->copy();
+ $a = $t1->add($t2);
+ }
+
+ // Add this chunk's hash to result so far
+ $hash = array(
+ $hash[0]->add($a),
+ $hash[1]->add($b),
+ $hash[2]->add($c),
+ $hash[3]->add($d),
+ $hash[4]->add($e),
+ $hash[5]->add($f),
+ $hash[6]->add($g),
+ $hash[7]->add($h)
+ );
+ }
+
+ // Produce the final hash value (big-endian)
+ // (Crypt_Hash::hash() trims the output for hashes but not for HMACs. as such, we trim the output here)
+ $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() .
+ $hash[4]->toBytes() . $hash[5]->toBytes();
+ if ($this->l != 48) {
+ $temp.= $hash[6]->toBytes() . $hash[7]->toBytes();
+ }
+
+ return $temp;
+ }
+
+ /**
+ * Right Rotate
+ *
+ * @access private
+ * @param Integer $int
+ * @param Integer $amt
+ * @see _sha256()
+ * @return Integer
+ */
+ function _rightRotate($int, $amt)
+ {
+ $invamt = 32 - $amt;
+ $mask = (1 << $invamt) - 1;
+ return (($int << $invamt) & 0xFFFFFFFF) | (($int >> $amt) & $mask);
+ }
+
+ /**
+ * Right Shift
+ *
+ * @access private
+ * @param Integer $int
+ * @param Integer $amt
+ * @see _sha256()
+ * @return Integer
+ */
+ function _rightShift($int, $amt)
+ {
+ $mask = (1 << (32 - $amt)) - 1;
+ return ($int >> $amt) & $mask;
+ }
+
+ /**
+ * Not
+ *
+ * @access private
+ * @param Integer $int
+ * @see _sha256()
+ * @return Integer
+ */
+ function _not($int)
+ {
+ return ~$int & 0xFFFFFFFF;
+ }
+
+ /**
+ * Add
+ *
+ * _sha256() adds multiple unsigned 32-bit integers. Since PHP doesn't support unsigned integers and since the
+ * possibility of overflow exists, care has to be taken. Math_BigInteger() could be used but this should be faster.
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @see _sha256()
+ * @access private
+ */
+ function _add()
+ {
+ static $mod;
+ if (!isset($mod)) {
+ $mod = pow(2, 32);
+ }
+
+ $result = 0;
+ $arguments = func_get_args();
+ foreach ($arguments as $argument) {
+ $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument;
+ }
+
+ return fmod($result, $mod);
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php
new file mode 100644
index 00000000000..390108e0480
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php
@@ -0,0 +1,519 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of RC4.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * Useful resources are as follows:
+ *
+ * - {@link http://www.mozilla.org/projects/security/pki/nss/draft-kaukonen-cipher-arcfour-03.txt ARCFOUR Algorithm}
+ * - {@link http://en.wikipedia.org/wiki/RC4 - Wikipedia: RC4}
+ *
+ * RC4 is also known as ARCFOUR or ARC4. The reason is elaborated upon at Wikipedia. This class is named RC4 and not
+ * ARCFOUR or ARC4 because RC4 is how it is refered to in the SSH1 specification.
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/RC4.php');
+ *
+ * $rc4 = new Crypt_RC4();
+ *
+ * $rc4->setKey('abcdefgh');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $rc4->decrypt($rc4->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Crypt
+ * @package Crypt_RC4
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: RC4.php,v 1.8 2009/06/09 04:00:38 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_RC4::Crypt_RC4()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_RC4_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_RC4_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RC4::_crypt()
+ */
+define('CRYPT_RC4_ENCRYPT', 0);
+define('CRYPT_RC4_DECRYPT', 1);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of RC4.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_RC4
+ */
+class Crypt_RC4 {
+ /**
+ * The Key
+ *
+ * @see Crypt_RC4::setKey()
+ * @var String
+ * @access private
+ */
+ var $key = "\0";
+
+ /**
+ * The Key Stream for encryption
+ *
+ * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object
+ *
+ * @see Crypt_RC4::setKey()
+ * @var Array
+ * @access private
+ */
+ var $encryptStream = false;
+
+ /**
+ * The Key Stream for decryption
+ *
+ * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object
+ *
+ * @see Crypt_RC4::setKey()
+ * @var Array
+ * @access private
+ */
+ var $decryptStream = false;
+
+ /**
+ * The $i and $j indexes for encryption
+ *
+ * @see Crypt_RC4::_crypt()
+ * @var Integer
+ * @access private
+ */
+ var $encryptIndex = 0;
+
+ /**
+ * The $i and $j indexes for decryption
+ *
+ * @see Crypt_RC4::_crypt()
+ * @var Integer
+ * @access private
+ */
+ var $decryptIndex = 0;
+
+ /**
+ * The Encryption Algorithm
+ *
+ * Only used if CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT. Only possible values are MCRYPT_RC4 or MCRYPT_ARCFOUR.
+ *
+ * @see Crypt_RC4::Crypt_RC4()
+ * @var Integer
+ * @access private
+ */
+ var $mode;
+
+ /**
+ * Continuous Buffer status
+ *
+ * @see Crypt_RC4::enableContinuousBuffer()
+ * @var Boolean
+ * @access private
+ */
+ var $continuousBuffer = false;
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used.
+ *
+ * @return Crypt_RC4
+ * @access public
+ */
+ function Crypt_RC4()
+ {
+ if ( !defined('CRYPT_RC4_MODE') ) {
+ switch (true) {
+ case extension_loaded('mcrypt') && (defined('MCRYPT_ARCFOUR') || defined('MCRYPT_RC4')) && in_array('arcfour', mcrypt_list_algorithms()):
+ define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_MCRYPT);
+ break;
+ default:
+ define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_INTERNAL);
+ }
+ }
+
+ switch ( CRYPT_RC4_MODE ) {
+ case CRYPT_RC4_MODE_MCRYPT:
+ switch (true) {
+ case defined('MCRYPT_ARCFOUR'):
+ $this->mode = MCRYPT_ARCFOUR;
+ break;
+ case defined('MCRYPT_RC4');
+ $this->mode = MCRYPT_RC4;
+ }
+ $this->encryptStream = mcrypt_module_open($this->mode, '', MCRYPT_MODE_STREAM, '');
+ $this->decryptStream = mcrypt_module_open($this->mode, '', MCRYPT_MODE_STREAM, '');
+
+ }
+ }
+
+ /**
+ * Sets the key.
+ *
+ * Keys can be between 1 and 256 bytes long. If they are longer then 256 bytes, the first 256 bytes will
+ * be used. If no key is explicitly set, it'll be assumed to be a single null byte.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $this->key = $key;
+
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+ mcrypt_generic_init($this->encryptStream, $this->key, '');
+ mcrypt_generic_init($this->decryptStream, $this->key, '');
+ return;
+ }
+
+ $keyLength = strlen($key);
+ $keyStream = array();
+ for ($i = 0; $i < 256; $i++) {
+ $keyStream[$i] = $i;
+ }
+ $j = 0;
+ for ($i = 0; $i < 256; $i++) {
+ $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255;
+ $temp = $keyStream[$i];
+ $keyStream[$i] = $keyStream[$j];
+ $keyStream[$j] = $temp;
+ }
+
+ $this->encryptIndex = $this->decryptIndex = array(0, 0);
+ $this->encryptStream = $this->decryptStream = $keyStream;
+ }
+
+ /**
+ * Sets the password.
+ *
+ * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+ * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}:
+ * $hash, $salt, $count, $dkLen
+ *
+ * @param String $password
+ * @param optional String $method
+ * @access public
+ */
+ function setPassword($password, $method = 'pbkdf2')
+ {
+ $key = '';
+
+ switch ($method) {
+ default: // 'pbkdf2'
+ list(, , $hash, $salt, $count) = func_get_args();
+ if (!isset($hash)) {
+ $hash = 'sha1';
+ }
+ // WPA and WPA2 use the SSID as the salt
+ if (!isset($salt)) {
+ $salt = 'phpseclib/salt';
+ }
+ // RFC2898#section-4.2 uses 1,000 iterations by default
+ // WPA and WPA2 use 4,096.
+ if (!isset($count)) {
+ $count = 1000;
+ }
+ if (!isset($dkLen)) {
+ $dkLen = 128;
+ }
+
+ if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+ }
+
+ $i = 1;
+ while (strlen($key) < $dkLen) {
+ //$dk.= $this->_pbkdf($password, $salt, $count, $i++);
+ $hmac = new Crypt_Hash();
+ $hmac->setHash($hash);
+ $hmac->setKey($password);
+ $f = $u = $hmac->hash($salt . pack('N', $i++));
+ for ($j = 2; $j <= $count; $j++) {
+ $u = $hmac->hash($u);
+ $f^= $u;
+ }
+ $key.= $f;
+ }
+ }
+
+ $this->setKey(substr($key, 0, $dkLen));
+ }
+
+ /**
+ * Dummy function.
+ *
+ * Some protocols, such as WEP, prepend an "initialization vector" to the key, effectively creating a new key [1].
+ * If you need to use an initialization vector in this manner, feel free to prepend it to the key, yourself, before
+ * calling setKey().
+ *
+ * [1] WEP's initialization vectors (IV's) are used in a somewhat insecure way. Since, in that protocol,
+ * the IV's are relatively easy to predict, an attack described by
+ * {@link http://www.drizzle.com/~aboba/IEEE/rc4_ksaproc.pdf Scott Fluhrer, Itsik Mantin, and Adi Shamir}
+ * can be used to quickly guess at the rest of the key. The following links elaborate:
+ *
+ * {@link http://www.rsa.com/rsalabs/node.asp?id=2009 http://www.rsa.com/rsalabs/node.asp?id=2009}
+ * {@link http://en.wikipedia.org/wiki/Related_key_attack http://en.wikipedia.org/wiki/Related_key_attack}
+ *
+ * @param String $iv
+ * @see Crypt_RC4::setKey()
+ * @access public
+ */
+ function setIV($iv)
+ {
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * @see Crypt_RC4::_crypt()
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ return $this->_crypt($plaintext, CRYPT_RC4_ENCRYPT);
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
+ * Atleast if the continuous buffer is disabled.
+ *
+ * @see Crypt_RC4::_crypt()
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ return $this->_crypt($ciphertext, CRYPT_RC4_DECRYPT);
+ }
+
+ /**
+ * Encrypts or decrypts a message.
+ *
+ * @see Crypt_RC4::encrypt()
+ * @see Crypt_RC4::decrypt()
+ * @access private
+ * @param String $text
+ * @param Integer $mode
+ */
+ function _crypt($text, $mode)
+ {
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+ $keyStream = $mode == CRYPT_RC4_ENCRYPT ? 'encryptStream' : 'decryptStream';
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->$keyStream, $this->key, '');
+ }
+
+ return mcrypt_generic($this->$keyStream, $text);
+ }
+
+ if ($this->encryptStream === false) {
+ $this->setKey($this->key);
+ }
+
+ switch ($mode) {
+ case CRYPT_RC4_ENCRYPT:
+ $keyStream = $this->encryptStream;
+ list($i, $j) = $this->encryptIndex;
+ break;
+ case CRYPT_RC4_DECRYPT:
+ $keyStream = $this->decryptStream;
+ list($i, $j) = $this->decryptIndex;
+ }
+
+ $newText = '';
+ for ($k = 0; $k < strlen($text); $k++) {
+ $i = ($i + 1) & 255;
+ $j = ($j + $keyStream[$i]) & 255;
+ $temp = $keyStream[$i];
+ $keyStream[$i] = $keyStream[$j];
+ $keyStream[$j] = $temp;
+ $temp = $keyStream[($keyStream[$i] + $keyStream[$j]) & 255];
+ $newText.= chr(ord($text[$k]) ^ $temp);
+ }
+
+ if ($this->continuousBuffer) {
+ switch ($mode) {
+ case CRYPT_RC4_ENCRYPT:
+ $this->encryptStream = $keyStream;
+ $this->encryptIndex = array($i, $j);
+ break;
+ case CRYPT_RC4_DECRYPT:
+ $this->decryptStream = $keyStream;
+ $this->decryptIndex = array($i, $j);
+ }
+ }
+
+ return $newText;
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets
+ * will yield different outputs:
+ *
+ * <code>
+ * echo $rc4->encrypt(substr($plaintext, 0, 8));
+ * echo $rc4->encrypt(substr($plaintext, 8, 8));
+ * </code>
+ * <code>
+ * echo $rc4->encrypt($plaintext);
+ * </code>
+ *
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
+ * another, as demonstrated with the following:
+ *
+ * <code>
+ * $rc4->encrypt(substr($plaintext, 0, 8));
+ * echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ * <code>
+ * echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ *
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
+ *
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
+ * however, they are also less intuitive and more likely to cause you problems.
+ *
+ * @see Crypt_RC4::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+ mcrypt_generic_init($this->encryptStream, $this->key, '');
+ mcrypt_generic_init($this->decryptStream, $this->key, '');
+ }
+
+ $this->continuousBuffer = true;
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_RC4::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_INTERNAL ) {
+ $this->encryptIndex = $this->decryptIndex = array(0, 0);
+ $this->encryptStream = $this->decryptStream = false;
+ }
+
+ $this->continuousBuffer = false;
+ }
+
+ /**
+ * Dummy function.
+ *
+ * Since RC4 is a stream cipher and not a block cipher, no padding is necessary. The only reason this function is
+ * included is so that you can switch between a block cipher and a stream cipher transparently.
+ *
+ * @see Crypt_RC4::disablePadding()
+ * @access public
+ */
+ function enablePadding()
+ {
+ }
+
+ /**
+ * Dummy function.
+ *
+ * @see Crypt_RC4::enablePadding()
+ * @access public
+ */
+ function disablePadding()
+ {
+ }
+
+ /**
+ * Class destructor.
+ *
+ * Will be called, automatically, if you're using PHP5. If you're using PHP4, call it yourself. Only really
+ * needs to be called if mcrypt is being used.
+ *
+ * @access public
+ */
+ function __destruct()
+ {
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+ $this->_closeMCrypt();
+ }
+ }
+
+ /**
+ * Properly close the MCrypt objects.
+ *
+ * @access prviate
+ */
+ function _closeMCrypt()
+ {
+ mcrypt_module_close($this->encryptStream);
+ mcrypt_module_close($this->decryptStream);
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1: \ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php
new file mode 100644
index 00000000000..db1ba1581b6
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php
@@ -0,0 +1,2646 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP PKCS#1 (v2.1) compliant implementation of RSA.
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's an example of how to encrypt and decrypt text with this library:
+ * <code>
+ * <?php
+ * include('Crypt/RSA.php');
+ *
+ * $rsa = new Crypt_RSA();
+ * extract($rsa->createKey());
+ *
+ * $plaintext = 'terrafrost';
+ *
+ * $rsa->loadKey($privatekey);
+ * $ciphertext = $rsa->encrypt($plaintext);
+ *
+ * $rsa->loadKey($publickey);
+ * echo $rsa->decrypt($ciphertext);
+ * ?>
+ * </code>
+ *
+ * Here's an example of how to create signatures and verify signatures with this library:
+ * <code>
+ * <?php
+ * include('Crypt/RSA.php');
+ *
+ * $rsa = new Crypt_RSA();
+ * extract($rsa->createKey());
+ *
+ * $plaintext = 'terrafrost';
+ *
+ * $rsa->loadKey($privatekey);
+ * $signature = $rsa->sign($plaintext);
+ *
+ * $rsa->loadKey($publickey);
+ * echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Crypt
+ * @package Crypt_RSA
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMIX Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: RSA.php,v 1.19 2010/09/12 21:58:54 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Math_BigInteger
+ */
+if (!class_exists('Math_BigInteger')) {
+ require_once('Math/BigInteger.php');
+}
+
+/**
+ * Include Crypt_Random
+ */
+// the class_exists() will only be called if the crypt_random_string function hasn't been defined and
+// will trigger a call to __autoload() if you're wanting to auto-load classes
+// call function_exists() a second time to stop the require_once from being called outside
+// of the auto loader
+if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) {
+ require_once('Crypt/Random.php');
+}
+
+/**
+ * Include Crypt_Hash
+ */
+if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+}
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::encrypt()
+ * @see Crypt_RSA::decrypt()
+ */
+/**
+ * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding}
+ * (OAEP) for encryption / decryption.
+ *
+ * Uses sha1 by default.
+ *
+ * @see Crypt_RSA::setHash()
+ * @see Crypt_RSA::setMGFHash()
+ */
+define('CRYPT_RSA_ENCRYPTION_OAEP', 1);
+/**
+ * Use PKCS#1 padding.
+ *
+ * Although CRYPT_RSA_ENCRYPTION_OAEP offers more security, including PKCS#1 padding is necessary for purposes of backwards
+ * compatability with protocols (like SSH-1) written before OAEP's introduction.
+ */
+define('CRYPT_RSA_ENCRYPTION_PKCS1', 2);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::sign()
+ * @see Crypt_RSA::verify()
+ * @see Crypt_RSA::setHash()
+ */
+/**
+ * Use the Probabilistic Signature Scheme for signing
+ *
+ * Uses sha1 by default.
+ *
+ * @see Crypt_RSA::setSaltLength()
+ * @see Crypt_RSA::setMGFHash()
+ */
+define('CRYPT_RSA_SIGNATURE_PSS', 1);
+/**
+ * Use the PKCS#1 scheme by default.
+ *
+ * Although CRYPT_RSA_SIGNATURE_PSS offers more security, including PKCS#1 signing is necessary for purposes of backwards
+ * compatability with protocols (like SSH-2) written before PSS's introduction.
+ */
+define('CRYPT_RSA_SIGNATURE_PKCS1', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RSA::createKey()
+ */
+/**
+ * ASN1 Integer
+ */
+define('CRYPT_RSA_ASN1_INTEGER', 2);
+/**
+ * ASN1 Bit String
+ */
+define('CRYPT_RSA_ASN1_BITSTRING', 3);
+/**
+ * ASN1 Sequence (with the constucted bit set)
+ */
+define('CRYPT_RSA_ASN1_SEQUENCE', 48);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RSA::Crypt_RSA()
+ */
+/**
+ * To use the pure-PHP implementation
+ */
+define('CRYPT_RSA_MODE_INTERNAL', 1);
+/**
+ * To use the OpenSSL library
+ *
+ * (if enabled; otherwise, the internal implementation will be used)
+ */
+define('CRYPT_RSA_MODE_OPENSSL', 2);
+/**#@-*/
+
+/**
+ * Default openSSL configuration file.
+ */
+define('CRYPT_RSA_OPENSSL_CONFIG', dirname(__FILE__) . '/../openssl.cnf');
+
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::createKey()
+ * @see Crypt_RSA::setPrivateKeyFormat()
+ */
+/**
+ * PKCS#1 formatted private key
+ *
+ * Used by OpenSSH
+ */
+define('CRYPT_RSA_PRIVATE_FORMAT_PKCS1', 0);
+/**
+ * PuTTY formatted private key
+ */
+define('CRYPT_RSA_PRIVATE_FORMAT_PUTTY', 1);
+/**
+ * XML formatted private key
+ */
+define('CRYPT_RSA_PRIVATE_FORMAT_XML', 2);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::createKey()
+ * @see Crypt_RSA::setPublicKeyFormat()
+ */
+/**
+ * Raw public key
+ *
+ * An array containing two Math_BigInteger objects.
+ *
+ * The exponent can be indexed with any of the following:
+ *
+ * 0, e, exponent, publicExponent
+ *
+ * The modulus can be indexed with any of the following:
+ *
+ * 1, n, modulo, modulus
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_RAW', 3);
+/**
+ * PKCS#1 formatted public key (raw)
+ *
+ * Used by File/X509.php
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW', 4);
+/**
+ * XML formatted public key
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_XML', 5);
+/**
+ * OpenSSH formatted public key
+ *
+ * Place in $HOME/.ssh/authorized_keys
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_OPENSSH', 6);
+/**
+ * PKCS#1 formatted public key (encapsulated)
+ *
+ * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1', 7);
+/**#@-*/
+
+/**
+ * Pure-PHP PKCS#1 compliant implementation of RSA.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_RSA
+ */
+class Crypt_RSA {
+ /**
+ * Precomputed Zero
+ *
+ * @var Array
+ * @access private
+ */
+ var $zero;
+
+ /**
+ * Precomputed One
+ *
+ * @var Array
+ * @access private
+ */
+ var $one;
+
+ /**
+ * Private Key Format
+ *
+ * @var Integer
+ * @access private
+ */
+ var $privateKeyFormat = CRYPT_RSA_PRIVATE_FORMAT_PKCS1;
+
+ /**
+ * Public Key Format
+ *
+ * @var Integer
+ * @access public
+ */
+ var $publicKeyFormat = CRYPT_RSA_PUBLIC_FORMAT_PKCS1;
+
+ /**
+ * Modulus (ie. n)
+ *
+ * @var Math_BigInteger
+ * @access private
+ */
+ var $modulus;
+
+ /**
+ * Modulus length
+ *
+ * @var Math_BigInteger
+ * @access private
+ */
+ var $k;
+
+ /**
+ * Exponent (ie. e or d)
+ *
+ * @var Math_BigInteger
+ * @access private
+ */
+ var $exponent;
+
+ /**
+ * Primes for Chinese Remainder Theorem (ie. p and q)
+ *
+ * @var Array
+ * @access private
+ */
+ var $primes;
+
+ /**
+ * Exponents for Chinese Remainder Theorem (ie. dP and dQ)
+ *
+ * @var Array
+ * @access private
+ */
+ var $exponents;
+
+ /**
+ * Coefficients for Chinese Remainder Theorem (ie. qInv)
+ *
+ * @var Array
+ * @access private
+ */
+ var $coefficients;
+
+ /**
+ * Hash name
+ *
+ * @var String
+ * @access private
+ */
+ var $hashName;
+
+ /**
+ * Hash function
+ *
+ * @var Crypt_Hash
+ * @access private
+ */
+ var $hash;
+
+ /**
+ * Length of hash function output
+ *
+ * @var Integer
+ * @access private
+ */
+ var $hLen;
+
+ /**
+ * Length of salt
+ *
+ * @var Integer
+ * @access private
+ */
+ var $sLen;
+
+ /**
+ * Hash function for the Mask Generation Function
+ *
+ * @var Crypt_Hash
+ * @access private
+ */
+ var $mgfHash;
+
+ /**
+ * Length of MGF hash function output
+ *
+ * @var Integer
+ * @access private
+ */
+ var $mgfHLen;
+
+ /**
+ * Encryption mode
+ *
+ * @var Integer
+ * @access private
+ */
+ var $encryptionMode = CRYPT_RSA_ENCRYPTION_OAEP;
+
+ /**
+ * Signature mode
+ *
+ * @var Integer
+ * @access private
+ */
+ var $signatureMode = CRYPT_RSA_SIGNATURE_PSS;
+
+ /**
+ * Public Exponent
+ *
+ * @var Mixed
+ * @access private
+ */
+ var $publicExponent = false;
+
+ /**
+ * Password
+ *
+ * @var String
+ * @access private
+ */
+ var $password = false;
+
+ /**
+ * Components
+ *
+ * For use with parsing XML formatted keys. PHP's XML Parser functions use utilized - instead of PHP's DOM functions -
+ * because PHP's XML Parser functions work on PHP4 whereas PHP's DOM functions - although surperior - don't.
+ *
+ * @see Crypt_RSA::_start_element_handler()
+ * @var Array
+ * @access private
+ */
+ var $components = array();
+
+ /**
+ * Current String
+ *
+ * For use with parsing XML formatted keys.
+ *
+ * @see Crypt_RSA::_character_handler()
+ * @see Crypt_RSA::_stop_element_handler()
+ * @var Mixed
+ * @access private
+ */
+ var $current;
+
+ /**
+ * OpenSSL configuration file name.
+ *
+ * Set to NULL to use system configuration file.
+ * @see Crypt_RSA::createKey()
+ * @var Mixed
+ * @Access public
+ */
+ var $configFile;
+
+ /**
+ * The constructor
+ *
+ * If you want to make use of the openssl extension, you'll need to set the mode manually, yourself. The reason
+ * Crypt_RSA doesn't do it is because OpenSSL doesn't fail gracefully. openssl_pkey_new(), in particular, requires
+ * openssl.cnf be present somewhere and, unfortunately, the only real way to find out is too late.
+ *
+ * @return Crypt_RSA
+ * @access public
+ */
+ function Crypt_RSA()
+ {
+ $this->configFile = CRYPT_RSA_OPENSSL_CONFIG;
+
+ if ( !defined('CRYPT_RSA_MODE') ) {
+ switch (true) {
+ case extension_loaded('openssl') && version_compare(PHP_VERSION, '4.2.0', '>='):
+ define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_OPENSSL);
+ break;
+ default:
+ define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_INTERNAL);
+ }
+ }
+
+ if (!defined('CRYPT_RSA_COMMENT')) {
+ define('CRYPT_RSA_COMMENT', 'phpseclib-generated-key');
+ }
+
+ $this->zero = new Math_BigInteger();
+ $this->one = new Math_BigInteger(1);
+
+ $this->hash = new Crypt_Hash('sha1');
+ $this->hLen = $this->hash->getLength();
+ $this->hashName = 'sha1';
+ $this->mgfHash = new Crypt_Hash('sha1');
+ $this->mgfHLen = $this->mgfHash->getLength();
+ }
+
+ /**
+ * Create public / private key pair
+ *
+ * Returns an array with the following three elements:
+ * - 'privatekey': The private key.
+ * - 'publickey': The public key.
+ * - 'partialkey': A partially computed key (if the execution time exceeded $timeout).
+ * Will need to be passed back to Crypt_RSA::createKey() as the third parameter for further processing.
+ *
+ * @access public
+ * @param optional Integer $bits
+ * @param optional Integer $timeout
+ * @param optional Math_BigInteger $p
+ */
+ function createKey($bits = 1024, $timeout = false, $partial = array())
+ {
+ if (!defined('CRYPT_RSA_EXPONENT')) {
+ // http://en.wikipedia.org/wiki/65537_%28number%29
+ define('CRYPT_RSA_EXPONENT', '65537');
+ }
+ // per <http://cseweb.ucsd.edu/~hovav/dist/survey.pdf#page=5>, this number ought not result in primes smaller
+ // than 256 bits. as a consequence if the key you're trying to create is 1024 bits and you've set CRYPT_RSA_SMALLEST_PRIME
+ // to 384 bits then you're going to get a 384 bit prime and a 640 bit prime (384 + 1024 % 384). at least if
+ // CRYPT_RSA_MODE is set to CRYPT_RSA_MODE_INTERNAL. if CRYPT_RSA_MODE is set to CRYPT_RSA_MODE_OPENSSL then
+ // CRYPT_RSA_SMALLEST_PRIME is ignored (ie. multi-prime RSA support is more intended as a way to speed up RSA key
+ // generation when there's a chance neither gmp nor OpenSSL are installed)
+ if (!defined('CRYPT_RSA_SMALLEST_PRIME')) {
+ define('CRYPT_RSA_SMALLEST_PRIME', 4096);
+ }
+
+ // OpenSSL uses 65537 as the exponent and requires RSA keys be 384 bits minimum
+ if ( CRYPT_RSA_MODE == CRYPT_RSA_MODE_OPENSSL && $bits >= 384 && CRYPT_RSA_EXPONENT == 65537) {
+ $config = array();
+ if (isset($this->configFile)) {
+ $config['config'] = $this->configFile;
+ }
+ $rsa = openssl_pkey_new(array('private_key_bits' => $bits) + $config);
+ openssl_pkey_export($rsa, $privatekey, NULL, $config);
+ $publickey = openssl_pkey_get_details($rsa);
+ $publickey = $publickey['key'];
+
+ $privatekey = call_user_func_array(array($this, '_convertPrivateKey'), array_values($this->_parseKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1)));
+ $publickey = call_user_func_array(array($this, '_convertPublicKey'), array_values($this->_parseKey($publickey, CRYPT_RSA_PUBLIC_FORMAT_PKCS1)));
+
+ // clear the buffer of error strings stemming from a minimalistic openssl.cnf
+ while (openssl_error_string() !== false);
+
+ return array(
+ 'privatekey' => $privatekey,
+ 'publickey' => $publickey,
+ 'partialkey' => false
+ );
+ }
+
+ static $e;
+ if (!isset($e)) {
+ $e = new Math_BigInteger(CRYPT_RSA_EXPONENT);
+ }
+
+ extract($this->_generateMinMax($bits));
+ $absoluteMin = $min;
+ $temp = $bits >> 1; // divide by two to see how many bits P and Q would be
+ if ($temp > CRYPT_RSA_SMALLEST_PRIME) {
+ $num_primes = floor($bits / CRYPT_RSA_SMALLEST_PRIME);
+ $temp = CRYPT_RSA_SMALLEST_PRIME;
+ } else {
+ $num_primes = 2;
+ }
+ extract($this->_generateMinMax($temp + $bits % $temp));
+ $finalMax = $max;
+ extract($this->_generateMinMax($temp));
+
+ $generator = new Math_BigInteger();
+
+ $n = $this->one->copy();
+ if (!empty($partial)) {
+ extract(unserialize($partial));
+ } else {
+ $exponents = $coefficients = $primes = array();
+ $lcm = array(
+ 'top' => $this->one->copy(),
+ 'bottom' => false
+ );
+ }
+
+ $start = time();
+ $i0 = count($primes) + 1;
+
+ do {
+ for ($i = $i0; $i <= $num_primes; $i++) {
+ if ($timeout !== false) {
+ $timeout-= time() - $start;
+ $start = time();
+ if ($timeout <= 0) {
+ return array(
+ 'privatekey' => '',
+ 'publickey' => '',
+ 'partialkey' => serialize(array(
+ 'primes' => $primes,
+ 'coefficients' => $coefficients,
+ 'lcm' => $lcm,
+ 'exponents' => $exponents
+ ))
+ );
+ }
+ }
+
+ if ($i == $num_primes) {
+ list($min, $temp) = $absoluteMin->divide($n);
+ if (!$temp->equals($this->zero)) {
+ $min = $min->add($this->one); // ie. ceil()
+ }
+ $primes[$i] = $generator->randomPrime($min, $finalMax, $timeout);
+ } else {
+ $primes[$i] = $generator->randomPrime($min, $max, $timeout);
+ }
+
+ if ($primes[$i] === false) { // if we've reached the timeout
+ if (count($primes) > 1) {
+ $partialkey = '';
+ } else {
+ array_pop($primes);
+ $partialkey = serialize(array(
+ 'primes' => $primes,
+ 'coefficients' => $coefficients,
+ 'lcm' => $lcm,
+ 'exponents' => $exponents
+ ));
+ }
+
+ return array(
+ 'privatekey' => '',
+ 'publickey' => '',
+ 'partialkey' => $partialkey
+ );
+ }
+
+ // the first coefficient is calculated differently from the rest
+ // ie. instead of being $primes[1]->modInverse($primes[2]), it's $primes[2]->modInverse($primes[1])
+ if ($i > 2) {
+ $coefficients[$i] = $n->modInverse($primes[$i]);
+ }
+
+ $n = $n->multiply($primes[$i]);
+
+ $temp = $primes[$i]->subtract($this->one);
+
+ // textbook RSA implementations use Euler's totient function instead of the least common multiple.
+ // see http://en.wikipedia.org/wiki/Euler%27s_totient_function
+ $lcm['top'] = $lcm['top']->multiply($temp);
+ $lcm['bottom'] = $lcm['bottom'] === false ? $temp : $lcm['bottom']->gcd($temp);
+
+ $exponents[$i] = $e->modInverse($temp);
+ }
+
+ list($lcm) = $lcm['top']->divide($lcm['bottom']);
+ $gcd = $lcm->gcd($e);
+ $i0 = 1;
+ } while (!$gcd->equals($this->one));
+
+ $d = $e->modInverse($lcm);
+
+ $coefficients[2] = $primes[2]->modInverse($primes[1]);
+
+ // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.2>:
+ // RSAPrivateKey ::= SEQUENCE {
+ // version Version,
+ // modulus INTEGER, -- n
+ // publicExponent INTEGER, -- e
+ // privateExponent INTEGER, -- d
+ // prime1 INTEGER, -- p
+ // prime2 INTEGER, -- q
+ // exponent1 INTEGER, -- d mod (p-1)
+ // exponent2 INTEGER, -- d mod (q-1)
+ // coefficient INTEGER, -- (inverse of q) mod p
+ // otherPrimeInfos OtherPrimeInfos OPTIONAL
+ // }
+
+ return array(
+ 'privatekey' => $this->_convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients),
+ 'publickey' => $this->_convertPublicKey($n, $e),
+ 'partialkey' => false
+ );
+ }
+
+ /**
+ * Convert a private key to the appropriate format.
+ *
+ * @access private
+ * @see setPrivateKeyFormat()
+ * @param String $RSAPrivateKey
+ * @return String
+ */
+ function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients)
+ {
+ $num_primes = count($primes);
+ $raw = array(
+ 'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi
+ 'modulus' => $n->toBytes(true),
+ 'publicExponent' => $e->toBytes(true),
+ 'privateExponent' => $d->toBytes(true),
+ 'prime1' => $primes[1]->toBytes(true),
+ 'prime2' => $primes[2]->toBytes(true),
+ 'exponent1' => $exponents[1]->toBytes(true),
+ 'exponent2' => $exponents[2]->toBytes(true),
+ 'coefficient' => $coefficients[2]->toBytes(true)
+ );
+
+ // if the format in question does not support multi-prime rsa and multi-prime rsa was used,
+ // call _convertPublicKey() instead.
+ switch ($this->privateKeyFormat) {
+ case CRYPT_RSA_PRIVATE_FORMAT_XML:
+ if ($num_primes != 2) {
+ return false;
+ }
+ return "<RSAKeyValue>\r\n" .
+ ' <Modulus>' . base64_encode($raw['modulus']) . "</Modulus>\r\n" .
+ ' <Exponent>' . base64_encode($raw['publicExponent']) . "</Exponent>\r\n" .
+ ' <P>' . base64_encode($raw['prime1']) . "</P>\r\n" .
+ ' <Q>' . base64_encode($raw['prime2']) . "</Q>\r\n" .
+ ' <DP>' . base64_encode($raw['exponent1']) . "</DP>\r\n" .
+ ' <DQ>' . base64_encode($raw['exponent2']) . "</DQ>\r\n" .
+ ' <InverseQ>' . base64_encode($raw['coefficient']) . "</InverseQ>\r\n" .
+ ' <D>' . base64_encode($raw['privateExponent']) . "</D>\r\n" .
+ '</RSAKeyValue>';
+ break;
+ case CRYPT_RSA_PRIVATE_FORMAT_PUTTY:
+ if ($num_primes != 2) {
+ return false;
+ }
+ $key = "PuTTY-User-Key-File-2: ssh-rsa\r\nEncryption: ";
+ $encryption = (!empty($this->password) || is_string($this->password)) ? 'aes256-cbc' : 'none';
+ $key.= $encryption;
+ $key.= "\r\nComment: " . CRYPT_RSA_COMMENT . "\r\n";
+ $public = pack('Na*Na*Na*',
+ strlen('ssh-rsa'), 'ssh-rsa', strlen($raw['publicExponent']), $raw['publicExponent'], strlen($raw['modulus']), $raw['modulus']
+ );
+ $source = pack('Na*Na*Na*Na*',
+ strlen('ssh-rsa'), 'ssh-rsa', strlen($encryption), $encryption,
+ strlen(CRYPT_RSA_COMMENT), CRYPT_RSA_COMMENT, strlen($public), $public
+ );
+ $public = base64_encode($public);
+ $key.= "Public-Lines: " . ((strlen($public) + 32) >> 6) . "\r\n";
+ $key.= chunk_split($public, 64);
+ $private = pack('Na*Na*Na*Na*',
+ strlen($raw['privateExponent']), $raw['privateExponent'], strlen($raw['prime1']), $raw['prime1'],
+ strlen($raw['prime2']), $raw['prime2'], strlen($raw['coefficient']), $raw['coefficient']
+ );
+ if (empty($this->password) && !is_string($this->password)) {
+ $source.= pack('Na*', strlen($private), $private);
+ $hashkey = 'putty-private-key-file-mac-key';
+ } else {
+ $private.= crypt_random_string(16 - (strlen($private) & 15));
+ $source.= pack('Na*', strlen($private), $private);
+ if (!class_exists('Crypt_AES')) {
+ require_once('Crypt/AES.php');
+ }
+ $sequence = 0;
+ $symkey = '';
+ while (strlen($symkey) < 32) {
+ $temp = pack('Na*', $sequence++, $this->password);
+ $symkey.= pack('H*', sha1($temp));
+ }
+ $symkey = substr($symkey, 0, 32);
+ $crypto = new Crypt_AES();
+
+ $crypto->setKey($symkey);
+ $crypto->disablePadding();
+ $private = $crypto->encrypt($private);
+ $hashkey = 'putty-private-key-file-mac-key' . $this->password;
+ }
+
+ $private = base64_encode($private);
+ $key.= 'Private-Lines: ' . ((strlen($private) + 32) >> 6) . "\r\n";
+ $key.= chunk_split($private, 64);
+ if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+ }
+ $hash = new Crypt_Hash('sha1');
+ $hash->setKey(pack('H*', sha1($hashkey)));
+ $key.= 'Private-MAC: ' . bin2hex($hash->hash($source)) . "\r\n";
+
+ return $key;
+ default: // eg. CRYPT_RSA_PRIVATE_FORMAT_PKCS1
+ $components = array();
+ foreach ($raw as $name => $value) {
+ $components[$name] = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value);
+ }
+
+ $RSAPrivateKey = implode('', $components);
+
+ if ($num_primes > 2) {
+ $OtherPrimeInfos = '';
+ for ($i = 3; $i <= $num_primes; $i++) {
+ // OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
+ //
+ // OtherPrimeInfo ::= SEQUENCE {
+ // prime INTEGER, -- ri
+ // exponent INTEGER, -- di
+ // coefficient INTEGER -- ti
+ // }
+ $OtherPrimeInfo = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true));
+ $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true));
+ $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true));
+ $OtherPrimeInfos.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo);
+ }
+ $RSAPrivateKey.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos);
+ }
+
+ $RSAPrivateKey = pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey);
+
+ if (!empty($this->password) || is_string($this->password)) {
+ $iv = crypt_random_string(8);
+ $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key
+ $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
+ if (!class_exists('Crypt_TripleDES')) {
+ require_once('Crypt/TripleDES.php');
+ }
+ $des = new Crypt_TripleDES();
+ $des->setKey($symkey);
+ $des->setIV($iv);
+ $iv = strtoupper(bin2hex($iv));
+ $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
+ "Proc-Type: 4,ENCRYPTED\r\n" .
+ "DEK-Info: DES-EDE3-CBC,$iv\r\n" .
+ "\r\n" .
+ chunk_split(base64_encode($des->encrypt($RSAPrivateKey)), 64) .
+ '-----END RSA PRIVATE KEY-----';
+ } else {
+ $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
+ chunk_split(base64_encode($RSAPrivateKey), 64) .
+ '-----END RSA PRIVATE KEY-----';
+ }
+
+ return $RSAPrivateKey;
+ }
+ }
+
+ /**
+ * Convert a public key to the appropriate format
+ *
+ * @access private
+ * @see setPublicKeyFormat()
+ * @param String $RSAPrivateKey
+ * @return String
+ */
+ function _convertPublicKey($n, $e)
+ {
+ $modulus = $n->toBytes(true);
+ $publicExponent = $e->toBytes(true);
+
+ switch ($this->publicKeyFormat) {
+ case CRYPT_RSA_PUBLIC_FORMAT_RAW:
+ return array('e' => $e->copy(), 'n' => $n->copy());
+ case CRYPT_RSA_PUBLIC_FORMAT_XML:
+ return "<RSAKeyValue>\r\n" .
+ ' <Modulus>' . base64_encode($modulus) . "</Modulus>\r\n" .
+ ' <Exponent>' . base64_encode($publicExponent) . "</Exponent>\r\n" .
+ '</RSAKeyValue>';
+ break;
+ case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH:
+ // from <http://tools.ietf.org/html/rfc4253#page-15>:
+ // string "ssh-rsa"
+ // mpint e
+ // mpint n
+ $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus);
+ $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . CRYPT_RSA_COMMENT;
+
+ return $RSAPublicKey;
+ default: // eg. CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW or CRYPT_RSA_PUBLIC_FORMAT_PKCS1
+ // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.1>:
+ // RSAPublicKey ::= SEQUENCE {
+ // modulus INTEGER, -- n
+ // publicExponent INTEGER -- e
+ // }
+ $components = array(
+ 'modulus' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($modulus)), $modulus),
+ 'publicExponent' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($publicExponent)), $publicExponent)
+ );
+
+ $RSAPublicKey = pack('Ca*a*a*',
+ CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])),
+ $components['modulus'], $components['publicExponent']
+ );
+
+ if ($this->publicKeyFormat == CRYPT_RSA_PUBLIC_FORMAT_PKCS1) {
+ // sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.
+ $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
+ $RSAPublicKey = chr(0) . $RSAPublicKey;
+ $RSAPublicKey = chr(3) . $this->_encodeLength(strlen($RSAPublicKey)) . $RSAPublicKey;
+
+ $RSAPublicKey = pack('Ca*a*',
+ CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($rsaOID . $RSAPublicKey)), $rsaOID . $RSAPublicKey
+ );
+ }
+
+ $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
+ chunk_split(base64_encode($RSAPublicKey), 64) .
+ '-----END PUBLIC KEY-----';
+
+ return $RSAPublicKey;
+ }
+ }
+
+ /**
+ * Break a public or private key down into its constituant components
+ *
+ * @access private
+ * @see _convertPublicKey()
+ * @see _convertPrivateKey()
+ * @param String $key
+ * @param Integer $type
+ * @return Array
+ */
+ function _parseKey($key, $type)
+ {
+ if ($type != CRYPT_RSA_PUBLIC_FORMAT_RAW && !is_string($key)) {
+ return false;
+ }
+
+ switch ($type) {
+ case CRYPT_RSA_PUBLIC_FORMAT_RAW:
+ if (!is_array($key)) {
+ return false;
+ }
+ $components = array();
+ switch (true) {
+ case isset($key['e']):
+ $components['publicExponent'] = $key['e']->copy();
+ break;
+ case isset($key['exponent']):
+ $components['publicExponent'] = $key['exponent']->copy();
+ break;
+ case isset($key['publicExponent']):
+ $components['publicExponent'] = $key['publicExponent']->copy();
+ break;
+ case isset($key[0]):
+ $components['publicExponent'] = $key[0]->copy();
+ }
+ switch (true) {
+ case isset($key['n']):
+ $components['modulus'] = $key['n']->copy();
+ break;
+ case isset($key['modulo']):
+ $components['modulus'] = $key['modulo']->copy();
+ break;
+ case isset($key['modulus']):
+ $components['modulus'] = $key['modulus']->copy();
+ break;
+ case isset($key[1]):
+ $components['modulus'] = $key[1]->copy();
+ }
+ return isset($components['modulus']) && isset($components['publicExponent']) ? $components : false;
+ case CRYPT_RSA_PRIVATE_FORMAT_PKCS1:
+ case CRYPT_RSA_PUBLIC_FORMAT_PKCS1:
+ /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is
+ "outside the scope" of PKCS#1. PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to
+ protect private keys, however, that's not what OpenSSL* does. OpenSSL protects private keys by adding
+ two new "fields" to the key - DEK-Info and Proc-Type. These fields are discussed here:
+
+ http://tools.ietf.org/html/rfc1421#section-4.6.1.1
+ http://tools.ietf.org/html/rfc1421#section-4.6.1.3
+
+ DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell.
+ DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation
+ function. As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's
+ own implementation. ie. the implementation *is* the standard and any bugs that may exist in that
+ implementation are part of the standard, as well.
+
+ * OpenSSL is the de facto standard. It's utilized by OpenSSH and other projects */
+ if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) {
+ $iv = pack('H*', trim($matches[2]));
+ $symkey = pack('H*', md5($this->password . substr($iv, 0, 8))); // symkey is short for symmetric key
+ $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
+ $ciphertext = preg_replace('#.+(\r|\n|\r\n)\1|[\r\n]|-.+-| #s', '', $key);
+ $ciphertext = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $ciphertext) ? base64_decode($ciphertext) : false;
+ if ($ciphertext === false) {
+ $ciphertext = $key;
+ }
+ switch ($matches[1]) {
+ case 'AES-128-CBC':
+ if (!class_exists('Crypt_AES')) {
+ require_once('Crypt/AES.php');
+ }
+ $symkey = substr($symkey, 0, 16);
+ $crypto = new Crypt_AES();
+ break;
+ case 'DES-EDE3-CFB':
+ if (!class_exists('Crypt_TripleDES')) {
+ require_once('Crypt/TripleDES.php');
+ }
+ $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CFB);
+ break;
+ case 'DES-EDE3-CBC':
+ if (!class_exists('Crypt_TripleDES')) {
+ require_once('Crypt/TripleDES.php');
+ }
+ $crypto = new Crypt_TripleDES();
+ break;
+ case 'DES-CBC':
+ if (!class_exists('Crypt_DES')) {
+ require_once('Crypt/DES.php');
+ }
+ $crypto = new Crypt_DES();
+ break;
+ default:
+ return false;
+ }
+ $crypto->setKey($symkey);
+ $crypto->setIV($iv);
+ $decoded = $crypto->decrypt($ciphertext);
+ } else {
+ $decoded = preg_replace('#-.+-|[\r\n]| #', '', $key);
+ $decoded = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $decoded) ? base64_decode($decoded) : false;
+ }
+
+ if ($decoded !== false) {
+ $key = $decoded;
+ }
+
+ $components = array();
+
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+ return false;
+ }
+ if ($this->_decodeLength($key) != strlen($key)) {
+ return false;
+ }
+
+ $tag = ord($this->_string_shift($key));
+ /* intended for keys for which OpenSSL's asn1parse returns the following:
+
+ 0:d=0 hl=4 l= 631 cons: SEQUENCE
+ 4:d=1 hl=2 l= 1 prim: INTEGER :00
+ 7:d=1 hl=2 l= 13 cons: SEQUENCE
+ 9:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
+ 20:d=2 hl=2 l= 0 prim: NULL
+ 22:d=1 hl=4 l= 609 prim: OCTET STRING */
+
+ if ($tag == CRYPT_RSA_ASN1_INTEGER && substr($key, 0, 3) == "\x01\x00\x30") {
+ $this->_string_shift($key, 3);
+ $tag = CRYPT_RSA_ASN1_SEQUENCE;
+ }
+
+ if ($tag == CRYPT_RSA_ASN1_SEQUENCE) {
+ /* intended for keys for which OpenSSL's asn1parse returns the following:
+
+ 0:d=0 hl=4 l= 290 cons: SEQUENCE
+ 4:d=1 hl=2 l= 13 cons: SEQUENCE
+ 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
+ 17:d=2 hl=2 l= 0 prim: NULL
+ 19:d=1 hl=4 l= 271 prim: BIT STRING */
+ $this->_string_shift($key, $this->_decodeLength($key));
+ $tag = ord($this->_string_shift($key)); // skip over the BIT STRING / OCTET STRING tag
+ $this->_decodeLength($key); // skip over the BIT STRING / OCTET STRING length
+ // "The initial octet shall encode, as an unsigned binary integer wtih bit 1 as the least significant bit, the number of
+ // unused bits in the final subsequent octet. The number shall be in the range zero to seven."
+ // -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf (section 8.6.2.2)
+ if ($tag == CRYPT_RSA_ASN1_BITSTRING) {
+ $this->_string_shift($key);
+ }
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+ return false;
+ }
+ if ($this->_decodeLength($key) != strlen($key)) {
+ return false;
+ }
+ $tag = ord($this->_string_shift($key));
+ }
+ if ($tag != CRYPT_RSA_ASN1_INTEGER) {
+ return false;
+ }
+
+ $length = $this->_decodeLength($key);
+ $temp = $this->_string_shift($key, $length);
+ if (strlen($temp) != 1 || ord($temp) > 2) {
+ $components['modulus'] = new Math_BigInteger($temp, 256);
+ $this->_string_shift($key); // skip over CRYPT_RSA_ASN1_INTEGER
+ $length = $this->_decodeLength($key);
+ $components[$type == CRYPT_RSA_PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+
+ return $components;
+ }
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_INTEGER) {
+ return false;
+ }
+ $length = $this->_decodeLength($key);
+ $components['modulus'] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['publicExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), 256));
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['exponents'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), 256));
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($key, $length), 256));
+
+ if (!empty($key)) {
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+ return false;
+ }
+ $this->_decodeLength($key);
+ while (!empty($key)) {
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+ return false;
+ }
+ $this->_decodeLength($key);
+ $key = substr($key, 1);
+ $length = $this->_decodeLength($key);
+ $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['coefficients'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+ }
+ }
+
+ return $components;
+ case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH:
+ $key = base64_decode(preg_replace('#^ssh-rsa | .+$#', '', $key));
+ if ($key === false) {
+ return false;
+ }
+
+ $cleanup = substr($key, 0, 11) == "\0\0\0\7ssh-rsa";
+
+ if (strlen($key) <= 4) {
+ return false;
+ }
+ extract(unpack('Nlength', $this->_string_shift($key, 4)));
+ $publicExponent = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ if (strlen($key) <= 4) {
+ return false;
+ }
+ extract(unpack('Nlength', $this->_string_shift($key, 4)));
+ $modulus = new Math_BigInteger($this->_string_shift($key, $length), -256);
+
+ if ($cleanup && strlen($key)) {
+ if (strlen($key) <= 4) {
+ return false;
+ }
+ extract(unpack('Nlength', $this->_string_shift($key, 4)));
+ $realModulus = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ return strlen($key) ? false : array(
+ 'modulus' => $realModulus,
+ 'publicExponent' => $modulus
+ );
+ } else {
+ return strlen($key) ? false : array(
+ 'modulus' => $modulus,
+ 'publicExponent' => $publicExponent
+ );
+ }
+ // http://www.w3.org/TR/xmldsig-core/#sec-RSAKeyValue
+ // http://en.wikipedia.org/wiki/XML_Signature
+ case CRYPT_RSA_PRIVATE_FORMAT_XML:
+ case CRYPT_RSA_PUBLIC_FORMAT_XML:
+ $this->components = array();
+
+ $xml = xml_parser_create('UTF-8');
+ xml_set_object($xml, $this);
+ xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler');
+ xml_set_character_data_handler($xml, '_data_handler');
+ // add <xml></xml> to account for "dangling" tags like <BitStrength>...</BitStrength> that are sometimes added
+ if (!xml_parse($xml, '<xml>' . $key . '</xml>')) {
+ return false;
+ }
+
+ return isset($this->components['modulus']) && isset($this->components['publicExponent']) ? $this->components : false;
+ // from PuTTY's SSHPUBK.C
+ case CRYPT_RSA_PRIVATE_FORMAT_PUTTY:
+ $components = array();
+ $key = preg_split('#\r\n|\r|\n#', $key);
+ $type = trim(preg_replace('#PuTTY-User-Key-File-2: (.+)#', '$1', $key[0]));
+ if ($type != 'ssh-rsa') {
+ return false;
+ }
+ $encryption = trim(preg_replace('#Encryption: (.+)#', '$1', $key[1]));
+
+ $publicLength = trim(preg_replace('#Public-Lines: (\d+)#', '$1', $key[3]));
+ $public = base64_decode(implode('', array_map('trim', array_slice($key, 4, $publicLength))));
+ $public = substr($public, 11);
+ extract(unpack('Nlength', $this->_string_shift($public, 4)));
+ $components['publicExponent'] = new Math_BigInteger($this->_string_shift($public, $length), -256);
+ extract(unpack('Nlength', $this->_string_shift($public, 4)));
+ $components['modulus'] = new Math_BigInteger($this->_string_shift($public, $length), -256);
+
+ $privateLength = trim(preg_replace('#Private-Lines: (\d+)#', '$1', $key[$publicLength + 4]));
+ $private = base64_decode(implode('', array_map('trim', array_slice($key, $publicLength + 5, $privateLength))));
+
+ switch ($encryption) {
+ case 'aes256-cbc':
+ if (!class_exists('Crypt_AES')) {
+ require_once('Crypt/AES.php');
+ }
+ $symkey = '';
+ $sequence = 0;
+ while (strlen($symkey) < 32) {
+ $temp = pack('Na*', $sequence++, $this->password);
+ $symkey.= pack('H*', sha1($temp));
+ }
+ $symkey = substr($symkey, 0, 32);
+ $crypto = new Crypt_AES();
+ }
+
+ if ($encryption != 'none') {
+ $crypto->setKey($symkey);
+ $crypto->disablePadding();
+ $private = $crypto->decrypt($private);
+ if ($private === false) {
+ return false;
+ }
+ }
+
+ extract(unpack('Nlength', $this->_string_shift($private, 4)));
+ if (strlen($private) < $length) {
+ return false;
+ }
+ $components['privateExponent'] = new Math_BigInteger($this->_string_shift($private, $length), -256);
+ extract(unpack('Nlength', $this->_string_shift($private, 4)));
+ if (strlen($private) < $length) {
+ return false;
+ }
+ $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($private, $length), -256));
+ extract(unpack('Nlength', $this->_string_shift($private, 4)));
+ if (strlen($private) < $length) {
+ return false;
+ }
+ $components['primes'][] = new Math_BigInteger($this->_string_shift($private, $length), -256);
+
+ $temp = $components['primes'][1]->subtract($this->one);
+ $components['exponents'] = array(1 => $components['publicExponent']->modInverse($temp));
+ $temp = $components['primes'][2]->subtract($this->one);
+ $components['exponents'][] = $components['publicExponent']->modInverse($temp);
+
+ extract(unpack('Nlength', $this->_string_shift($private, 4)));
+ if (strlen($private) < $length) {
+ return false;
+ }
+ $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($private, $length), -256));
+
+ return $components;
+ }
+ }
+
+ /**
+ * Returns the key size
+ *
+ * More specifically, this returns the size of the modulo in bits.
+ *
+ * @access public
+ * @return Integer
+ */
+ function getSize()
+ {
+ return !isset($this->modulus) ? 0 : strlen($this->modulus->toBits());
+ }
+
+ /**
+ * Start Element Handler
+ *
+ * Called by xml_set_element_handler()
+ *
+ * @access private
+ * @param Resource $parser
+ * @param String $name
+ * @param Array $attribs
+ */
+ function _start_element_handler($parser, $name, $attribs)
+ {
+ //$name = strtoupper($name);
+ switch ($name) {
+ case 'MODULUS':
+ $this->current = &$this->components['modulus'];
+ break;
+ case 'EXPONENT':
+ $this->current = &$this->components['publicExponent'];
+ break;
+ case 'P':
+ $this->current = &$this->components['primes'][1];
+ break;
+ case 'Q':
+ $this->current = &$this->components['primes'][2];
+ break;
+ case 'DP':
+ $this->current = &$this->components['exponents'][1];
+ break;
+ case 'DQ':
+ $this->current = &$this->components['exponents'][2];
+ break;
+ case 'INVERSEQ':
+ $this->current = &$this->components['coefficients'][2];
+ break;
+ case 'D':
+ $this->current = &$this->components['privateExponent'];
+ break;
+ default:
+ unset($this->current);
+ }
+ $this->current = '';
+ }
+
+ /**
+ * Stop Element Handler
+ *
+ * Called by xml_set_element_handler()
+ *
+ * @access private
+ * @param Resource $parser
+ * @param String $name
+ */
+ function _stop_element_handler($parser, $name)
+ {
+ //$name = strtoupper($name);
+ if ($name == 'RSAKEYVALUE') {
+ return;
+ }
+ $this->current = new Math_BigInteger(base64_decode($this->current), 256);
+ }
+
+ /**
+ * Data Handler
+ *
+ * Called by xml_set_character_data_handler()
+ *
+ * @access private
+ * @param Resource $parser
+ * @param String $data
+ */
+ function _data_handler($parser, $data)
+ {
+ if (!isset($this->current) || is_object($this->current)) {
+ return;
+ }
+ $this->current.= trim($data);
+ }
+
+ /**
+ * Loads a public or private key
+ *
+ * Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed)
+ *
+ * @access public
+ * @param String $key
+ * @param Integer $type optional
+ */
+ function loadKey($key, $type = false)
+ {
+ if ($type === false) {
+ $types = array(
+ CRYPT_RSA_PUBLIC_FORMAT_RAW,
+ CRYPT_RSA_PRIVATE_FORMAT_PKCS1,
+ CRYPT_RSA_PRIVATE_FORMAT_XML,
+ CRYPT_RSA_PRIVATE_FORMAT_PUTTY,
+ CRYPT_RSA_PUBLIC_FORMAT_OPENSSH
+ );
+ foreach ($types as $type) {
+ $components = $this->_parseKey($key, $type);
+ if ($components !== false) {
+ break;
+ }
+ }
+
+ } else {
+ $components = $this->_parseKey($key, $type);
+ }
+
+ if ($components === false) {
+ return false;
+ }
+
+ $this->modulus = $components['modulus'];
+ $this->k = strlen($this->modulus->toBytes());
+ $this->exponent = isset($components['privateExponent']) ? $components['privateExponent'] : $components['publicExponent'];
+ if (isset($components['primes'])) {
+ $this->primes = $components['primes'];
+ $this->exponents = $components['exponents'];
+ $this->coefficients = $components['coefficients'];
+ $this->publicExponent = $components['publicExponent'];
+ } else {
+ $this->primes = array();
+ $this->exponents = array();
+ $this->coefficients = array();
+ $this->publicExponent = false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Sets the password
+ *
+ * Private keys can be encrypted with a password. To unset the password, pass in the empty string or false.
+ * Or rather, pass in $password such that empty($password) && !is_string($password) is true.
+ *
+ * @see createKey()
+ * @see loadKey()
+ * @access public
+ * @param String $password
+ */
+ function setPassword($password = false)
+ {
+ $this->password = $password;
+ }
+
+ /**
+ * Defines the public key
+ *
+ * Some private key formats define the public exponent and some don't. Those that don't define it are problematic when
+ * used in certain contexts. For example, in SSH-2, RSA authentication works by sending the public key along with a
+ * message signed by the private key to the server. The SSH-2 server looks the public key up in an index of public keys
+ * and if it's present then proceeds to verify the signature. Problem is, if your private key doesn't include the public
+ * exponent this won't work unless you manually add the public exponent.
+ *
+ * Do note that when a new key is loaded the index will be cleared.
+ *
+ * Returns true on success, false on failure
+ *
+ * @see getPublicKey()
+ * @access public
+ * @param String $key optional
+ * @param Integer $type optional
+ * @return Boolean
+ */
+ function setPublicKey($key = false, $type = false)
+ {
+ if ($key === false && !empty($this->modulus)) {
+ $this->publicExponent = $this->exponent;
+ return true;
+ }
+
+ if ($type === false) {
+ $types = array(
+ CRYPT_RSA_PUBLIC_FORMAT_RAW,
+ CRYPT_RSA_PUBLIC_FORMAT_PKCS1,
+ CRYPT_RSA_PUBLIC_FORMAT_XML,
+ CRYPT_RSA_PUBLIC_FORMAT_OPENSSH
+ );
+ foreach ($types as $type) {
+ $components = $this->_parseKey($key, $type);
+ if ($components !== false) {
+ break;
+ }
+ }
+ } else {
+ $components = $this->_parseKey($key, $type);
+ }
+
+ if ($components === false) {
+ return false;
+ }
+
+ if (empty($this->modulus) || !$this->modulus->equals($components['modulus'])) {
+ $this->modulus = $components['modulus'];
+ $this->exponent = $this->publicExponent = $components['publicExponent'];
+ return true;
+ }
+
+ $this->publicExponent = $components['publicExponent'];
+
+ return true;
+ }
+
+ /**
+ * Returns the public key
+ *
+ * The public key is only returned under two circumstances - if the private key had the public key embedded within it
+ * or if the public key was set via setPublicKey(). If the currently loaded key is supposed to be the public key this
+ * function won't return it since this library, for the most part, doesn't distinguish between public and private keys.
+ *
+ * @see getPublicKey()
+ * @access public
+ * @param String $key
+ * @param Integer $type optional
+ */
+ function getPublicKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
+ {
+ if (empty($this->modulus) || empty($this->publicExponent)) {
+ return false;
+ }
+
+ $oldFormat = $this->publicKeyFormat;
+ $this->publicKeyFormat = $type;
+ $temp = $this->_convertPublicKey($this->modulus, $this->publicExponent);
+ $this->publicKeyFormat = $oldFormat;
+ return $temp;
+ }
+
+ /**
+ * Returns the private key
+ *
+ * The private key is only returned if the currently loaded key contains the constituent prime numbers.
+ *
+ * @see getPublicKey()
+ * @access public
+ * @param String $key
+ * @param Integer $type optional
+ */
+ function getPrivateKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
+ {
+ if (empty($this->primes)) {
+ return false;
+ }
+
+ $oldFormat = $this->privateKeyFormat;
+ $this->privateKeyFormat = $type;
+ $temp = $this->_convertPrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients);
+ $this->privateKeyFormat = $oldFormat;
+ return $temp;
+ }
+
+ /**
+ * Returns a minimalistic private key
+ *
+ * Returns the private key without the prime number constituants. Structurally identical to a public key that
+ * hasn't been set as the public key
+ *
+ * @see getPrivateKey()
+ * @access private
+ * @param String $key
+ * @param Integer $type optional
+ */
+ function _getPrivatePublicKey($mode = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
+ {
+ if (empty($this->modulus) || empty($this->exponent)) {
+ return false;
+ }
+
+ $oldFormat = $this->publicKeyFormat;
+ $this->publicKeyFormat = $mode;
+ $temp = $this->_convertPublicKey($this->modulus, $this->exponent);
+ $this->publicKeyFormat = $oldFormat;
+ return $temp;
+ }
+
+ /**
+ * __toString() magic method
+ *
+ * @access public
+ */
+ function __toString()
+ {
+ $key = $this->getPrivateKey($this->privateKeyFormat);
+ if ($key !== false) {
+ return $key;
+ }
+ $key = $this->_getPrivatePublicKey($this->publicKeyFormat);
+ return $key !== false ? $key : '';
+ }
+
+ /**
+ * Generates the smallest and largest numbers requiring $bits bits
+ *
+ * @access private
+ * @param Integer $bits
+ * @return Array
+ */
+ function _generateMinMax($bits)
+ {
+ $bytes = $bits >> 3;
+ $min = str_repeat(chr(0), $bytes);
+ $max = str_repeat(chr(0xFF), $bytes);
+ $msb = $bits & 7;
+ if ($msb) {
+ $min = chr(1 << ($msb - 1)) . $min;
+ $max = chr((1 << $msb) - 1) . $max;
+ } else {
+ $min[0] = chr(0x80);
+ }
+
+ return array(
+ 'min' => new Math_BigInteger($min, 256),
+ 'max' => new Math_BigInteger($max, 256)
+ );
+ }
+
+ /**
+ * DER-decode the length
+ *
+ * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See
+ * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 § 8.1.3} for more information.
+ *
+ * @access private
+ * @param String $string
+ * @return Integer
+ */
+ function _decodeLength(&$string)
+ {
+ $length = ord($this->_string_shift($string));
+ if ( $length & 0x80 ) { // definite length, long form
+ $length&= 0x7F;
+ $temp = $this->_string_shift($string, $length);
+ list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4));
+ }
+ return $length;
+ }
+
+ /**
+ * DER-encode the length
+ *
+ * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See
+ * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 § 8.1.3} for more information.
+ *
+ * @access private
+ * @param Integer $length
+ * @return String
+ */
+ function _encodeLength($length)
+ {
+ if ($length <= 0x7F) {
+ return chr($length);
+ }
+
+ $temp = ltrim(pack('N', $length), chr(0));
+ return pack('Ca*', 0x80 | strlen($temp), $temp);
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+
+ /**
+ * Determines the private key format
+ *
+ * @see createKey()
+ * @access public
+ * @param Integer $format
+ */
+ function setPrivateKeyFormat($format)
+ {
+ $this->privateKeyFormat = $format;
+ }
+
+ /**
+ * Determines the public key format
+ *
+ * @see createKey()
+ * @access public
+ * @param Integer $format
+ */
+ function setPublicKeyFormat($format)
+ {
+ $this->publicKeyFormat = $format;
+ }
+
+ /**
+ * Determines which hashing function should be used
+ *
+ * Used with signature production / verification and (if the encryption mode is CRYPT_RSA_ENCRYPTION_OAEP) encryption and
+ * decryption. If $hash isn't supported, sha1 is used.
+ *
+ * @access public
+ * @param String $hash
+ */
+ function setHash($hash)
+ {
+ // Crypt_Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example.
+ switch ($hash) {
+ case 'md2':
+ case 'md5':
+ case 'sha1':
+ case 'sha256':
+ case 'sha384':
+ case 'sha512':
+ $this->hash = new Crypt_Hash($hash);
+ $this->hashName = $hash;
+ break;
+ default:
+ $this->hash = new Crypt_Hash('sha1');
+ $this->hashName = 'sha1';
+ }
+ $this->hLen = $this->hash->getLength();
+ }
+
+ /**
+ * Determines which hashing function should be used for the mask generation function
+ *
+ * The mask generation function is used by CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_SIGNATURE_PSS and although it's
+ * best if Hash and MGFHash are set to the same thing this is not a requirement.
+ *
+ * @access public
+ * @param String $hash
+ */
+ function setMGFHash($hash)
+ {
+ // Crypt_Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example.
+ switch ($hash) {
+ case 'md2':
+ case 'md5':
+ case 'sha1':
+ case 'sha256':
+ case 'sha384':
+ case 'sha512':
+ $this->mgfHash = new Crypt_Hash($hash);
+ break;
+ default:
+ $this->mgfHash = new Crypt_Hash('sha1');
+ }
+ $this->mgfHLen = $this->mgfHash->getLength();
+ }
+
+ /**
+ * Determines the salt length
+ *
+ * To quote from {@link http://tools.ietf.org/html/rfc3447#page-38 RFC3447#page-38}:
+ *
+ * Typical salt lengths in octets are hLen (the length of the output
+ * of the hash function Hash) and 0.
+ *
+ * @access public
+ * @param Integer $format
+ */
+ function setSaltLength($sLen)
+ {
+ $this->sLen = $sLen;
+ }
+
+ /**
+ * Integer-to-Octet-String primitive
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}.
+ *
+ * @access private
+ * @param Math_BigInteger $x
+ * @param Integer $xLen
+ * @return String
+ */
+ function _i2osp($x, $xLen)
+ {
+ $x = $x->toBytes();
+ if (strlen($x) > $xLen) {
+ user_error('Integer too large');
+ return false;
+ }
+ return str_pad($x, $xLen, chr(0), STR_PAD_LEFT);
+ }
+
+ /**
+ * Octet-String-to-Integer primitive
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}.
+ *
+ * @access private
+ * @param String $x
+ * @return Math_BigInteger
+ */
+ function _os2ip($x)
+ {
+ return new Math_BigInteger($x, 256);
+ }
+
+ /**
+ * Exponentiate with or without Chinese Remainder Theorem
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.2}.
+ *
+ * @access private
+ * @param Math_BigInteger $x
+ * @return Math_BigInteger
+ */
+ function _exponentiate($x)
+ {
+ if (empty($this->primes) || empty($this->coefficients) || empty($this->exponents)) {
+ return $x->modPow($this->exponent, $this->modulus);
+ }
+
+ $num_primes = count($this->primes);
+
+ if (defined('CRYPT_RSA_DISABLE_BLINDING')) {
+ $m_i = array(
+ 1 => $x->modPow($this->exponents[1], $this->primes[1]),
+ 2 => $x->modPow($this->exponents[2], $this->primes[2])
+ );
+ $h = $m_i[1]->subtract($m_i[2]);
+ $h = $h->multiply($this->coefficients[2]);
+ list(, $h) = $h->divide($this->primes[1]);
+ $m = $m_i[2]->add($h->multiply($this->primes[2]));
+
+ $r = $this->primes[1];
+ for ($i = 3; $i <= $num_primes; $i++) {
+ $m_i = $x->modPow($this->exponents[$i], $this->primes[$i]);
+
+ $r = $r->multiply($this->primes[$i - 1]);
+
+ $h = $m_i->subtract($m);
+ $h = $h->multiply($this->coefficients[$i]);
+ list(, $h) = $h->divide($this->primes[$i]);
+
+ $m = $m->add($r->multiply($h));
+ }
+ } else {
+ $smallest = $this->primes[1];
+ for ($i = 2; $i <= $num_primes; $i++) {
+ if ($smallest->compare($this->primes[$i]) > 0) {
+ $smallest = $this->primes[$i];
+ }
+ }
+
+ $one = new Math_BigInteger(1);
+
+ $r = $one->random($one, $smallest->subtract($one));
+
+ $m_i = array(
+ 1 => $this->_blind($x, $r, 1),
+ 2 => $this->_blind($x, $r, 2)
+ );
+ $h = $m_i[1]->subtract($m_i[2]);
+ $h = $h->multiply($this->coefficients[2]);
+ list(, $h) = $h->divide($this->primes[1]);
+ $m = $m_i[2]->add($h->multiply($this->primes[2]));
+
+ $r = $this->primes[1];
+ for ($i = 3; $i <= $num_primes; $i++) {
+ $m_i = $this->_blind($x, $r, $i);
+
+ $r = $r->multiply($this->primes[$i - 1]);
+
+ $h = $m_i->subtract($m);
+ $h = $h->multiply($this->coefficients[$i]);
+ list(, $h) = $h->divide($this->primes[$i]);
+
+ $m = $m->add($r->multiply($h));
+ }
+ }
+
+ return $m;
+ }
+
+ /**
+ * Performs RSA Blinding
+ *
+ * Protects against timing attacks by employing RSA Blinding.
+ * Returns $x->modPow($this->exponents[$i], $this->primes[$i])
+ *
+ * @access private
+ * @param Math_BigInteger $x
+ * @param Math_BigInteger $r
+ * @param Integer $i
+ * @return Math_BigInteger
+ */
+ function _blind($x, $r, $i)
+ {
+ $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i]));
+ $x = $x->modPow($this->exponents[$i], $this->primes[$i]);
+
+ $r = $r->modInverse($this->primes[$i]);
+ $x = $x->multiply($r);
+ list(, $x) = $x->divide($this->primes[$i]);
+
+ return $x;
+ }
+
+ /**
+ * Performs blinded RSA equality testing
+ *
+ * Protects against a particular type of timing attack described.
+ *
+ * See {@link http://codahale.com/a-lesson-in-timing-attacks/ A Lesson In Timing Attacks (or, Don’t use MessageDigest.isEquals)}
+ *
+ * Thanks for the heads up singpolyma!
+ *
+ * @access private
+ * @param String $x
+ * @param String $y
+ * @return Boolean
+ */
+ function _equals($x, $y)
+ {
+ if (strlen($x) != strlen($y)) {
+ return false;
+ }
+
+ $result = 0;
+ for ($i = 0; $i < strlen($x); $i++) {
+ $result |= ord($x[$i]) ^ ord($y[$i]);
+ }
+
+ return $result == 0;
+ }
+
+ /**
+ * RSAEP
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}.
+ *
+ * @access private
+ * @param Math_BigInteger $m
+ * @return Math_BigInteger
+ */
+ function _rsaep($m)
+ {
+ if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) {
+ user_error('Message representative out of range');
+ return false;
+ }
+ return $this->_exponentiate($m);
+ }
+
+ /**
+ * RSADP
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}.
+ *
+ * @access private
+ * @param Math_BigInteger $c
+ * @return Math_BigInteger
+ */
+ function _rsadp($c)
+ {
+ if ($c->compare($this->zero) < 0 || $c->compare($this->modulus) > 0) {
+ user_error('Ciphertext representative out of range');
+ return false;
+ }
+ return $this->_exponentiate($c);
+ }
+
+ /**
+ * RSASP1
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}.
+ *
+ * @access private
+ * @param Math_BigInteger $m
+ * @return Math_BigInteger
+ */
+ function _rsasp1($m)
+ {
+ if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) {
+ user_error('Message representative out of range');
+ return false;
+ }
+ return $this->_exponentiate($m);
+ }
+
+ /**
+ * RSAVP1
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}.
+ *
+ * @access private
+ * @param Math_BigInteger $s
+ * @return Math_BigInteger
+ */
+ function _rsavp1($s)
+ {
+ if ($s->compare($this->zero) < 0 || $s->compare($this->modulus) > 0) {
+ user_error('Signature representative out of range');
+ return false;
+ }
+ return $this->_exponentiate($s);
+ }
+
+ /**
+ * MGF1
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}.
+ *
+ * @access private
+ * @param String $mgfSeed
+ * @param Integer $mgfLen
+ * @return String
+ */
+ function _mgf1($mgfSeed, $maskLen)
+ {
+ // if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output.
+
+ $t = '';
+ $count = ceil($maskLen / $this->mgfHLen);
+ for ($i = 0; $i < $count; $i++) {
+ $c = pack('N', $i);
+ $t.= $this->mgfHash->hash($mgfSeed . $c);
+ }
+
+ return substr($t, 0, $maskLen);
+ }
+
+ /**
+ * RSAES-OAEP-ENCRYPT
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.1 RFC3447#section-7.1.1} and
+ * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}.
+ *
+ * @access private
+ * @param String $m
+ * @param String $l
+ * @return String
+ */
+ function _rsaes_oaep_encrypt($m, $l = '')
+ {
+ $mLen = strlen($m);
+
+ // Length checking
+
+ // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+ // be output.
+
+ if ($mLen > $this->k - 2 * $this->hLen - 2) {
+ user_error('Message too long');
+ return false;
+ }
+
+ // EME-OAEP encoding
+
+ $lHash = $this->hash->hash($l);
+ $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2);
+ $db = $lHash . $ps . chr(1) . $m;
+ $seed = crypt_random_string($this->hLen);
+ $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
+ $maskedDB = $db ^ $dbMask;
+ $seedMask = $this->_mgf1($maskedDB, $this->hLen);
+ $maskedSeed = $seed ^ $seedMask;
+ $em = chr(0) . $maskedSeed . $maskedDB;
+
+ // RSA encryption
+
+ $m = $this->_os2ip($em);
+ $c = $this->_rsaep($m);
+ $c = $this->_i2osp($c, $this->k);
+
+ // Output the ciphertext C
+
+ return $c;
+ }
+
+ /**
+ * RSAES-OAEP-DECRYPT
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}. The fact that the error
+ * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2:
+ *
+ * Note. Care must be taken to ensure that an opponent cannot
+ * distinguish the different error conditions in Step 3.g, whether by
+ * error message or timing, or, more generally, learn partial
+ * information about the encoded message EM. Otherwise an opponent may
+ * be able to obtain useful information about the decryption of the
+ * ciphertext C, leading to a chosen-ciphertext attack such as the one
+ * observed by Manger [36].
+ *
+ * As for $l... to quote from {@link http://tools.ietf.org/html/rfc3447#page-17 RFC3447#page-17}:
+ *
+ * Both the encryption and the decryption operations of RSAES-OAEP take
+ * the value of a label L as input. In this version of PKCS #1, L is
+ * the empty string; other uses of the label are outside the scope of
+ * this document.
+ *
+ * @access private
+ * @param String $c
+ * @param String $l
+ * @return String
+ */
+ function _rsaes_oaep_decrypt($c, $l = '')
+ {
+ // Length checking
+
+ // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+ // be output.
+
+ if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) {
+ user_error('Decryption error');
+ return false;
+ }
+
+ // RSA decryption
+
+ $c = $this->_os2ip($c);
+ $m = $this->_rsadp($c);
+ if ($m === false) {
+ user_error('Decryption error');
+ return false;
+ }
+ $em = $this->_i2osp($m, $this->k);
+
+ // EME-OAEP decoding
+
+ $lHash = $this->hash->hash($l);
+ $y = ord($em[0]);
+ $maskedSeed = substr($em, 1, $this->hLen);
+ $maskedDB = substr($em, $this->hLen + 1);
+ $seedMask = $this->_mgf1($maskedDB, $this->hLen);
+ $seed = $maskedSeed ^ $seedMask;
+ $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
+ $db = $maskedDB ^ $dbMask;
+ $lHash2 = substr($db, 0, $this->hLen);
+ $m = substr($db, $this->hLen);
+ if ($lHash != $lHash2) {
+ user_error('Decryption error');
+ return false;
+ }
+ $m = ltrim($m, chr(0));
+ if (ord($m[0]) != 1) {
+ user_error('Decryption error');
+ return false;
+ }
+
+ // Output the message M
+
+ return substr($m, 1);
+ }
+
+ /**
+ * RSAES-PKCS1-V1_5-ENCRYPT
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}.
+ *
+ * @access private
+ * @param String $m
+ * @return String
+ */
+ function _rsaes_pkcs1_v1_5_encrypt($m)
+ {
+ $mLen = strlen($m);
+
+ // Length checking
+
+ if ($mLen > $this->k - 11) {
+ user_error('Message too long');
+ return false;
+ }
+
+ // EME-PKCS1-v1_5 encoding
+ $psLen = $this->k - $mLen - 3;
+ $ps = '';
+ while (strlen($ps) != $psLen) {
+ $temp = crypt_random_string($psLen - strlen($ps));
+ $temp = str_replace("\x00", '', $temp);
+ $ps.= $temp;
+ }
+ $em = chr(0) . chr(2) . $ps . chr(0) . $m;
+
+ // RSA encryption
+ $m = $this->_os2ip($em);
+ $c = $this->_rsaep($m);
+ $c = $this->_i2osp($c, $this->k);
+
+ // Output the ciphertext C
+
+ return $c;
+ }
+
+ /**
+ * RSAES-PKCS1-V1_5-DECRYPT
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}.
+ *
+ * For compatability purposes, this function departs slightly from the description given in RFC3447.
+ * The reason being that RFC2313#section-8.1 (PKCS#1 v1.5) states that ciphertext's encrypted by the
+ * private key should have the second byte set to either 0 or 1 and that ciphertext's encrypted by the
+ * public key should have the second byte set to 2. In RFC3447 (PKCS#1 v2.1), the second byte is supposed
+ * to be 2 regardless of which key is used. For compatability purposes, we'll just check to make sure the
+ * second byte is 2 or less. If it is, we'll accept the decrypted string as valid.
+ *
+ * As a consequence of this, a private key encrypted ciphertext produced with Crypt_RSA may not decrypt
+ * with a strictly PKCS#1 v1.5 compliant RSA implementation. Public key encrypted ciphertext's should but
+ * not private key encrypted ciphertext's.
+ *
+ * @access private
+ * @param String $c
+ * @return String
+ */
+ function _rsaes_pkcs1_v1_5_decrypt($c)
+ {
+ // Length checking
+
+ if (strlen($c) != $this->k) { // or if k < 11
+ user_error('Decryption error');
+ return false;
+ }
+
+ // RSA decryption
+
+ $c = $this->_os2ip($c);
+ $m = $this->_rsadp($c);
+
+ if ($m === false) {
+ user_error('Decryption error');
+ return false;
+ }
+ $em = $this->_i2osp($m, $this->k);
+
+ // EME-PKCS1-v1_5 decoding
+
+ if (ord($em[0]) != 0 || ord($em[1]) > 2) {
+ user_error('Decryption error');
+ return false;
+ }
+
+ $ps = substr($em, 2, strpos($em, chr(0), 2) - 2);
+ $m = substr($em, strlen($ps) + 3);
+
+ if (strlen($ps) < 8) {
+ user_error('Decryption error');
+ return false;
+ }
+
+ // Output M
+
+ return $m;
+ }
+
+ /**
+ * EMSA-PSS-ENCODE
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}.
+ *
+ * @access private
+ * @param String $m
+ * @param Integer $emBits
+ */
+ function _emsa_pss_encode($m, $emBits)
+ {
+ // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+ // be output.
+
+ $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8)
+ $sLen = $this->sLen == false ? $this->hLen : $this->sLen;
+
+ $mHash = $this->hash->hash($m);
+ if ($emLen < $this->hLen + $sLen + 2) {
+ user_error('Encoding error');
+ return false;
+ }
+
+ $salt = crypt_random_string($sLen);
+ $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
+ $h = $this->hash->hash($m2);
+ $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
+ $db = $ps . chr(1) . $salt;
+ $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
+ $maskedDB = $db ^ $dbMask;
+ $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];
+ $em = $maskedDB . $h . chr(0xBC);
+
+ return $em;
+ }
+
+ /**
+ * EMSA-PSS-VERIFY
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}.
+ *
+ * @access private
+ * @param String $m
+ * @param String $em
+ * @param Integer $emBits
+ * @return String
+ */
+ function _emsa_pss_verify($m, $em, $emBits)
+ {
+ // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+ // be output.
+
+ $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8);
+ $sLen = $this->sLen == false ? $this->hLen : $this->sLen;
+
+ $mHash = $this->hash->hash($m);
+ if ($emLen < $this->hLen + $sLen + 2) {
+ return false;
+ }
+
+ if ($em[strlen($em) - 1] != chr(0xBC)) {
+ return false;
+ }
+
+ $maskedDB = substr($em, 0, -$this->hLen - 1);
+ $h = substr($em, -$this->hLen - 1, $this->hLen);
+ $temp = chr(0xFF << ($emBits & 7));
+ if ((~$maskedDB[0] & $temp) != $temp) {
+ return false;
+ }
+ $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
+ $db = $maskedDB ^ $dbMask;
+ $db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0];
+ $temp = $emLen - $this->hLen - $sLen - 2;
+ if (substr($db, 0, $temp) != str_repeat(chr(0), $temp) || ord($db[$temp]) != 1) {
+ return false;
+ }
+ $salt = substr($db, $temp + 1); // should be $sLen long
+ $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
+ $h2 = $this->hash->hash($m2);
+ return $this->_equals($h, $h2);
+ }
+
+ /**
+ * RSASSA-PSS-SIGN
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}.
+ *
+ * @access private
+ * @param String $m
+ * @return String
+ */
+ function _rsassa_pss_sign($m)
+ {
+ // EMSA-PSS encoding
+
+ $em = $this->_emsa_pss_encode($m, 8 * $this->k - 1);
+
+ // RSA signature
+
+ $m = $this->_os2ip($em);
+ $s = $this->_rsasp1($m);
+ $s = $this->_i2osp($s, $this->k);
+
+ // Output the signature S
+
+ return $s;
+ }
+
+ /**
+ * RSASSA-PSS-VERIFY
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}.
+ *
+ * @access private
+ * @param String $m
+ * @param String $s
+ * @return String
+ */
+ function _rsassa_pss_verify($m, $s)
+ {
+ // Length checking
+
+ if (strlen($s) != $this->k) {
+ user_error('Invalid signature');
+ return false;
+ }
+
+ // RSA verification
+
+ $modBits = 8 * $this->k;
+
+ $s2 = $this->_os2ip($s);
+ $m2 = $this->_rsavp1($s2);
+ if ($m2 === false) {
+ user_error('Invalid signature');
+ return false;
+ }
+ $em = $this->_i2osp($m2, $modBits >> 3);
+ if ($em === false) {
+ user_error('Invalid signature');
+ return false;
+ }
+
+ // EMSA-PSS verification
+
+ return $this->_emsa_pss_verify($m, $em, $modBits - 1);
+ }
+
+ /**
+ * EMSA-PKCS1-V1_5-ENCODE
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}.
+ *
+ * @access private
+ * @param String $m
+ * @param Integer $emLen
+ * @return String
+ */
+ function _emsa_pkcs1_v1_5_encode($m, $emLen)
+ {
+ $h = $this->hash->hash($m);
+ if ($h === false) {
+ return false;
+ }
+
+ // see http://tools.ietf.org/html/rfc3447#page-43
+ switch ($this->hashName) {
+ case 'md2':
+ $t = pack('H*', '3020300c06082a864886f70d020205000410');
+ break;
+ case 'md5':
+ $t = pack('H*', '3020300c06082a864886f70d020505000410');
+ break;
+ case 'sha1':
+ $t = pack('H*', '3021300906052b0e03021a05000414');
+ break;
+ case 'sha256':
+ $t = pack('H*', '3031300d060960864801650304020105000420');
+ break;
+ case 'sha384':
+ $t = pack('H*', '3041300d060960864801650304020205000430');
+ break;
+ case 'sha512':
+ $t = pack('H*', '3051300d060960864801650304020305000440');
+ }
+ $t.= $h;
+ $tLen = strlen($t);
+
+ if ($emLen < $tLen + 11) {
+ user_error('Intended encoded message length too short');
+ return false;
+ }
+
+ $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3);
+
+ $em = "\0\1$ps\0$t";
+
+ return $em;
+ }
+
+ /**
+ * RSASSA-PKCS1-V1_5-SIGN
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}.
+ *
+ * @access private
+ * @param String $m
+ * @return String
+ */
+ function _rsassa_pkcs1_v1_5_sign($m)
+ {
+ // EMSA-PKCS1-v1_5 encoding
+
+ $em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
+ if ($em === false) {
+ user_error('RSA modulus too short');
+ return false;
+ }
+
+ // RSA signature
+
+ $m = $this->_os2ip($em);
+ $s = $this->_rsasp1($m);
+ $s = $this->_i2osp($s, $this->k);
+
+ // Output the signature S
+
+ return $s;
+ }
+
+ /**
+ * RSASSA-PKCS1-V1_5-VERIFY
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}.
+ *
+ * @access private
+ * @param String $m
+ * @return String
+ */
+ function _rsassa_pkcs1_v1_5_verify($m, $s)
+ {
+ // Length checking
+
+ if (strlen($s) != $this->k) {
+ user_error('Invalid signature');
+ return false;
+ }
+
+ // RSA verification
+
+ $s = $this->_os2ip($s);
+ $m2 = $this->_rsavp1($s);
+ if ($m2 === false) {
+ user_error('Invalid signature');
+ return false;
+ }
+ $em = $this->_i2osp($m2, $this->k);
+ if ($em === false) {
+ user_error('Invalid signature');
+ return false;
+ }
+
+ // EMSA-PKCS1-v1_5 encoding
+
+ $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
+ if ($em2 === false) {
+ user_error('RSA modulus too short');
+ return false;
+ }
+
+ // Compare
+ return $this->_equals($em, $em2);
+ }
+
+ /**
+ * Set Encryption Mode
+ *
+ * Valid values include CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1.
+ *
+ * @access public
+ * @param Integer $mode
+ */
+ function setEncryptionMode($mode)
+ {
+ $this->encryptionMode = $mode;
+ }
+
+ /**
+ * Set Signature Mode
+ *
+ * Valid values include CRYPT_RSA_SIGNATURE_PSS and CRYPT_RSA_SIGNATURE_PKCS1
+ *
+ * @access public
+ * @param Integer $mode
+ */
+ function setSignatureMode($mode)
+ {
+ $this->signatureMode = $mode;
+ }
+
+ /**
+ * Encryption
+ *
+ * Both CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1 both place limits on how long $plaintext can be.
+ * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will
+ * be concatenated together.
+ *
+ * @see decrypt()
+ * @access public
+ * @param String $plaintext
+ * @return String
+ */
+ function encrypt($plaintext)
+ {
+ switch ($this->encryptionMode) {
+ case CRYPT_RSA_ENCRYPTION_PKCS1:
+ $length = $this->k - 11;
+ if ($length <= 0) {
+ return false;
+ }
+
+ $plaintext = str_split($plaintext, $length);
+ $ciphertext = '';
+ foreach ($plaintext as $m) {
+ $ciphertext.= $this->_rsaes_pkcs1_v1_5_encrypt($m);
+ }
+ return $ciphertext;
+ //case CRYPT_RSA_ENCRYPTION_OAEP:
+ default:
+ $length = $this->k - 2 * $this->hLen - 2;
+ if ($length <= 0) {
+ return false;
+ }
+
+ $plaintext = str_split($plaintext, $length);
+ $ciphertext = '';
+ foreach ($plaintext as $m) {
+ $ciphertext.= $this->_rsaes_oaep_encrypt($m);
+ }
+ return $ciphertext;
+ }
+ }
+
+ /**
+ * Decryption
+ *
+ * @see encrypt()
+ * @access public
+ * @param String $plaintext
+ * @return String
+ */
+ function decrypt($ciphertext)
+ {
+ if ($this->k <= 0) {
+ return false;
+ }
+
+ $ciphertext = str_split($ciphertext, $this->k);
+ $ciphertext[count($ciphertext) - 1] = str_pad($ciphertext[count($ciphertext) - 1], $this->k, chr(0), STR_PAD_LEFT);
+
+ $plaintext = '';
+
+ switch ($this->encryptionMode) {
+ case CRYPT_RSA_ENCRYPTION_PKCS1:
+ $decrypt = '_rsaes_pkcs1_v1_5_decrypt';
+ break;
+ //case CRYPT_RSA_ENCRYPTION_OAEP:
+ default:
+ $decrypt = '_rsaes_oaep_decrypt';
+ }
+
+ foreach ($ciphertext as $c) {
+ $temp = $this->$decrypt($c);
+ if ($temp === false) {
+ return false;
+ }
+ $plaintext.= $temp;
+ }
+
+ return $plaintext;
+ }
+
+ /**
+ * Create a signature
+ *
+ * @see verify()
+ * @access public
+ * @param String $message
+ * @return String
+ */
+ function sign($message)
+ {
+ if (empty($this->modulus) || empty($this->exponent)) {
+ return false;
+ }
+
+ switch ($this->signatureMode) {
+ case CRYPT_RSA_SIGNATURE_PKCS1:
+ return $this->_rsassa_pkcs1_v1_5_sign($message);
+ //case CRYPT_RSA_SIGNATURE_PSS:
+ default:
+ return $this->_rsassa_pss_sign($message);
+ }
+ }
+
+ /**
+ * Verifies a signature
+ *
+ * @see sign()
+ * @access public
+ * @param String $message
+ * @param String $signature
+ * @return Boolean
+ */
+ function verify($message, $signature)
+ {
+ if (empty($this->modulus) || empty($this->exponent)) {
+ return false;
+ }
+
+ switch ($this->signatureMode) {
+ case CRYPT_RSA_SIGNATURE_PKCS1:
+ return $this->_rsassa_pkcs1_v1_5_verify($message, $signature);
+ //case CRYPT_RSA_SIGNATURE_PSS:
+ default:
+ return $this->_rsassa_pss_verify($message, $signature);
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php
new file mode 100644
index 00000000000..a60857df95d
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php
@@ -0,0 +1,243 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Random Number Generator
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/Random.php');
+ *
+ * echo bin2hex(crypt_random_string(8));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Crypt
+ * @package Crypt_Random
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: Random.php,v 1.9 2010/04/24 06:40:48 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Generate a random string.
+ *
+ * Although microoptimizations are generally discouraged as they impair readability this function is ripe with
+ * microoptimizations because this function has the potential of being called a huge number of times.
+ * eg. for RSA key generation.
+ *
+ * @param Integer $length
+ * @return String
+ * @access public
+ */
+function crypt_random_string($length) {
+ // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
+ if ((PHP_OS & "\xDF\xDF\xDF") === 'WIN') {
+ // method 1. prior to PHP 5.3 this would call rand() on windows hence the function_exists('class_alias') call.
+ // ie. class_alias is a function that was introduced in PHP 5.3
+ if (function_exists('mcrypt_create_iv') && function_exists('class_alias')) {
+ return mcrypt_create_iv($length);
+ }
+ // method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was,
+ // to quote <http://php.net/ChangeLog-5.php#5.3.4>, "possible blocking behavior". as of 5.3.4
+ // openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both
+ // call php_win32_get_random_bytes():
+ //
+ // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008
+ // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392
+ //
+ // php_win32_get_random_bytes() is defined thusly:
+ //
+ // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80
+ //
+ // we're calling it, all the same, in the off chance that the mcrypt extension is not available
+ if (function_exists('openssl_random_pseudo_bytes') && version_compare(PHP_VERSION, '5.3.4', '>=')) {
+ return openssl_random_pseudo_bytes($length);
+ }
+ } else {
+ // method 1. the fastest
+ if (function_exists('openssl_random_pseudo_bytes')) {
+ return openssl_random_pseudo_bytes($length);
+ }
+ // method 2
+ static $fp = true;
+ if ($fp === true) {
+ // warning's will be output unles the error suppression operator is used. errors such as
+ // "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
+ $fp = @fopen('/dev/urandom', 'rb');
+ }
+ if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource()
+ return fread($fp, $length);
+ }
+ // method 3. pretty much does the same thing as method 2 per the following url:
+ // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391
+ // surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're
+ // not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir
+ // restrictions or some such
+ if (function_exists('mcrypt_create_iv')) {
+ return mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
+ }
+ }
+ // at this point we have no choice but to use a pure-PHP CSPRNG
+
+ // cascade entropy across multiple PHP instances by fixing the session and collecting all
+ // environmental variables, including the previous session data and the current session
+ // data.
+ //
+ // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)
+ // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but
+ // PHP isn't low level to be able to use those as sources and on a web server there's not likely
+ // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use
+ // however. a ton of people visiting the website. obviously you don't want to base your seeding
+ // soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled
+ // by the user and (2) this isn't just looking at the data sent by the current user - it's based
+ // on the data sent by all users. one user requests the page and a hash of their info is saved.
+ // another user visits the page and the serialization of their data is utilized along with the
+ // server envirnment stuff and a hash of the previous http request data (which itself utilizes
+ // a hash of the session data before that). certainly an attacker should be assumed to have
+ // full control over his own http requests. he, however, is not going to have control over
+ // everyone's http requests.
+ static $crypto = false, $v;
+ if ($crypto === false) {
+ // save old session data
+ $old_session_id = session_id();
+ $old_use_cookies = ini_get('session.use_cookies');
+ $old_session_cache_limiter = session_cache_limiter();
+ if (isset($_SESSION)) {
+ $_OLD_SESSION = $_SESSION;
+ }
+ if ($old_session_id != '') {
+ session_write_close();
+ }
+
+ session_id(1);
+ ini_set('session.use_cookies', 0);
+ session_cache_limiter('');
+ session_start();
+
+ $v = $seed = $_SESSION['seed'] = pack('H*', sha1(
+ serialize($_SERVER) .
+ serialize($_POST) .
+ serialize($_GET) .
+ serialize($_COOKIE) .
+ serialize($_GLOBAL) .
+ serialize($_SESSION) .
+ serialize($_OLD_SESSION)
+ ));
+ if (!isset($_SESSION['count'])) {
+ $_SESSION['count'] = 0;
+ }
+ $_SESSION['count']++;
+
+ session_write_close();
+
+ // restore old session data
+ if ($old_session_id != '') {
+ session_id($old_session_id);
+ session_start();
+ ini_set('session.use_cookies', $old_use_cookies);
+ session_cache_limiter($old_session_cache_limiter);
+ } else {
+ if (isset($_OLD_SESSION)) {
+ $_SESSION = $_OLD_SESSION;
+ unset($_OLD_SESSION);
+ } else {
+ unset($_SESSION);
+ }
+ }
+
+ // in SSH2 a shared secret and an exchange hash are generated through the key exchange process.
+ // the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C.
+ // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the
+ // original hash and the current hash. we'll be emulating that. for more info see the following URL:
+ //
+ // http://tools.ietf.org/html/rfc4253#section-7.2
+ //
+ // see the is_string($crypto) part for an example of how to expand the keys
+ $key = pack('H*', sha1($seed . 'A'));
+ $iv = pack('H*', sha1($seed . 'C'));
+
+ // ciphers are used as per the nist.gov link below. also, see this link:
+ //
+ // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives
+ switch (true) {
+ case class_exists('Crypt_AES'):
+ $crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
+ break;
+ case class_exists('Crypt_TripleDES'):
+ $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
+ break;
+ case class_exists('Crypt_DES'):
+ $crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
+ break;
+ case class_exists('Crypt_RC4'):
+ $crypto = new Crypt_RC4();
+ break;
+ default:
+ $crypto = $seed;
+ return crypt_random_string($length);
+ }
+
+ $crypto->setKey($key);
+ $crypto->setIV($iv);
+ $crypto->enableContinuousBuffer();
+ }
+
+ if (is_string($crypto)) {
+ // the following is based off of ANSI X9.31:
+ //
+ // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
+ //
+ // OpenSSL uses that same standard for it's random numbers:
+ //
+ // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c
+ // (do a search for "ANS X9.31 A.2.4")
+ //
+ // ANSI X9.31 recommends ciphers be used and phpseclib does use them if they're available (see
+ // later on in the code) but if they're not we'll use sha1
+ $result = '';
+ while (strlen($result) < $length) { // each loop adds 20 bytes
+ // microtime() isn't packed as "densely" as it could be but then neither is that the idea.
+ // the idea is simply to ensure that each "block" has a unique element to it.
+ $i = pack('H*', sha1(microtime()));
+ $r = pack('H*', sha1($i ^ $v));
+ $v = pack('H*', sha1($r ^ $i));
+ $result.= $r;
+ }
+ return substr($result, 0, $length);
+ }
+
+ //return $crypto->encrypt(str_repeat("\0", $length));
+
+ $result = '';
+ while (strlen($result) < $length) {
+ $i = $crypto->encrypt(microtime());
+ $r = $crypto->encrypt($i ^ $v);
+ $v = $crypto->encrypt($r ^ $i);
+ $result.= $r;
+ }
+ return substr($result, 0, $length);
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php
new file mode 100644
index 00000000000..335d5233c4d
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php
@@ -0,0 +1,1525 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of Rijndael.
+ *
+ * Does not use mcrypt, even when available, for reasons that are explained below.
+ *
+ * PHP versions 4 and 5
+ *
+ * If {@link Crypt_Rijndael::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits. If
+ * {@link Crypt_Rijndael::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
+ * {@link Crypt_Rijndael::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's
+ * 136-bits it'll be null-padded to 160-bits and 160 bits will be the key length until
+ * {@link Crypt_Rijndael::setKey() setKey()} is called, again, at which point, it'll be recalculated.
+ *
+ * Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length. mcrypt, for example,
+ * does not. AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
+ * algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224. Indeed, 160 and 224
+ * are first defined as valid key / block lengths in
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:
+ * Extensions: Other block and Cipher Key lengths.
+ *
+ * {@internal The variable names are the same as those in
+ * {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/Rijndael.php');
+ *
+ * $rijndael = new Crypt_Rijndael();
+ *
+ * $rijndael->setKey('abcdefghijklmnop');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $rijndael->decrypt($rijndael->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Crypt
+ * @package Crypt_Rijndael
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVIII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: Rijndael.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access public
+ * @see Crypt_Rijndael::encrypt()
+ * @see Crypt_Rijndael::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_RIJNDAEL_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_RIJNDAEL_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_RIJNDAEL_MODE_CBC', 2);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
+ */
+define('CRYPT_RIJNDAEL_MODE_CFB', 3);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
+ */
+define('CRYPT_RIJNDAEL_MODE_OFB', 4);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_Rijndael::Crypt_Rijndael()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_RIJNDAEL_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_RIJNDAEL_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of Rijndael.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_Rijndael
+ */
+class Crypt_Rijndael {
+ /**
+ * The Encryption Mode
+ *
+ * @see Crypt_Rijndael::Crypt_Rijndael()
+ * @var Integer
+ * @access private
+ */
+ var $mode;
+
+ /**
+ * The Key
+ *
+ * @see Crypt_Rijndael::setKey()
+ * @var String
+ * @access private
+ */
+ var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
+
+ /**
+ * The Initialization Vector
+ *
+ * @see Crypt_Rijndael::setIV()
+ * @var String
+ * @access private
+ */
+ var $iv = '';
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $encryptIV = '';
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $decryptIV = '';
+
+ /**
+ * Continuous Buffer status
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @var Boolean
+ * @access private
+ */
+ var $continuousBuffer = false;
+
+ /**
+ * Padding status
+ *
+ * @see Crypt_Rijndael::enablePadding()
+ * @var Boolean
+ * @access private
+ */
+ var $padding = true;
+
+ /**
+ * Does the key schedule need to be (re)calculated?
+ *
+ * @see setKey()
+ * @see setBlockLength()
+ * @see setKeyLength()
+ * @var Boolean
+ * @access private
+ */
+ var $changed = true;
+
+ /**
+ * Has the key length explicitly been set or should it be derived from the key, itself?
+ *
+ * @see setKeyLength()
+ * @var Boolean
+ * @access private
+ */
+ var $explicit_key_length = false;
+
+ /**
+ * The Key Schedule
+ *
+ * @see _setup()
+ * @var Array
+ * @access private
+ */
+ var $w;
+
+ /**
+ * The Inverse Key Schedule
+ *
+ * @see _setup()
+ * @var Array
+ * @access private
+ */
+ var $dw;
+
+ /**
+ * The Block Length
+ *
+ * @see setBlockLength()
+ * @var Integer
+ * @access private
+ * @internal The max value is 32, the min value is 16. All valid values are multiples of 4. Exists in conjunction with
+ * $Nb because we need this value and not $Nb to pad strings appropriately.
+ */
+ var $block_size = 16;
+
+ /**
+ * The Block Length divided by 32
+ *
+ * @see setBlockLength()
+ * @var Integer
+ * @access private
+ * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size
+ * because the encryption / decryption / key schedule creation requires this number and not $block_size. We could
+ * derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
+ * of that, we'll just precompute it once.
+ *
+ */
+ var $Nb = 4;
+
+ /**
+ * The Key Length
+ *
+ * @see setKeyLength()
+ * @var Integer
+ * @access private
+ * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $key_size
+ * because the encryption / decryption / key schedule creation requires this number and not $key_size. We could
+ * derive this from $key_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
+ * of that, we'll just precompute it once.
+ */
+ var $key_size = 16;
+
+ /**
+ * The Key Length divided by 32
+ *
+ * @see setKeyLength()
+ * @var Integer
+ * @access private
+ * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
+ */
+ var $Nk = 4;
+
+ /**
+ * The Number of Rounds
+ *
+ * @var Integer
+ * @access private
+ * @internal The max value is 14, the min value is 10.
+ */
+ var $Nr;
+
+ /**
+ * Shift offsets
+ *
+ * @var Array
+ * @access private
+ */
+ var $c;
+
+ /**
+ * Precomputed mixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $t0;
+
+ /**
+ * Precomputed mixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $t1;
+
+ /**
+ * Precomputed mixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $t2;
+
+ /**
+ * Precomputed mixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $t3;
+
+ /**
+ * Precomputed invMixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $dt0;
+
+ /**
+ * Precomputed invMixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $dt1;
+
+ /**
+ * Precomputed invMixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $dt2;
+
+ /**
+ * Precomputed invMixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $dt3;
+
+ /**
+ * Is the mode one that is paddable?
+ *
+ * @see Crypt_Rijndael::Crypt_Rijndael()
+ * @var Boolean
+ * @access private
+ */
+ var $paddable = false;
+
+ /**
+ * Encryption buffer for CTR, OFB and CFB modes
+ *
+ * @see Crypt_Rijndael::encrypt()
+ * @var String
+ * @access private
+ */
+ var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0);
+
+ /**
+ * Decryption buffer for CTR, OFB and CFB modes
+ *
+ * @see Crypt_Rijndael::decrypt()
+ * @var String
+ * @access private
+ */
+ var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0);
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be
+ * CRYPT_RIJNDAEL_MODE_ECB or CRYPT_RIJNDAEL_MODE_CBC. If not explictly set, CRYPT_RIJNDAEL_MODE_CBC will be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_Rijndael
+ * @access public
+ */
+ function Crypt_Rijndael($mode = CRYPT_RIJNDAEL_MODE_CBC)
+ {
+ switch ($mode) {
+ case CRYPT_RIJNDAEL_MODE_ECB:
+ case CRYPT_RIJNDAEL_MODE_CBC:
+ $this->paddable = true;
+ $this->mode = $mode;
+ break;
+ case CRYPT_RIJNDAEL_MODE_CTR:
+ case CRYPT_RIJNDAEL_MODE_CFB:
+ case CRYPT_RIJNDAEL_MODE_OFB:
+ $this->mode = $mode;
+ break;
+ default:
+ $this->paddable = true;
+ $this->mode = CRYPT_RIJNDAEL_MODE_CBC;
+ }
+
+ $t3 = &$this->t3;
+ $t2 = &$this->t2;
+ $t1 = &$this->t1;
+ $t0 = &$this->t0;
+
+ $dt3 = &$this->dt3;
+ $dt2 = &$this->dt2;
+ $dt1 = &$this->dt1;
+ $dt0 = &$this->dt0;
+
+ // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),
+ // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so
+ // those are the names we'll use.
+ $t3 = array(
+ 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
+ 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
+ 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
+ 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
+ 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
+ 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
+ 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
+ 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
+ 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
+ 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
+ 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
+ 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
+ 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
+ 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
+ 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
+ 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
+ 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
+ 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
+ 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
+ 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
+ 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
+ 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
+ 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
+ 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
+ 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
+ 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
+ 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
+ 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
+ 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
+ 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
+ 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
+ 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
+ );
+
+ $dt3 = array(
+ 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
+ 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
+ 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
+ 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
+ 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
+ 0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
+ 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
+ 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
+ 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
+ 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
+ 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
+ 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
+ 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
+ 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
+ 0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
+ 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
+ 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
+ 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
+ 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
+ 0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
+ 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
+ 0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
+ 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
+ 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
+ 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
+ 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
+ 0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
+ 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
+ 0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
+ 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
+ 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
+ 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
+ );
+
+ for ($i = 0; $i < 256; $i++) {
+ $t2[] = (($t3[$i] << 8) & 0xFFFFFF00) | (($t3[$i] >> 24) & 0x000000FF);
+ $t1[] = (($t3[$i] << 16) & 0xFFFF0000) | (($t3[$i] >> 16) & 0x0000FFFF);
+ $t0[] = (($t3[$i] << 24) & 0xFF000000) | (($t3[$i] >> 8) & 0x00FFFFFF);
+
+ $dt2[] = (($dt3[$i] << 8) & 0xFFFFFF00) | (($dt3[$i] >> 24) & 0x000000FF);
+ $dt1[] = (($dt3[$i] << 16) & 0xFFFF0000) | (($dt3[$i] >> 16) & 0x0000FFFF);
+ $dt0[] = (($dt3[$i] << 24) & 0xFF000000) | (($dt3[$i] >> 8) & 0x00FFFFFF);
+ }
+ }
+
+ /**
+ * Sets the key.
+ *
+ * Keys can be of any length. Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and
+ * whose length is a multiple of 32. If the key is less than 256-bits and the key length isn't set, we round the length
+ * up to the closest valid key length, padding $key with null bytes. If the key is more than 256-bits, we trim the
+ * excess bits.
+ *
+ * If the key is not explicitly set, it'll be assumed to be all null bytes.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $this->key = $key;
+ $this->changed = true;
+ }
+
+ /**
+ * Sets the initialization vector. (optional)
+ *
+ * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used. If not explictly set, it'll be assumed
+ * to be all zero's.
+ *
+ * @access public
+ * @param String $iv
+ */
+ function setIV($iv)
+ {
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, $this->block_size), $this->block_size, chr(0));
+ }
+
+ /**
+ * Sets the key length
+ *
+ * Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
+ * 128. If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount.
+ *
+ * @access public
+ * @param Integer $length
+ */
+ function setKeyLength($length)
+ {
+ $length >>= 5;
+ if ($length > 8) {
+ $length = 8;
+ } else if ($length < 4) {
+ $length = 4;
+ }
+ $this->Nk = $length;
+ $this->key_size = $length << 2;
+
+ $this->explicit_key_length = true;
+ $this->changed = true;
+ }
+
+ /**
+ * Sets the password.
+ *
+ * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+ * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}:
+ * $hash, $salt, $method
+ * Set $dkLen by calling setKeyLength()
+ *
+ * @param String $password
+ * @param optional String $method
+ * @access public
+ */
+ function setPassword($password, $method = 'pbkdf2')
+ {
+ $key = '';
+
+ switch ($method) {
+ default: // 'pbkdf2'
+ list(, , $hash, $salt, $count) = func_get_args();
+ if (!isset($hash)) {
+ $hash = 'sha1';
+ }
+ // WPA and WPA2 use the SSID as the salt
+ if (!isset($salt)) {
+ $salt = 'phpseclib';
+ }
+ // RFC2898#section-4.2 uses 1,000 iterations by default
+ // WPA and WPA2 use 4,096.
+ if (!isset($count)) {
+ $count = 1000;
+ }
+
+ if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+ }
+
+ $i = 1;
+ while (strlen($key) < $this->key_size) { // $dkLen == $this->key_size
+ //$dk.= $this->_pbkdf($password, $salt, $count, $i++);
+ $hmac = new Crypt_Hash();
+ $hmac->setHash($hash);
+ $hmac->setKey($password);
+ $f = $u = $hmac->hash($salt . pack('N', $i++));
+ for ($j = 2; $j <= $count; $j++) {
+ $u = $hmac->hash($u);
+ $f^= $u;
+ }
+ $key.= $f;
+ }
+ }
+
+ $this->setKey(substr($key, 0, $this->key_size));
+ }
+
+ /**
+ * Sets the block length
+ *
+ * Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
+ * 128. If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount.
+ *
+ * @access public
+ * @param Integer $length
+ */
+ function setBlockLength($length)
+ {
+ $length >>= 5;
+ if ($length > 8) {
+ $length = 8;
+ } else if ($length < 4) {
+ $length = 4;
+ }
+ $this->Nb = $length;
+ $this->block_size = $length << 2;
+ $this->changed = true;
+ }
+
+ /**
+ * Generate CTR XOR encryption key
+ *
+ * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+ * plaintext / ciphertext in CTR mode.
+ *
+ * @see Crypt_Rijndael::decrypt()
+ * @see Crypt_Rijndael::encrypt()
+ * @access public
+ * @param Integer $length
+ * @param String $iv
+ */
+ function _generate_xor($length, &$iv)
+ {
+ $xor = '';
+ $block_size = $this->block_size;
+ $num_blocks = floor(($length + ($block_size - 1)) / $block_size);
+ for ($i = 0; $i < $num_blocks; $i++) {
+ $xor.= $iv;
+ for ($j = 4; $j <= $block_size; $j+=4) {
+ $temp = substr($iv, -$j, 4);
+ switch ($temp) {
+ case "\xFF\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+ break;
+ case "\x7F\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+ break 2;
+ default:
+ extract(unpack('Ncount', $temp));
+ $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+ break 2;
+ }
+ }
+ }
+
+ return $xor;
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other Rjindael
+ * implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's
+ * necessary are discussed in the following
+ * URL:
+ *
+ * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+ *
+ * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
+ * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that
+ * length.
+ *
+ * @see Crypt_Rijndael::decrypt()
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ $this->_setup();
+ if ($this->paddable) {
+ $plaintext = $this->_pad($plaintext);
+ }
+
+ $block_size = $this->block_size;
+ $buffer = &$this->enbuffer;
+ $ciphertext = '';
+ switch ($this->mode) {
+ case CRYPT_RIJNDAEL_MODE_ECB:
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CBC:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $block = substr($plaintext, $i, $block_size);
+ $block = $this->_encryptBlock($block ^ $xor);
+ $xor = $block;
+ $ciphertext.= $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CTR:
+ $xor = $this->encryptIV;
+ if (strlen($buffer['encrypted'])) {
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $block = substr($plaintext, $i, $block_size);
+ $buffer['encrypted'].= $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+ $key = $this->_string_shift($buffer['encrypted'], $block_size);
+ $ciphertext.= $block ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $block = substr($plaintext, $i, $block_size);
+ $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+ $ciphertext.= $block ^ $key;
+ }
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ if ($start = strlen($plaintext) % $block_size) {
+ $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted'];
+ }
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CFB:
+ // cfb loosely routines inspired by openssl's:
+ // http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1
+ if ($this->continuousBuffer) {
+ $iv = &$this->encryptIV;
+ $pos = &$buffer['pos'];
+ } else {
+ $iv = $this->encryptIV;
+ $pos = 0;
+ }
+ $len = strlen($plaintext);
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = $block_size - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+ $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+ $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+ }
+ while ($len >= $block_size) {
+ $iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
+ $ciphertext.= $iv;
+ $len-= $block_size;
+ $i+= $block_size;
+ }
+ if ($len) {
+ $iv = $this->_encryptBlock($iv);
+ $block = $iv ^ substr($plaintext, $i);
+ $iv = substr_replace($iv, $block, 0, $len);
+ $ciphertext.= $block;
+ $pos = $len;
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_OFB:
+ $xor = $this->encryptIV;
+ if (strlen($buffer['xor'])) {
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $xor = $this->_encryptBlock($xor);
+ $buffer['xor'].= $xor;
+ $key = $this->_string_shift($buffer['xor'], $block_size);
+ $ciphertext.= substr($plaintext, $i, $block_size) ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $xor = $this->_encryptBlock($xor);
+ $ciphertext.= substr($plaintext, $i, $block_size) ^ $xor;
+ }
+ $key = $xor;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ if ($start = strlen($plaintext) % $block_size) {
+ $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+ }
+ }
+ }
+
+ return $ciphertext;
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
+ * it is.
+ *
+ * @see Crypt_Rijndael::encrypt()
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ $this->_setup();
+
+ if ($this->paddable) {
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0));
+ }
+
+ $block_size = $this->block_size;
+ $buffer = &$this->debuffer;
+ $plaintext = '';
+ switch ($this->mode) {
+ case CRYPT_RIJNDAEL_MODE_ECB:
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CBC:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $block = substr($ciphertext, $i, $block_size);
+ $plaintext.= $this->_decryptBlock($block) ^ $xor;
+ $xor = $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CTR:
+ $xor = $this->decryptIV;
+ if (strlen($buffer['ciphertext'])) {
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $block = substr($ciphertext, $i, $block_size);
+ $buffer['ciphertext'].= $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+ $key = $this->_string_shift($buffer['ciphertext'], $block_size);
+ $plaintext.= $block ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $block = substr($ciphertext, $i, $block_size);
+ $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+ $plaintext.= $block ^ $key;
+ }
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ if ($start = strlen($ciphertext) % $block_size) {
+ $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+ }
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CFB:
+ if ($this->continuousBuffer) {
+ $iv = &$this->decryptIV;
+ $pos = &$buffer['pos'];
+ } else {
+ $iv = $this->decryptIV;
+ $pos = 0;
+ }
+ $len = strlen($ciphertext);
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = $block_size - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+ $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+ $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+ }
+ while ($len >= $block_size) {
+ $iv = $this->_encryptBlock($iv);
+ $cb = substr($ciphertext, $i, $block_size);
+ $plaintext.= $iv ^ $cb;
+ $iv = $cb;
+ $len-= $block_size;
+ $i+= $block_size;
+ }
+ if ($len) {
+ $iv = $this->_encryptBlock($iv);
+ $plaintext.= $iv ^ substr($ciphertext, $i);
+ $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
+ $pos = $len;
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_OFB:
+ $xor = $this->decryptIV;
+ if (strlen($buffer['xor'])) {
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $xor = $this->_encryptBlock($xor);
+ $buffer['xor'].= $xor;
+ $key = $this->_string_shift($buffer['xor'], $block_size);
+ $plaintext.= substr($ciphertext, $i, $block_size) ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $xor = $this->_encryptBlock($xor);
+ $plaintext.= substr($ciphertext, $i, $block_size) ^ $xor;
+ }
+ $key = $xor;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ if ($start = strlen($ciphertext) % $block_size) {
+ $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+ }
+ }
+ }
+
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ /**
+ * Encrypts a block
+ *
+ * @access private
+ * @param String $in
+ * @return String
+ */
+ function _encryptBlock($in)
+ {
+ $state = array();
+ $words = unpack('N*word', $in);
+
+ $w = $this->w;
+ $t0 = $this->t0;
+ $t1 = $this->t1;
+ $t2 = $this->t2;
+ $t3 = $this->t3;
+ $Nb = $this->Nb;
+ $Nr = $this->Nr;
+ $c = $this->c;
+
+ // addRoundKey
+ $i = -1;
+ foreach ($words as $word) {
+ $state[] = $word ^ $w[0][++$i];
+ }
+
+ // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components -
+ // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding
+ // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
+ // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
+ // Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1],
+ // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.
+
+ // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
+ $temp = array();
+ for ($round = 1; $round < $Nr; ++$round) {
+ $i = 0; // $c[0] == 0
+ $j = $c[1];
+ $k = $c[2];
+ $l = $c[3];
+
+ while ($i < $Nb) {
+ $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^
+ $t1[$state[$j] >> 16 & 0x000000FF] ^
+ $t2[$state[$k] >> 8 & 0x000000FF] ^
+ $t3[$state[$l] & 0x000000FF] ^
+ $w[$round][$i];
+ ++$i;
+ $j = ($j + 1) % $Nb;
+ $k = ($k + 1) % $Nb;
+ $l = ($l + 1) % $Nb;
+ }
+ $state = $temp;
+ }
+
+ // subWord
+ for ($i = 0; $i < $Nb; ++$i) {
+ $state[$i] = $this->_subWord($state[$i]);
+ }
+
+ // shiftRows + addRoundKey
+ $i = 0; // $c[0] == 0
+ $j = $c[1];
+ $k = $c[2];
+ $l = $c[3];
+ while ($i < $Nb) {
+ $temp[$i] = ($state[$i] & 0xFF000000) ^
+ ($state[$j] & 0x00FF0000) ^
+ ($state[$k] & 0x0000FF00) ^
+ ($state[$l] & 0x000000FF) ^
+ $w[$Nr][$i];
+ ++$i;
+ $j = ($j + 1) % $Nb;
+ $k = ($k + 1) % $Nb;
+ $l = ($l + 1) % $Nb;
+ }
+
+ // 100% ugly switch/case code... but ~5% faster (meaning: ~half second faster de/encrypting 1MB text, tested with php5.4.9 on linux/32bit with an AMD Athlon II P360 CPU) then the commented smart code below. Don't know it's worth or not
+ switch ($Nb) {
+ case 8:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
+ case 7:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
+ case 6:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
+ case 5:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
+ default:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
+ }
+ /*
+ $state = $temp;
+
+ array_unshift($state, 'N*');
+
+ return call_user_func_array('pack', $state);
+ */
+ }
+
+ /**
+ * Decrypts a block
+ *
+ * @access private
+ * @param String $in
+ * @return String
+ */
+ function _decryptBlock($in)
+ {
+ $state = array();
+ $words = unpack('N*word', $in);
+
+ $dw = $this->dw;
+ $dt0 = $this->dt0;
+ $dt1 = $this->dt1;
+ $dt2 = $this->dt2;
+ $dt3 = $this->dt3;
+ $Nb = $this->Nb;
+ $Nr = $this->Nr;
+ $c = $this->c;
+
+ // addRoundKey
+ $i = -1;
+ foreach ($words as $word) {
+ $state[] = $word ^ $dw[$Nr][++$i];
+ }
+
+ $temp = array();
+ for ($round = $Nr - 1; $round > 0; --$round) {
+ $i = 0; // $c[0] == 0
+ $j = $Nb - $c[1];
+ $k = $Nb - $c[2];
+ $l = $Nb - $c[3];
+
+ while ($i < $Nb) {
+ $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^
+ $dt1[$state[$j] >> 16 & 0x000000FF] ^
+ $dt2[$state[$k] >> 8 & 0x000000FF] ^
+ $dt3[$state[$l] & 0x000000FF] ^
+ $dw[$round][$i];
+ ++$i;
+ $j = ($j + 1) % $Nb;
+ $k = ($k + 1) % $Nb;
+ $l = ($l + 1) % $Nb;
+ }
+ $state = $temp;
+ }
+
+ // invShiftRows + invSubWord + addRoundKey
+ $i = 0; // $c[0] == 0
+ $j = $Nb - $c[1];
+ $k = $Nb - $c[2];
+ $l = $Nb - $c[3];
+
+ while ($i < $Nb) {
+ $temp[$i] = $dw[0][$i] ^
+ $this->_invSubWord(($state[$i] & 0xFF000000) |
+ ($state[$j] & 0x00FF0000) |
+ ($state[$k] & 0x0000FF00) |
+ ($state[$l] & 0x000000FF));
+ ++$i;
+ $j = ($j + 1) % $Nb;
+ $k = ($k + 1) % $Nb;
+ $l = ($l + 1) % $Nb;
+ }
+
+ switch ($Nb) {
+ case 8:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
+ case 7:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
+ case 6:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
+ case 5:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
+ default:
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
+ }
+ /*
+ $state = $temp;
+
+ array_unshift($state, 'N*');
+
+ return call_user_func_array('pack', $state);
+ */
+ }
+
+ /**
+ * Setup Rijndael
+ *
+ * Validates all the variables and calculates $Nr - the number of rounds that need to be performed - and $w - the key
+ * key schedule.
+ *
+ * @access private
+ */
+ function _setup()
+ {
+ // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
+ // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
+ static $rcon = array(0,
+ 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
+ 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
+ 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
+ 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
+ 0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
+ 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
+ );
+
+ if (!$this->changed) {
+ return;
+ }
+
+ if (!$this->explicit_key_length) {
+ // we do >> 2, here, and not >> 5, as we do above, since strlen($this->key) tells us the number of bytes - not bits
+ $length = strlen($this->key) >> 2;
+ if ($length > 8) {
+ $length = 8;
+ } else if ($length < 4) {
+ $length = 4;
+ }
+ $this->Nk = $length;
+ $this->key_size = $length << 2;
+ }
+
+ $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0));
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, chr(0));
+
+ // see Rijndael-ammended.pdf#page=44
+ $this->Nr = max($this->Nk, $this->Nb) + 6;
+
+ // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,
+ // "Table 8: Shift offsets in Shiftrow for the alternative block lengths"
+ // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,
+ // "Table 2: Shift offsets for different block lengths"
+ switch ($this->Nb) {
+ case 4:
+ case 5:
+ case 6:
+ $this->c = array(0, 1, 2, 3);
+ break;
+ case 7:
+ $this->c = array(0, 1, 2, 4);
+ break;
+ case 8:
+ $this->c = array(0, 1, 3, 4);
+ }
+
+ $key = $this->key;
+
+ $w = array_values(unpack('N*words', $key));
+
+ $length = $this->Nb * ($this->Nr + 1);
+ for ($i = $this->Nk; $i < $length; $i++) {
+ $temp = $w[$i - 1];
+ if ($i % $this->Nk == 0) {
+ // according to <http://php.net/language.types.integer>, "the size of an integer is platform-dependent".
+ // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
+ // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
+ // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
+ $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
+ $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk];
+ } else if ($this->Nk > 6 && $i % $this->Nk == 4) {
+ $temp = $this->_subWord($temp);
+ }
+ $w[$i] = $w[$i - $this->Nk] ^ $temp;
+ }
+
+ // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
+ // and generate the inverse key schedule. more specifically,
+ // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),
+ // "The key expansion for the Inverse Cipher is defined as follows:
+ // 1. Apply the Key Expansion.
+ // 2. Apply InvMixColumn to all Round Keys except the first and the last one."
+ // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
+ $temp = array();
+ for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
+ if ($col == $this->Nb) {
+ if ($row == 0) {
+ $this->dw[0] = $this->w[0];
+ } else {
+ // subWord + invMixColumn + invSubWord = invMixColumn
+ $j = 0;
+ while ($j < $this->Nb) {
+ $dw = $this->_subWord($this->w[$row][$j]);
+ $temp[$j] = $this->dt0[$dw >> 24 & 0x000000FF] ^
+ $this->dt1[$dw >> 16 & 0x000000FF] ^
+ $this->dt2[$dw >> 8 & 0x000000FF] ^
+ $this->dt3[$dw & 0x000000FF];
+ $j++;
+ }
+ $this->dw[$row] = $temp;
+ }
+
+ $col = 0;
+ $row++;
+ }
+ $this->w[$row][$col] = $w[$i];
+ }
+
+ $this->dw[$row] = $this->w[$row];
+
+ $this->changed = false;
+ }
+
+ /**
+ * Performs S-Box substitutions
+ *
+ * @access private
+ */
+ function _subWord($word)
+ {
+ static $sbox0, $sbox1, $sbox2, $sbox3;
+
+ if (empty($sbox0)) {
+ $sbox0 = array(
+ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+ );
+
+ $sbox1 = array();
+ $sbox2 = array();
+ $sbox3 = array();
+
+ for ($i = 0; $i < 256; $i++) {
+ $sbox1[] = $sbox0[$i] << 8;
+ $sbox2[] = $sbox0[$i] << 16;
+ $sbox3[] = $sbox0[$i] << 24;
+ }
+ }
+
+ return $sbox0[$word & 0x000000FF] |
+ $sbox1[$word >> 8 & 0x000000FF] |
+ $sbox2[$word >> 16 & 0x000000FF] |
+ $sbox3[$word >> 24 & 0x000000FF];
+ }
+
+
+ /**
+ * Performs inverse S-Box substitutions
+ *
+ * @access private
+ */
+ function _invSubWord($word)
+ {
+ static $sbox0, $sbox1, $sbox2, $sbox3;
+
+ if (empty($sbox0)) {
+ $sbox0 = array(
+ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+ );
+
+ $sbox1 = array();
+ $sbox2 = array();
+ $sbox3 = array();
+
+ for ($i = 0; $i < 256; $i++) {
+ $sbox1[] = $sbox0[$i] << 8;
+ $sbox2[] = $sbox0[$i] << 16;
+ $sbox3[] = $sbox0[$i] << 24;
+ }
+ }
+
+ return $sbox0[$word & 0x000000FF] |
+ $sbox1[$word >> 8 & 0x000000FF] |
+ $sbox2[$word >> 16 & 0x000000FF] |
+ $sbox3[$word >> 24 & 0x000000FF];
+ }
+
+ /**
+ * Pad "packets".
+ *
+ * Rijndael works by encrypting between sixteen and thirty-two bytes at a time, provided that number is also a multiple
+ * of four. If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
+ * pad the input so that it is of the proper length.
+ *
+ * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH,
+ * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
+ * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+ * transmitted separately)
+ *
+ * @see Crypt_Rijndael::disablePadding()
+ * @access public
+ */
+ function enablePadding()
+ {
+ $this->padding = true;
+ }
+
+ /**
+ * Do not pad packets.
+ *
+ * @see Crypt_Rijndael::enablePadding()
+ * @access public
+ */
+ function disablePadding()
+ {
+ $this->padding = false;
+ }
+
+ /**
+ * Pads a string
+ *
+ * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
+ * $block_size - (strlen($text) % $block_size) bytes are added, each of which is equal to
+ * chr($block_size - (strlen($text) % $block_size)
+ *
+ * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+ * and padding will, hence forth, be enabled.
+ *
+ * @see Crypt_Rijndael::_unpad()
+ * @access private
+ */
+ function _pad($text)
+ {
+ $length = strlen($text);
+
+ if (!$this->padding) {
+ if ($length % $this->block_size == 0) {
+ return $text;
+ } else {
+ user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})");
+ $this->padding = true;
+ }
+ }
+
+ $pad = $this->block_size - ($length % $this->block_size);
+
+ return str_pad($text, $length + $pad, chr($pad));
+ }
+
+ /**
+ * Unpads a string.
+ *
+ * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+ * and false will be returned.
+ *
+ * @see Crypt_Rijndael::_pad()
+ * @access private
+ */
+ function _unpad($text)
+ {
+ if (!$this->padding) {
+ return $text;
+ }
+
+ $length = ord($text[strlen($text) - 1]);
+
+ if (!$length || $length > $this->block_size) {
+ return false;
+ }
+
+ return substr($text, 0, -$length);
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets
+ * will yield different outputs:
+ *
+ * <code>
+ * echo $rijndael->encrypt(substr($plaintext, 0, 16));
+ * echo $rijndael->encrypt(substr($plaintext, 16, 16));
+ * </code>
+ * <code>
+ * echo $rijndael->encrypt($plaintext);
+ * </code>
+ *
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
+ * another, as demonstrated with the following:
+ *
+ * <code>
+ * $rijndael->encrypt(substr($plaintext, 0, 16));
+ * echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16)));
+ * </code>
+ * <code>
+ * echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16)));
+ * </code>
+ *
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
+ *
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_Rijndael() object changes after each
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
+ * however, they are also less intuitive and more likely to cause you problems.
+ *
+ * @see Crypt_Rijndael::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ $this->continuousBuffer = true;
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ $this->continuousBuffer = false;
+ $this->encryptIV = $this->iv;
+ $this->decryptIV = $this->iv;
+ $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0);
+ $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0);
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1: \ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php
new file mode 100644
index 00000000000..3b4c8c3622f
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php
@@ -0,0 +1,1080 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of Triple DES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise. Operates in the EDE3 mode (encrypt-decrypt-encrypt).
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/TripleDES.php');
+ *
+ * $des = new Crypt_TripleDES();
+ *
+ * $des->setKey('abcdefghijklmnopqrstuvwx');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $des->decrypt($des->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Crypt
+ * @package Crypt_TripleDES
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: TripleDES.php,v 1.13 2010/02/26 03:40:25 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Crypt_DES
+ */
+if (!class_exists('Crypt_DES')) {
+ require_once('DES.php');
+}
+
+/**
+ * Encrypt / decrypt using inner chaining
+ *
+ * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (CRYPT_DES_MODE_CBC3).
+ */
+define('CRYPT_DES_MODE_3CBC', -2);
+
+/**
+ * Encrypt / decrypt using outer chaining
+ *
+ * Outer chaining is used by SSH-2 and when the mode is set to CRYPT_DES_MODE_CBC.
+ */
+define('CRYPT_DES_MODE_CBC3', CRYPT_DES_MODE_CBC);
+
+/**
+ * Pure-PHP implementation of Triple DES.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_TerraDES
+ */
+class Crypt_TripleDES {
+ /**
+ * The Three Keys
+ *
+ * @see Crypt_TripleDES::setKey()
+ * @var String
+ * @access private
+ */
+ var $key = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * The Encryption Mode
+ *
+ * @see Crypt_TripleDES::Crypt_TripleDES()
+ * @var Integer
+ * @access private
+ */
+ var $mode = CRYPT_DES_MODE_CBC;
+
+ /**
+ * Continuous Buffer status
+ *
+ * @see Crypt_TripleDES::enableContinuousBuffer()
+ * @var Boolean
+ * @access private
+ */
+ var $continuousBuffer = false;
+
+ /**
+ * Padding status
+ *
+ * @see Crypt_TripleDES::enablePadding()
+ * @var Boolean
+ * @access private
+ */
+ var $padding = true;
+
+ /**
+ * The Initialization Vector
+ *
+ * @see Crypt_TripleDES::setIV()
+ * @var String
+ * @access private
+ */
+ var $iv = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_TripleDES::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $encryptIV = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_TripleDES::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $decryptIV = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * The Crypt_DES objects
+ *
+ * @var Array
+ * @access private
+ */
+ var $des;
+
+ /**
+ * mcrypt resource for encryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_TripleDES::encrypt()
+ * @var String
+ * @access private
+ */
+ var $enmcrypt;
+
+ /**
+ * mcrypt resource for decryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_TripleDES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $demcrypt;
+
+ /**
+ * Does the enmcrypt resource need to be (re)initialized?
+ *
+ * @see Crypt_TripleDES::setKey()
+ * @see Crypt_TripleDES::setIV()
+ * @var Boolean
+ * @access private
+ */
+ var $enchanged = true;
+
+ /**
+ * Does the demcrypt resource need to be (re)initialized?
+ *
+ * @see Crypt_TripleDES::setKey()
+ * @see Crypt_TripleDES::setIV()
+ * @var Boolean
+ * @access private
+ */
+ var $dechanged = true;
+
+ /**
+ * Is the mode one that is paddable?
+ *
+ * @see Crypt_TripleDES::Crypt_TripleDES()
+ * @var Boolean
+ * @access private
+ */
+ var $paddable = false;
+
+ /**
+ * Encryption buffer for CTR, OFB and CFB modes
+ *
+ * @see Crypt_TripleDES::encrypt()
+ * @var Array
+ * @access private
+ */
+ var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+
+ /**
+ * Decryption buffer for CTR, OFB and CFB modes
+ *
+ * @see Crypt_TripleDES::decrypt()
+ * @var Array
+ * @access private
+ */
+ var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true);
+
+ /**
+ * mcrypt resource for CFB mode
+ *
+ * @see Crypt_TripleDES::encrypt()
+ * @see Crypt_TripleDES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $ecb;
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be
+ * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC. If not explictly set, CRYPT_DES_MODE_CBC will be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_TripleDES
+ * @access public
+ */
+ function Crypt_TripleDES($mode = CRYPT_DES_MODE_CBC)
+ {
+ if ( !defined('CRYPT_DES_MODE') ) {
+ switch (true) {
+ case extension_loaded('mcrypt') && in_array('tripledes', mcrypt_list_algorithms()):
+ define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT);
+ break;
+ default:
+ define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL);
+ }
+ }
+
+ if ( $mode == CRYPT_DES_MODE_3CBC ) {
+ $this->mode = CRYPT_DES_MODE_3CBC;
+ $this->des = array(
+ new Crypt_DES(CRYPT_DES_MODE_CBC),
+ new Crypt_DES(CRYPT_DES_MODE_CBC),
+ new Crypt_DES(CRYPT_DES_MODE_CBC)
+ );
+ $this->paddable = true;
+
+ // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects
+ $this->des[0]->disablePadding();
+ $this->des[1]->disablePadding();
+ $this->des[2]->disablePadding();
+
+ return;
+ }
+
+ switch ( CRYPT_DES_MODE ) {
+ case CRYPT_DES_MODE_MCRYPT:
+ switch ($mode) {
+ case CRYPT_DES_MODE_ECB:
+ $this->paddable = true;
+ $this->mode = MCRYPT_MODE_ECB;
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $this->mode = 'ctr';
+ break;
+ case CRYPT_DES_MODE_CFB:
+ $this->mode = 'ncfb';
+ $this->ecb = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
+ break;
+ case CRYPT_DES_MODE_OFB:
+ $this->mode = MCRYPT_MODE_NOFB;
+ break;
+ case CRYPT_DES_MODE_CBC:
+ default:
+ $this->paddable = true;
+ $this->mode = MCRYPT_MODE_CBC;
+ }
+ $this->enmcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, '');
+ $this->demcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, '');
+
+ break;
+ default:
+ $this->des = array(
+ new Crypt_DES(CRYPT_DES_MODE_ECB),
+ new Crypt_DES(CRYPT_DES_MODE_ECB),
+ new Crypt_DES(CRYPT_DES_MODE_ECB)
+ );
+
+ // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects
+ $this->des[0]->disablePadding();
+ $this->des[1]->disablePadding();
+ $this->des[2]->disablePadding();
+
+ switch ($mode) {
+ case CRYPT_DES_MODE_ECB:
+ case CRYPT_DES_MODE_CBC:
+ $this->paddable = true;
+ $this->mode = $mode;
+ break;
+ case CRYPT_DES_MODE_CTR:
+ case CRYPT_DES_MODE_CFB:
+ case CRYPT_DES_MODE_OFB:
+ $this->mode = $mode;
+ break;
+ default:
+ $this->paddable = true;
+ $this->mode = CRYPT_DES_MODE_CBC;
+ }
+ }
+ }
+
+ /**
+ * Sets the key.
+ *
+ * Keys can be of any length. Triple DES, itself, can use 128-bit (eg. strlen($key) == 16) or
+ * 192-bit (eg. strlen($key) == 24) keys. This function pads and truncates $key as appropriate.
+ *
+ * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
+ *
+ * If the key is not explicitly set, it'll be assumed to be all zero's.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $length = strlen($key);
+ if ($length > 8) {
+ $key = str_pad($key, 24, chr(0));
+ // if $key is between 64 and 128-bits, use the first 64-bits as the last, per this:
+ // http://php.net/function.mcrypt-encrypt#47973
+ //$key = $length <= 16 ? substr_replace($key, substr($key, 0, 8), 16) : substr($key, 0, 24);
+ } else {
+ $key = str_pad($key, 8, chr(0));
+ }
+ $this->key = $key;
+ switch (true) {
+ case CRYPT_DES_MODE == CRYPT_DES_MODE_INTERNAL:
+ case $this->mode == CRYPT_DES_MODE_3CBC:
+ $this->des[0]->setKey(substr($key, 0, 8));
+ $this->des[1]->setKey(substr($key, 8, 8));
+ $this->des[2]->setKey(substr($key, 16, 8));
+ }
+ $this->enchanged = $this->dechanged = true;
+ }
+
+ /**
+ * Sets the password.
+ *
+ * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+ * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}:
+ * $hash, $salt, $method
+ *
+ * @param String $password
+ * @param optional String $method
+ * @access public
+ */
+ function setPassword($password, $method = 'pbkdf2')
+ {
+ $key = '';
+
+ switch ($method) {
+ default: // 'pbkdf2'
+ list(, , $hash, $salt, $count) = func_get_args();
+ if (!isset($hash)) {
+ $hash = 'sha1';
+ }
+ // WPA and WPA2 use the SSID as the salt
+ if (!isset($salt)) {
+ $salt = 'phpseclib';
+ }
+ // RFC2898#section-4.2 uses 1,000 iterations by default
+ // WPA and WPA2 use 4,096.
+ if (!isset($count)) {
+ $count = 1000;
+ }
+
+ if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+ }
+
+ $i = 1;
+ while (strlen($key) < 24) { // $dkLen == 24
+ $hmac = new Crypt_Hash();
+ $hmac->setHash($hash);
+ $hmac->setKey($password);
+ $f = $u = $hmac->hash($salt . pack('N', $i++));
+ for ($j = 2; $j <= $count; $j++) {
+ $u = $hmac->hash($u);
+ $f^= $u;
+ }
+ $key.= $f;
+ }
+ }
+
+ $this->setKey($key);
+ }
+
+ /**
+ * Sets the initialization vector. (optional)
+ *
+ * SetIV is not required when CRYPT_DES_MODE_ECB is being used. If not explictly set, it'll be assumed
+ * to be all zero's.
+ *
+ * @access public
+ * @param String $iv
+ */
+ function setIV($iv)
+ {
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0));
+ if ($this->mode == CRYPT_DES_MODE_3CBC) {
+ $this->des[0]->setIV($iv);
+ $this->des[1]->setIV($iv);
+ $this->des[2]->setIV($iv);
+ }
+ $this->enchanged = $this->dechanged = true;
+ }
+
+ /**
+ * Generate CTR XOR encryption key
+ *
+ * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+ * plaintext / ciphertext in CTR mode.
+ *
+ * @see Crypt_TripleDES::decrypt()
+ * @see Crypt_TripleDES::encrypt()
+ * @access private
+ * @param String $iv
+ */
+ function _generate_xor(&$iv)
+ {
+ $xor = $iv;
+ for ($j = 4; $j <= 8; $j+=4) {
+ $temp = substr($iv, -$j, 4);
+ switch ($temp) {
+ case "\xFF\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+ break;
+ case "\x7F\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+ break 2;
+ default:
+ extract(unpack('Ncount', $temp));
+ $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+ break 2;
+ }
+ }
+
+ return $xor;
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ if ($this->paddable) {
+ $plaintext = $this->_pad($plaintext);
+ }
+
+ // if the key is smaller then 8, do what we'd normally do
+ if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) {
+ $ciphertext = $this->des[2]->encrypt($this->des[1]->decrypt($this->des[0]->encrypt($plaintext)));
+
+ return $ciphertext;
+ }
+
+ if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+ if ($this->enchanged) {
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
+ if ($this->mode == 'ncfb') {
+ mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0");
+ }
+ $this->enchanged = false;
+ }
+
+ if ($this->mode != 'ncfb' || !$this->continuousBuffer) {
+ $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+ } else {
+ $iv = &$this->encryptIV;
+ $pos = &$this->enbuffer['pos'];
+ $len = strlen($plaintext);
+ $ciphertext = '';
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = 8 - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+ $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+ $this->enbuffer['enmcrypt_init'] = true;
+ }
+ if ($len >= 8) {
+ if ($this->enbuffer['enmcrypt_init'] === false || $len > 950) {
+ if ($this->enbuffer['enmcrypt_init'] === true) {
+ mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
+ $this->enbuffer['enmcrypt_init'] = false;
+ }
+ $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 8));
+ $iv = substr($ciphertext, -8);
+ $i = strlen($ciphertext);
+ $len%= 8;
+ } else {
+ while ($len >= 8) {
+ $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 8);
+ $ciphertext.= $iv;
+ $len-= 8;
+ $i+= 8;
+ }
+ }
+ }
+ if ($len) {
+ $iv = mcrypt_generic($this->ecb, $iv);
+ $block = $iv ^ substr($plaintext, $i);
+ $iv = substr_replace($iv, $block, 0, $len);
+ $ciphertext.= $block;
+ $pos = $len;
+ }
+ return $ciphertext;
+ }
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
+ }
+
+ return $ciphertext;
+ }
+
+ if (strlen($this->key) <= 8) {
+ $this->des[0]->mode = $this->mode;
+
+ return $this->des[0]->encrypt($plaintext);
+ }
+
+ $des = $this->des;
+
+ $buffer = &$this->enbuffer;
+ $continuousBuffer = $this->continuousBuffer;
+ $ciphertext = '';
+ switch ($this->mode) {
+ case CRYPT_DES_MODE_ECB:
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ // all of these _processBlock calls could, in theory, be put in a function - say Crypt_TripleDES::_ede_encrypt() or something.
+ // only problem with that: it would slow encryption and decryption down. $this->des would have to be called every time that
+ // function is called, instead of once for the whole string of text that's being encrypted, which would, in turn, make
+ // encryption and decryption take more time, per this:
+ //
+ // http://blog.libssh2.org/index.php?/archives/21-Compiled-Variables.html
+ $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $ciphertext.= $block;
+ }
+ break;
+ case CRYPT_DES_MODE_CBC:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8) ^ $xor;
+ $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $xor = $block;
+ $ciphertext.= $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $xor = $this->encryptIV;
+ if (strlen($buffer['encrypted'])) {
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $key = $this->_generate_xor($xor);
+ $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+ $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $buffer['encrypted'].= $key;
+ $key = $this->_string_shift($buffer['encrypted'], 8);
+ $ciphertext.= $block ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $key = $this->_generate_xor($xor);
+ $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+ $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $ciphertext.= $block ^ $key;
+ }
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ if ($start = strlen($plaintext) & 7) {
+ $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted'];
+ }
+ }
+ break;
+ case CRYPT_DES_MODE_CFB:
+ if (strlen($buffer['xor'])) {
+ $ciphertext = $plaintext ^ $buffer['xor'];
+ $iv = $buffer['encrypted'] . $ciphertext;
+ $start = strlen($ciphertext);
+ $buffer['encrypted'].= $ciphertext;
+ $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
+ } else {
+ $ciphertext = '';
+ $iv = $this->encryptIV;
+ $start = 0;
+ }
+
+ for ($i = $start; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $iv = $des[0]->_processBlock($iv, CRYPT_DES_ENCRYPT);
+ $iv = $des[1]->_processBlock($iv, CRYPT_DES_DECRYPT);
+ $xor= $des[2]->_processBlock($iv, CRYPT_DES_ENCRYPT);
+
+ $iv = $block ^ $xor;
+ if ($continuousBuffer && strlen($iv) != 8) {
+ $buffer = array(
+ 'encrypted' => $iv,
+ 'xor' => substr($xor, strlen($iv))
+ );
+ }
+ $ciphertext.= $iv;
+ }
+
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $iv;
+ }
+ break;
+ case CRYPT_DES_MODE_OFB:
+ $xor = $this->encryptIV;
+ if (strlen($buffer['xor'])) {
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+ $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $buffer['xor'].= $xor;
+ $key = $this->_string_shift($buffer['xor'], 8);
+ $ciphertext.= substr($plaintext, $i, 8) ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+ $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $ciphertext.= substr($plaintext, $i, 8) ^ $xor;
+ }
+ $key = $xor;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ if ($start = strlen($plaintext) & 7) {
+ $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+ }
+ }
+ }
+
+ return $ciphertext;
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) {
+ $plaintext = $this->des[0]->decrypt($this->des[1]->encrypt($this->des[2]->decrypt($ciphertext)));
+
+ return $this->_unpad($plaintext);
+ }
+
+ if ($this->paddable) {
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0));
+ }
+
+ if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+ if ($this->dechanged) {
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
+ if ($this->mode == 'ncfb') {
+ mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0");
+ }
+ $this->dechanged = false;
+ }
+
+ if ($this->mode != 'ncfb' || !$this->continuousBuffer) {
+ $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+ } else {
+ $iv = &$this->decryptIV;
+ $pos = &$this->debuffer['pos'];
+ $len = strlen($ciphertext);
+ $plaintext = '';
+ $i = 0;
+ if ($pos) {
+ $orig_pos = $pos;
+ $max = 8 - $pos;
+ if ($len >= $max) {
+ $i = $max;
+ $len-= $max;
+ $pos = 0;
+ } else {
+ $i = $len;
+ $pos+= $len;
+ $len = 0;
+ }
+ $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+ $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+ }
+ if ($len >= 8) {
+ $cb = substr($ciphertext, $i, $len - $len % 8);
+ $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
+ $iv = substr($cb, -8);
+ $len%= 8;
+ }
+ if ($len) {
+ $iv = mcrypt_generic($this->ecb, $iv);
+ $cb = substr($ciphertext, -$len);
+ $plaintext.= $iv ^ $cb;
+ $iv = substr_replace($iv, $cb, 0, $len);
+ $pos = $len;
+ }
+ return $plaintext;
+ }
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
+ }
+
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ if (strlen($this->key) <= 8) {
+ $this->des[0]->mode = $this->mode;
+ $plaintext = $this->des[0]->decrypt($ciphertext);
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ $des = $this->des;
+
+ $buffer = &$this->debuffer;
+ $continuousBuffer = $this->continuousBuffer;
+ $plaintext = '';
+ switch ($this->mode) {
+ case CRYPT_DES_MODE_ECB:
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $plaintext.= $block;
+ }
+ break;
+ case CRYPT_DES_MODE_CBC:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $orig = $block = substr($ciphertext, $i, 8);
+ $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $plaintext.= $block ^ $xor;
+ $xor = $orig;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $xor = $this->decryptIV;
+ if (strlen($buffer['ciphertext'])) {
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $key = $this->_generate_xor($xor);
+ $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+ $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $buffer['ciphertext'].= $key;
+ $key = $this->_string_shift($buffer['ciphertext'], 8);
+ $plaintext.= $block ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $key = $this->_generate_xor($xor);
+ $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+ $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $plaintext.= $block ^ $key;
+ }
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ if ($start = strlen($plaintext) & 7) {
+ $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+ }
+ }
+ break;
+ case CRYPT_DES_MODE_CFB:
+ if (strlen($buffer['ciphertext'])) {
+ $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext']));
+ $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext));
+ if (strlen($buffer['ciphertext']) != 8) {
+ $block = $this->decryptIV;
+ } else {
+ $block = $buffer['ciphertext'];
+ $xor = $des[0]->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT);
+ $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+ $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $buffer['ciphertext'] = '';
+ }
+ $start = strlen($plaintext);
+ } else {
+ $plaintext = '';
+ $xor = $des[0]->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT);
+ $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+ $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $start = 0;
+ }
+
+ for ($i = $start; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $plaintext.= $block ^ $xor;
+ if ($continuousBuffer && strlen($block) != 8) {
+ $buffer['ciphertext'].= $block;
+ $block = $xor;
+ } else if (strlen($block) == 8) {
+ $xor = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+ $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ }
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $block;
+ }
+ break;
+ case CRYPT_DES_MODE_OFB:
+ $xor = $this->decryptIV;
+ if (strlen($buffer['xor'])) {
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+ $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $buffer['xor'].= $xor;
+ $key = $this->_string_shift($buffer['xor'], 8);
+ $plaintext.= substr($ciphertext, $i, 8) ^ $key;
+ }
+ } else {
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+ $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+ $plaintext.= substr($ciphertext, $i, 8) ^ $xor;
+ }
+ $key = $xor;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ if ($start = strlen($ciphertext) & 7) {
+ $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+ }
+ }
+ }
+
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets
+ * will yield different outputs:
+ *
+ * <code>
+ * echo $des->encrypt(substr($plaintext, 0, 8));
+ * echo $des->encrypt(substr($plaintext, 8, 8));
+ * </code>
+ * <code>
+ * echo $des->encrypt($plaintext);
+ * </code>
+ *
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
+ * another, as demonstrated with the following:
+ *
+ * <code>
+ * $des->encrypt(substr($plaintext, 0, 8));
+ * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ * <code>
+ * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ *
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
+ *
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
+ * however, they are also less intuitive and more likely to cause you problems.
+ *
+ * @see Crypt_TripleDES::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ $this->continuousBuffer = true;
+ if ($this->mode == CRYPT_DES_MODE_3CBC) {
+ $this->des[0]->enableContinuousBuffer();
+ $this->des[1]->enableContinuousBuffer();
+ $this->des[2]->enableContinuousBuffer();
+ }
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_TripleDES::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ $this->continuousBuffer = false;
+ $this->encryptIV = $this->iv;
+ $this->decryptIV = $this->iv;
+ $this->enchanged = true;
+ $this->dechanged = true;
+ $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+ $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true);
+
+ if ($this->mode == CRYPT_DES_MODE_3CBC) {
+ $this->des[0]->disableContinuousBuffer();
+ $this->des[1]->disableContinuousBuffer();
+ $this->des[2]->disableContinuousBuffer();
+ }
+ }
+
+ /**
+ * Pad "packets".
+ *
+ * DES works by encrypting eight bytes at a time. If you ever need to encrypt or decrypt something that's not
+ * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight.
+ *
+ * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH1,
+ * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
+ * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+ * transmitted separately)
+ *
+ * @see Crypt_TripleDES::disablePadding()
+ * @access public
+ */
+ function enablePadding()
+ {
+ $this->padding = true;
+ }
+
+ /**
+ * Do not pad packets.
+ *
+ * @see Crypt_TripleDES::enablePadding()
+ * @access public
+ */
+ function disablePadding()
+ {
+ $this->padding = false;
+ }
+
+ /**
+ * Pads a string
+ *
+ * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8).
+ * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7)
+ *
+ * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+ * and padding will, hence forth, be enabled.
+ *
+ * @see Crypt_TripleDES::_unpad()
+ * @access private
+ */
+ function _pad($text)
+ {
+ $length = strlen($text);
+
+ if (!$this->padding) {
+ if (($length & 7) == 0) {
+ return $text;
+ } else {
+ user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE);
+ $this->padding = true;
+ }
+ }
+
+ $pad = 8 - ($length & 7);
+ return str_pad($text, $length + $pad, chr($pad));
+ }
+
+ /**
+ * Unpads a string
+ *
+ * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+ * and false will be returned.
+ *
+ * @see Crypt_TripleDES::_pad()
+ * @access private
+ */
+ function _unpad($text)
+ {
+ if (!$this->padding) {
+ return $text;
+ }
+
+ $length = ord($text[strlen($text) - 1]);
+
+ if (!$length || $length > 8) {
+ return false;
+ }
+
+ return substr($text, 0, -$length);
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1:
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php
new file mode 100644
index 00000000000..29ad949e104
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php
@@ -0,0 +1,540 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP ANSI Decoder
+ *
+ * PHP versions 4 and 5
+ *
+ * If you call read() in Net_SSH2 you may get {@link http://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape codes} back.
+ * They'd look like chr(0x1B) . '[00m' or whatever (0x1B = ESC). They tell a
+ * {@link http://en.wikipedia.org/wiki/Terminal_emulator terminal emulator} how to format the characters, what
+ * color to display them in, etc. File_ANSI is a {@link http://en.wikipedia.org/wiki/VT100 VT100} terminal emulator.
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category File
+ * @package File_ANSI
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMXII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id$
+ * @link htp://phpseclib.sourceforge.net
+ */
+
+/**
+ * Pure-PHP ANSI Decoder
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.3.0
+ * @access public
+ * @package File_ANSI
+ */
+class File_ANSI {
+ /**
+ * Max Width
+ *
+ * @var Integer
+ * @access private
+ */
+ var $max_x;
+
+ /**
+ * Max Height
+ *
+ * @var Integer
+ * @access private
+ */
+ var $max_y;
+
+ /**
+ * Max History
+ *
+ * @var Integer
+ * @access private
+ */
+ var $max_history;
+
+ /**
+ * History
+ *
+ * @var Array
+ * @access private
+ */
+ var $history;
+
+ /**
+ * History Attributes
+ *
+ * @var Array
+ * @access private
+ */
+ var $history_attrs;
+
+ /**
+ * Current Column
+ *
+ * @var Integer
+ * @access private
+ */
+ var $x;
+
+ /**
+ * Current Row
+ *
+ * @var Integer
+ * @access private
+ */
+ var $y;
+
+ /**
+ * Old Column
+ *
+ * @var Integer
+ * @access private
+ */
+ var $old_x;
+
+ /**
+ * Old Row
+ *
+ * @var Integer
+ * @access private
+ */
+ var $old_y;
+
+ /**
+ * An empty attribute row
+ *
+ * @var Array
+ * @access private
+ */
+ var $attr_row;
+
+ /**
+ * The current screen text
+ *
+ * @var Array
+ * @access private
+ */
+ var $screen;
+
+ /**
+ * The current screen attributes
+ *
+ * @var Array
+ * @access private
+ */
+ var $attrs;
+
+ /**
+ * The current foreground color
+ *
+ * @var String
+ * @access private
+ */
+ var $foreground;
+
+ /**
+ * The current background color
+ *
+ * @var String
+ * @access private
+ */
+ var $background;
+
+ /**
+ * Bold flag
+ *
+ * @var Boolean
+ * @access private
+ */
+ var $bold;
+
+ /**
+ * Underline flag
+ *
+ * @var Boolean
+ * @access private
+ */
+ var $underline;
+
+ /**
+ * Blink flag
+ *
+ * @var Boolean
+ * @access private
+ */
+ var $blink;
+
+ /**
+ * Reverse flag
+ *
+ * @var Boolean
+ * @access private
+ */
+ var $reverse;
+
+ /**
+ * Color flag
+ *
+ * @var Boolean
+ * @access private
+ */
+ var $color;
+
+ /**
+ * Current ANSI code
+ *
+ * @var String
+ * @access private
+ */
+ var $ansi;
+
+ /**
+ * Default Constructor.
+ *
+ * @return File_ANSI
+ * @access public
+ */
+ function File_ANSI()
+ {
+ $this->setHistory(200);
+ $this->setDimensions(80, 24);
+ }
+
+ /**
+ * Set terminal width and height
+ *
+ * Resets the screen as well
+ *
+ * @param Integer $x
+ * @param Integer $y
+ * @access public
+ */
+ function setDimensions($x, $y)
+ {
+ $this->max_x = $x - 1;
+ $this->max_y = $y - 1;
+ $this->x = $this->y = 0;
+ $this->history = $this->history_attrs = array();
+ $this->attr_row = array_fill(0, $this->max_x + 1, '');
+ $this->screen = array_fill(0, $this->max_y + 1, '');
+ $this->attrs = array_fill(0, $this->max_y + 1, $this->attr_row);
+ $this->foreground = 'white';
+ $this->background = 'black';
+ $this->bold = false;
+ $this->underline = false;
+ $this->blink = false;
+ $this->reverse = false;
+ $this->color = false;
+
+ $this->ansi = '';
+ }
+
+ /**
+ * Set the number of lines that should be logged past the terminal height
+ *
+ * @param Integer $x
+ * @param Integer $y
+ * @access public
+ */
+ function setHistory($history)
+ {
+ $this->max_history = $history;
+ }
+
+ /**
+ * Load a string
+ *
+ * @param String $source
+ * @access public
+ */
+ function loadString($source)
+ {
+ $this->setDimensions($this->max_x + 1, $this->max_y + 1);
+ $this->appendString($source);
+ }
+
+ /**
+ * Appdend a string
+ *
+ * @param String $source
+ * @access public
+ */
+ function appendString($source)
+ {
+ for ($i = 0; $i < strlen($source); $i++) {
+ if (strlen($this->ansi)) {
+ $this->ansi.= $source[$i];
+ $chr = ord($source[$i]);
+ // http://en.wikipedia.org/wiki/ANSI_escape_code#Sequence_elements
+ // single character CSI's not currently supported
+ switch (true) {
+ case $this->ansi == "\x1B=":
+ $this->ansi = '';
+ continue 2;
+ case strlen($this->ansi) == 2 && $chr >= 64 && $chr <= 95 && $chr != ord('['):
+ case strlen($this->ansi) > 2 && $chr >= 64 && $chr <= 126:
+ break;
+ default:
+ continue 2;
+ }
+ // http://ascii-table.com/ansi-escape-sequences-vt-100.php
+ switch ($this->ansi) {
+ case "\x1B[H":
+ $this->old_x = $this->x;
+ $this->old_y = $this->y;
+ $this->x = $this->y = 0;
+ break;
+ case "\x1B[J":
+ $this->history = array_merge($this->history, array_slice(array_splice($this->screen, $this->y + 1), 0, $this->old_y));
+ $this->screen = array_merge($this->screen, array_fill($this->y, $this->max_y, ''));
+
+ $this->history_attrs = array_merge($this->history_attrs, array_slice(array_splice($this->attrs, $this->y + 1), 0, $this->old_y));
+ $this->attrs = array_merge($this->attrs, array_fill($this->y, $this->max_y, $this->attr_row));
+
+ if (count($this->history) == $this->max_history) {
+ array_shift($this->history);
+ array_shift($this->history_attrs);
+ }
+ case "\x1B[K":
+ $this->screen[$this->y] = substr($this->screen[$this->y], 0, $this->x);
+
+ array_splice($this->attrs[$this->y], $this->x + 1);
+ break;
+ case "\x1B[?1h": // set cursor key to application
+ break;
+ default:
+ switch (true) {
+ case preg_match('#\x1B\[(\d+);(\d+)H#', $this->ansi, $match):
+ $this->old_x = $this->x;
+ $this->old_y = $this->y;
+ $this->x = $match[2] - 1;
+ $this->y = $match[1] - 1;
+ break;
+ case preg_match('#\x1B\[(\d+)C#', $this->ansi, $match):
+ $this->old_x = $this->x;
+ $x = $match[1] - 1;
+ break;
+ case preg_match('#\x1B\[(\d+);(\d+)r#', $this->ansi, $match): // Set top and bottom lines of a window
+ break;
+ case preg_match('#\x1B\[(\d*(?:;\d*)*)m#', $this->ansi, $match):
+ $mods = explode(';', $match[1]);
+ foreach ($mods as $mod) {
+ switch ($mod) {
+ case 0:
+ $this->attrs[$this->y][$this->x] = '';
+
+ if ($this->bold) $this->attrs[$this->y][$this->x].= '</b>';
+ if ($this->underline) $this->attrs[$this->y][$this->x].= '</underline>';
+ if ($this->blink) $this->attrs[$this->y][$this->x].= '</blink>';
+ if ($this->color) $this->attrs[$this->y][$this->x].= '</span>';
+
+ if ($this->reverse) {
+ $temp = $this->background;
+ $this->background = $this->foreground;
+ $this->foreground = $temp;
+ }
+
+ $this->bold = $this->underline = $this->blink = $this->color = $this->reverse = false;
+ break;
+ case 1:
+ if (!$this->bold) {
+ $this->attrs[$this->y][$this->x] = '<b>';
+ $this->bold = true;
+ }
+ break;
+ case 4:
+ if (!$this->underline) {
+ $this->attrs[$this->y][$this->x] = '<u>';
+ $this->underline = true;
+ }
+ break;
+ case 5:
+ if (!$this->blink) {
+ $this->attrs[$this->y][$this->x] = '<blink>';
+ $this->blink = true;
+ }
+ break;
+ case 7:
+ $this->reverse = !$this->reverse;
+ $temp = $this->background;
+ $this->background = $this->foreground;
+ $this->foreground = $temp;
+ $this->attrs[$this->y][$this->x] = '<span style="color: ' . $this->foreground . '; background: ' . $this->background . '">';
+ if ($this->color) {
+ $this->attrs[$this->y][$this->x] = '</span>' . $this->attrs[$this->y][$this->x];
+ }
+ $this->color = true;
+ break;
+ default:
+ //$front = $this->reverse ? &$this->background : &$this->foreground;
+ $front = &$this->{ $this->reverse ? 'background' : 'foreground' };
+ //$back = $this->reverse ? &$this->foreground : &$this->background;
+ $back = &$this->{ $this->reverse ? 'foreground' : 'background' };
+ switch ($mod) {
+ case 30: $front = 'black'; break;
+ case 31: $front = 'red'; break;
+ case 32: $front = 'green'; break;
+ case 33: $front = 'yellow'; break;
+ case 34: $front = 'blue'; break;
+ case 35: $front = 'magenta'; break;
+ case 36: $front = 'cyan'; break;
+ case 37: $front = 'white'; break;
+
+ case 40: $back = 'black'; break;
+ case 41: $back = 'red'; break;
+ case 42: $back = 'green'; break;
+ case 43: $back = 'yellow'; break;
+ case 44: $back = 'blue'; break;
+ case 45: $back = 'magenta'; break;
+ case 46: $back = 'cyan'; break;
+ case 47: $back = 'white'; break;
+
+ default:
+ user_error('Unsupported attribute: ' . $mod);
+ $this->ansi = '';
+ break 2;
+ }
+
+ unset($temp);
+ $this->attrs[$this->y][$this->x] = '<span style="color: ' . $this->foreground . '; background: ' . $this->background . '">';
+ if ($this->color) {
+ $this->attrs[$this->y][$this->x] = '</span>' . $this->attrs[$this->y][$this->x];
+ }
+ $this->color = true;
+ }
+ }
+ break;
+ default:
+ echo "{$this->ansi} unsupported\r\n";
+ }
+ }
+ $this->ansi = '';
+ continue;
+ }
+
+ switch ($source[$i]) {
+ case "\r":
+ $this->x = 0;
+ break;
+ case "\n":
+ //if ($this->y < $this->max_y) {
+ // $this->y++;
+ //}
+
+ while ($this->y >= $this->max_y) {
+ $this->history = array_merge($this->history, array(array_shift($this->screen)));
+ $this->screen[] = '';
+
+ $this->history_attrs = array_merge($this->history_attrs, array(array_shift($this->attrs)));
+ $this->attrs[] = $this->attr_row;
+
+ if (count($this->history) >= $this->max_history) {
+ array_shift($this->history);
+ array_shift($this->history_attrs);
+ }
+
+ $this->y--;
+ }
+ $this->y++;
+ break;
+ case "\x0F": // shift
+ break;
+ case "\x1B": // start ANSI escape code
+ $this->ansi.= "\x1B";
+ break;
+ default:
+ $this->screen[$this->y] = substr_replace(
+ $this->screen[$this->y],
+ $source[$i],
+ $this->x,
+ 1
+ );
+
+ if ($this->x > $this->max_x) {
+ $this->x = 0;
+ $this->y++;
+ } else {
+ $this->x++;
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the current screen without preformating
+ *
+ * @access private
+ * @return String
+ */
+ function _getScreen()
+ {
+ $output = '';
+ for ($i = 0; $i <= $this->max_y; $i++) {
+ for ($j = 0; $j <= $this->max_x + 1; $j++) {
+ if (isset($this->attrs[$i][$j])) {
+ $output.= $this->attrs[$i][$j];
+ }
+ if (isset($this->screen[$i][$j])) {
+ $output.= htmlspecialchars($this->screen[$i][$j]);
+ }
+ }
+ $output.= "\r\n";
+ }
+ return rtrim($output);
+ }
+
+ /**
+ * Returns the current screen
+ *
+ * @access public
+ * @return String
+ */
+ function getScreen()
+ {
+ return '<pre style="color: white; background: black" width="' . ($this->max_x + 1) . '">' . $this->_getScreen() . '</pre>';
+ }
+
+ /**
+ * Returns the current screen and the x previous lines
+ *
+ * @access public
+ * @return String
+ */
+ function getHistory()
+ {
+ $scrollback = '';
+ for ($i = 0; $i < count($this->history); $i++) {
+ for ($j = 0; $j <= $this->max_x + 1; $j++) {
+ if (isset($this->history_attrs[$i][$j])) {
+ $scrollback.= $this->history_attrs[$i][$j];
+ }
+ if (isset($this->history[$i][$j])) {
+ $scrollback.= htmlspecialchars($this->history[$i][$j]);
+ }
+ }
+ $scrollback.= "\r\n";
+ }
+ $scrollback.= $this->_getScreen();
+
+ return '<pre style="color: white; background: black" width="' . ($this->max_x + 1) . '">' . $scrollback . '</pre>';
+ }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php
new file mode 100644
index 00000000000..766c6e7ebf4
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php
@@ -0,0 +1,1277 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP ASN.1 Parser
+ *
+ * PHP versions 4 and 5
+ *
+ * ASN.1 provides the semantics for data encoded using various schemes. The most commonly
+ * utilized scheme is DER or the "Distinguished Encoding Rules". PEM's are base64 encoded
+ * DER blobs.
+ *
+ * File_ASN1 decodes and encodes DER formatted messages and places them in a semantic context.
+ *
+ * Uses the 1988 ASN.1 syntax.
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category File
+ * @package File_ASN1
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMXII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id$
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Math_BigInteger
+ */
+if (!class_exists('Math_BigInteger')) {
+ require_once('Math/BigInteger.php');
+}
+
+/**#@+
+ * Tag Classes
+ *
+ * @access private
+ * @link http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=12
+ */
+define('FILE_ASN1_CLASS_UNIVERSAL', 0);
+define('FILE_ASN1_CLASS_APPLICATION', 1);
+define('FILE_ASN1_CLASS_CONTEXT_SPECIFIC', 2);
+define('FILE_ASN1_CLASS_PRIVATE', 3);
+/**#@-*/
+
+/**#@+
+ * Tag Classes
+ *
+ * @access private
+ * @link http://www.obj-sys.com/asn1tutorial/node124.html
+ */
+define('FILE_ASN1_TYPE_BOOLEAN', 1);
+define('FILE_ASN1_TYPE_INTEGER', 2);
+define('FILE_ASN1_TYPE_BIT_STRING', 3);
+define('FILE_ASN1_TYPE_OCTET_STRING', 4);
+define('FILE_ASN1_TYPE_NULL', 5);
+define('FILE_ASN1_TYPE_OBJECT_IDENTIFIER',6);
+//define('FILE_ASN1_TYPE_OBJECT_DESCRIPTOR',7);
+//define('FILE_ASN1_TYPE_INSTANCE_OF', 8); // EXTERNAL
+define('FILE_ASN1_TYPE_REAL', 9);
+define('FILE_ASN1_TYPE_ENUMERATED', 10);
+//define('FILE_ASN1_TYPE_EMBEDDED', 11);
+define('FILE_ASN1_TYPE_UTF8_STRING', 12);
+//define('FILE_ASN1_TYPE_RELATIVE_OID', 13);
+define('FILE_ASN1_TYPE_SEQUENCE', 16); // SEQUENCE OF
+define('FILE_ASN1_TYPE_SET', 17); // SET OF
+/**#@-*/
+/**#@+
+ * More Tag Classes
+ *
+ * @access private
+ * @link http://www.obj-sys.com/asn1tutorial/node10.html
+ */
+define('FILE_ASN1_TYPE_NUMERIC_STRING', 18);
+define('FILE_ASN1_TYPE_PRINTABLE_STRING',19);
+define('FILE_ASN1_TYPE_TELETEX_STRING', 20); // T61String
+define('FILE_ASN1_TYPE_VIDEOTEX_STRING', 21);
+define('FILE_ASN1_TYPE_IA5_STRING', 22);
+define('FILE_ASN1_TYPE_UTC_TIME', 23);
+define('FILE_ASN1_TYPE_GENERALIZED_TIME',24);
+define('FILE_ASN1_TYPE_GRAPHIC_STRING', 25);
+define('FILE_ASN1_TYPE_VISIBLE_STRING', 26); // ISO646String
+define('FILE_ASN1_TYPE_GENERAL_STRING', 27);
+define('FILE_ASN1_TYPE_UNIVERSAL_STRING',28);
+//define('FILE_ASN1_TYPE_CHARACTER_STRING',29);
+define('FILE_ASN1_TYPE_BMP_STRING', 30);
+/**#@-*/
+
+/**#@+
+ * Tag Aliases
+ *
+ * These tags are kinda place holders for other tags.
+ *
+ * @access private
+ */
+define('FILE_ASN1_TYPE_CHOICE', -1);
+define('FILE_ASN1_TYPE_ANY', -2);
+/**#@-*/
+
+/**
+ * ASN.1 Element
+ *
+ * Bypass normal encoding rules in File_ASN1::encodeDER()
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.3.0
+ * @access public
+ * @package File_ASN1
+ */
+class File_ASN1_Element {
+ /**
+ * Raw element value
+ *
+ * @var String
+ * @access private
+ */
+ var $element;
+
+ /**
+ * Constructor
+ *
+ * @param String $encoded
+ * @return File_ASN1_Element
+ * @access public
+ */
+ function File_ASN1_Element($encoded)
+ {
+ $this->element = $encoded;
+ }
+}
+
+/**
+ * Pure-PHP ASN.1 Parser
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.3.0
+ * @access public
+ * @package File_ASN1
+ */
+class File_ASN1 {
+ /**
+ * ASN.1 object identifier
+ *
+ * @var Array
+ * @access private
+ * @link http://en.wikipedia.org/wiki/Object_identifier
+ */
+ var $oids = array();
+
+ /**
+ * Default date format
+ *
+ * @var String
+ * @access private
+ * @link http://php.net/class.datetime
+ */
+ var $format = 'D, d M y H:i:s O';
+
+ /**
+ * Default date format
+ *
+ * @var Array
+ * @access private
+ * @see File_ASN1::setTimeFormat()
+ * @see File_ASN1::asn1map()
+ * @link http://php.net/class.datetime
+ */
+ var $encoded;
+
+ /**
+ * Filters
+ *
+ * If the mapping type is FILE_ASN1_TYPE_ANY what do we actually encode it as?
+ *
+ * @var Array
+ * @access private
+ * @see File_ASN1::_encode_der()
+ */
+ var $filters;
+
+ /**
+ * Type mapping table for the ANY type.
+ *
+ * Structured or unknown types are mapped to a FILE_ASN1_Element.
+ * Unambiguous types get the direct mapping (int/real/bool).
+ * Others are mapped as a choice, with an extra indexing level.
+ *
+ * @var Array
+ * @access public
+ */
+ var $ANYmap = array(
+ FILE_ASN1_TYPE_BOOLEAN => true,
+ FILE_ASN1_TYPE_INTEGER => true,
+ FILE_ASN1_TYPE_BIT_STRING => 'bitString',
+ FILE_ASN1_TYPE_OCTET_STRING => 'octetString',
+ FILE_ASN1_TYPE_NULL => 'null',
+ FILE_ASN1_TYPE_OBJECT_IDENTIFIER => 'objectIdentifier',
+ FILE_ASN1_TYPE_REAL => true,
+ FILE_ASN1_TYPE_ENUMERATED => 'enumerated',
+ FILE_ASN1_TYPE_UTF8_STRING => 'utf8String',
+ FILE_ASN1_TYPE_NUMERIC_STRING => 'numericString',
+ FILE_ASN1_TYPE_PRINTABLE_STRING => 'printableString',
+ FILE_ASN1_TYPE_TELETEX_STRING => 'teletexString',
+ FILE_ASN1_TYPE_VIDEOTEX_STRING => 'videotexString',
+ FILE_ASN1_TYPE_IA5_STRING => 'ia5String',
+ FILE_ASN1_TYPE_UTC_TIME => 'utcTime',
+ FILE_ASN1_TYPE_GENERALIZED_TIME => 'generalTime',
+ FILE_ASN1_TYPE_GRAPHIC_STRING => 'graphicString',
+ FILE_ASN1_TYPE_VISIBLE_STRING => 'visibleString',
+ FILE_ASN1_TYPE_GENERAL_STRING => 'generalString',
+ FILE_ASN1_TYPE_UNIVERSAL_STRING => 'universalString',
+ //FILE_ASN1_TYPE_CHARACTER_STRING => 'characterString',
+ FILE_ASN1_TYPE_BMP_STRING => 'bmpString'
+ );
+
+ /**
+ * String type to character size mapping table.
+ *
+ * Non-convertable types are absent from this table.
+ * size == 0 indicates variable length encoding.
+ *
+ * @var Array
+ * @access public
+ */
+ var $stringTypeSize = array(
+ FILE_ASN1_TYPE_UTF8_STRING => 0,
+ FILE_ASN1_TYPE_BMP_STRING => 2,
+ FILE_ASN1_TYPE_UNIVERSAL_STRING => 4,
+ FILE_ASN1_TYPE_PRINTABLE_STRING => 1,
+ FILE_ASN1_TYPE_TELETEX_STRING => 1,
+ FILE_ASN1_TYPE_IA5_STRING => 1,
+ FILE_ASN1_TYPE_VISIBLE_STRING => 1,
+ );
+
+ /**
+ * Parse BER-encoding
+ *
+ * Serves a similar purpose to openssl's asn1parse
+ *
+ * @param String $encoded
+ * @return Array
+ * @access public
+ */
+ function decodeBER($encoded)
+ {
+ if (is_object($encoded) && strtolower(get_class($encoded)) == 'file_asn1_element') {
+ $encoded = $encoded->element;
+ }
+
+ $this->encoded = $encoded;
+ return $this->_decode_ber($encoded);
+ }
+
+ /**
+ * Parse BER-encoding (Helper function)
+ *
+ * Sometimes we want to get the BER encoding of a particular tag. $start lets us do that without having to reencode.
+ * $encoded is passed by reference for the recursive calls done for FILE_ASN1_TYPE_BIT_STRING and
+ * FILE_ASN1_TYPE_OCTET_STRING. In those cases, the indefinite length is used.
+ *
+ * @param String $encoded
+ * @param Integer $start
+ * @return Array
+ * @access private
+ */
+ function _decode_ber(&$encoded, $start = 0)
+ {
+ $decoded = array();
+
+ while ( strlen($encoded) ) {
+ $current = array('start' => $start);
+
+ $type = ord($this->_string_shift($encoded));
+ $start++;
+
+ $constructed = ($type >> 5) & 1;
+
+ $tag = $type & 0x1F;
+ if ($tag == 0x1F) {
+ $tag = 0;
+ // process septets (since the eighth bit is ignored, it's not an octet)
+ do {
+ $loop = ord($encoded[0]) >> 7;
+ $tag <<= 7;
+ $tag |= ord($this->_string_shift($encoded)) & 0x7F;
+ $start++;
+ } while ( $loop );
+ }
+
+ // Length, as discussed in § 8.1.3 of X.690-0207.pdf#page=13
+ $length = ord($this->_string_shift($encoded));
+ $start++;
+ if ( $length == 0x80 ) { // indefinite length
+ // "[A sender shall] use the indefinite form (see 8.1.3.6) if the encoding is constructed and is not all
+ // immediately available." -- § 8.1.3.2.c
+ //if ( !$constructed ) {
+ // return false;
+ //}
+ $length = strlen($encoded);
+ } elseif ( $length & 0x80 ) { // definite length, long form
+ // technically, the long form of the length can be represented by up to 126 octets (bytes), but we'll only
+ // support it up to four.
+ $length&= 0x7F;
+ $temp = $this->_string_shift($encoded, $length);
+ $start+= $length;
+ extract(unpack('Nlength', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4)));
+ }
+
+ // End-of-content, see §§ 8.1.1.3, 8.1.3.2, 8.1.3.6, 8.1.5, and (for an example) 8.6.4.2
+ if (!$type && !$length) {
+ return $decoded;
+ }
+ $content = $this->_string_shift($encoded, $length);
+
+ /* Class is UNIVERSAL, APPLICATION, PRIVATE, or CONTEXT-SPECIFIC. The UNIVERSAL class is restricted to the ASN.1
+ built-in types. It defines an application-independent data type that must be distinguishable from all other
+ data types. The other three classes are user defined. The APPLICATION class distinguishes data types that
+ have a wide, scattered use within a particular presentation context. PRIVATE distinguishes data types within
+ a particular organization or country. CONTEXT-SPECIFIC distinguishes members of a sequence or set, the
+ alternatives of a CHOICE, or universally tagged set members. Only the class number appears in braces for this
+ data type; the term CONTEXT-SPECIFIC does not appear.
+
+ -- http://www.obj-sys.com/asn1tutorial/node12.html */
+ $class = ($type >> 6) & 3;
+ switch ($class) {
+ case FILE_ASN1_CLASS_APPLICATION:
+ case FILE_ASN1_CLASS_PRIVATE:
+ case FILE_ASN1_CLASS_CONTEXT_SPECIFIC:
+ $decoded[] = array(
+ 'type' => $class,
+ 'constant' => $tag,
+ 'content' => $constructed ? $this->_decode_ber($content, $start) : $content,
+ 'length' => $length + $start - $current['start']
+ ) + $current;
+ continue 2;
+ }
+
+ $current+= array('type' => $tag);
+
+ // decode UNIVERSAL tags
+ switch ($tag) {
+ case FILE_ASN1_TYPE_BOOLEAN:
+ // "The contents octets shall consist of a single octet." -- § 8.2.1
+ //if (strlen($content) != 1) {
+ // return false;
+ //}
+ $current['content'] = (bool) ord($content[0]);
+ break;
+ case FILE_ASN1_TYPE_INTEGER:
+ case FILE_ASN1_TYPE_ENUMERATED:
+ $current['content'] = new Math_BigInteger($content, -256);
+ break;
+ case FILE_ASN1_TYPE_REAL: // not currently supported
+ return false;
+ case FILE_ASN1_TYPE_BIT_STRING:
+ // The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,
+ // the number of unused bits in the final subsequent octet. The number shall be in the range zero to
+ // seven.
+ if (!$constructed) {
+ $current['content'] = $content;
+ } else {
+ $temp = $this->_decode_ber($content, $start);
+ $length-= strlen($content);
+ $last = count($temp) - 1;
+ for ($i = 0; $i < $last; $i++) {
+ // all subtags should be bit strings
+ //if ($temp[$i]['type'] != FILE_ASN1_TYPE_BIT_STRING) {
+ // return false;
+ //}
+ $current['content'].= substr($temp[$i]['content'], 1);
+ }
+ // all subtags should be bit strings
+ //if ($temp[$last]['type'] != FILE_ASN1_TYPE_BIT_STRING) {
+ // return false;
+ //}
+ $current['content'] = $temp[$last]['content'][0] . $current['content'] . substr($temp[$i]['content'], 1);
+ }
+ break;
+ case FILE_ASN1_TYPE_OCTET_STRING:
+ if (!$constructed) {
+ $current['content'] = $content;
+ } else {
+ $temp = $this->_decode_ber($content, $start);
+ $length-= strlen($content);
+ for ($i = 0, $size = count($temp); $i < $size; $i++) {
+ // all subtags should be octet strings
+ //if ($temp[$i]['type'] != FILE_ASN1_TYPE_OCTET_STRING) {
+ // return false;
+ //}
+ $current['content'].= $temp[$i]['content'];
+ }
+ // $length =
+ }
+ break;
+ case FILE_ASN1_TYPE_NULL:
+ // "The contents octets shall not contain any octets." -- § 8.8.2
+ //if (strlen($content)) {
+ // return false;
+ //}
+ break;
+ case FILE_ASN1_TYPE_SEQUENCE:
+ case FILE_ASN1_TYPE_SET:
+ $current['content'] = $this->_decode_ber($content, $start);
+ break;
+ case FILE_ASN1_TYPE_OBJECT_IDENTIFIER:
+ $temp = ord($this->_string_shift($content));
+ $current['content'] = sprintf('%d.%d', floor($temp / 40), $temp % 40);
+ $valuen = 0;
+ // process septets
+ while (strlen($content)) {
+ $temp = ord($this->_string_shift($content));
+ $valuen <<= 7;
+ $valuen |= $temp & 0x7F;
+ if (~$temp & 0x80) {
+ $current['content'].= ".$valuen";
+ $valuen = 0;
+ }
+ }
+ // the eighth bit of the last byte should not be 1
+ //if ($temp >> 7) {
+ // return false;
+ //}
+ break;
+ /* Each character string type shall be encoded as if it had been declared:
+ [UNIVERSAL x] IMPLICIT OCTET STRING
+
+ -- X.690-0207.pdf#page=23 (§ 8.21.3)
+
+ Per that, we're not going to do any validation. If there are any illegal characters in the string,
+ we don't really care */
+ case FILE_ASN1_TYPE_NUMERIC_STRING:
+ // 0,1,2,3,4,5,6,7,8,9, and space
+ case FILE_ASN1_TYPE_PRINTABLE_STRING:
+ // Upper and lower case letters, digits, space, apostrophe, left/right parenthesis, plus sign, comma,
+ // hyphen, full stop, solidus, colon, equal sign, question mark
+ case FILE_ASN1_TYPE_TELETEX_STRING:
+ // The Teletex character set in CCITT's T61, space, and delete
+ // see http://en.wikipedia.org/wiki/Teletex#Character_sets
+ case FILE_ASN1_TYPE_VIDEOTEX_STRING:
+ // The Videotex character set in CCITT's T.100 and T.101, space, and delete
+ case FILE_ASN1_TYPE_VISIBLE_STRING:
+ // Printing character sets of international ASCII, and space
+ case FILE_ASN1_TYPE_IA5_STRING:
+ // International Alphabet 5 (International ASCII)
+ case FILE_ASN1_TYPE_GRAPHIC_STRING:
+ // All registered G sets, and space
+ case FILE_ASN1_TYPE_GENERAL_STRING:
+ // All registered C and G sets, space and delete
+ case FILE_ASN1_TYPE_UTF8_STRING:
+ // ????
+ case FILE_ASN1_TYPE_BMP_STRING:
+ $current['content'] = $content;
+ break;
+ case FILE_ASN1_TYPE_UTC_TIME:
+ case FILE_ASN1_TYPE_GENERALIZED_TIME:
+ $current['content'] = $this->_decodeTime($content, $tag);
+ default:
+
+ }
+
+ $start+= $length;
+ $decoded[] = $current + array('length' => $start - $current['start']);
+ }
+
+ return $decoded;
+ }
+
+ /**
+ * ASN.1 Decode
+ *
+ * Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format.
+ *
+ * @param Array $decoded
+ * @param Array $mapping
+ * @return Array
+ * @access public
+ */
+ function asn1map($decoded, $mapping)
+ {
+ if (isset($mapping['explicit'])) {
+ $decoded = $decoded['content'][0];
+ }
+
+ switch (true) {
+ case $mapping['type'] == FILE_ASN1_TYPE_ANY:
+ $intype = $decoded['type'];
+ if (isset($decoded['constant']) || !isset($this->ANYmap[$intype]) || ($this->encoded[$decoded['start']] & 0x20)) {
+ return new File_ASN1_Element(substr($this->encoded, $decoded['start'], $decoded['length']));
+ }
+ $inmap = $this->ANYmap[$intype];
+ if (is_string($inmap)) {
+ return array($inmap => $this->asn1map($decoded, array('type' => $intype) + $mapping));
+ }
+ break;
+ case $mapping['type'] == FILE_ASN1_TYPE_CHOICE:
+ foreach ($mapping['children'] as $key => $option) {
+ switch (true) {
+ case isset($option['constant']) && $option['constant'] == $decoded['constant']:
+ case !isset($option['constant']) && $option['type'] == $decoded['type']:
+ $value = $this->asn1map($decoded, $option);
+ break;
+ case !isset($option['constant']) && $option['type'] == FILE_ASN1_TYPE_CHOICE:
+ $v = $this->asn1map($decoded, $option);
+ if (isset($v)) {
+ $value = $v;
+ }
+ }
+ if (isset($value)) {
+ return array($key => $value);
+ }
+ }
+ return NULL;
+ case isset($mapping['implicit']):
+ case isset($mapping['explicit']):
+ case $decoded['type'] == $mapping['type']:
+ break;
+ default:
+ return NULL;
+ }
+
+ if (isset($mapping['implicit'])) {
+ $decoded['type'] = $mapping['type'];
+ }
+
+ switch ($decoded['type']) {
+ case FILE_ASN1_TYPE_SEQUENCE:
+ $map = array();
+
+ // ignore the min and max
+ if (isset($mapping['min']) && isset($mapping['max'])) {
+ $child = $mapping['children'];
+ foreach ($decoded['content'] as $content) {
+ if (($map[] = $this->asn1map($content, $child)) === NULL) {
+ return NULL;
+ }
+ }
+
+ return $map;
+ }
+
+ $n = count($decoded['content']);
+ $i = 0;
+
+ foreach ($mapping['children'] as $key => $child) {
+ $maymatch = $i < $n; // Match only existing input.
+ if ($maymatch) {
+ $temp = $decoded['content'][$i];
+
+ if ($child['type'] != FILE_ASN1_TYPE_CHOICE) {
+ // Get the mapping and input class & constant.
+ $childClass = $tempClass = FILE_ASN1_CLASS_UNIVERSAL;
+ $constant = NULL;
+ if (isset($temp['constant'])) {
+ $tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
+ }
+ if (isset($child['class'])) {
+ $childClass = $child['class'];
+ $constant = $child['cast'];
+ }
+ elseif (isset($child['constant'])) {
+ $childClass = FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
+ $constant = $child['constant'];
+ }
+
+ if (isset($constant) && isset($temp['constant'])) {
+ // Can only match if constants and class match.
+ $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;
+ } else {
+ // Can only match if no constant expected and type matches or is generic.
+ $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], FILE_ASN1_TYPE_ANY, FILE_ASN1_TYPE_CHOICE)) !== false;
+ }
+ }
+ }
+
+ if ($maymatch) {
+ // Attempt submapping.
+ $candidate = $this->asn1map($temp, $child);
+ $maymatch = $candidate !== NULL;
+ }
+
+ if ($maymatch) {
+ // Got the match: use it.
+ $map[$key] = $candidate;
+ $i++;
+ } elseif (isset($child['default'])) {
+ $map[$key] = $child['default']; // Use default.
+ } elseif (!isset($child['optional'])) {
+ return NULL; // Syntax error.
+ }
+ }
+
+ // Fail mapping if all input items have not been consumed.
+ return $i < $n? NULL: $map;
+
+ // the main diff between sets and sequences is the encapsulation of the foreach in another for loop
+ case FILE_ASN1_TYPE_SET:
+ $map = array();
+
+ // ignore the min and max
+ if (isset($mapping['min']) && isset($mapping['max'])) {
+ $child = $mapping['children'];
+ foreach ($decoded['content'] as $content) {
+ if (($map[] = $this->asn1map($content, $child)) === NULL) {
+ return NULL;
+ }
+ }
+
+ return $map;
+ }
+
+ for ($i = 0; $i < count($decoded['content']); $i++) {
+ $temp = $decoded['content'][$i];
+ $tempClass = FILE_ASN1_CLASS_UNIVERSAL;
+ if (isset($temp['constant'])) {
+ $tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
+ }
+
+ foreach ($mapping['children'] as $key => $child) {
+ if (isset($map[$key])) {
+ continue;
+ }
+ $maymatch = true;
+ if ($child['type'] != FILE_ASN1_TYPE_CHOICE) {
+ $childClass = FILE_ASN1_CLASS_UNIVERSAL;
+ $constant = NULL;
+ if (isset($child['class'])) {
+ $childClass = $child['class'];
+ $constant = $child['cast'];
+ }
+ elseif (isset($child['constant'])) {
+ $childClass = FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
+ $constant = $child['constant'];
+ }
+
+ if (isset($constant) && isset($temp['constant'])) {
+ // Can only match if constants and class match.
+ $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;
+ } else {
+ // Can only match if no constant expected and type matches or is generic.
+ $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], FILE_ASN1_TYPE_ANY, FILE_ASN1_TYPE_CHOICE)) !== false;
+ }
+ }
+
+ if ($maymatch) {
+ // Attempt submapping.
+ $candidate = $this->asn1map($temp, $child);
+ $maymatch = $candidate !== NULL;
+ }
+
+ if (!$maymatch) {
+ break;
+ }
+
+ // Got the match: use it.
+ $map[$key] = $candidate;
+ break;
+ }
+ }
+
+ foreach ($mapping['children'] as $key => $child) {
+ if (!isset($map[$key])) {
+ if (isset($child['default'])) {
+ $map[$key] = $child['default'];
+ } elseif (!isset($child['optional'])) {
+ return NULL;
+ }
+ }
+ }
+ return $map;
+ case FILE_ASN1_TYPE_OBJECT_IDENTIFIER:
+ return isset($this->oids[$decoded['content']]) ? $this->oids[$decoded['content']] : $decoded['content'];
+ case FILE_ASN1_TYPE_UTC_TIME:
+ case FILE_ASN1_TYPE_GENERALIZED_TIME:
+ if (isset($mapping['implicit'])) {
+ $decoded['content'] = $this->_decodeTime($decoded['content'], $decoded['type']);
+ }
+ return @date($this->format, $decoded['content']);
+ case FILE_ASN1_TYPE_BIT_STRING:
+ if (isset($mapping['mapping'])) {
+ $offset = ord($decoded['content'][0]);
+ $size = (strlen($decoded['content']) - 1) * 8 - $offset;
+ /*
+ From X.680-0207.pdf#page=46 (21.7):
+
+ "When a "NamedBitList" is used in defining a bitstring type ASN.1 encoding rules are free to add (or remove)
+ arbitrarily any trailing 0 bits to (or from) values that are being encoded or decoded. Application designers should
+ therefore ensure that different semantics are not associated with such values which differ only in the number of trailing
+ 0 bits."
+ */
+ $bits = count($mapping['mapping']) == $size ? array() : array_fill(0, count($mapping['mapping']) - $size, false);
+ for ($i = strlen($decoded['content']) - 1; $i > 0; $i--) {
+ $current = ord($decoded['content'][$i]);
+ for ($j = $offset; $j < 8; $j++) {
+ $bits[] = (bool) ($current & (1 << $j));
+ }
+ $offset = 0;
+ }
+ $values = array();
+ $map = array_reverse($mapping['mapping']);
+ foreach ($map as $i => $value) {
+ if ($bits[$i]) {
+ $values[] = $value;
+ }
+ }
+ return $values;
+ }
+ case FILE_ASN1_TYPE_OCTET_STRING:
+ return base64_encode($decoded['content']);
+ case FILE_ASN1_TYPE_NULL:
+ return '';
+ case FILE_ASN1_TYPE_BOOLEAN:
+ return $decoded['content'];
+ case FILE_ASN1_TYPE_NUMERIC_STRING:
+ case FILE_ASN1_TYPE_PRINTABLE_STRING:
+ case FILE_ASN1_TYPE_TELETEX_STRING:
+ case FILE_ASN1_TYPE_VIDEOTEX_STRING:
+ case FILE_ASN1_TYPE_IA5_STRING:
+ case FILE_ASN1_TYPE_GRAPHIC_STRING:
+ case FILE_ASN1_TYPE_VISIBLE_STRING:
+ case FILE_ASN1_TYPE_GENERAL_STRING:
+ case FILE_ASN1_TYPE_UNIVERSAL_STRING:
+ case FILE_ASN1_TYPE_UTF8_STRING:
+ case FILE_ASN1_TYPE_BMP_STRING:
+ return $decoded['content'];
+ case FILE_ASN1_TYPE_INTEGER:
+ case FILE_ASN1_TYPE_ENUMERATED:
+ $temp = $decoded['content'];
+ if (isset($mapping['implicit'])) {
+ $temp = new Math_BigInteger($decoded['content'], -256);
+ }
+ if (isset($mapping['mapping'])) {
+ $temp = (int) $temp->toString();
+ return isset($mapping['mapping'][$temp]) ?
+ $mapping['mapping'][$temp] :
+ false;
+ }
+ return $temp;
+ }
+ }
+
+ /**
+ * ASN.1 Encode
+ *
+ * DER-encodes an ASN.1 semantic mapping ($mapping). Some libraries would probably call this function
+ * an ASN.1 compiler.
+ *
+ * @param String $source
+ * @param String $mapping
+ * @param Integer $idx
+ * @return String
+ * @access public
+ */
+ function encodeDER($source, $mapping)
+ {
+ $this->location = array();
+ return $this->_encode_der($source, $mapping);
+ }
+
+ /**
+ * ASN.1 Encode (Helper function)
+ *
+ * @param String $source
+ * @param String $mapping
+ * @param Integer $idx
+ * @return String
+ * @access private
+ */
+ function _encode_der($source, $mapping, $idx = NULL)
+ {
+ if (is_object($source) && strtolower(get_class($source)) == 'file_asn1_element') {
+ return $source->element;
+ }
+
+ // do not encode (implicitly optional) fields with value set to default
+ if (isset($mapping['default']) && $source === $mapping['default']) {
+ return '';
+ }
+
+ if (isset($idx)) {
+ $this->location[] = $idx;
+ }
+
+ $tag = $mapping['type'];
+
+ switch ($tag) {
+ case FILE_ASN1_TYPE_SET: // Children order is not important, thus process in sequence.
+ case FILE_ASN1_TYPE_SEQUENCE:
+ $tag|= 0x20; // set the constructed bit
+ $value = '';
+
+ // ignore the min and max
+ if (isset($mapping['min']) && isset($mapping['max'])) {
+ $child = $mapping['children'];
+
+ foreach ($source as $content) {
+ $temp = $this->_encode_der($content, $child);
+ if ($temp === false) {
+ return false;
+ }
+ $value.= $temp;
+ }
+ break;
+ }
+
+ foreach ($mapping['children'] as $key => $child) {
+ if (!isset($source[$key])) {
+ if (!isset($child['optional'])) {
+ return false;
+ }
+ continue;
+ }
+
+ $temp = $this->_encode_der($source[$key], $child, $key);
+ if ($temp === false) {
+ return false;
+ }
+
+ // An empty child encoding means it has been optimized out.
+ // Else we should have at least one tag byte.
+ if ($temp === '') {
+ continue;
+ }
+
+ // if isset($child['constant']) is true then isset($child['optional']) should be true as well
+ if (isset($child['constant'])) {
+ /*
+ From X.680-0207.pdf#page=58 (30.6):
+
+ "The tagging construction specifies explicit tagging if any of the following holds:
+ ...
+ c) the "Tag Type" alternative is used and the value of "TagDefault" for the module is IMPLICIT TAGS or
+ AUTOMATIC TAGS, but the type defined by "Type" is an untagged choice type, an untagged open type, or
+ an untagged "DummyReference" (see ITU-T Rec. X.683 | ISO/IEC 8824-4, 8.3)."
+ */
+ if (isset($child['explicit']) || $child['type'] == FILE_ASN1_TYPE_CHOICE) {
+ $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);
+ $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp;
+ } else {
+ $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);
+ $temp = $subtag . substr($temp, 1);
+ }
+ }
+ $value.= $temp;
+ }
+ break;
+ case FILE_ASN1_TYPE_CHOICE:
+ $temp = false;
+
+ foreach ($mapping['children'] as $key => $child) {
+ if (!isset($source[$key])) {
+ continue;
+ }
+
+ $temp = $this->_encode_der($source[$key], $child, $key);
+ if ($temp === false) {
+ return false;
+ }
+
+ // An empty child encoding means it has been optimized out.
+ // Else we should have at least one tag byte.
+ if ($temp === '') {
+ continue;
+ }
+
+ $tag = ord($temp[0]);
+
+ // if isset($child['constant']) is true then isset($child['optional']) should be true as well
+ if (isset($child['constant'])) {
+ if (isset($child['explicit']) || $child['type'] == FILE_ASN1_TYPE_CHOICE) {
+ $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);
+ $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp;
+ } else {
+ $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);
+ $temp = $subtag . substr($temp, 1);
+ }
+ }
+ }
+
+ if (isset($idx)) {
+ array_pop($this->location);
+ }
+
+ if ($temp && isset($mapping['cast'])) {
+ $temp[0] = chr(($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast']);
+ }
+
+ return $temp;
+ case FILE_ASN1_TYPE_INTEGER:
+ case FILE_ASN1_TYPE_ENUMERATED:
+ if (!isset($mapping['mapping'])) {
+ $value = $source->toBytes(true);
+ } else {
+ $value = array_search($source, $mapping['mapping']);
+ if ($value === false) {
+ return false;
+ }
+ $value = new Math_BigInteger($value);
+ $value = $value->toBytes(true);
+ }
+ break;
+ case FILE_ASN1_TYPE_UTC_TIME:
+ case FILE_ASN1_TYPE_GENERALIZED_TIME:
+ $format = $mapping['type'] == FILE_ASN1_TYPE_UTC_TIME ? 'y' : 'Y';
+ $format.= 'mdHis';
+ $value = @gmdate($format, strtotime($source)) . 'Z';
+ break;
+ case FILE_ASN1_TYPE_BIT_STRING:
+ if (isset($mapping['mapping'])) {
+ $bits = array_fill(0, count($mapping['mapping']), 0);
+ $size = 0;
+ for ($i = 0; $i < count($mapping['mapping']); $i++) {
+ if (in_array($mapping['mapping'][$i], $source)) {
+ $bits[$i] = 1;
+ $size = $i;
+ }
+ }
+
+ $offset = 8 - (($size + 1) & 7);
+ $offset = $offset !== 8 ? $offset : 0;
+
+ $value = chr($offset);
+
+ for ($i = $size + 1; $i < count($mapping['mapping']); $i++) {
+ unset($bits[$i]);
+ }
+
+ $bits = implode('', array_pad($bits, $size + $offset + 1, 0));
+ $bytes = explode(' ', rtrim(chunk_split($bits, 8, ' ')));
+ foreach ($bytes as $byte) {
+ $value.= chr(bindec($byte));
+ }
+
+ break;
+ }
+ case FILE_ASN1_TYPE_OCTET_STRING:
+ /* The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,
+ the number of unused bits in the final subsequent octet. The number shall be in the range zero to seven.
+
+ -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=16 */
+ $value = base64_decode($source);
+ break;
+ case FILE_ASN1_TYPE_OBJECT_IDENTIFIER:
+ $oid = preg_match('#(?:\d+\.)+#', $source) ? $source : array_search($source, $this->oids);
+ if ($oid === false) {
+ user_error('Invalid OID');
+ return false;
+ }
+ $value = '';
+ $parts = explode('.', $oid);
+ $value = chr(40 * $parts[0] + $parts[1]);
+ for ($i = 2; $i < count($parts); $i++) {
+ $temp = '';
+ if (!$parts[$i]) {
+ $temp = "\0";
+ } else {
+ while ($parts[$i]) {
+ $temp = chr(0x80 | ($parts[$i] & 0x7F)) . $temp;
+ $parts[$i] >>= 7;
+ }
+ $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F);
+ }
+ $value.= $temp;
+ }
+ break;
+ case FILE_ASN1_TYPE_ANY:
+ $loc = $this->location;
+ if (isset($idx)) {
+ array_pop($this->location);
+ }
+
+ switch (true) {
+ case !isset($source):
+ return $this->_encode_der(NULL, array('type' => FILE_ASN1_TYPE_NULL) + $mapping);
+ case is_int($source):
+ case is_object($source) && strtolower(get_class($source)) == 'math_biginteger':
+ return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_INTEGER) + $mapping);
+ case is_float($source):
+ return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_REAL) + $mapping);
+ case is_bool($source):
+ return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_BOOLEAN) + $mapping);
+ case is_array($source) && count($source) == 1:
+ $typename = implode('', array_keys($source));
+ $outtype = array_search($typename, $this->ANYmap, true);
+ if ($outtype !== false) {
+ return $this->_encode_der($source[$typename], array('type' => $outtype) + $mapping);
+ }
+ }
+
+ $filters = $this->filters;
+ foreach ($loc as $part) {
+ if (!isset($filters[$part])) {
+ $filters = false;
+ break;
+ }
+ $filters = $filters[$part];
+ }
+ if ($filters === false) {
+ user_error('No filters defined for ' . implode('/', $loc));
+ return false;
+ }
+ return $this->_encode_der($source, $filters + $mapping);
+ case FILE_ASN1_TYPE_NULL:
+ $value = '';
+ break;
+ case FILE_ASN1_TYPE_NUMERIC_STRING:
+ case FILE_ASN1_TYPE_TELETEX_STRING:
+ case FILE_ASN1_TYPE_PRINTABLE_STRING:
+ case FILE_ASN1_TYPE_UNIVERSAL_STRING:
+ case FILE_ASN1_TYPE_UTF8_STRING:
+ case FILE_ASN1_TYPE_BMP_STRING:
+ case FILE_ASN1_TYPE_IA5_STRING:
+ case FILE_ASN1_TYPE_VISIBLE_STRING:
+ case FILE_ASN1_TYPE_VIDEOTEX_STRING:
+ case FILE_ASN1_TYPE_GRAPHIC_STRING:
+ case FILE_ASN1_TYPE_GENERAL_STRING:
+ $value = $source;
+ break;
+ case FILE_ASN1_TYPE_BOOLEAN:
+ $value = $source ? "\xFF" : "\x00";
+ break;
+ default:
+ user_error('Mapping provides no type definition for ' . implode('/', $this->location));
+ return false;
+ }
+
+ if (isset($idx)) {
+ array_pop($this->location);
+ }
+
+ if (isset($mapping['cast'])) {
+ $tag = ($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast'];
+ }
+
+ return chr($tag) . $this->_encodeLength(strlen($value)) . $value;
+ }
+
+ /**
+ * DER-encode the length
+ *
+ * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See
+ * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 § 8.1.3} for more information.
+ *
+ * @access private
+ * @param Integer $length
+ * @return String
+ */
+ function _encodeLength($length)
+ {
+ if ($length <= 0x7F) {
+ return chr($length);
+ }
+
+ $temp = ltrim(pack('N', $length), chr(0));
+ return pack('Ca*', 0x80 | strlen($temp), $temp);
+ }
+
+ /**
+ * BER-decode the time
+ *
+ * Called by _decode_ber() and in the case of implicit tags asn1map().
+ *
+ * @access private
+ * @param String $content
+ * @param Integer $tag
+ * @return String
+ */
+ function _decodeTime($content, $tag)
+ {
+ /* UTCTime:
+ http://tools.ietf.org/html/rfc5280#section-4.1.2.5.1
+ http://www.obj-sys.com/asn1tutorial/node15.html
+
+ GeneralizedTime:
+ http://tools.ietf.org/html/rfc5280#section-4.1.2.5.2
+ http://www.obj-sys.com/asn1tutorial/node14.html */
+
+ $pattern = $tag == FILE_ASN1_TYPE_UTC_TIME ?
+ '#(..)(..)(..)(..)(..)(..)(.*)#' :
+ '#(....)(..)(..)(..)(..)(..).*([Z+-].*)$#';
+
+ preg_match($pattern, $content, $matches);
+
+ list(, $year, $month, $day, $hour, $minute, $second, $timezone) = $matches;
+
+ if ($tag == FILE_ASN1_TYPE_UTC_TIME) {
+ $year = $year >= 50 ? "19$year" : "20$year";
+ }
+
+ if ($timezone == 'Z') {
+ $mktime = 'gmmktime';
+ $timezone = 0;
+ } elseif (preg_match('#([+-])(\d\d)(\d\d)#', $timezone, $matches)) {
+ $mktime = 'gmmktime';
+ $timezone = 60 * $matches[3] + 3600 * $matches[2];
+ if ($matches[1] == '-') {
+ $timezone = -$timezone;
+ }
+ } else {
+ $mktime = 'mktime';
+ $timezone = 0;
+ }
+
+ return @$mktime($hour, $minute, $second, $month, $day, $year) + $timezone;
+ }
+
+ /**
+ * Set the time format
+ *
+ * Sets the time / date format for asn1map().
+ *
+ * @access public
+ * @param String $format
+ */
+ function setTimeFormat($format)
+ {
+ $this->format = $format;
+ }
+
+ /**
+ * Load OIDs
+ *
+ * Load the relevant OIDs for a particular ASN.1 semantic mapping.
+ *
+ * @access public
+ * @param Array $oids
+ */
+ function loadOIDs($oids)
+ {
+ $this->oids = $oids;
+ }
+
+ /**
+ * Load filters
+ *
+ * See File_X509, etc, for an example.
+ *
+ * @access public
+ * @param Array $filters
+ */
+ function loadFilters($filters)
+ {
+ $this->filters = $filters;
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+
+ /**
+ * String type conversion
+ *
+ * This is a lazy conversion, dealing only with character size.
+ * No real conversion table is used.
+ *
+ * @param String $in
+ * @param optional Integer $from
+ * @param optional Integer $to
+ * @return String
+ * @access public
+ */
+ function convert($in, $from = FILE_ASN1_TYPE_UTF8_STRING, $to = FILE_ASN1_TYPE_UTF8_STRING)
+ {
+ if (!isset($this->stringTypeSize[$from]) || !isset($this->stringTypeSize[$to])) {
+ return false;
+ }
+ $insize = $this->stringTypeSize[$from];
+ $outsize = $this->stringTypeSize[$to];
+ $inlength = strlen($in);
+ $out = '';
+
+ for ($i = 0; $i < $inlength;) {
+ if ($inlength - $i < $insize) {
+ return false;
+ }
+
+ // Get an input character as a 32-bit value.
+ $c = ord($in[$i++]);
+ switch (true) {
+ case $insize == 4:
+ $c = ($c << 8) | ord($in[$i++]);
+ $c = ($c << 8) | ord($in[$i++]);
+ case $insize == 2:
+ $c = ($c << 8) | ord($in[$i++]);
+ case $insize == 1:
+ break;
+ case ($c & 0x80) == 0x00:
+ break;
+ case ($c & 0x40) == 0x00:
+ return false;
+ default:
+ $bit = 6;
+ do {
+ if ($bit > 25 || $i >= $inlength || (ord($in[$i]) & 0xC0) != 0x80) {
+ return false;
+ }
+ $c = ($c << 6) | (ord($in[$i++]) & 0x3F);
+ $bit += 5;
+ $mask = 1 << $bit;
+ } while ($c & $bit);
+ $c &= $mask - 1;
+ break;
+ }
+
+ // Convert and append the character to output string.
+ $v = '';
+ switch (true) {
+ case $outsize == 4:
+ $v .= chr($c & 0xFF);
+ $c >>= 8;
+ $v .= chr($c & 0xFF);
+ $c >>= 8;
+ case $outsize == 2:
+ $v .= chr($c & 0xFF);
+ $c >>= 8;
+ case $outsize == 1:
+ $v .= chr($c & 0xFF);
+ $c >>= 8;
+ if ($c) {
+ return false;
+ }
+ break;
+ case ($c & 0x80000000) != 0:
+ return false;
+ case $c >= 0x04000000:
+ $v .= chr(0x80 | ($c & 0x3F));
+ $c = ($c >> 6) | 0x04000000;
+ case $c >= 0x00200000:
+ $v .= chr(0x80 | ($c & 0x3F));
+ $c = ($c >> 6) | 0x00200000;
+ case $c >= 0x00010000:
+ $v .= chr(0x80 | ($c & 0x3F));
+ $c = ($c >> 6) | 0x00010000;
+ case $c >= 0x00000800:
+ $v .= chr(0x80 | ($c & 0x3F));
+ $c = ($c >> 6) | 0x00000800;
+ case $c >= 0x00000080:
+ $v .= chr(0x80 | ($c & 0x3F));
+ $c = ($c >> 6) | 0x000000C0;
+ default:
+ $v .= chr($c);
+ break;
+ }
+ $out .= strrev($v);
+ }
+ return $out;
+ }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php
new file mode 100644
index 00000000000..278da62e262
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php
@@ -0,0 +1,4323 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP X.509 Parser
+ *
+ * PHP versions 4 and 5
+ *
+ * Encode and decode X.509 certificates.
+ *
+ * The extensions are from {@link http://tools.ietf.org/html/rfc5280 RFC5280} and
+ * {@link http://web.archive.org/web/19961027104704/http://www3.netscape.com/eng/security/cert-exts.html Netscape Certificate Extensions}.
+ *
+ * Note that loading an X.509 certificate and resaving it may invalidate the signature. The reason being that the signature is based on a
+ * portion of the certificate that contains optional parameters with default values. ie. if the parameter isn't there the default value is
+ * used. Problem is, if the parameter is there and it just so happens to have the default value there are two ways that that parameter can
+ * be encoded. It can be encoded explicitly or left out all together. This would effect the signature value and thus may invalidate the
+ * the certificate all together unless the certificate is re-signed.
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category File
+ * @package File_X509
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMXII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id$
+ * @link htp://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include File_ASN1
+ */
+if (!class_exists('File_ASN1')) {
+ require_once('File/ASN1.php');
+}
+
+/**
+ * Flag to only accept signatures signed by certificate authorities
+ *
+ * @access public
+ * @see File_X509::validateSignature()
+ */
+define('FILE_X509_VALIDATE_SIGNATURE_BY_CA', 1);
+
+/**#@+
+ * @access public
+ * @see File_X509::getDN()
+ */
+/**
+ * Return internal array representation
+ */
+define('FILE_X509_DN_ARRAY', 0);
+/**
+ * Return string
+ */
+define('FILE_X509_DN_STRING', 1);
+/**
+ * Return ASN.1 name string
+ */
+define('FILE_X509_DN_ASN1', 2);
+/**
+ * Return OpenSSL compatible array
+ */
+define('FILE_X509_DN_OPENSSL', 3);
+/**
+ * Return canonical ASN.1 RDNs string
+ */
+define('FILE_X509_DN_CANON', 4);
+/**
+ * Return name hash for file indexing
+ */
+define('FILE_X509_DN_HASH', 5);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see File_X509::saveX509()
+ * @see File_X509::saveCSR()
+ * @see File_X509::saveCRL()
+ */
+/**
+ * Save as PEM
+ *
+ * ie. a base64-encoded PEM with a header and a footer
+ */
+define('FILE_X509_FORMAT_PEM', 0);
+/**
+ * Save as DER
+ */
+define('FILE_X509_FORMAT_DER', 1);
+/**
+ * Save as a SPKAC
+ *
+ * Only works on CSRs. Not currently supported.
+ */
+define('FILE_X509_FORMAT_SPKAC', 2);
+/**#@-*/
+
+/**
+ * Attribute value disposition.
+ * If disposition is >= 0, this is the index of the target value.
+ */
+define('FILE_X509_ATTR_ALL', -1); // All attribute values (array).
+define('FILE_X509_ATTR_APPEND', -2); // Add a value.
+define('FILE_X509_ATTR_REPLACE', -3); // Clear first, then add a value.
+
+/**
+ * Pure-PHP X.509 Parser
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.3.1
+ * @access public
+ * @package File_X509
+ */
+class File_X509 {
+ /**
+ * ASN.1 syntax for X.509 certificates
+ *
+ * @var Array
+ * @access private
+ */
+ var $Certificate;
+
+ /**#@+
+ * ASN.1 syntax for various extensions
+ *
+ * @access private
+ */
+ var $DirectoryString;
+ var $PKCS9String;
+ var $AttributeValue;
+ var $Extensions;
+ var $KeyUsage;
+ var $ExtKeyUsageSyntax;
+ var $BasicConstraints;
+ var $KeyIdentifier;
+ var $CRLDistributionPoints;
+ var $AuthorityKeyIdentifier;
+ var $CertificatePolicies;
+ var $AuthorityInfoAccessSyntax;
+ var $SubjectAltName;
+ var $PrivateKeyUsagePeriod;
+ var $IssuerAltName;
+ var $PolicyMappings;
+ var $NameConstraints;
+
+ var $CPSuri;
+ var $UserNotice;
+
+ var $netscape_cert_type;
+ var $netscape_comment;
+ var $netscape_ca_policy_url;
+
+ var $Name;
+ var $RelativeDistinguishedName;
+ var $CRLNumber;
+ var $CRLReason;
+ var $IssuingDistributionPoint;
+ var $InvalidityDate;
+ var $CertificateIssuer;
+ var $HoldInstructionCode;
+ var $SignedPublicKeyAndChallenge;
+ /**#@-*/
+
+ /**
+ * ASN.1 syntax for Certificate Signing Requests (RFC2986)
+ *
+ * @var Array
+ * @access private
+ */
+ var $CertificationRequest;
+
+ /**
+ * ASN.1 syntax for Certificate Revocation Lists (RFC5280)
+ *
+ * @var Array
+ * @access private
+ */
+ var $CertificateList;
+
+ /**
+ * Distinguished Name
+ *
+ * @var Array
+ * @access private
+ */
+ var $dn;
+
+ /**
+ * Public key
+ *
+ * @var String
+ * @access private
+ */
+ var $publicKey;
+
+ /**
+ * Private key
+ *
+ * @var String
+ * @access private
+ */
+ var $privateKey;
+
+ /**
+ * Object identifiers for X.509 certificates
+ *
+ * @var Array
+ * @access private
+ * @link http://en.wikipedia.org/wiki/Object_identifier
+ */
+ var $oids;
+
+ /**
+ * The certificate authorities
+ *
+ * @var Array
+ * @access private
+ */
+ var $CAs;
+
+ /**
+ * The currently loaded certificate
+ *
+ * @var Array
+ * @access private
+ */
+ var $currentCert;
+
+ /**
+ * The signature subject
+ *
+ * There's no guarantee File_X509 is going to reencode an X.509 cert in the same way it was originally
+ * encoded so we take save the portion of the original cert that the signature would have made for.
+ *
+ * @var String
+ * @access private
+ */
+ var $signatureSubject;
+
+ /**
+ * Certificate Start Date
+ *
+ * @var String
+ * @access private
+ */
+ var $startDate;
+
+ /**
+ * Certificate End Date
+ *
+ * @var String
+ * @access private
+ */
+ var $endDate;
+
+ /**
+ * Serial Number
+ *
+ * @var String
+ * @access private
+ */
+ var $serialNumber;
+
+ /**
+ * Key Identifier
+ *
+ * See {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.1 RFC5280#section-4.2.1.1} and
+ * {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.2 RFC5280#section-4.2.1.2}.
+ *
+ * @var String
+ * @access private
+ */
+ var $currentKeyIdentifier;
+
+ /**
+ * CA Flag
+ *
+ * @var Boolean
+ * @access private
+ */
+ var $caFlag = false;
+
+ /**
+ * Default Constructor.
+ *
+ * @return File_X509
+ * @access public
+ */
+ function File_X509()
+ {
+ // Explicitly Tagged Module, 1988 Syntax
+ // http://tools.ietf.org/html/rfc5280#appendix-A.1
+
+ $this->DirectoryString = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ 'children' => array(
+ 'teletexString' => array('type' => FILE_ASN1_TYPE_TELETEX_STRING),
+ 'printableString' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING),
+ 'universalString' => array('type' => FILE_ASN1_TYPE_UNIVERSAL_STRING),
+ 'utf8String' => array('type' => FILE_ASN1_TYPE_UTF8_STRING),
+ 'bmpString' => array('type' => FILE_ASN1_TYPE_BMP_STRING)
+ )
+ );
+
+ $this->PKCS9String = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ 'children' => array(
+ 'ia5String' => array('type' => FILE_ASN1_TYPE_IA5_STRING),
+ 'directoryString' => $this->DirectoryString
+ )
+ );
+
+ $this->AttributeValue = array('type' => FILE_ASN1_TYPE_ANY);
+
+ $AttributeType = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+ $AttributeTypeAndValue = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'type' => $AttributeType,
+ 'value'=> $this->AttributeValue
+ )
+ );
+
+ /*
+ In practice, RDNs containing multiple name-value pairs (called "multivalued RDNs") are rare,
+ but they can be useful at times when either there is no unique attribute in the entry or you
+ want to ensure that the entry's DN contains some useful identifying information.
+
+ - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName
+ */
+ $this->RelativeDistinguishedName = array(
+ 'type' => FILE_ASN1_TYPE_SET,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $AttributeTypeAndValue
+ );
+
+ // http://tools.ietf.org/html/rfc5280#section-4.1.2.4
+ $RDNSequence = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ // RDNSequence does not define a min or a max, which means it doesn't have one
+ 'min' => 0,
+ 'max' => -1,
+ 'children' => $this->RelativeDistinguishedName
+ );
+
+ $this->Name = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ 'children' => array(
+ 'rdnSequence' => $RDNSequence
+ )
+ );
+
+ // http://tools.ietf.org/html/rfc5280#section-4.1.1.2
+ $AlgorithmIdentifier = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'algorithm' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER),
+ 'parameters' => array(
+ 'type' => FILE_ASN1_TYPE_ANY,
+ 'optional' => true
+ )
+ )
+ );
+
+ /*
+ A certificate using system MUST reject the certificate if it encounters
+ a critical extension it does not recognize; however, a non-critical
+ extension may be ignored if it is not recognized.
+
+ http://tools.ietf.org/html/rfc5280#section-4.2
+ */
+ $Extension = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'extnId' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER),
+ 'critical' => array(
+ 'type' => FILE_ASN1_TYPE_BOOLEAN,
+ 'optional' => true,
+ 'default' => false
+ ),
+ 'extnValue' => array('type' => FILE_ASN1_TYPE_OCTET_STRING)
+ )
+ );
+
+ $this->Extensions = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ // technically, it's MAX, but we'll assume anything < 0 is MAX
+ 'max' => -1,
+ // if 'children' isn't an array then 'min' and 'max' must be defined
+ 'children' => $Extension
+ );
+
+ $SubjectPublicKeyInfo = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'algorithm' => $AlgorithmIdentifier,
+ 'subjectPublicKey' => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+ )
+ );
+
+ $UniqueIdentifier = array('type' => FILE_ASN1_TYPE_BIT_STRING);
+
+ $Time = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ 'children' => array(
+ 'utcTime' => array('type' => FILE_ASN1_TYPE_UTC_TIME),
+ 'generalTime' => array('type' => FILE_ASN1_TYPE_GENERALIZED_TIME)
+ )
+ );
+
+ // http://tools.ietf.org/html/rfc5280#section-4.1.2.5
+ $Validity = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'notBefore' => $Time,
+ 'notAfter' => $Time
+ )
+ );
+
+ $CertificateSerialNumber = array('type' => FILE_ASN1_TYPE_INTEGER);
+
+ $Version = array(
+ 'type' => FILE_ASN1_TYPE_INTEGER,
+ 'mapping' => array('v1', 'v2', 'v3')
+ );
+
+ // assert($TBSCertificate['children']['signature'] == $Certificate['children']['signatureAlgorithm'])
+ $TBSCertificate = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ // technically, default implies optional, but we'll define it as being optional, none-the-less, just to
+ // reenforce that fact
+ 'version' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'explicit' => true,
+ 'default' => 'v1'
+ ) + $Version,
+ 'serialNumber' => $CertificateSerialNumber,
+ 'signature' => $AlgorithmIdentifier,
+ 'issuer' => $this->Name,
+ 'validity' => $Validity,
+ 'subject' => $this->Name,
+ 'subjectPublicKeyInfo' => $SubjectPublicKeyInfo,
+ // implicit means that the T in the TLV structure is to be rewritten, regardless of the type
+ 'issuerUniqueID' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $UniqueIdentifier,
+ 'subjectUniqueID' => array(
+ 'constant' => 2,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $UniqueIdentifier,
+ // <http://tools.ietf.org/html/rfc2459#page-74> doesn't use the EXPLICIT keyword but if
+ // it's not IMPLICIT, it's EXPLICIT
+ 'extensions' => array(
+ 'constant' => 3,
+ 'optional' => true,
+ 'explicit' => true
+ ) + $this->Extensions
+ )
+ );
+
+ $this->Certificate = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'tbsCertificate' => $TBSCertificate,
+ 'signatureAlgorithm' => $AlgorithmIdentifier,
+ 'signature' => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+ )
+ );
+
+ $this->KeyUsage = array(
+ 'type' => FILE_ASN1_TYPE_BIT_STRING,
+ 'mapping' => array(
+ 'digitalSignature',
+ 'nonRepudiation',
+ 'keyEncipherment',
+ 'dataEncipherment',
+ 'keyAgreement',
+ 'keyCertSign',
+ 'cRLSign',
+ 'encipherOnly',
+ 'decipherOnly'
+ )
+ );
+
+ $this->BasicConstraints = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'cA' => array(
+ 'type' => FILE_ASN1_TYPE_BOOLEAN,
+ 'optional' => true,
+ 'default' => false
+ ),
+ 'pathLenConstraint' => array(
+ 'type' => FILE_ASN1_TYPE_INTEGER,
+ 'optional' => true
+ )
+ )
+ );
+
+ $this->KeyIdentifier = array('type' => FILE_ASN1_TYPE_OCTET_STRING);
+
+ $OrganizationalUnitNames = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => 4, // ub-organizational-units
+ 'children' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+ );
+
+ $PersonalName = array(
+ 'type' => FILE_ASN1_TYPE_SET,
+ 'children' => array(
+ 'surname' => array(
+ 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ),
+ 'given-name' => array(
+ 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ),
+ 'initials' => array(
+ 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+ 'constant' => 2,
+ 'optional' => true,
+ 'implicit' => true
+ ),
+ 'generation-qualifier' => array(
+ 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+ 'constant' => 3,
+ 'optional' => true,
+ 'implicit' => true
+ )
+ )
+ );
+
+ $NumericUserIdentifier = array('type' => FILE_ASN1_TYPE_NUMERIC_STRING);
+
+ $OrganizationName = array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING);
+
+ $PrivateDomainName = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ 'children' => array(
+ 'numeric' => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING),
+ 'printable' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+ )
+ );
+
+ $TerminalIdentifier = array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING);
+
+ $NetworkAddress = array('type' => FILE_ASN1_TYPE_NUMERIC_STRING);
+
+ $AdministrationDomainName = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ // if class isn't present it's assumed to be FILE_ASN1_CLASS_UNIVERSAL or
+ // (if constant is present) FILE_ASN1_CLASS_CONTEXT_SPECIFIC
+ 'class' => FILE_ASN1_CLASS_APPLICATION,
+ 'cast' => 2,
+ 'children' => array(
+ 'numeric' => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING),
+ 'printable' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+ )
+ );
+
+ $CountryName = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ // if class isn't present it's assumed to be FILE_ASN1_CLASS_UNIVERSAL or
+ // (if constant is present) FILE_ASN1_CLASS_CONTEXT_SPECIFIC
+ 'class' => FILE_ASN1_CLASS_APPLICATION,
+ 'cast' => 1,
+ 'children' => array(
+ 'x121-dcc-code' => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING),
+ 'iso-3166-alpha2-code' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+ )
+ );
+
+ $AnotherName = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'type-id' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER),
+ 'value' => array(
+ 'type' => FILE_ASN1_TYPE_ANY,
+ 'constant' => 0,
+ 'optional' => true,
+ 'explicit' => true
+ )
+ )
+ );
+
+ $ExtensionAttribute = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'extension-attribute-type' => array(
+ 'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ),
+ 'extension-attribute-value' => array(
+ 'type' => FILE_ASN1_TYPE_ANY,
+ 'constant' => 1,
+ 'optional' => true,
+ 'explicit' => true
+ )
+ )
+ );
+
+ $ExtensionAttributes = array(
+ 'type' => FILE_ASN1_TYPE_SET,
+ 'min' => 1,
+ 'max' => 256, // ub-extension-attributes
+ 'children' => $ExtensionAttribute
+ );
+
+ $BuiltInDomainDefinedAttribute = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'type' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING),
+ 'value' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+ )
+ );
+
+ $BuiltInDomainDefinedAttributes = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => 4, // ub-domain-defined-attributes
+ 'children' => $BuiltInDomainDefinedAttribute
+ );
+
+ $BuiltInStandardAttributes = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'country-name' => array('optional' => true) + $CountryName,
+ 'administration-domain-name' => array('optional' => true) + $AdministrationDomainName,
+ 'network-address' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $NetworkAddress,
+ 'terminal-identifier' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $TerminalIdentifier,
+ 'private-domain-name' => array(
+ 'constant' => 2,
+ 'optional' => true,
+ 'explicit' => true
+ ) + $PrivateDomainName,
+ 'organization-name' => array(
+ 'constant' => 3,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $OrganizationName,
+ 'numeric-user-identifier' => array(
+ 'constant' => 4,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $NumericUserIdentifier,
+ 'personal-name' => array(
+ 'constant' => 5,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $PersonalName,
+ 'organizational-unit-names' => array(
+ 'constant' => 6,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $OrganizationalUnitNames
+ )
+ );
+
+ $ORAddress = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'built-in-standard-attributes' => $BuiltInStandardAttributes,
+ 'built-in-domain-defined-attributes' => array('optional' => true) + $BuiltInDomainDefinedAttributes,
+ 'extension-attributes' => array('optional' => true) + $ExtensionAttributes
+ )
+ );
+
+ $EDIPartyName = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'nameAssigner' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $this->DirectoryString,
+ // partyName is technically required but File_ASN1 doesn't currently support non-optional constants and
+ // setting it to optional gets the job done in any event.
+ 'partyName' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $this->DirectoryString
+ )
+ );
+
+ $GeneralName = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ 'children' => array(
+ 'otherName' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $AnotherName,
+ 'rfc822Name' => array(
+ 'type' => FILE_ASN1_TYPE_IA5_STRING,
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ),
+ 'dNSName' => array(
+ 'type' => FILE_ASN1_TYPE_IA5_STRING,
+ 'constant' => 2,
+ 'optional' => true,
+ 'implicit' => true
+ ),
+ 'x400Address' => array(
+ 'constant' => 3,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $ORAddress,
+ 'directoryName' => array(
+ 'constant' => 4,
+ 'optional' => true,
+ 'explicit' => true
+ ) + $this->Name,
+ 'ediPartyName' => array(
+ 'constant' => 5,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $EDIPartyName,
+ 'uniformResourceIdentifier' => array(
+ 'type' => FILE_ASN1_TYPE_IA5_STRING,
+ 'constant' => 6,
+ 'optional' => true,
+ 'implicit' => true
+ ),
+ 'iPAddress' => array(
+ 'type' => FILE_ASN1_TYPE_OCTET_STRING,
+ 'constant' => 7,
+ 'optional' => true,
+ 'implicit' => true
+ ),
+ 'registeredID' => array(
+ 'type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER,
+ 'constant' => 8,
+ 'optional' => true,
+ 'implicit' => true
+ )
+ )
+ );
+
+ $GeneralNames = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $GeneralName
+ );
+
+ $this->IssuerAltName = $GeneralNames;
+
+ $ReasonFlags = array(
+ 'type' => FILE_ASN1_TYPE_BIT_STRING,
+ 'mapping' => array(
+ 'unused',
+ 'keyCompromise',
+ 'cACompromise',
+ 'affiliationChanged',
+ 'superseded',
+ 'cessationOfOperation',
+ 'certificateHold',
+ 'privilegeWithdrawn',
+ 'aACompromise'
+ )
+ );
+
+ $DistributionPointName = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ 'children' => array(
+ 'fullName' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $GeneralNames,
+ 'nameRelativeToCRLIssuer' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $this->RelativeDistinguishedName
+ )
+ );
+
+ $DistributionPoint = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'distributionPoint' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'explicit' => true
+ ) + $DistributionPointName,
+ 'reasons' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $ReasonFlags,
+ 'cRLIssuer' => array(
+ 'constant' => 2,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $GeneralNames
+ )
+ );
+
+ $this->CRLDistributionPoints = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $DistributionPoint
+ );
+
+ $this->AuthorityKeyIdentifier = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'keyIdentifier' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $this->KeyIdentifier,
+ 'authorityCertIssuer' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $GeneralNames,
+ 'authorityCertSerialNumber' => array(
+ 'constant' => 2,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $CertificateSerialNumber
+ )
+ );
+
+ $PolicyQualifierId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+ $PolicyQualifierInfo = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'policyQualifierId' => $PolicyQualifierId,
+ 'qualifier' => array('type' => FILE_ASN1_TYPE_ANY)
+ )
+ );
+
+ $CertPolicyId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+ $PolicyInformation = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'policyIdentifier' => $CertPolicyId,
+ 'policyQualifiers' => array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 0,
+ 'max' => -1,
+ 'optional' => true,
+ 'children' => $PolicyQualifierInfo
+ )
+ )
+ );
+
+ $this->CertificatePolicies = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $PolicyInformation
+ );
+
+ $this->PolicyMappings = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'issuerDomainPolicy' => $CertPolicyId,
+ 'subjectDomainPolicy' => $CertPolicyId
+ )
+ )
+ );
+
+ $KeyPurposeId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+ $this->ExtKeyUsageSyntax = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $KeyPurposeId
+ );
+
+ $AccessDescription = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'accessMethod' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER),
+ 'accessLocation' => $GeneralName
+ )
+ );
+
+ $this->AuthorityInfoAccessSyntax = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $AccessDescription
+ );
+
+ $this->SubjectAltName = $GeneralNames;
+
+ $this->PrivateKeyUsagePeriod = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'notBefore' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true,
+ 'type' => FILE_ASN1_TYPE_GENERALIZED_TIME),
+ 'notAfter' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true,
+ 'type' => FILE_ASN1_TYPE_GENERALIZED_TIME)
+ )
+ );
+
+ $BaseDistance = array('type' => FILE_ASN1_TYPE_INTEGER);
+
+ $GeneralSubtree = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'base' => $GeneralName,
+ 'minimum' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true,
+ 'default' => new Math_BigInteger(0)
+ ) + $BaseDistance,
+ 'maximum' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true,
+ ) + $BaseDistance
+ )
+ );
+
+ $GeneralSubtrees = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $GeneralSubtree
+ );
+
+ $this->NameConstraints = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'permittedSubtrees' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $GeneralSubtrees,
+ 'excludedSubtrees' => array(
+ 'constant' => 1,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $GeneralSubtrees
+ )
+ );
+
+ $this->CPSuri = array('type' => FILE_ASN1_TYPE_IA5_STRING);
+
+ $DisplayText = array(
+ 'type' => FILE_ASN1_TYPE_CHOICE,
+ 'children' => array(
+ 'ia5String' => array('type' => FILE_ASN1_TYPE_IA5_STRING),
+ 'visibleString' => array('type' => FILE_ASN1_TYPE_VISIBLE_STRING),
+ 'bmpString' => array('type' => FILE_ASN1_TYPE_BMP_STRING),
+ 'utf8String' => array('type' => FILE_ASN1_TYPE_UTF8_STRING)
+ )
+ );
+
+ $NoticeReference = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'organization' => $DisplayText,
+ 'noticeNumbers' => array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => 200,
+ 'children' => array('type' => FILE_ASN1_TYPE_INTEGER)
+ )
+ )
+ );
+
+ $this->UserNotice = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'noticeRef' => array(
+ 'optional' => true,
+ 'implicit' => true
+ ) + $NoticeReference,
+ 'explicitText' => array(
+ 'optional' => true,
+ 'implicit' => true
+ ) + $DisplayText
+ )
+ );
+
+ // mapping is from <http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn3.html>
+ $this->netscape_cert_type = array(
+ 'type' => FILE_ASN1_TYPE_BIT_STRING,
+ 'mapping' => array(
+ 'SSLClient',
+ 'SSLServer',
+ 'Email',
+ 'ObjectSigning',
+ 'Reserved',
+ 'SSLCA',
+ 'EmailCA',
+ 'ObjectSigningCA'
+ )
+ );
+
+ $this->netscape_comment = array('type' => FILE_ASN1_TYPE_IA5_STRING);
+ $this->netscape_ca_policy_url = array('type' => FILE_ASN1_TYPE_IA5_STRING);
+
+ // attribute is used in RFC2986 but we're using the RFC5280 definition
+
+ $Attribute = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'type' => $AttributeType,
+ 'value'=> array(
+ 'type' => FILE_ASN1_TYPE_SET,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $this->AttributeValue
+ )
+ )
+ );
+
+ // adapted from <http://tools.ietf.org/html/rfc2986>
+
+ $Attributes = array(
+ 'type' => FILE_ASN1_TYPE_SET,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $Attribute
+ );
+
+ $CertificationRequestInfo = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'version' => array(
+ 'type' => FILE_ASN1_TYPE_INTEGER,
+ 'mapping' => array('v1')
+ ),
+ 'subject' => $this->Name,
+ 'subjectPKInfo' => $SubjectPublicKeyInfo,
+ 'attributes' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $Attributes,
+ )
+ );
+
+ $this->CertificationRequest = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'certificationRequestInfo' => $CertificationRequestInfo,
+ 'signatureAlgorithm' => $AlgorithmIdentifier,
+ 'signature' => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+ )
+ );
+
+ $RevokedCertificate = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'userCertificate' => $CertificateSerialNumber,
+ 'revocationDate' => $Time,
+ 'crlEntryExtensions' => array(
+ 'optional' => true
+ ) + $this->Extensions
+ )
+ );
+
+ $TBSCertList = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'version' => array(
+ 'optional' => true,
+ 'default' => 'v1'
+ ) + $Version,
+ 'signature' => $AlgorithmIdentifier,
+ 'issuer' => $this->Name,
+ 'thisUpdate' => $Time,
+ 'nextUpdate' => array(
+ 'optional' => true
+ ) + $Time,
+ 'revokedCertificates' => array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'optional' => true,
+ 'min' => 0,
+ 'max' => -1,
+ 'children' => $RevokedCertificate
+ ),
+ 'crlExtensions' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'explicit' => true
+ ) + $this->Extensions
+ )
+ );
+
+ $this->CertificateList = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'tbsCertList' => $TBSCertList,
+ 'signatureAlgorithm' => $AlgorithmIdentifier,
+ 'signature' => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+ )
+ );
+
+ $this->CRLNumber = array('type' => FILE_ASN1_TYPE_INTEGER);
+
+ $this->CRLReason = array('type' => FILE_ASN1_TYPE_ENUMERATED,
+ 'mapping' => array(
+ 'unspecified',
+ 'keyCompromise',
+ 'cACompromise',
+ 'affiliationChanged',
+ 'superseded',
+ 'cessationOfOperation',
+ 'certificateHold',
+ // Value 7 is not used.
+ 8 => 'removeFromCRL',
+ 'privilegeWithdrawn',
+ 'aACompromise'
+ )
+ );
+
+ $this->IssuingDistributionPoint = array('type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'distributionPoint' => array(
+ 'constant' => 0,
+ 'optional' => true,
+ 'explicit' => true
+ ) + $DistributionPointName,
+ 'onlyContainsUserCerts' => array(
+ 'type' => FILE_ASN1_TYPE_BOOLEAN,
+ 'constant' => 1,
+ 'optional' => true,
+ 'default' => false,
+ 'implicit' => true
+ ),
+ 'onlyContainsCACerts' => array(
+ 'type' => FILE_ASN1_TYPE_BOOLEAN,
+ 'constant' => 2,
+ 'optional' => true,
+ 'default' => false,
+ 'implicit' => true
+ ),
+ 'onlySomeReasons' => array(
+ 'constant' => 3,
+ 'optional' => true,
+ 'implicit' => true
+ ) + $ReasonFlags,
+ 'indirectCRL' => array(
+ 'type' => FILE_ASN1_TYPE_BOOLEAN,
+ 'constant' => 4,
+ 'optional' => true,
+ 'default' => false,
+ 'implicit' => true
+ ),
+ 'onlyContainsAttributeCerts' => array(
+ 'type' => FILE_ASN1_TYPE_BOOLEAN,
+ 'constant' => 5,
+ 'optional' => true,
+ 'default' => false,
+ 'implicit' => true
+ )
+ )
+ );
+
+ $this->InvalidityDate = array('type' => FILE_ASN1_TYPE_GENERALIZED_TIME);
+
+ $this->CertificateIssuer = $GeneralNames;
+
+ $this->HoldInstructionCode = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+ $PublicKeyAndChallenge = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'spki' => $SubjectPublicKeyInfo,
+ 'challenge' => array('type' => FILE_ASN1_TYPE_IA5_STRING)
+ )
+ );
+
+ $this->SignedPublicKeyAndChallenge = array(
+ 'type' => FILE_ASN1_TYPE_SEQUENCE,
+ 'children' => array(
+ 'publicKeyAndChallenge' => $PublicKeyAndChallenge,
+ 'signatureAlgorithm' => $AlgorithmIdentifier,
+ 'signature' => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+ )
+ );
+
+ // OIDs from RFC5280 and those RFCs mentioned in RFC5280#section-4.1.1.2
+ $this->oids = array(
+ '1.3.6.1.5.5.7' => 'id-pkix',
+ '1.3.6.1.5.5.7.1' => 'id-pe',
+ '1.3.6.1.5.5.7.2' => 'id-qt',
+ '1.3.6.1.5.5.7.3' => 'id-kp',
+ '1.3.6.1.5.5.7.48' => 'id-ad',
+ '1.3.6.1.5.5.7.2.1' => 'id-qt-cps',
+ '1.3.6.1.5.5.7.2.2' => 'id-qt-unotice',
+ '1.3.6.1.5.5.7.48.1' =>'id-ad-ocsp',
+ '1.3.6.1.5.5.7.48.2' => 'id-ad-caIssuers',
+ '1.3.6.1.5.5.7.48.3' => 'id-ad-timeStamping',
+ '1.3.6.1.5.5.7.48.5' => 'id-ad-caRepository',
+ '2.5.4' => 'id-at',
+ '2.5.4.41' => 'id-at-name',
+ '2.5.4.4' => 'id-at-surname',
+ '2.5.4.42' => 'id-at-givenName',
+ '2.5.4.43' => 'id-at-initials',
+ '2.5.4.44' => 'id-at-generationQualifier',
+ '2.5.4.3' => 'id-at-commonName',
+ '2.5.4.7' => 'id-at-localityName',
+ '2.5.4.8' => 'id-at-stateOrProvinceName',
+ '2.5.4.10' => 'id-at-organizationName',
+ '2.5.4.11' => 'id-at-organizationalUnitName',
+ '2.5.4.12' => 'id-at-title',
+ '2.5.4.13' => 'id-at-description',
+ '2.5.4.46' => 'id-at-dnQualifier',
+ '2.5.4.6' => 'id-at-countryName',
+ '2.5.4.5' => 'id-at-serialNumber',
+ '2.5.4.65' => 'id-at-pseudonym',
+ '2.5.4.17' => 'id-at-postalCode',
+ '2.5.4.9' => 'id-at-streetAddress',
+ '2.5.4.45' => 'id-at-uniqueIdentifier',
+ '2.5.4.72' => 'id-at-role',
+
+ '0.9.2342.19200300.100.1.25' => 'id-domainComponent',
+ '1.2.840.113549.1.9' => 'pkcs-9',
+ '1.2.840.113549.1.9.1' => 'pkcs-9-at-emailAddress',
+ '2.5.29' => 'id-ce',
+ '2.5.29.35' => 'id-ce-authorityKeyIdentifier',
+ '2.5.29.14' => 'id-ce-subjectKeyIdentifier',
+ '2.5.29.15' => 'id-ce-keyUsage',
+ '2.5.29.16' => 'id-ce-privateKeyUsagePeriod',
+ '2.5.29.32' => 'id-ce-certificatePolicies',
+ '2.5.29.32.0' => 'anyPolicy',
+
+ '2.5.29.33' => 'id-ce-policyMappings',
+ '2.5.29.17' => 'id-ce-subjectAltName',
+ '2.5.29.18' => 'id-ce-issuerAltName',
+ '2.5.29.9' => 'id-ce-subjectDirectoryAttributes',
+ '2.5.29.19' => 'id-ce-basicConstraints',
+ '2.5.29.30' => 'id-ce-nameConstraints',
+ '2.5.29.36' => 'id-ce-policyConstraints',
+ '2.5.29.31' => 'id-ce-cRLDistributionPoints',
+ '2.5.29.37' => 'id-ce-extKeyUsage',
+ '2.5.29.37.0' => 'anyExtendedKeyUsage',
+ '1.3.6.1.5.5.7.3.1' => 'id-kp-serverAuth',
+ '1.3.6.1.5.5.7.3.2' => 'id-kp-clientAuth',
+ '1.3.6.1.5.5.7.3.3' => 'id-kp-codeSigning',
+ '1.3.6.1.5.5.7.3.4' => 'id-kp-emailProtection',
+ '1.3.6.1.5.5.7.3.8' => 'id-kp-timeStamping',
+ '1.3.6.1.5.5.7.3.9' => 'id-kp-OCSPSigning',
+ '2.5.29.54' => 'id-ce-inhibitAnyPolicy',
+ '2.5.29.46' => 'id-ce-freshestCRL',
+ '1.3.6.1.5.5.7.1.1' => 'id-pe-authorityInfoAccess',
+ '1.3.6.1.5.5.7.1.11' => 'id-pe-subjectInfoAccess',
+ '2.5.29.20' => 'id-ce-cRLNumber',
+ '2.5.29.28' => 'id-ce-issuingDistributionPoint',
+ '2.5.29.27' => 'id-ce-deltaCRLIndicator',
+ '2.5.29.21' => 'id-ce-cRLReasons',
+ '2.5.29.29' => 'id-ce-certificateIssuer',
+ '2.5.29.23' => 'id-ce-holdInstructionCode',
+ '1.2.840.10040.2' => 'holdInstruction',
+ '1.2.840.10040.2.1' => 'id-holdinstruction-none',
+ '1.2.840.10040.2.2' => 'id-holdinstruction-callissuer',
+ '1.2.840.10040.2.3' => 'id-holdinstruction-reject',
+ '2.5.29.24' => 'id-ce-invalidityDate',
+
+ '1.2.840.113549.2.2' => 'md2',
+ '1.2.840.113549.2.5' => 'md5',
+ '1.3.14.3.2.26' => 'id-sha1',
+ '1.2.840.10040.4.1' => 'id-dsa',
+ '1.2.840.10040.4.3' => 'id-dsa-with-sha1',
+ '1.2.840.113549.1.1' => 'pkcs-1',
+ '1.2.840.113549.1.1.1' => 'rsaEncryption',
+ '1.2.840.113549.1.1.2' => 'md2WithRSAEncryption',
+ '1.2.840.113549.1.1.4' => 'md5WithRSAEncryption',
+ '1.2.840.113549.1.1.5' => 'sha1WithRSAEncryption',
+ '1.2.840.10046.2.1' => 'dhpublicnumber',
+ '2.16.840.1.101.2.1.1.22' => 'id-keyExchangeAlgorithm',
+ '1.2.840.10045' => 'ansi-X9-62',
+ '1.2.840.10045.4' => 'id-ecSigType',
+ '1.2.840.10045.4.1' => 'ecdsa-with-SHA1',
+ '1.2.840.10045.1' => 'id-fieldType',
+ '1.2.840.10045.1.1' => 'prime-field',
+ '1.2.840.10045.1.2' => 'characteristic-two-field',
+ '1.2.840.10045.1.2.3' => 'id-characteristic-two-basis',
+ '1.2.840.10045.1.2.3.1' => 'gnBasis',
+ '1.2.840.10045.1.2.3.2' => 'tpBasis',
+ '1.2.840.10045.1.2.3.3' => 'ppBasis',
+ '1.2.840.10045.2' => 'id-publicKeyType',
+ '1.2.840.10045.2.1' => 'id-ecPublicKey',
+ '1.2.840.10045.3' => 'ellipticCurve',
+ '1.2.840.10045.3.0' => 'c-TwoCurve',
+ '1.2.840.10045.3.0.1' => 'c2pnb163v1',
+ '1.2.840.10045.3.0.2' => 'c2pnb163v2',
+ '1.2.840.10045.3.0.3' => 'c2pnb163v3',
+ '1.2.840.10045.3.0.4' => 'c2pnb176w1',
+ '1.2.840.10045.3.0.5' => 'c2pnb191v1',
+ '1.2.840.10045.3.0.6' => 'c2pnb191v2',
+ '1.2.840.10045.3.0.7' => 'c2pnb191v3',
+ '1.2.840.10045.3.0.8' => 'c2pnb191v4',
+ '1.2.840.10045.3.0.9' => 'c2pnb191v5',
+ '1.2.840.10045.3.0.10' => 'c2pnb208w1',
+ '1.2.840.10045.3.0.11' => 'c2pnb239v1',
+ '1.2.840.10045.3.0.12' => 'c2pnb239v2',
+ '1.2.840.10045.3.0.13' => 'c2pnb239v3',
+ '1.2.840.10045.3.0.14' => 'c2pnb239v4',
+ '1.2.840.10045.3.0.15' => 'c2pnb239v5',
+ '1.2.840.10045.3.0.16' => 'c2pnb272w1',
+ '1.2.840.10045.3.0.17' => 'c2pnb304w1',
+ '1.2.840.10045.3.0.18' => 'c2pnb359v1',
+ '1.2.840.10045.3.0.19' => 'c2pnb368w1',
+ '1.2.840.10045.3.0.20' => 'c2pnb431r1',
+ '1.2.840.10045.3.1' => 'primeCurve',
+ '1.2.840.10045.3.1.1' => 'prime192v1',
+ '1.2.840.10045.3.1.2' => 'prime192v2',
+ '1.2.840.10045.3.1.3' => 'prime192v3',
+ '1.2.840.10045.3.1.4' => 'prime239v1',
+ '1.2.840.10045.3.1.5' => 'prime239v2',
+ '1.2.840.10045.3.1.6' => 'prime239v3',
+ '1.2.840.10045.3.1.7' => 'prime256v1',
+ '1.2.840.113549.1.1.7' => 'id-RSAES-OAEP',
+ '1.2.840.113549.1.1.9' => 'id-pSpecified',
+ '1.2.840.113549.1.1.10' => 'id-RSASSA-PSS',
+ '1.2.840.113549.1.1.8' => 'id-mgf1',
+ '1.2.840.113549.1.1.14' => 'sha224WithRSAEncryption',
+ '1.2.840.113549.1.1.11' => 'sha256WithRSAEncryption',
+ '1.2.840.113549.1.1.12' => 'sha384WithRSAEncryption',
+ '1.2.840.113549.1.1.13' => 'sha512WithRSAEncryption',
+ '2.16.840.1.101.3.4.2.4' => 'id-sha224',
+ '2.16.840.1.101.3.4.2.1' => 'id-sha256',
+ '2.16.840.1.101.3.4.2.2' => 'id-sha384',
+ '2.16.840.1.101.3.4.2.3' => 'id-sha512',
+ '1.2.643.2.2.4' => 'id-GostR3411-94-with-GostR3410-94',
+ '1.2.643.2.2.3' => 'id-GostR3411-94-with-GostR3410-2001',
+ '1.2.643.2.2.20' => 'id-GostR3410-2001',
+ '1.2.643.2.2.19' => 'id-GostR3410-94',
+ // Netscape Object Identifiers from "Netscape Certificate Extensions"
+ '2.16.840.1.113730' => 'netscape',
+ '2.16.840.1.113730.1' => 'netscape-cert-extension',
+ '2.16.840.1.113730.1.1' => 'netscape-cert-type',
+ '2.16.840.1.113730.1.13' => 'netscape-comment',
+ '2.16.840.1.113730.1.8' => 'netscape-ca-policy-url',
+ // the following are X.509 extensions not supported by phpseclib
+ '1.3.6.1.5.5.7.1.12' => 'id-pe-logotype',
+ '1.2.840.113533.7.65.0' => 'entrustVersInfo',
+ '2.16.840.1.113733.1.6.9' => 'verisignPrivate',
+ // for Certificate Signing Requests
+ // see http://tools.ietf.org/html/rfc2985
+ '1.2.840.113549.1.9.2' => 'pkcs-9-at-unstructuredName', // PKCS #9 unstructured name
+ '1.2.840.113549.1.9.7' => 'pkcs-9-at-challengePassword', // Challenge password for certificate revocations
+ '1.2.840.113549.1.9.14' => 'pkcs-9-at-extensionRequest' // Certificate extension request
+ );
+ }
+
+ /**
+ * Load X.509 certificate
+ *
+ * Returns an associative array describing the X.509 cert or a false if the cert failed to load
+ *
+ * @param String $cert
+ * @access public
+ * @return Mixed
+ */
+ function loadX509($cert)
+ {
+ if (is_array($cert) && isset($cert['tbsCertificate'])) {
+ unset($this->currentCert);
+ unset($this->currentKeyIdentifier);
+ $this->dn = $cert['tbsCertificate']['subject'];
+ if (!isset($this->dn)) {
+ return false;
+ }
+ $this->currentCert = $cert;
+
+ $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');
+ $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : NULL;
+
+ unset($this->signatureSubject);
+
+ return $cert;
+ }
+
+ $asn1 = new File_ASN1();
+
+ /*
+ X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them above and beyond the ceritificate. ie.
+ some may have the following preceeding the -----BEGIN CERTIFICATE----- line:
+
+ subject=/O=organization/OU=org unit/CN=common name
+ issuer=/O=organization/CN=common name
+ */
+ $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $cert);
+ $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+ if ($temp != false) {
+ $cert = $temp;
+ }
+
+ if ($cert === false) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $asn1->loadOIDs($this->oids);
+ $decoded = $asn1->decodeBER($cert);
+
+ if (!empty($decoded)) {
+ $x509 = $asn1->asn1map($decoded[0], $this->Certificate);
+ }
+ if (!isset($x509) || $x509 === false) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $this->signatureSubject = substr($cert, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+ $this->_mapInExtensions($x509, 'tbsCertificate/extensions', $asn1);
+
+ $key = &$x509['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'];
+ $key = $this->_reformatKey($x509['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], $key);
+
+ $this->currentCert = $x509;
+ $this->dn = $x509['tbsCertificate']['subject'];
+
+ $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');
+ $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : NULL;
+
+ return $x509;
+ }
+
+ /**
+ * Save X.509 certificate
+ *
+ * @param Array $cert
+ * @param Integer $format optional
+ * @access public
+ * @return String
+ */
+ function saveX509($cert, $format = FILE_X509_FORMAT_PEM)
+ {
+ if (!is_array($cert) || !isset($cert['tbsCertificate'])) {
+ return false;
+ }
+
+ switch (true) {
+ // "case !$a: case !$b: break; default: whatever();" is the same thing as "if ($a && $b) whatever()"
+ case !($algorithm = $this->_subArray($cert, 'tbsCertificate/subjectPublicKeyInfo/algorithm/algorithm')):
+ case is_object($cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):
+ break;
+ default:
+ switch ($algorithm) {
+ case 'rsaEncryption':
+ $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'] =
+ base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'])));
+ }
+ }
+
+ $asn1 = new File_ASN1();
+
+ $asn1->loadOIDs($this->oids);
+
+ $filters = array();
+ $filters['tbsCertificate']['signature']['parameters'] =
+ $filters['tbsCertificate']['signature']['issuer']['rdnSequence']['value'] =
+ $filters['tbsCertificate']['issuer']['rdnSequence']['value'] =
+ $filters['tbsCertificate']['subject']['rdnSequence']['value'] =
+ $filters['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] =
+ $filters['signatureAlgorithm']['parameters'] =
+ $filters['authorityCertIssuer']['directoryName']['rdnSequence']['value'] =
+ //$filters['policyQualifiers']['qualifier'] =
+ $filters['distributionPoint']['fullName']['directoryName']['rdnSequence']['value'] =
+ $filters['directoryName']['rdnSequence']['value'] =
+ array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+ /* in the case of policyQualifiers/qualifier, the type has to be FILE_ASN1_TYPE_IA5_STRING.
+ FILE_ASN1_TYPE_PRINTABLE_STRING will cause OpenSSL's X.509 parser to spit out random
+ characters.
+ */
+ $filters['policyQualifiers']['qualifier'] =
+ array('type' => FILE_ASN1_TYPE_IA5_STRING);
+
+ $asn1->loadFilters($filters);
+
+ $this->_mapOutExtensions($cert, 'tbsCertificate/extensions', $asn1);
+
+ $cert = $asn1->encodeDER($cert, $this->Certificate);
+
+ switch ($format) {
+ case FILE_X509_FORMAT_DER:
+ return $cert;
+ // case FILE_X509_FORMAT_PEM:
+ default:
+ return "-----BEGIN CERTIFICATE-----\r\n" . chunk_split(base64_encode($cert), 64) . '-----END CERTIFICATE-----';
+ }
+ }
+
+ /**
+ * Map extension values from octet string to extension-specific internal
+ * format.
+ *
+ * @param Array ref $root
+ * @param String $path
+ * @param Object $asn1
+ * @access private
+ */
+ function _mapInExtensions(&$root, $path, $asn1)
+ {
+ $extensions = &$this->_subArray($root, $path);
+
+ if (is_array($extensions)) {
+ for ($i = 0; $i < count($extensions); $i++) {
+ $id = $extensions[$i]['extnId'];
+ $value = &$extensions[$i]['extnValue'];
+ $value = base64_decode($value);
+ $decoded = $asn1->decodeBER($value);
+ /* [extnValue] contains the DER encoding of an ASN.1 value
+ corresponding to the extension type identified by extnID */
+ $map = $this->_getMapping($id);
+ if (!is_bool($map)) {
+ $mapped = $asn1->asn1map($decoded[0], $map);
+ $value = $mapped === false ? $decoded[0] : $mapped;
+
+ if ($id == 'id-ce-certificatePolicies') {
+ for ($j = 0; $j < count($value); $j++) {
+ if (!isset($value[$j]['policyQualifiers'])) {
+ continue;
+ }
+ for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
+ $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
+ $map = $this->_getMapping($subid);
+ $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
+ if ($map !== false) {
+ $decoded = $asn1->decodeBER($subvalue);
+ $mapped = $asn1->asn1map($decoded[0], $map);
+ $subvalue = $mapped === false ? $decoded[0] : $mapped;
+ }
+ }
+ }
+ }
+ } elseif ($map) {
+ $value = base64_encode($value);
+ }
+ }
+ }
+ }
+
+ /**
+ * Map extension values from extension-specific internal format to
+ * octet string.
+ *
+ * @param Array ref $root
+ * @param String $path
+ * @param Object $asn1
+ * @access private
+ */
+ function _mapOutExtensions(&$root, $path, $asn1)
+ {
+ $extensions = &$this->_subArray($root, $path);
+
+ if (is_array($extensions)) {
+ $size = count($extensions);
+ for ($i = 0; $i < $size; $i++) {
+ $id = $extensions[$i]['extnId'];
+ $value = &$extensions[$i]['extnValue'];
+
+ switch ($id) {
+ case 'id-ce-certificatePolicies':
+ for ($j = 0; $j < count($value); $j++) {
+ if (!isset($value[$j]['policyQualifiers'])) {
+ continue;
+ }
+ for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
+ $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
+ $map = $this->_getMapping($subid);
+ $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
+ if ($map !== false) {
+ // by default File_ASN1 will try to render qualifier as a FILE_ASN1_TYPE_IA5_STRING since it's
+ // actual type is FILE_ASN1_TYPE_ANY
+ $subvalue = new File_ASN1_Element($asn1->encodeDER($subvalue, $map));
+ }
+ }
+ }
+ break;
+ case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string
+ if (isset($value['authorityCertSerialNumber'])) {
+ if ($value['authorityCertSerialNumber']->toBytes() == '') {
+ $temp = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 2) . "\1\0";
+ $value['authorityCertSerialNumber'] = new File_ASN1_Element($temp);
+ }
+ }
+ }
+
+ /* [extnValue] contains the DER encoding of an ASN.1 value
+ corresponding to the extension type identified by extnID */
+ $map = $this->_getMapping($id);
+ if (is_bool($map)) {
+ if (!$map) {
+ user_error($id . ' is not a currently supported extension');
+ unset($extensions[$i]);
+ }
+ } else {
+ $temp = $asn1->encodeDER($value, $map);
+ $value = base64_encode($temp);
+ }
+ }
+ }
+ }
+
+ /**
+ * Map attribute values from ANY type to attribute-specific internal
+ * format.
+ *
+ * @param Array ref $root
+ * @param String $path
+ * @param Object $asn1
+ * @access private
+ */
+ function _mapInAttributes(&$root, $path, $asn1)
+ {
+ $attributes = &$this->_subArray($root, $path);
+
+ if (is_array($attributes)) {
+ for ($i = 0; $i < count($attributes); $i++) {
+ $id = $attributes[$i]['type'];
+ /* $value contains the DER encoding of an ASN.1 value
+ corresponding to the attribute type identified by type */
+ $map = $this->_getMapping($id);
+ if (is_array($attributes[$i]['value'])) {
+ $values = &$attributes[$i]['value'];
+ for ($j = 0; $j < count($values); $j++) {
+ $value = $asn1->encodeDER($values[$j], $this->AttributeValue);
+ $decoded = $asn1->decodeBER($value);
+ if (!is_bool($map)) {
+ $mapped = $asn1->asn1map($decoded[0], $map);
+ if ($mapped !== false) {
+ $values[$j] = $mapped;
+ }
+ if ($id == 'pkcs-9-at-extensionRequest') {
+ $this->_mapInExtensions($values, $j, $asn1);
+ }
+ } elseif ($map) {
+ $values[$j] = base64_encode($value);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Map attribute values from attribute-specific internal format to
+ * ANY type.
+ *
+ * @param Array ref $root
+ * @param String $path
+ * @param Object $asn1
+ * @access private
+ */
+ function _mapOutAttributes(&$root, $path, $asn1)
+ {
+ $attributes = &$this->_subArray($root, $path);
+
+ if (is_array($attributes)) {
+ $size = count($attributes);
+ for ($i = 0; $i < $size; $i++) {
+ /* [value] contains the DER encoding of an ASN.1 value
+ corresponding to the attribute type identified by type */
+ $id = $attributes[$i]['type'];
+ $map = $this->_getMapping($id);
+ if ($map === false) {
+ user_error($id . ' is not a currently supported attribute', E_USER_NOTICE);
+ unset($attributes[$i]);
+ }
+ elseif (is_array($attributes[$i]['value'])) {
+ $values = &$attributes[$i]['value'];
+ for ($j = 0; $j < count($values); $j++) {
+ switch ($id) {
+ case 'pkcs-9-at-extensionRequest':
+ $this->_mapOutExtensions($values, $j, $asn1);
+ break;
+ }
+
+ if (!is_bool($map)) {
+ $temp = $asn1->encodeDER($values[$j], $map);
+ $decoded = $asn1->decodeBER($temp);
+ $values[$j] = $asn1->asn1map($decoded[0], $this->AttributeValue);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Associate an extension ID to an extension mapping
+ *
+ * @param String $extnId
+ * @access private
+ * @return Mixed
+ */
+ function _getMapping($extnId)
+ {
+ if (!is_string($extnId)) { // eg. if it's a File_ASN1_Element object
+ return true;
+ }
+
+ switch ($extnId) {
+ case 'id-ce-keyUsage':
+ return $this->KeyUsage;
+ case 'id-ce-basicConstraints':
+ return $this->BasicConstraints;
+ case 'id-ce-subjectKeyIdentifier':
+ return $this->KeyIdentifier;
+ case 'id-ce-cRLDistributionPoints':
+ return $this->CRLDistributionPoints;
+ case 'id-ce-authorityKeyIdentifier':
+ return $this->AuthorityKeyIdentifier;
+ case 'id-ce-certificatePolicies':
+ return $this->CertificatePolicies;
+ case 'id-ce-extKeyUsage':
+ return $this->ExtKeyUsageSyntax;
+ case 'id-pe-authorityInfoAccess':
+ return $this->AuthorityInfoAccessSyntax;
+ case 'id-ce-subjectAltName':
+ return $this->SubjectAltName;
+ case 'id-ce-privateKeyUsagePeriod':
+ return $this->PrivateKeyUsagePeriod;
+ case 'id-ce-issuerAltName':
+ return $this->IssuerAltName;
+ case 'id-ce-policyMappings':
+ return $this->PolicyMappings;
+ case 'id-ce-nameConstraints':
+ return $this->NameConstraints;
+
+ case 'netscape-cert-type':
+ return $this->netscape_cert_type;
+ case 'netscape-comment':
+ return $this->netscape_comment;
+ case 'netscape-ca-policy-url':
+ return $this->netscape_ca_policy_url;
+
+ // since id-qt-cps isn't a constructed type it will have already been decoded as a string by the time it gets
+ // back around to asn1map() and we don't want it decoded again.
+ //case 'id-qt-cps':
+ // return $this->CPSuri;
+ case 'id-qt-unotice':
+ return $this->UserNotice;
+
+ // the following OIDs are unsupported but we don't want them to give notices when calling saveX509().
+ case 'id-pe-logotype': // http://www.ietf.org/rfc/rfc3709.txt
+ case 'entrustVersInfo':
+ // http://support.microsoft.com/kb/287547
+ case '1.3.6.1.4.1.311.20.2': // szOID_ENROLL_CERTTYPE_EXTENSION
+ case '1.3.6.1.4.1.311.21.1': // szOID_CERTSRV_CA_VERSION
+ // "SET Secure Electronic Transaction Specification"
+ // http://www.maithean.com/docs/set_bk3.pdf
+ case '2.23.42.7.0': // id-set-hashedRootKey
+ return true;
+
+ // CSR attributes
+ case 'pkcs-9-at-unstructuredName':
+ return $this->PKCS9String;
+ case 'pkcs-9-at-challengePassword':
+ return $this->DirectoryString;
+ case 'pkcs-9-at-extensionRequest':
+ return $this->Extensions;
+
+ // CRL extensions.
+ case 'id-ce-cRLNumber':
+ return $this->CRLNumber;
+ case 'id-ce-deltaCRLIndicator':
+ return $this->CRLNumber;
+ case 'id-ce-issuingDistributionPoint':
+ return $this->IssuingDistributionPoint;
+ case 'id-ce-freshestCRL':
+ return $this->CRLDistributionPoints;
+ case 'id-ce-cRLReasons':
+ return $this->CRLReason;
+ case 'id-ce-invalidityDate':
+ return $this->InvalidityDate;
+ case 'id-ce-certificateIssuer':
+ return $this->CertificateIssuer;
+ case 'id-ce-holdInstructionCode':
+ return $this->HoldInstructionCode;
+ }
+
+ return false;
+ }
+
+ /**
+ * Load an X.509 certificate as a certificate authority
+ *
+ * @param String $cert
+ * @access public
+ * @return Boolean
+ */
+ function loadCA($cert)
+ {
+ $olddn = $this->dn;
+ $oldcert = $this->currentCert;
+ $oldsigsubj = $this->signatureSubject;
+ $oldkeyid = $this->currentKeyIdentifier;
+
+ $cert = $this->loadX509($cert);
+ if (!$cert) {
+ $this->dn = $olddn;
+ $this->currentCert = $oldcert;
+ $this->signatureSubject = $oldsigsubj;
+ $this->currentKeyIdentifier = $oldkeyid;
+
+ return false;
+ }
+
+ /* From RFC5280 "PKIX Certificate and CRL Profile":
+
+ If the keyUsage extension is present, then the subject public key
+ MUST NOT be used to verify signatures on certificates or CRLs unless
+ the corresponding keyCertSign or cRLSign bit is set. */
+ //$keyUsage = $this->getExtension('id-ce-keyUsage');
+ //if ($keyUsage && !in_array('keyCertSign', $keyUsage)) {
+ // return false;
+ //}
+
+ /* From RFC5280 "PKIX Certificate and CRL Profile":
+
+ The cA boolean indicates whether the certified public key may be used
+ to verify certificate signatures. If the cA boolean is not asserted,
+ then the keyCertSign bit in the key usage extension MUST NOT be
+ asserted. If the basic constraints extension is not present in a
+ version 3 certificate, or the extension is present but the cA boolean
+ is not asserted, then the certified public key MUST NOT be used to
+ verify certificate signatures. */
+ //$basicConstraints = $this->getExtension('id-ce-basicConstraints');
+ //if (!$basicConstraints || !$basicConstraints['cA']) {
+ // return false;
+ //}
+
+ $this->CAs[] = $cert;
+
+ $this->dn = $olddn;
+ $this->currentCert = $oldcert;
+ $this->signatureSubject = $oldsigsubj;
+
+ return true;
+ }
+
+ /**
+ * Validate an X.509 certificate against a URL
+ *
+ * From RFC2818 "HTTP over TLS":
+ *
+ * Matching is performed using the matching rules specified by
+ * [RFC2459]. If more than one identity of a given type is present in
+ * the certificate (e.g., more than one dNSName name, a match in any one
+ * of the set is considered acceptable.) Names may contain the wildcard
+ * character * which is considered to match any single domain name
+ * component or component fragment. E.g., *.a.com matches foo.a.com but
+ * not bar.foo.a.com. f*.com matches foo.com but not bar.com.
+ *
+ * @param String $url
+ * @access public
+ * @return Boolean
+ */
+ function validateURL($url)
+ {
+ if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+ return false;
+ }
+
+ $components = parse_url($url);
+ if (!isset($components['host'])) {
+ return false;
+ }
+
+ if ($names = $this->getExtension('id-ce-subjectAltName')) {
+ foreach ($names as $key => $value) {
+ $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value);
+ switch ($key) {
+ case 'dNSName':
+ /* From RFC2818 "HTTP over TLS":
+
+ If a subjectAltName extension of type dNSName is present, that MUST
+ be used as the identity. Otherwise, the (most specific) Common Name
+ field in the Subject field of the certificate MUST be used. Although
+ the use of the Common Name is existing practice, it is deprecated and
+ Certification Authorities are encouraged to use the dNSName instead. */
+ if (preg_match('#^' . $value . '$#', $components['host'])) {
+ return true;
+ }
+ break;
+ case 'iPAddress':
+ /* From RFC2818 "HTTP over TLS":
+
+ In some cases, the URI is specified as an IP address rather than a
+ hostname. In this case, the iPAddress subjectAltName must be present
+ in the certificate and must exactly match the IP in the URI. */
+ if (preg_match('#(?:\d{1-3}\.){4}#', $components['host'] . '.') && preg_match('#^' . $value . '$#', $components['host'])) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ if ($value = $this->getDNProp('id-at-commonName')) {
+ $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value[0]);
+ return preg_match('#^' . $value . '$#', $components['host']);
+ }
+
+ return false;
+ }
+
+ /**
+ * Validate a date
+ *
+ * If $date isn't defined it is assumed to be the current date.
+ *
+ * @param Integer $date optional
+ * @access public
+ */
+ function validateDate($date = NULL)
+ {
+ if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+ return false;
+ }
+
+ if (!isset($date)) {
+ $date = time();
+ }
+
+ $notBefore = $this->currentCert['tbsCertificate']['validity']['notBefore'];
+ $notBefore = isset($notBefore['generalTime']) ? $notBefore['generalTime'] : $notBefore['utcTime'];
+
+ $notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter'];
+ $notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime'];
+
+ switch (true) {
+ case $date < @strtotime($notBefore):
+ case $date > @strtotime($notAfter):
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Validate a signature
+ *
+ * Works on X.509 certs, CSR's and CRL's.
+ * Returns true if the signature is verified, false if it is not correct or NULL on error
+ *
+ * The behavior of this function is inspired by {@link http://php.net/openssl-verify openssl_verify}.
+ *
+ * @param Integer $options optional
+ * @access public
+ * @return Mixed
+ */
+ function validateSignature($options = 0)
+ {
+ if (!is_array($this->currentCert) || !isset($this->signatureSubject)) {
+ return 0;
+ }
+
+ /* TODO:
+ "emailAddress attribute values are not case-sensitive (e.g., "subscriber@example.com" is the same as "SUBSCRIBER@EXAMPLE.COM")."
+ -- http://tools.ietf.org/html/rfc5280#section-4.1.2.6
+
+ implement pathLenConstraint in the id-ce-basicConstraints extension */
+
+ switch (true) {
+ case isset($this->currentCert['tbsCertificate']):
+ // self-signed cert
+ if ($this->currentCert['tbsCertificate']['issuer'] === $this->currentCert['tbsCertificate']['subject']) {
+ $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+ $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier');
+ switch (true) {
+ case !is_array($authorityKey):
+ case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+ $signingCert = $this->currentCert; // working cert
+ }
+ }
+
+ if (!empty($this->CAs)) {
+ for ($i = 0; $i < count($this->CAs); $i++) {
+ // even if the cert is a self-signed one we still want to see if it's a CA;
+ // if not, we'll conditionally return an error
+ $ca = $this->CAs[$i];
+ if ($this->currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) {
+ $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+ $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+ switch (true) {
+ case !is_array($authorityKey):
+ case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+ $signingCert = $ca; // working cert
+ break 2;
+ }
+ }
+ }
+ if (count($this->CAs) == $i && ($options & FILE_X509_VALIDATE_SIGNATURE_BY_CA)) {
+ return false;
+ }
+ } elseif (!isset($signingCert) || ($options & FILE_X509_VALIDATE_SIGNATURE_BY_CA)) {
+ return false;
+ }
+ return $this->_validateSignature(
+ $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],
+ $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],
+ $this->currentCert['signatureAlgorithm']['algorithm'],
+ substr(base64_decode($this->currentCert['signature']), 1),
+ $this->signatureSubject
+ );
+ case isset($this->currentCert['certificationRequestInfo']):
+ return $this->_validateSignature(
+ $this->currentCert['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'],
+ $this->currentCert['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'],
+ $this->currentCert['signatureAlgorithm']['algorithm'],
+ substr(base64_decode($this->currentCert['signature']), 1),
+ $this->signatureSubject
+ );
+ case isset($this->currentCert['publicKeyAndChallenge']):
+ return $this->_validateSignature(
+ $this->currentCert['publicKeyAndChallenge']['spki']['algorithm']['algorithm'],
+ $this->currentCert['publicKeyAndChallenge']['spki']['subjectPublicKey'],
+ $this->currentCert['signatureAlgorithm']['algorithm'],
+ substr(base64_decode($this->currentCert['signature']), 1),
+ $this->signatureSubject
+ );
+ case isset($this->currentCert['tbsCertList']):
+ if (!empty($this->CAs)) {
+ for ($i = 0; $i < count($this->CAs); $i++) {
+ $ca = $this->CAs[$i];
+ if ($this->currentCert['tbsCertList']['issuer'] === $ca['tbsCertificate']['subject']) {
+ $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+ $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+ switch (true) {
+ case !is_array($authorityKey):
+ case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+ $signingCert = $ca; // working cert
+ break 2;
+ }
+ }
+ }
+ }
+ if (!isset($signingCert)) {
+ return false;
+ }
+ return $this->_validateSignature(
+ $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],
+ $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],
+ $this->currentCert['signatureAlgorithm']['algorithm'],
+ substr(base64_decode($this->currentCert['signature']), 1),
+ $this->signatureSubject
+ );
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Validates a signature
+ *
+ * Returns true if the signature is verified, false if it is not correct or NULL on error
+ *
+ * @param String $publicKeyAlgorithm
+ * @param String $publicKey
+ * @param String $signatureAlgorithm
+ * @param String $signature
+ * @param String $signatureSubject
+ * @access private
+ * @return Integer
+ */
+ function _validateSignature($publicKeyAlgorithm, $publicKey, $signatureAlgorithm, $signature, $signatureSubject)
+ {
+ switch ($publicKeyAlgorithm) {
+ case 'rsaEncryption':
+ if (!class_exists('Crypt_RSA')) {
+ require_once('Crypt/RSA.php');
+ }
+ $rsa = new Crypt_RSA();
+ $rsa->loadKey($publicKey);
+
+ switch ($signatureAlgorithm) {
+ case 'md2WithRSAEncryption':
+ case 'md5WithRSAEncryption':
+ case 'sha1WithRSAEncryption':
+ case 'sha224WithRSAEncryption':
+ case 'sha256WithRSAEncryption':
+ case 'sha384WithRSAEncryption':
+ case 'sha512WithRSAEncryption':
+ $rsa->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm));
+ $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
+ if (!@$rsa->verify($signatureSubject, $signature)) {
+ return false;
+ }
+ break;
+ default:
+ return NULL;
+ }
+ break;
+ default:
+ return NULL;
+ }
+
+ return true;
+ }
+
+ /**
+ * Reformat public keys
+ *
+ * Reformats a public key to a format supported by phpseclib (if applicable)
+ *
+ * @param String $algorithm
+ * @param String $key
+ * @access private
+ * @return String
+ */
+ function _reformatKey($algorithm, $key)
+ {
+ switch ($algorithm) {
+ case 'rsaEncryption':
+ return
+ "-----BEGIN PUBLIC KEY-----\r\n" .
+ // subjectPublicKey is stored as a bit string in X.509 certs. the first byte of a bit string represents how many bits
+ // in the last byte should be ignored. the following only supports non-zero stuff but as none of the X.509 certs Firefox
+ // uses as a cert authority actually use a non-zero bit I think it's safe to assume that none do.
+ chunk_split(base64_encode(substr(base64_decode($key), 1)), 64) .
+ '-----END PUBLIC KEY-----';
+ default:
+ return $key;
+ }
+ }
+
+ /**
+ * "Normalizes" a Distinguished Name property
+ *
+ * @param String $propName
+ * @access private
+ * @return Mixed
+ */
+ function _translateDNProp($propName)
+ {
+ switch (strtolower($propName)) {
+ case 'id-at-countryname':
+ case 'countryname':
+ case 'c':
+ return 'id-at-countryName';
+ case 'id-at-organizationname':
+ case 'organizationname':
+ case 'o':
+ return 'id-at-organizationName';
+ case 'id-at-dnqualifier':
+ case 'dnqualifier':
+ return 'id-at-dnQualifier';
+ case 'id-at-commonname':
+ case 'commonname':
+ case 'cn':
+ return 'id-at-commonName';
+ case 'id-at-stateorprovinceName':
+ case 'stateorprovincename':
+ case 'state':
+ case 'province':
+ case 'provincename':
+ case 'st':
+ return 'id-at-stateOrProvinceName';
+ case 'id-at-localityname':
+ case 'localityname':
+ case 'l':
+ return 'id-at-localityName';
+ case 'id-emailaddress':
+ case 'emailaddress':
+ return 'pkcs-9-at-emailAddress';
+ case 'id-at-serialnumber':
+ case 'serialnumber':
+ return 'id-at-serialNumber';
+ case 'id-at-postalcode':
+ case 'postalcode':
+ return 'id-at-postalCode';
+ case 'id-at-streetaddress':
+ case 'streetaddress':
+ return 'id-at-streetAddress';
+ case 'id-at-name':
+ case 'name':
+ return 'id-at-name';
+ case 'id-at-givenname':
+ case 'givenname':
+ return 'id-at-givenName';
+ case 'id-at-surname':
+ case 'surname':
+ case 'sn':
+ return 'id-at-surname';
+ case 'id-at-initials':
+ case 'initials':
+ return 'id-at-initials';
+ case 'id-at-generationqualifier':
+ case 'generationqualifier':
+ return 'id-at-generationQualifier';
+ case 'id-at-organizationalunitname':
+ case 'organizationalunitname':
+ case 'ou':
+ return 'id-at-organizationalUnitName';
+ case 'id-at-pseudonym':
+ case 'pseudonym':
+ return 'id-at-pseudonym';
+ case 'id-at-title':
+ case 'title':
+ return 'id-at-title';
+ case 'id-at-description':
+ case 'description':
+ return 'id-at-description';
+ case 'id-at-role':
+ case 'role':
+ return 'id-at-role';
+ case 'id-at-uniqueidentifier':
+ case 'uniqueidentifier':
+ case 'x500uniqueidentifier':
+ return 'id-at-uniqueIdentifier';
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Set a Distinguished Name property
+ *
+ * @param String $propName
+ * @param Mixed $propValue
+ * @param String $type optional
+ * @access public
+ * @return Boolean
+ */
+ function setDNProp($propName, $propValue, $type = 'utf8String')
+ {
+ if (empty($this->dn)) {
+ $this->dn = array('rdnSequence' => array());
+ }
+
+ if (($propName = $this->_translateDNProp($propName)) === false) {
+ return false;
+ }
+
+ foreach ((array) $propValue as $v) {
+ if (!is_array($v) && isset($type)) {
+ $v = array($type => $v);
+ }
+ $this->dn['rdnSequence'][] = array(
+ array(
+ 'type' => $propName,
+ 'value'=> $v
+ )
+ );
+ }
+
+ return true;
+ }
+
+ /**
+ * Remove Distinguished Name properties
+ *
+ * @param String $propName
+ * @access public
+ */
+ function removeDNProp($propName)
+ {
+ if (empty($this->dn)) {
+ return;
+ }
+
+ if (($propName = $this->_translateDNProp($propName)) === false) {
+ return;
+ }
+
+ $dn = &$this->dn['rdnSequence'];
+ $size = count($dn);
+ for ($i = 0; $i < $size; $i++) {
+ if ($dn[$i][0]['type'] == $propName) {
+ unset($dn[$i]);
+ }
+ }
+
+ $dn = array_values($dn);
+ }
+
+ /**
+ * Get Distinguished Name properties
+ *
+ * @param String $propName
+ * @param Array $dn optional
+ * @param Boolean $withType optional
+ * @return Mixed
+ * @access public
+ */
+ function getDNProp($propName, $dn = NULL, $withType = false)
+ {
+ if (!isset($dn)) {
+ $dn = $this->dn;
+ }
+
+ if (empty($dn)) {
+ return false;
+ }
+
+ if (($propName = $this->_translateDNProp($propName)) === false) {
+ return false;
+ }
+
+ $dn = $dn['rdnSequence'];
+ $result = array();
+ $asn1 = new File_ASN1();
+ for ($i = 0; $i < count($dn); $i++) {
+ if ($dn[$i][0]['type'] == $propName) {
+ $v = $dn[$i][0]['value'];
+ if (!$withType && is_array($v)) {
+ foreach ($v as $type => $s) {
+ $type = array_search($type, $asn1->ANYmap, true);
+ if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+ $s = $asn1->convert($s, $type);
+ if ($s !== false) {
+ $v = $s;
+ break;
+ }
+ }
+ }
+ if (is_array($v)) {
+ $v = array_pop($v); // Always strip data type.
+ }
+ }
+ $result[] = $v;
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Set a Distinguished Name
+ *
+ * @param Mixed $dn
+ * @param Boolean $merge optional
+ * @param String $type optional
+ * @access public
+ * @return Boolean
+ */
+ function setDN($dn, $merge = false, $type = 'utf8String')
+ {
+ if (!$merge) {
+ $this->dn = NULL;
+ }
+
+ if (is_array($dn)) {
+ if (isset($dn['rdnSequence'])) {
+ $this->dn = $dn; // No merge here.
+ return true;
+ }
+
+ // handles stuff generated by openssl_x509_parse()
+ foreach ($dn as $prop => $value) {
+ if (!$this->setDNProp($prop, $value, $type)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ // handles everything else
+ $results = preg_split('#((?:^|, *|/)(?:C=|O=|OU=|CN=|L=|ST=|SN=|postalCode=|streetAddress=|emailAddress=|serialNumber=|organizationalUnitName=|title=|description=|role=|x500UniqueIdentifier=))#', $dn, -1, PREG_SPLIT_DELIM_CAPTURE);
+ for ($i = 1; $i < count($results); $i+=2) {
+ $prop = trim($results[$i], ', =/');
+ $value = $results[$i + 1];
+ if (!$this->setDNProp($prop, $value, $type)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the Distinguished Name for a certificates subject
+ *
+ * @param Mixed $format optional
+ * @param Array $dn optional
+ * @access public
+ * @return Boolean
+ */
+ function getDN($format = FILE_X509_DN_ARRAY, $dn = NULL)
+ {
+ if (!isset($dn)) {
+ $dn = isset($this->currentCert['tbsCertList']) ? $this->currentCert['tbsCertList']['issuer'] : $this->dn;
+ }
+
+ switch ((int) $format) {
+ case FILE_X509_DN_ARRAY:
+ return $dn;
+ case FILE_X509_DN_ASN1:
+ $asn1 = new File_ASN1();
+ $asn1->loadOIDs($this->oids);
+ $filters = array();
+ $filters['rdnSequence']['value'] = array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+ $asn1->loadFilters($filters);
+ return $asn1->encodeDER($dn, $this->Name);
+ case FILE_X509_DN_OPENSSL:
+ $dn = $this->getDN(FILE_X509_DN_STRING, $dn);
+ if ($dn === false) {
+ return false;
+ }
+ $attrs = preg_split('#((?:^|, *|/)[a-z][a-z0-9]*=)#i', $dn, -1, PREG_SPLIT_DELIM_CAPTURE);
+ $dn = array();
+ for ($i = 1; $i < count($attrs); $i += 2) {
+ $prop = trim($attrs[$i], ', =/');
+ $value = $attrs[$i + 1];
+ if (!isset($dn[$prop])) {
+ $dn[$prop] = $value;
+ } else {
+ $dn[$prop] = array_merge((array) $dn[$prop], array($value));
+ }
+ }
+ return $dn;
+ case FILE_X509_DN_CANON:
+ // No SEQUENCE around RDNs and all string values normalized as
+ // trimmed lowercase UTF-8 with all spacing as one blank.
+ $asn1 = new File_ASN1();
+ $asn1->loadOIDs($this->oids);
+ $filters = array();
+ $filters['value'] = array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+ $asn1->loadFilters($filters);
+ $result = '';
+ foreach ($dn['rdnSequence'] as $rdn) {
+ foreach ($rdn as &$attr) {
+ if (is_array($attr['value'])) {
+ foreach ($attr['value'] as $type => $v) {
+ $type = array_search($type, $asn1->ANYmap, true);
+ if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+ $v = $asn1->convert($v, $type);
+ if ($v !== false) {
+ $v = preg_replace('/\s+/', ' ', $v);
+ $attr['value'] = strtolower(trim($v));
+ break;
+ }
+ }
+ }
+ }
+ }
+ $result .= $asn1->encodeDER($rdn, $this->RelativeDistinguishedName);
+ }
+ return $result;
+ case FILE_X509_DN_HASH:
+ $dn = $this->getDN(FILE_X509_DN_CANON, $dn);
+ if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+ }
+ $hash = new Crypt_Hash('sha1');
+ $hash = $hash->hash($dn);
+ extract(unpack('Vhash', $hash));
+ return strtolower(bin2hex(pack('N', $hash)));
+ }
+
+ // Defaut is to return a string.
+ $start = true;
+ $output = '';
+ $asn1 = new File_ASN1();
+ foreach ($dn['rdnSequence'] as $field) {
+ $prop = $field[0]['type'];
+ $value = $field[0]['value'];
+
+ $delim = ', ';
+ switch ($prop) {
+ case 'id-at-countryName':
+ $desc = 'C=';
+ break;
+ case 'id-at-stateOrProvinceName':
+ $desc = 'ST=';
+ break;
+ case 'id-at-organizationName':
+ $desc = 'O=';
+ break;
+ case 'id-at-organizationalUnitName':
+ $desc = 'OU=';
+ break;
+ case 'id-at-commonName':
+ $desc = 'CN=';
+ break;
+ case 'id-at-localityName':
+ $desc = 'L=';
+ break;
+ case 'id-at-surname':
+ $desc = 'SN=';
+ break;
+ case 'id-at-uniqueIdentifier':
+ $delim = '/';
+ $desc = 'x500UniqueIdentifier=';
+ break;
+ default:
+ $delim = '/';
+ $desc = preg_replace('#.+-([^-]+)$#', '$1', $prop) . '=';
+ }
+
+ if (!$start) {
+ $output.= $delim;
+ }
+ if (is_array($value)) {
+ foreach ($value as $type => $v) {
+ $type = array_search($type, $asn1->ANYmap, true);
+ if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+ $v = $asn1->convert($v, $type);
+ if ($v !== false) {
+ $value = $v;
+ break;
+ }
+ }
+ }
+ if (is_array($value)) {
+ $value = array_pop($value); // Always strip data type.
+ }
+ }
+ $output.= $desc . $value;
+ $start = false;
+ }
+
+ return $output;
+ }
+
+ /**
+ * Get the Distinguished Name for a certificate/crl issuer
+ *
+ * @param Integer $format optional
+ * @access public
+ * @return Mixed
+ */
+ function getIssuerDN($format = FILE_X509_DN_ARRAY)
+ {
+ switch (true) {
+ case !isset($this->currentCert) || !is_array($this->currentCert):
+ break;
+ case isset($this->currentCert['tbsCertificate']):
+ return $this->getDN($format, $this->currentCert['tbsCertificate']['issuer']);
+ case isset($this->currentCert['tbsCertList']):
+ return $this->getDN($format, $this->currentCert['tbsCertList']['issuer']);
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the Distinguished Name for a certificate/csr subject
+ * Alias of getDN()
+ *
+ * @param Integer $format optional
+ * @access public
+ * @return Mixed
+ */
+ function getSubjectDN($format = FILE_X509_DN_ARRAY)
+ {
+ switch (true) {
+ case !empty($this->dn):
+ return $this->getDN($format);
+ case !isset($this->currentCert) || !is_array($this->currentCert):
+ break;
+ case isset($this->currentCert['tbsCertificate']):
+ return $this->getDN($format, $this->currentCert['tbsCertificate']['subject']);
+ case isset($this->currentCert['certificationRequestInfo']):
+ return $this->getDN($format, $this->currentCert['certificationRequestInfo']['subject']);
+ }
+
+ return false;
+ }
+
+ /**
+ * Get an individual Distinguished Name property for a certificate/crl issuer
+ *
+ * @param String $propName
+ * @param Boolean $withType optional
+ * @access public
+ * @return Mixed
+ */
+ function getIssuerDNProp($propName, $withType = false)
+ {
+ switch (true) {
+ case !isset($this->currentCert) || !is_array($this->currentCert):
+ break;
+ case isset($this->currentCert['tbsCertificate']):
+ return $this->getDNProp($propname, $this->currentCert['tbsCertificate']['issuer'], $withType);
+ case isset($this->currentCert['tbsCertList']):
+ return $this->getDNProp($propname, $this->currentCert['tbsCertList']['issuer'], $withType);
+ }
+
+ return false;
+ }
+
+ /**
+ * Get an individual Distinguished Name property for a certificate/csr subject
+ *
+ * @param String $propName
+ * @param Boolean $withType optional
+ * @access public
+ * @return Mixed
+ */
+ function getSubjectDNProp($propName, $withType = false)
+ {
+ switch (true) {
+ case !empty($this->dn):
+ return $this->getDNProp($propName, NULL, $withType);
+ case !isset($this->currentCert) || !is_array($this->currentCert):
+ break;
+ case isset($this->currentCert['tbsCertificate']):
+ return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['subject'], $withType);
+ case isset($this->currentCert['certificationRequestInfo']):
+ return $this->getDNProp($propname, $this->currentCert['certificationRequestInfo']['subject'], $withType);
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the certificate chain for the current cert
+ *
+ * @access public
+ * @return Mixed
+ */
+ function getChain()
+ {
+ $chain = array($this->currentCert);
+
+ if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+ return false;
+ }
+ if (empty($this->CAs)) {
+ return $chain;
+ }
+ while (true) {
+ $currentCert = $chain[count($chain) - 1];
+ for ($i = 0; $i < count($this->CAs); $i++) {
+ $ca = $this->CAs[$i];
+ if ($currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) {
+ $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier', $currentCert);
+ $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+ switch (true) {
+ case !is_array($authorityKey):
+ case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+ if ($currentCert === $ca) {
+ break 3;
+ }
+ $chain[] = $ca;
+ break 2;
+ }
+ }
+ }
+ if ($i == count($this->CAs)) {
+ break;
+ }
+ }
+ foreach ($chain as $key=>$value) {
+ $chain[$key] = new File_X509();
+ $chain[$key]->loadX509($value);
+ }
+ return $chain;
+ }
+
+ /**
+ * Set public key
+ *
+ * Key needs to be a Crypt_RSA object
+ *
+ * @param Object $key
+ * @access public
+ * @return Boolean
+ */
+ function setPublicKey($key)
+ {
+ $this->publicKey = $key;
+ }
+
+ /**
+ * Set private key
+ *
+ * Key needs to be a Crypt_RSA object
+ *
+ * @param Object $key
+ * @access public
+ */
+ function setPrivateKey($key)
+ {
+ $this->privateKey = $key;
+ }
+
+ /**
+ * Gets the public key
+ *
+ * Returns a Crypt_RSA object or a false.
+ *
+ * @access public
+ * @return Mixed
+ */
+ function getPublicKey()
+ {
+ if (isset($this->publicKey)) {
+ return $this->publicKey;
+ }
+
+ if (isset($this->currentCert) && is_array($this->currentCert)) {
+ foreach (array('tbsCertificate/subjectPublicKeyInfo', 'certificationRequestInfo/subjectPKInfo') as $path) {
+ $keyinfo = $this->_subArray($this->currentCert, $path);
+ if (!empty($keyinfo)) {
+ break;
+ }
+ }
+ }
+ if (empty($keyinfo)) {
+ return false;
+ }
+
+ $key = $keyinfo['subjectPublicKey'];
+
+ switch ($keyinfo['algorithm']['algorithm']) {
+ case 'rsaEncryption':
+ if (!class_exists('Crypt_RSA')) {
+ require_once('Crypt/RSA.php');
+ }
+ $publicKey = new Crypt_RSA();
+ $publicKey->loadKey($key);
+ $publicKey->setPublicKey();
+ break;
+ default:
+ return false;
+ }
+
+ return $publicKey;
+ }
+
+ /**
+ * Load a Certificate Signing Request
+ *
+ * @param String $csr
+ * @access public
+ * @return Mixed
+ */
+ function loadCSR($csr)
+ {
+ if (is_array($csr) && isset($csr['certificationRequestInfo'])) {
+ unset($this->currentCert);
+ unset($this->currentKeyIdentifier);
+ unset($this->signatureSubject);
+ $this->dn = $csr['certificationRequestInfo']['subject'];
+ if (!isset($this->dn)) {
+ return false;
+ }
+
+ $this->currentCert = $csr;
+ return $csr;
+ }
+
+ // see http://tools.ietf.org/html/rfc2986
+
+ $asn1 = new File_ASN1();
+
+ $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $csr);
+ $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+ if ($temp != false) {
+ $csr = $temp;
+ }
+ $orig = $csr;
+
+ if ($csr === false) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $asn1->loadOIDs($this->oids);
+ $decoded = $asn1->decodeBER($csr);
+
+ if (empty($decoded)) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $csr = $asn1->asn1map($decoded[0], $this->CertificationRequest);
+ if (!isset($csr) || $csr === false) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $this->dn = $csr['certificationRequestInfo']['subject'];
+ $this->_mapInAttributes($csr, 'certificationRequestInfo/attributes', $asn1);
+
+ $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+ $algorithm = &$csr['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'];
+ $key = &$csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'];
+ $key = $this->_reformatKey($algorithm, $key);
+
+ switch ($algorithm) {
+ case 'rsaEncryption':
+ if (!class_exists('Crypt_RSA')) {
+ require_once('Crypt/RSA.php');
+ }
+ $this->publicKey = new Crypt_RSA();
+ $this->publicKey->loadKey($key);
+ $this->publicKey->setPublicKey();
+ break;
+ default:
+ $this->publicKey = NULL;
+ }
+
+ $this->currentKeyIdentifier = NULL;
+ $this->currentCert = $csr;
+
+ return $csr;
+ }
+
+ /**
+ * Save CSR request
+ *
+ * @param Array $csr
+ * @param Integer $format optional
+ * @access public
+ * @return String
+ */
+ function saveCSR($csr, $format = FILE_X509_FORMAT_PEM)
+ {
+ if (!is_array($csr) || !isset($csr['certificationRequestInfo'])) {
+ return false;
+ }
+
+ switch (true) {
+ case !($algorithm = $this->_subArray($csr, 'certificationRequestInfo/subjectPKInfo/algorithm/algorithm')):
+ case is_object($csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']);
+ break;
+ default:
+ switch ($algorithm) {
+ case 'rsaEncryption':
+ $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'] =
+ base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'])));
+ }
+ }
+
+ $asn1 = new File_ASN1();
+
+ $asn1->loadOIDs($this->oids);
+
+ $filters = array();
+ $filters['certificationRequestInfo']['subject']['rdnSequence']['value'] =
+ array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+
+ $asn1->loadFilters($filters);
+
+ $this->_mapOutAttributes($csr, 'certificationRequestInfo/attributes', $asn1);
+ $csr = $asn1->encodeDER($csr, $this->CertificationRequest);
+
+ switch ($format) {
+ case FILE_X509_FORMAT_DER:
+ return $csr;
+ // case FILE_X509_FORMAT_PEM:
+ default:
+ return "-----BEGIN CERTIFICATE REQUEST-----\r\n" . chunk_split(base64_encode($csr), 64) . '-----END CERTIFICATE REQUEST-----';
+ }
+ }
+
+ /**
+ * Load a SPKAC CSR
+ *
+ * SPKAC's are produced by the HTML5 keygen element:
+ *
+ * https://developer.mozilla.org/en-US/docs/HTML/Element/keygen
+ *
+ * @param String $csr
+ * @access public
+ * @return Mixed
+ */
+ function loadSPKAC($csr)
+ {
+ if (is_array($csr) && isset($csr['publicKeyAndChallenge'])) {
+ unset($this->currentCert);
+ unset($this->currentKeyIdentifier);
+ unset($this->signatureSubject);
+ $this->currentCert = $csr;
+ return $csr;
+ }
+
+ // see http://www.w3.org/html/wg/drafts/html/master/forms.html#signedpublickeyandchallenge
+
+ $asn1 = new File_ASN1();
+
+ $temp = preg_replace('#(?:^[^=]+=)|[\r\n\\\]#', '', $csr);
+ $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+ if ($temp != false) {
+ $csr = $temp;
+ }
+ $orig = $csr;
+
+ if ($csr === false) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $asn1->loadOIDs($this->oids);
+ $decoded = $asn1->decodeBER($csr);
+
+ if (empty($decoded)) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $csr = $asn1->asn1map($decoded[0], $this->SignedPublicKeyAndChallenge);
+
+ if (!isset($csr) || $csr === false) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+ $algorithm = &$csr['publicKeyAndChallenge']['spki']['algorithm']['algorithm'];
+ $key = &$csr['publicKeyAndChallenge']['spki']['subjectPublicKey'];
+ $key = $this->_reformatKey($algorithm, $key);
+
+ switch ($algorithm) {
+ case 'rsaEncryption':
+ if (!class_exists('Crypt_RSA')) {
+ require_once('Crypt/RSA.php');
+ }
+ $this->publicKey = new Crypt_RSA();
+ $this->publicKey->loadKey($key);
+ $this->publicKey->setPublicKey();
+ break;
+ default:
+ $this->publicKey = NULL;
+ }
+
+ $this->currentKeyIdentifier = NULL;
+ $this->currentCert = $csr;
+
+ return $csr;
+ }
+
+ /**
+ * Load a Certificate Revocation List
+ *
+ * @param String $crl
+ * @access public
+ * @return Mixed
+ */
+ function loadCRL($crl)
+ {
+ if (is_array($crl) && isset($crl['tbsCertList'])) {
+ $this->currentCert = $crl;
+ unset($this->signatureSubject);
+ return $crl;
+ }
+
+ $asn1 = new File_ASN1();
+
+ $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $crl);
+ $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+ if ($temp != false) {
+ $crl = $temp;
+ }
+ $orig = $crl;
+
+ if ($crl === false) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $asn1->loadOIDs($this->oids);
+ $decoded = $asn1->decodeBER($crl);
+
+ if (empty($decoded)) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $crl = $asn1->asn1map($decoded[0], $this->CertificateList);
+ if (!isset($crl) || $crl === false) {
+ $this->currentCert = false;
+ return false;
+ }
+
+ $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+ $this->_mapInExtensions($crl, 'tbsCertList/crlExtensions', $asn1);
+ $rclist = &$this->_subArray($crl,'tbsCertList/revokedCertificates');
+ if (is_array($rclist)) {
+ foreach ($rclist as $i => $extension) {
+ $this->_mapInExtensions($rclist, "$i/crlEntryExtensions", $asn1);
+ }
+ }
+
+ $this->currentKeyIdentifier = NULL;
+ $this->currentCert = $crl;
+
+ return $crl;
+ }
+
+ /**
+ * Save Certificate Revocation List.
+ *
+ * @param Array $crl
+ * @param Integer $format optional
+ * @access public
+ * @return String
+ */
+ function saveCRL($crl, $format = FILE_X509_FORMAT_PEM)
+ {
+ if (!is_array($crl) || !isset($crl['tbsCertList'])) {
+ return false;
+ }
+
+ $asn1 = new File_ASN1();
+
+ $asn1->loadOIDs($this->oids);
+
+ $filters = array();
+ $filters['tbsCertList']['issuer']['rdnSequence']['value'] =
+ $filters['tbsCertList']['signature']['parameters'] =
+ $filters['signatureAlgorithm']['parameters'] =
+ array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+
+ if (empty($crl['tbsCertList']['signature']['parameters'])) {
+ $filters['tbsCertList']['signature']['parameters'] =
+ array('type' => FILE_ASN1_TYPE_NULL);
+ }
+
+ if (empty($crl['signatureAlgorithm']['parameters'])) {
+ $filters['signatureAlgorithm']['parameters'] =
+ array('type' => FILE_ASN1_TYPE_NULL);
+ }
+
+ $asn1->loadFilters($filters);
+
+ $this->_mapOutExtensions($crl, 'tbsCertList/crlExtensions', $asn1);
+ $rclist = &$this->_subArray($crl,'tbsCertList/revokedCertificates');
+ if (is_array($rclist)) {
+ foreach ($rclist as $i => $extension) {
+ $this->_mapOutExtensions($rclist, "$i/crlEntryExtensions", $asn1);
+ }
+ }
+
+ $crl = $asn1->encodeDER($crl, $this->CertificateList);
+
+ switch ($format) {
+ case FILE_X509_FORMAT_DER:
+ return $crl;
+ // case FILE_X509_FORMAT_PEM:
+ default:
+ return "-----BEGIN X509 CRL-----\r\n" . chunk_split(base64_encode($crl), 64) . '-----END X509 CRL-----';
+ }
+ }
+
+ /**
+ * Sign an X.509 certificate
+ *
+ * $issuer's private key needs to be loaded.
+ * $subject can be either an existing X.509 cert (if you want to resign it),
+ * a CSR or something with the DN and public key explicitly set.
+ *
+ * @param File_X509 $issuer
+ * @param File_X509 $subject
+ * @param String $signatureAlgorithm optional
+ * @access public
+ * @return Mixed
+ */
+ function sign($issuer, $subject, $signatureAlgorithm = 'sha1WithRSAEncryption')
+ {
+ if (!is_object($issuer->privateKey) || empty($issuer->dn)) {
+ return false;
+ }
+
+ if (isset($subject->publicKey) && !($subjectPublicKey = $subject->_formatSubjectPublicKey())) {
+ return false;
+ }
+
+ $currentCert = isset($this->currentCert) ? $this->currentCert : NULL;
+ $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: NULL;
+
+ if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertificate'])) {
+ $this->currentCert = $subject->currentCert;
+ $this->currentCert['tbsCertificate']['signature']['algorithm'] =
+ $this->currentCert['signatureAlgorithm']['algorithm'] =
+ $signatureAlgorithm;
+ if (!empty($this->startDate)) {
+ $this->currentCert['tbsCertificate']['validity']['notBefore']['generalTime'] = $this->startDate;
+ unset($this->currentCert['tbsCertificate']['validity']['notBefore']['utcTime']);
+ }
+ if (!empty($this->endDate)) {
+ $this->currentCert['tbsCertificate']['validity']['notAfter']['generalTime'] = $this->endDate;
+ unset($this->currentCert['tbsCertificate']['validity']['notAfter']['utcTime']);
+ }
+ if (!empty($this->serialNumber)) {
+ $this->currentCert['tbsCertificate']['serialNumber'] = $this->serialNumber;
+ }
+ if (!empty($subject->dn)) {
+ $this->currentCert['tbsCertificate']['subject'] = $subject->dn;
+ }
+ if (!empty($subject->publicKey)) {
+ $this->currentCert['tbsCertificate']['subjectPublicKeyInfo'] = $subjectPublicKey;
+ }
+ $this->removeExtension('id-ce-authorityKeyIdentifier');
+ if (isset($subject->domains)) {
+ $this->removeExtension('id-ce-subjectAltName');
+ }
+ } else if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertList'])) {
+ return false;
+ } else {
+ if (!isset($subject->publicKey)) {
+ return false;
+ }
+
+ $startDate = !empty($this->startDate) ? $this->startDate : @date('D, d M y H:i:s O');
+ $endDate = !empty($this->endDate) ? $this->endDate : @date('D, d M y H:i:s O', strtotime('+1 year'));
+ $serialNumber = !empty($this->serialNumber) ? $this->serialNumber : new Math_BigInteger();
+
+ $this->currentCert = array(
+ 'tbsCertificate' =>
+ array(
+ 'version' => 'v3',
+ 'serialNumber' => $serialNumber, // $this->setserialNumber()
+ 'signature' => array('algorithm' => $signatureAlgorithm),
+ 'issuer' => false, // this is going to be overwritten later
+ 'validity' => array(
+ 'notBefore' => array('generalTime' => $startDate), // $this->setStartDate()
+ 'notAfter' => array('generalTime' => $endDate) // $this->setEndDate()
+ ),
+ 'subject' => $subject->dn,
+ 'subjectPublicKeyInfo' => $subjectPublicKey
+ ),
+ 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+ 'signature' => false // this is going to be overwritten later
+ );
+
+ // Copy extensions from CSR.
+ $csrexts = $subject->getAttribute('pkcs-9-at-extensionRequest', 0);
+
+ if (!empty($csrexts)) {
+ $this->currentCert['tbsCertificate']['extensions'] = $csrexts;
+ }
+ }
+
+ $this->currentCert['tbsCertificate']['issuer'] = $issuer->dn;
+
+ if (isset($issuer->currentKeyIdentifier)) {
+ $this->setExtension('id-ce-authorityKeyIdentifier', array(
+ //'authorityCertIssuer' => array(
+ // array(
+ // 'directoryName' => $issuer->dn
+ // )
+ //),
+ 'keyIdentifier' => $issuer->currentKeyIdentifier
+ )
+ );
+ //$extensions = &$this->currentCert['tbsCertificate']['extensions'];
+ //if (isset($issuer->serialNumber)) {
+ // $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;
+ //}
+ //unset($extensions);
+ }
+
+ if (isset($subject->currentKeyIdentifier)) {
+ $this->setExtension('id-ce-subjectKeyIdentifier', $subject->currentKeyIdentifier);
+ }
+
+ if (isset($subject->domains) && count($subject->domains) > 1) {
+ $this->setExtension('id-ce-subjectAltName',
+ array_map(array('File_X509', '_dnsName'), $subject->domains));
+ }
+
+ if ($this->caFlag) {
+ $keyUsage = $this->getExtension('id-ce-keyUsage');
+ if (!$keyUsage) {
+ $keyUsage = array();
+ }
+
+ $this->setExtension('id-ce-keyUsage',
+ array_values(array_unique(array_merge($keyUsage, array('cRLSign', 'keyCertSign'))))
+ );
+
+ $basicConstraints = $this->getExtension('id-ce-basicConstraints');
+ if (!$basicConstraints) {
+ $basicConstraints = array();
+ }
+
+ $this->setExtension('id-ce-basicConstraints',
+ array_unique(array_merge(array('cA' => true), $basicConstraints)), true);
+
+ if (!isset($subject->currentKeyIdentifier)) {
+ $this->setExtension('id-ce-subjectKeyIdentifier', base64_encode($this->computeKeyIdentifier($this->currentCert)), false, false);
+ }
+ }
+
+ // resync $this->signatureSubject
+ // save $tbsCertificate in case there are any File_ASN1_Element objects in it
+ $tbsCertificate = $this->currentCert['tbsCertificate'];
+ $this->loadX509($this->saveX509($this->currentCert));
+
+ $result = $this->_sign($issuer->privateKey, $signatureAlgorithm);
+ $result['tbsCertificate'] = $tbsCertificate;
+
+ $this->currentCert = $currentCert;
+ $this->signatureSubject = $signatureSubject;
+
+ return $result;
+ }
+
+ /**
+ * Sign a CSR
+ *
+ * @access public
+ * @return Mixed
+ */
+ function signCSR($signatureAlgorithm = 'sha1WithRSAEncryption')
+ {
+ if (!is_object($this->privateKey) || empty($this->dn)) {
+ return false;
+ }
+
+ $origPublicKey = $this->publicKey;
+ $class = get_class($this->privateKey);
+ $this->publicKey = new $class();
+ $this->publicKey->loadKey($this->privateKey->getPublicKey());
+ $this->publicKey->setPublicKey();
+ if (!($publicKey = $this->_formatSubjectPublicKey())) {
+ return false;
+ }
+ $this->publicKey = $origPublicKey;
+
+ $currentCert = isset($this->currentCert) ? $this->currentCert : NULL;
+ $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: NULL;
+
+ if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['certificationRequestInfo'])) {
+ $this->currentCert['signatureAlgorithm']['algorithm'] =
+ $signatureAlgorithm;
+ if (!empty($this->dn)) {
+ $this->currentCert['certificationRequestInfo']['subject'] = $this->dn;
+ }
+ $this->currentCert['certificationRequestInfo']['subjectPKInfo'] = $publicKey;
+ } else {
+ $this->currentCert = array(
+ 'certificationRequestInfo' =>
+ array(
+ 'version' => 'v1',
+ 'subject' => $this->dn,
+ 'subjectPKInfo' => $publicKey
+ ),
+ 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+ 'signature' => false // this is going to be overwritten later
+ );
+ }
+
+ // resync $this->signatureSubject
+ // save $certificationRequestInfo in case there are any File_ASN1_Element objects in it
+ $certificationRequestInfo = $this->currentCert['certificationRequestInfo'];
+ $this->loadCSR($this->saveCSR($this->currentCert));
+
+ $result = $this->_sign($this->privateKey, $signatureAlgorithm);
+ $result['certificationRequestInfo'] = $certificationRequestInfo;
+
+ $this->currentCert = $currentCert;
+ $this->signatureSubject = $signatureSubject;
+
+ return $result;
+ }
+
+ /**
+ * Sign a CRL
+ *
+ * $issuer's private key needs to be loaded.
+ *
+ * @param File_X509 $issuer
+ * @param File_X509 $crl
+ * @param String $signatureAlgorithm optional
+ * @access public
+ * @return Mixed
+ */
+ function signCRL($issuer, $crl, $signatureAlgorithm = 'sha1WithRSAEncryption')
+ {
+ if (!is_object($issuer->privateKey) || empty($issuer->dn)) {
+ return false;
+ }
+
+ $currentCert = isset($this->currentCert) ? $this->currentCert : NULL;
+ $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : NULL;
+ $thisUpdate = !empty($this->startDate) ? $this->startDate : @date('D, d M y H:i:s O');
+
+ if (isset($crl->currentCert) && is_array($crl->currentCert) && isset($crl->currentCert['tbsCertList'])) {
+ $this->currentCert = $crl->currentCert;
+ $this->currentCert['tbsCertList']['signature']['algorithm'] = $signatureAlgorithm;
+ $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm;
+ } else {
+ $this->currentCert = array(
+ 'tbsCertList' =>
+ array(
+ 'version' => 'v2',
+ 'signature' => array('algorithm' => $signatureAlgorithm),
+ 'issuer' => false, // this is going to be overwritten later
+ 'thisUpdate' => array('generalTime' => $thisUpdate) // $this->setStartDate()
+ ),
+ 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+ 'signature' => false // this is going to be overwritten later
+ );
+ }
+
+ $tbsCertList = &$this->currentCert['tbsCertList'];
+ $tbsCertList['issuer'] = $issuer->dn;
+ $tbsCertList['thisUpdate'] = array('generalTime' => $thisUpdate);
+
+ if (!empty($this->endDate)) {
+ $tbsCertList['nextUpdate'] = array('generalTime' => $this->endDate); // $this->setEndDate()
+ } else {
+ unset($tbsCertList['nextUpdate']);
+ }
+
+ if (!empty($this->serialNumber)) {
+ $crlNumber = $this->serialNumber;
+ }
+ else {
+ $crlNumber = $this->getExtension('id-ce-cRLNumber');
+ $crlNumber = $crlNumber !== false ? $crlNumber->add(new Math_BigInteger(1)) : NULL;
+ }
+
+ $this->removeExtension('id-ce-authorityKeyIdentifier');
+ $this->removeExtension('id-ce-issuerAltName');
+
+ // Be sure version >= v2 if some extension found.
+ $version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0;
+ if (!$version) {
+ if (!empty($tbsCertList['crlExtensions'])) {
+ $version = 1; // v2.
+ }
+ elseif (!empty($tbsCertList['revokedCertificates'])) {
+ foreach ($tbsCertList['revokedCertificates'] as $cert) {
+ if (!empty($cert['crlEntryExtensions'])) {
+ $version = 1; // v2.
+ }
+ }
+ }
+
+ if ($version) {
+ $tbsCertList['version'] = $version;
+ }
+ }
+
+ // Store additional extensions.
+ if (!empty($tbsCertList['version'])) { // At least v2.
+ if (!empty($crlNumber)) {
+ $this->setExtension('id-ce-cRLNumber', $crlNumber);
+ }
+
+ if (isset($issuer->currentKeyIdentifier)) {
+ $this->setExtension('id-ce-authorityKeyIdentifier', array(
+ //'authorityCertIssuer' => array(
+ // array(
+ // 'directoryName' => $issuer->dn
+ // )
+ //),
+ 'keyIdentifier' => $issuer->currentKeyIdentifier
+ )
+ );
+ //$extensions = &$tbsCertList['crlExtensions'];
+ //if (isset($issuer->serialNumber)) {
+ // $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;
+ //}
+ //unset($extensions);
+ }
+
+ $issuerAltName = $this->getExtension('id-ce-subjectAltName', $issuer->currentCert);
+
+ if ($issuerAltName !== false) {
+ $this->setExtension('id-ce-issuerAltName', $issuerAltName);
+ }
+ }
+
+ if (empty($tbsCertList['revokedCertificates'])) {
+ unset($tbsCertList['revokedCertificates']);
+ }
+
+ unset($tbsCertList);
+
+ // resync $this->signatureSubject
+ // save $tbsCertList in case there are any File_ASN1_Element objects in it
+ $tbsCertList = $this->currentCert['tbsCertList'];
+ $this->loadCRL($this->saveCRL($this->currentCert));
+
+ $result = $this->_sign($issuer->privateKey, $signatureAlgorithm);
+ $result['tbsCertList'] = $tbsCertList;
+
+ $this->currentCert = $currentCert;
+ $this->signatureSubject = $signatureSubject;
+
+ return $result;
+ }
+
+ /**
+ * X.509 certificate signing helper function.
+ *
+ * @param Object $key
+ * @param File_X509 $subject
+ * @param String $signatureAlgorithm
+ * @access public
+ * @return Mixed
+ */
+ function _sign($key, $signatureAlgorithm)
+ {
+ switch (strtolower(get_class($key))) {
+ case 'crypt_rsa':
+ switch ($signatureAlgorithm) {
+ case 'md2WithRSAEncryption':
+ case 'md5WithRSAEncryption':
+ case 'sha1WithRSAEncryption':
+ case 'sha224WithRSAEncryption':
+ case 'sha256WithRSAEncryption':
+ case 'sha384WithRSAEncryption':
+ case 'sha512WithRSAEncryption':
+ $key->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm));
+ $key->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
+
+ $this->currentCert['signature'] = base64_encode("\0" . $key->sign($this->signatureSubject));
+ return $this->currentCert;
+ }
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Set certificate start date
+ *
+ * @param String $date
+ * @access public
+ */
+ function setStartDate($date)
+ {
+ $this->startDate = @date('D, d M y H:i:s O', @strtotime($date));
+ }
+
+ /**
+ * Set certificate end date
+ *
+ * @param String $date
+ * @access public
+ */
+ function setEndDate($date)
+ {
+ /*
+ To indicate that a certificate has no well-defined expiration date,
+ the notAfter SHOULD be assigned the GeneralizedTime value of
+ 99991231235959Z.
+
+ -- http://tools.ietf.org/html/rfc5280#section-4.1.2.5
+ */
+ if (strtolower($date) == 'lifetime') {
+ $temp = '99991231235959Z';
+ $asn1 = new File_ASN1();
+ $temp = chr(FILE_ASN1_TYPE_GENERALIZED_TIME) . $asn1->_encodeLength(strlen($temp)) . $temp;
+ $this->endDate = new File_ASN1_Element($temp);
+ } else {
+ $this->endDate = @date('D, d M y H:i:s O', @strtotime($date));
+ }
+ }
+
+ /**
+ * Set Serial Number
+ *
+ * @param String $serial
+ * @param $base optional
+ * @access public
+ */
+ function setSerialNumber($serial, $base = -256)
+ {
+ $this->serialNumber = new Math_BigInteger($serial, $base);
+ }
+
+ /**
+ * Turns the certificate into a certificate authority
+ *
+ * @access public
+ */
+ function makeCA()
+ {
+ $this->caFlag = true;
+ }
+
+ /**
+ * Get a reference to a subarray
+ *
+ * @param array $root
+ * @param String $path absolute path with / as component separator
+ * @param Boolean $create optional
+ * @access private
+ * @return array item ref or false
+ */
+ function &_subArray(&$root, $path, $create = false)
+ {
+ $false = false;
+
+ if (!is_array($root)) {
+ return $false;
+ }
+
+ foreach (explode('/', $path) as $i) {
+ if (!is_array($root)) {
+ return $false;
+ }
+
+ if (!isset($root[$i])) {
+ if (!$create) {
+ return $false;
+ }
+
+ $root[$i] = array();
+ }
+
+ $root = &$root[$i];
+ }
+
+ return $root;
+ }
+
+ /**
+ * Get a reference to an extension subarray
+ *
+ * @param array $root
+ * @param String $path optional absolute path with / as component separator
+ * @param Boolean $create optional
+ * @access private
+ * @return array ref or false
+ */
+ function &_extensions(&$root, $path = NULL, $create = false)
+ {
+ if (!isset($root)) {
+ $root = $this->currentCert;
+ }
+
+ switch (true) {
+ case !empty($path):
+ case !is_array($root):
+ break;
+ case isset($root['tbsCertificate']):
+ $path = 'tbsCertificate/extensions';
+ break;
+ case isset($root['tbsCertList']):
+ $path = 'tbsCertList/crlExtensions';
+ break;
+ case isset($root['certificationRequestInfo']):
+ $pth = 'certificationRequestInfo/attributes';
+ $attributes = &$this->_subArray($root, $pth, $create);
+
+ if (is_array($attributes)) {
+ foreach ($attributes as $key => $value) {
+ if ($value['type'] == 'pkcs-9-at-extensionRequest') {
+ $path = "$pth/$key/value/0";
+ break 2;
+ }
+ }
+ if ($create) {
+ $key = count($attributes);
+ $attributes[] = array('type' => 'pkcs-9-at-extensionRequest', 'value' => array());
+ $path = "$pth/$key/value/0";
+ }
+ }
+ break;
+ }
+
+ $extensions = &$this->_subArray($root, $path, $create);
+
+ if (!is_array($extensions)) {
+ $false = false;
+ return $false;
+ }
+
+ return $extensions;
+ }
+
+ /**
+ * Remove an Extension
+ *
+ * @param String $id
+ * @param String $path optional
+ * @access private
+ * @return Boolean
+ */
+ function _removeExtension($id, $path = NULL)
+ {
+ $extensions = &$this->_extensions($this->currentCert, $path);
+
+ if (!is_array($extensions)) {
+ return false;
+ }
+
+ $result = false;
+ foreach ($extensions as $key => $value) {
+ if ($value['extnId'] == $id) {
+ unset($extensions[$key]);
+ $result = true;
+ }
+ }
+
+ $extensions = array_values($extensions);
+ return $result;
+ }
+
+ /**
+ * Get an Extension
+ *
+ * Returns the extension if it exists and false if not
+ *
+ * @param String $id
+ * @param Array $cert optional
+ * @param String $path optional
+ * @access private
+ * @return Mixed
+ */
+ function _getExtension($id, $cert = NULL, $path = NULL)
+ {
+ $extensions = $this->_extensions($cert, $path);
+
+ if (!is_array($extensions)) {
+ return false;
+ }
+
+ foreach ($extensions as $key => $value) {
+ if ($value['extnId'] == $id) {
+ return $value['extnValue'];
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns a list of all extensions in use
+ *
+ * @param array $cert optional
+ * @param String $path optional
+ * @access private
+ * @return Array
+ */
+ function _getExtensions($cert = NULL, $path = NULL)
+ {
+ $exts = $this->_extensions($cert, $path);
+ $extensions = array();
+
+ if (is_array($exts)) {
+ foreach ($exts as $extension) {
+ $extensions[] = $extension['extnId'];
+ }
+ }
+
+ return $extensions;
+ }
+
+ /**
+ * Set an Extension
+ *
+ * @param String $id
+ * @param Mixed $value
+ * @param Boolean $critical optional
+ * @param Boolean $replace optional
+ * @param String $path optional
+ * @access private
+ * @return Boolean
+ */
+ function _setExtension($id, $value, $critical = false, $replace = true, $path = NULL)
+ {
+ $extensions = &$this->_extensions($this->currentCert, $path, true);
+
+ if (!is_array($extensions)) {
+ return false;
+ }
+
+ $newext = array('extnId' => $id, 'critical' => $critical, 'extnValue' => $value);
+
+ foreach ($extensions as $key => $value) {
+ if ($value['extnId'] == $id) {
+ if (!$replace) {
+ return false;
+ }
+
+ $extensions[$key] = $newext;
+ return true;
+ }
+ }
+
+ $extensions[] = $newext;
+ return true;
+ }
+
+ /**
+ * Remove a certificate, CSR or CRL Extension
+ *
+ * @param String $id
+ * @access public
+ * @return Boolean
+ */
+ function removeExtension($id)
+ {
+ return $this->_removeExtension($id);
+ }
+
+ /**
+ * Get a certificate, CSR or CRL Extension
+ *
+ * Returns the extension if it exists and false if not
+ *
+ * @param String $id
+ * @param Array $cert optional
+ * @access public
+ * @return Mixed
+ */
+ function getExtension($id, $cert = NULL)
+ {
+ return $this->_getExtension($id, $cert);
+ }
+
+ /**
+ * Returns a list of all extensions in use in certificate, CSR or CRL
+ *
+ * @param array $cert optional
+ * @access public
+ * @return Array
+ */
+ function getExtensions($cert = NULL)
+ {
+ return $this->_getExtensions($cert);
+ }
+
+ /**
+ * Set a certificate, CSR or CRL Extension
+ *
+ * @param String $id
+ * @param Mixed $value
+ * @param Boolean $critical optional
+ * @param Boolean $replace optional
+ * @access public
+ * @return Boolean
+ */
+ function setExtension($id, $value, $critical = false, $replace = true)
+ {
+ return $this->_setExtension($id, $value, $critical, $replace);
+ }
+
+ /**
+ * Remove a CSR attribute.
+ *
+ * @param String $id
+ * @param Integer $disposition optional
+ * @access public
+ * @return Boolean
+ */
+ function removeAttribute($id, $disposition = FILE_X509_ATTR_ALL)
+ {
+ $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes');
+
+ if (!is_array($attributes)) {
+ return false;
+ }
+
+ $result = false;
+ foreach ($attributes as $key => $attribute) {
+ if ($attribute['type'] == $id) {
+ $n = count($attribute['value']);
+ switch (true) {
+ case $disposition == FILE_X509_ATTR_APPEND:
+ case $disposition == FILE_X509_ATTR_REPLACE:
+ return false;
+ case $disposition >= $n:
+ $disposition -= $n;
+ break;
+ case $disposition == FILE_X509_ATTR_ALL:
+ case $n == 1:
+ unset($attributes[$key]);
+ $result = true;
+ break;
+ default:
+ unset($attributes[$key]['value'][$disposition]);
+ $attributes[$key]['value'] = array_values($attributes[$key]['value']);
+ $result = true;
+ break;
+ }
+ if ($result && $disposition != FILE_X509_ATTR_ALL) {
+ break;
+ }
+ }
+ }
+
+ $attributes = array_values($attributes);
+ return $result;
+ }
+
+ /**
+ * Get a CSR attribute
+ *
+ * Returns the attribute if it exists and false if not
+ *
+ * @param String $id
+ * @param Integer $disposition optional
+ * @param Array $csr optional
+ * @access public
+ * @return Mixed
+ */
+ function getAttribute($id, $disposition = FILE_X509_ATTR_ALL, $csr = NULL)
+ {
+ if (empty($csr)) {
+ $csr = $this->currentCert;
+ }
+
+ $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes');
+
+ if (!is_array($attributes)) {
+ return false;
+ }
+
+ foreach ($attributes as $key => $attribute) {
+ if ($attribute['type'] == $id) {
+ $n = count($attribute['value']);
+ switch (true) {
+ case $disposition == FILE_X509_ATTR_APPEND:
+ case $disposition == FILE_X509_ATTR_REPLACE:
+ return false;
+ case $disposition == FILE_X509_ATTR_ALL:
+ return $attribute['value'];
+ case $disposition >= $n:
+ $disposition -= $n;
+ break;
+ default:
+ return $attribute['value'][$disposition];
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns a list of all CSR attributes in use
+ *
+ * @param array $csr optional
+ * @access public
+ * @return Array
+ */
+ function getAttributes($csr = NULL)
+ {
+ if (empty($csr)) {
+ $csr = $this->currentCert;
+ }
+
+ $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes');
+ $attrs = array();
+
+ if (is_array($attributes)) {
+ foreach ($attributes as $attribute) {
+ $attrs[] = $attribute['type'];
+ }
+ }
+
+ return $attrs;
+ }
+
+ /**
+ * Set a CSR attribute
+ *
+ * @param String $id
+ * @param Mixed $value
+ * @param Boolean $disposition optional
+ * @access public
+ * @return Boolean
+ */
+ function setAttribute($id, $value, $disposition = FILE_X509_ATTR_ALL)
+ {
+ $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes', true);
+
+ if (!is_array($attributes)) {
+ return false;
+ }
+
+ switch ($disposition) {
+ case FILE_X509_ATTR_REPLACE:
+ $disposition = FILE_X509_ATTR_APPEND;
+ case FILE_X509_ATTR_ALL:
+ $this->removeAttribute($id);
+ break;
+ }
+
+ foreach ($attributes as $key => $attribute) {
+ if ($attribute['type'] == $id) {
+ $n = count($attribute['value']);
+ switch (true) {
+ case $disposition == FILE_X509_ATTR_APPEND:
+ $last = $key;
+ break;
+ case $disposition >= $n;
+ $disposition -= $n;
+ break;
+ default:
+ $attributes[$key]['value'][$disposition] = $value;
+ return true;
+ }
+ }
+ }
+
+ switch (true) {
+ case $disposition >= 0:
+ return false;
+ case isset($last):
+ $attributes[$last]['value'][] = $value;
+ break;
+ default:
+ $attributes[] = array('type' => $id, 'value' => $disposition == FILE_X509_ATTR_ALL ? $value: array($value));
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Sets the subject key identifier
+ *
+ * This is used by the id-ce-authorityKeyIdentifier and the id-ce-subjectKeyIdentifier extensions.
+ *
+ * @param String $value
+ * @access public
+ */
+ function setKeyIdentifier($value)
+ {
+ if (empty($value)) {
+ unset($this->currentKeyIdentifier);
+ } else {
+ $this->currentKeyIdentifier = base64_encode($value);
+ }
+ }
+
+ /**
+ * Compute a public key identifier.
+ *
+ * Although key identifiers may be set to any unique value, this function
+ * computes key identifiers from public key according to the two
+ * recommended methods (4.2.1.2 RFC 3280).
+ * Highly polymorphic: try to accept all possible forms of key:
+ * - Key object
+ * - File_X509 object with public or private key defined
+ * - Certificate or CSR array
+ * - File_ASN1_Element object
+ * - PEM or DER string
+ *
+ * @param Mixed $key optional
+ * @param Integer $method optional
+ * @access public
+ * @return String binary key identifier
+ */
+ function computeKeyIdentifier($key = NULL, $method = 1)
+ {
+ if (is_null($key)) {
+ $key = $this;
+ }
+
+ switch (true) {
+ case is_string($key):
+ break;
+ case is_array($key) && isset($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):
+ return $this->computeKeyIdentifier($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], $method);
+ case is_array($key) && isset($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']):
+ return $this->computeKeyIdentifier($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], $method);
+ case !is_object($key):
+ return false;
+ case strtolower(get_class($key)) == 'file_asn1_element':
+ $asn1 = new File_ASN1();
+ $decoded = $asn1->decodeBER($cert);
+ if (empty($decoded)) {
+ return false;
+ }
+ $key = $asn1->asn1map($decoded[0], array('type' => FILE_ASN1_TYPE_BIT_STRING));
+ break;
+ case strtolower(get_class($key)) == 'file_x509':
+ if (isset($key->publicKey)) {
+ return $this->computeKeyIdentifier($key->publicKey, $method);
+ }
+ if (isset($key->privateKey)) {
+ return $this->computeKeyIdentifier($key->privateKey, $method);
+ }
+ if (isset($key->currentCert['tbsCertificate']) || isset($key->currentCert['certificationRequestInfo'])) {
+ return $this->computeKeyIdentifier($key->currentCert, $method);
+ }
+ return false;
+ default: // Should be a key object (i.e.: Crypt_RSA).
+ $key = $key->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW);
+ break;
+ }
+
+ // If in PEM format, convert to binary.
+ if (preg_match('#^-----BEGIN #', $key)) {
+ $key = base64_decode(preg_replace('#-.+-|[\r\n]#', '', $key));
+ }
+
+ // Now we have the key string: compute its sha-1 sum.
+ if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+ }
+ $hash = new Crypt_Hash('sha1');
+ $hash = $hash->hash($key);
+
+ if ($method == 2) {
+ $hash = substr($hash, -8);
+ $hash[0] = chr((ord($hash[0]) & 0x0F) | 0x40);
+ }
+
+ return $hash;
+ }
+
+ /**
+ * Format a public key as appropriate
+ *
+ * @access private
+ * @return Array
+ */
+ function _formatSubjectPublicKey()
+ {
+ if (!isset($this->publicKey) || !is_object($this->publicKey)) {
+ return false;
+ }
+
+ switch (strtolower(get_class($this->publicKey))) {
+ case 'crypt_rsa':
+ // the following two return statements do the same thing. i dunno.. i just prefer the later for some reason.
+ // the former is a good example of how to do fuzzing on the public key
+ //return new File_ASN1_Element(base64_decode(preg_replace('#-.+-|[\r\n]#', '', $this->publicKey->getPublicKey())));
+ return array(
+ 'algorithm' => array('algorithm' => 'rsaEncryption'),
+ 'subjectPublicKey' => $this->publicKey->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW)
+ );
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Set the domain name's which the cert is to be valid for
+ *
+ * @access public
+ * @return Array
+ */
+ function setDomain()
+ {
+ $this->domains = func_get_args();
+ $this->removeDNProp('id-at-commonName');
+ $this->setDNProp('id-at-commonName', $this->domains[0]);
+ }
+
+ /**
+ * Helper function to build domain array
+ *
+ * @access private
+ * @param String $domain
+ * @return Array
+ */
+ function _dnsName($domain)
+ {
+ return array('dNSName' => $domain);
+ }
+
+ /**
+ * Get the index of a revoked certificate.
+ *
+ * @param array $rclist
+ * @param String $serial
+ * @param Boolean $create optional
+ * @access private
+ * @return Integer or false
+ */
+ function _revokedCertificate(&$rclist, $serial, $create = false)
+ {
+ $serial = new Math_BigInteger($serial);
+
+ foreach ($rclist as $i => $rc) {
+ if (!($serial->compare($rc['userCertificate']))) {
+ return $i;
+ }
+ }
+
+ if (!$create) {
+ return false;
+ }
+
+ $i = count($rclist);
+ $rclist[] = array('userCertificate' => $serial,
+ 'revocationDate' => array('generalTime' => @date('D, d M y H:i:s O')));
+ return $i;
+ }
+
+ /**
+ * Revoke a certificate.
+ *
+ * @param String $serial
+ * @param String $date optional
+ * @access public
+ * @return Boolean
+ */
+ function revoke($serial, $date = NULL)
+ {
+ if (isset($this->currentCert['tbsCertList'])) {
+ if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {
+ if ($this->_revokedCertificate($rclist, $serial) === false) { // If not yet revoked
+ if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) {
+
+ if (!empty($date)) {
+ $rclist[$i]['revocationDate'] = array('generalTime' => $date);
+ }
+
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Unrevoke a certificate.
+ *
+ * @param String $serial
+ * @access public
+ * @return Boolean
+ */
+ function unrevoke($serial)
+ {
+ if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+ if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+ unset($rclist[$i]);
+ $rclist = array_values($rclist);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Get a revoked certificate.
+ *
+ * @param String $serial
+ * @access public
+ * @return Mixed
+ */
+ function getRevoked($serial)
+ {
+ if (is_array($rclist = $this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+ if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+ return $rclist[$i];
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * List revoked certificates
+ *
+ * @param array $crl optional
+ * @access public
+ * @return array
+ */
+ function listRevoked($crl = NULL)
+ {
+ if (!isset($crl)) {
+ $crl = $this->currentCert;
+ }
+
+ if (!isset($crl['tbsCertList'])) {
+ return false;
+ }
+
+ $result = array();
+
+ if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+ foreach ($rclist as $rc) {
+ $result[] = $rc['userCertificate']->toString();
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Remove a Revoked Certificate Extension
+ *
+ * @param String $serial
+ * @param String $id
+ * @access public
+ * @return Boolean
+ */
+ function removeRevokedCertificateExtension($serial, $id)
+ {
+ if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+ if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+ return $this->_removeExtension($id, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Get a Revoked Certificate Extension
+ *
+ * Returns the extension if it exists and false if not
+ *
+ * @param String $serial
+ * @param String $id
+ * @param Array $crl optional
+ * @access public
+ * @return Mixed
+ */
+ function getRevokedCertificateExtension($serial, $id, $crl = NULL)
+ {
+ if (!isset($crl)) {
+ $crl = $this->currentCert;
+ }
+
+ if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+ if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+ return $this->_getExtension($id, $crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns a list of all extensions in use for a given revoked certificate
+ *
+ * @param String $serial
+ * @param array $crl optional
+ * @access public
+ * @return Array
+ */
+ function getRevokedCertificateExtensions($serial, $crl = NULL)
+ {
+ if (!isset($crl)) {
+ $crl = $this->currentCert;
+ }
+
+ if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+ if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+ return $this->_getExtensions($crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Set a Revoked Certificate Extension
+ *
+ * @param String $serial
+ * @param String $id
+ * @param Mixed $value
+ * @param Boolean $critical optional
+ * @param Boolean $replace optional
+ * @access public
+ * @return Boolean
+ */
+ function setRevokedCertificateExtension($serial, $id, $value, $critical = false, $replace = true)
+ {
+ if (isset($this->currentCert['tbsCertList'])) {
+ if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {
+ if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) {
+ return $this->_setExtension($id, $value, $critical, $replace, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+ }
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php
new file mode 100644
index 00000000000..d048cb032c5
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php
@@ -0,0 +1,3633 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP arbitrary precision integer arithmetic library.
+ *
+ * Supports base-2, base-10, base-16, and base-256 numbers. Uses the GMP or BCMath extensions, if available,
+ * and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * {@internal (all DocBlock comments regarding implementation - such as the one that follows - refer to the
+ * {@link MATH_BIGINTEGER_MODE_INTERNAL MATH_BIGINTEGER_MODE_INTERNAL} mode)
+ *
+ * Math_BigInteger uses base-2**26 to perform operations such as multiplication and division and
+ * base-2**52 (ie. two base 2**26 digits) to perform addition and subtraction. Because the largest possible
+ * value when multiplying two base-2**26 numbers together is a base-2**52 number, double precision floating
+ * point numbers - numbers that should be supported on most hardware and whose significand is 53 bits - are
+ * used. As a consequence, bitwise operators such as >> and << cannot be used, nor can the modulo operator %,
+ * which only supports integers. Although this fact will slow this library down, the fact that such a high
+ * base is being used should more than compensate.
+ *
+ * When PHP version 6 is officially released, we'll be able to use 64-bit integers. This should, once again,
+ * allow bitwise operators, and will increase the maximum possible base to 2**31 (or 2**62 for addition /
+ * subtraction).
+ *
+ * Numbers are stored in {@link http://en.wikipedia.org/wiki/Endianness little endian} format. ie.
+ * (new Math_BigInteger(pow(2, 26)))->value = array(0, 1)
+ *
+ * Useful resources are as follows:
+ *
+ * - {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf Handbook of Applied Cryptography (HAC)}
+ * - {@link http://math.libtomcrypt.com/files/tommath.pdf Multi-Precision Math (MPM)}
+ * - Java's BigInteger classes. See /j2se/src/share/classes/java/math in jdk-1_5_0-src-jrl.zip
+ *
+ * Here's an example of how to use this library:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger(2);
+ * $b = new Math_BigInteger(3);
+ *
+ * $c = $a->add($b);
+ *
+ * echo $c->toString(); // outputs 5
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Math
+ * @package Math_BigInteger
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVI Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: BigInteger.php,v 1.33 2010/03/22 22:32:03 terrafrost Exp $
+ * @link http://pear.php.net/package/Math_BigInteger
+ */
+
+/**#@+
+ * Reduction constants
+ *
+ * @access private
+ * @see Math_BigInteger::_reduce()
+ */
+/**
+ * @see Math_BigInteger::_montgomery()
+ * @see Math_BigInteger::_prepMontgomery()
+ */
+define('MATH_BIGINTEGER_MONTGOMERY', 0);
+/**
+ * @see Math_BigInteger::_barrett()
+ */
+define('MATH_BIGINTEGER_BARRETT', 1);
+/**
+ * @see Math_BigInteger::_mod2()
+ */
+define('MATH_BIGINTEGER_POWEROF2', 2);
+/**
+ * @see Math_BigInteger::_remainder()
+ */
+define('MATH_BIGINTEGER_CLASSIC', 3);
+/**
+ * @see Math_BigInteger::__clone()
+ */
+define('MATH_BIGINTEGER_NONE', 4);
+/**#@-*/
+
+/**#@+
+ * Array constants
+ *
+ * Rather than create a thousands and thousands of new Math_BigInteger objects in repeated function calls to add() and
+ * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them.
+ *
+ * @access private
+ */
+/**
+ * $result[MATH_BIGINTEGER_VALUE] contains the value.
+ */
+define('MATH_BIGINTEGER_VALUE', 0);
+/**
+ * $result[MATH_BIGINTEGER_SIGN] contains the sign.
+ */
+define('MATH_BIGINTEGER_SIGN', 1);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Math_BigInteger::_montgomery()
+ * @see Math_BigInteger::_barrett()
+ */
+/**
+ * Cache constants
+ *
+ * $cache[MATH_BIGINTEGER_VARIABLE] tells us whether or not the cached data is still valid.
+ */
+define('MATH_BIGINTEGER_VARIABLE', 0);
+/**
+ * $cache[MATH_BIGINTEGER_DATA] contains the cached data.
+ */
+define('MATH_BIGINTEGER_DATA', 1);
+/**#@-*/
+
+/**#@+
+ * Mode constants.
+ *
+ * @access private
+ * @see Math_BigInteger::Math_BigInteger()
+ */
+/**
+ * To use the pure-PHP implementation
+ */
+define('MATH_BIGINTEGER_MODE_INTERNAL', 1);
+/**
+ * To use the BCMath library
+ *
+ * (if enabled; otherwise, the internal implementation will be used)
+ */
+define('MATH_BIGINTEGER_MODE_BCMATH', 2);
+/**
+ * To use the GMP library
+ *
+ * (if present; otherwise, either the BCMath or the internal implementation will be used)
+ */
+define('MATH_BIGINTEGER_MODE_GMP', 3);
+/**#@-*/
+
+/**
+ * The largest digit that may be used in addition / subtraction
+ *
+ * (we do pow(2, 52) instead of using 4503599627370496, directly, because some PHP installations
+ * will truncate 4503599627370496)
+ *
+ * @access private
+ */
+define('MATH_BIGINTEGER_MAX_DIGIT52', pow(2, 52));
+
+/**
+ * Karatsuba Cutoff
+ *
+ * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication?
+ *
+ * @access private
+ */
+define('MATH_BIGINTEGER_KARATSUBA_CUTOFF', 25);
+
+/**
+ * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256
+ * numbers.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 1.0.0RC4
+ * @access public
+ * @package Math_BigInteger
+ */
+class Math_BigInteger {
+ /**
+ * Holds the BigInteger's value.
+ *
+ * @var Array
+ * @access private
+ */
+ var $value;
+
+ /**
+ * Holds the BigInteger's magnitude.
+ *
+ * @var Boolean
+ * @access private
+ */
+ var $is_negative = false;
+
+ /**
+ * Random number generator function
+ *
+ * @see setRandomGenerator()
+ * @access private
+ */
+ var $generator = 'mt_rand';
+
+ /**
+ * Precision
+ *
+ * @see setPrecision()
+ * @access private
+ */
+ var $precision = -1;
+
+ /**
+ * Precision Bitmask
+ *
+ * @see setPrecision()
+ * @access private
+ */
+ var $bitmask = false;
+
+ /**
+ * Mode independant value used for serialization.
+ *
+ * If the bcmath or gmp extensions are installed $this->value will be a non-serializable resource, hence the need for
+ * a variable that'll be serializable regardless of whether or not extensions are being used. Unlike $this->value,
+ * however, $this->hex is only calculated when $this->__sleep() is called.
+ *
+ * @see __sleep()
+ * @see __wakeup()
+ * @var String
+ * @access private
+ */
+ var $hex;
+
+ /**
+ * Converts base-2, base-10, base-16, and binary strings (eg. base-256) to BigIntegers.
+ *
+ * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using
+ * two's compliment. The sole exception to this is -10, which is treated the same as 10 is.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('0x32', 16); // 50 in base-16
+ *
+ * echo $a->toString(); // outputs 50
+ * ?>
+ * </code>
+ *
+ * @param optional $x base-10 number or base-$base number if $base set.
+ * @param optional integer $base
+ * @return Math_BigInteger
+ * @access public
+ */
+ function Math_BigInteger($x = 0, $base = 10)
+ {
+ if ( !defined('MATH_BIGINTEGER_MODE') ) {
+ switch (true) {
+ case extension_loaded('gmp'):
+ define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_GMP);
+ break;
+ case extension_loaded('bcmath'):
+ define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_BCMATH);
+ break;
+ default:
+ define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_INTERNAL);
+ }
+ }
+
+ if (function_exists('openssl_public_encrypt') && !defined('MATH_BIGINTEGER_OPENSSL_DISABLE') && !defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) {
+ define('MATH_BIGINTEGER_OPENSSL_ENABLED', true);
+ }
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ if (is_resource($x) && get_resource_type($x) == 'GMP integer') {
+ $this->value = $x;
+ return;
+ }
+ $this->value = gmp_init(0);
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $this->value = '0';
+ break;
+ default:
+ $this->value = array();
+ }
+
+ // '0' counts as empty() but when the base is 256 '0' is equal to ord('0') or 48
+ // '0' is the only value like this per http://php.net/empty
+ if (empty($x) && (abs($base) != 256 || $x !== '0')) {
+ return;
+ }
+
+ switch ($base) {
+ case -256:
+ if (ord($x[0]) & 0x80) {
+ $x = ~$x;
+ $this->is_negative = true;
+ }
+ case 256:
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $sign = $this->is_negative ? '-' : '';
+ $this->value = gmp_init($sign . '0x' . bin2hex($x));
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ // round $len to the nearest 4 (thanks, DavidMJ!)
+ $len = (strlen($x) + 3) & 0xFFFFFFFC;
+
+ $x = str_pad($x, $len, chr(0), STR_PAD_LEFT);
+
+ for ($i = 0; $i < $len; $i+= 4) {
+ $this->value = bcmul($this->value, '4294967296', 0); // 4294967296 == 2**32
+ $this->value = bcadd($this->value, 0x1000000 * ord($x[$i]) + ((ord($x[$i + 1]) << 16) | (ord($x[$i + 2]) << 8) | ord($x[$i + 3])), 0);
+ }
+
+ if ($this->is_negative) {
+ $this->value = '-' . $this->value;
+ }
+
+ break;
+ // converts a base-2**8 (big endian / msb) number to base-2**26 (little endian / lsb)
+ default:
+ while (strlen($x)) {
+ $this->value[] = $this->_bytes2int($this->_base256_rshift($x, 26));
+ }
+ }
+
+ if ($this->is_negative) {
+ if (MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL) {
+ $this->is_negative = false;
+ }
+ $temp = $this->add(new Math_BigInteger('-1'));
+ $this->value = $temp->value;
+ }
+ break;
+ case 16:
+ case -16:
+ if ($base > 0 && $x[0] == '-') {
+ $this->is_negative = true;
+ $x = substr($x, 1);
+ }
+
+ $x = preg_replace('#^(?:0x)?([A-Fa-f0-9]*).*#', '$1', $x);
+
+ $is_negative = false;
+ if ($base < 0 && hexdec($x[0]) >= 8) {
+ $this->is_negative = $is_negative = true;
+ $x = bin2hex(~pack('H*', $x));
+ }
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = $this->is_negative ? '-0x' . $x : '0x' . $x;
+ $this->value = gmp_init($temp);
+ $this->is_negative = false;
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $x = ( strlen($x) & 1 ) ? '0' . $x : $x;
+ $temp = new Math_BigInteger(pack('H*', $x), 256);
+ $this->value = $this->is_negative ? '-' . $temp->value : $temp->value;
+ $this->is_negative = false;
+ break;
+ default:
+ $x = ( strlen($x) & 1 ) ? '0' . $x : $x;
+ $temp = new Math_BigInteger(pack('H*', $x), 256);
+ $this->value = $temp->value;
+ }
+
+ if ($is_negative) {
+ $temp = $this->add(new Math_BigInteger('-1'));
+ $this->value = $temp->value;
+ }
+ break;
+ case 10:
+ case -10:
+ $x = preg_replace('#^(-?[0-9]*).*#', '$1', $x);
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $this->value = gmp_init($x);
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different
+ // results then doing it on '-1' does (modInverse does $x[0])
+ $this->value = (string) $x;
+ break;
+ default:
+ $temp = new Math_BigInteger();
+
+ // array(10000000) is 10**7 in base-2**26. 10**7 is the closest to 2**26 we can get without passing it.
+ $multiplier = new Math_BigInteger();
+ $multiplier->value = array(10000000);
+
+ if ($x[0] == '-') {
+ $this->is_negative = true;
+ $x = substr($x, 1);
+ }
+
+ $x = str_pad($x, strlen($x) + (6 * strlen($x)) % 7, 0, STR_PAD_LEFT);
+
+ while (strlen($x)) {
+ $temp = $temp->multiply($multiplier);
+ $temp = $temp->add(new Math_BigInteger($this->_int2bytes(substr($x, 0, 7)), 256));
+ $x = substr($x, 7);
+ }
+
+ $this->value = $temp->value;
+ }
+ break;
+ case 2: // base-2 support originally implemented by Lluis Pamies - thanks!
+ case -2:
+ if ($base > 0 && $x[0] == '-') {
+ $this->is_negative = true;
+ $x = substr($x, 1);
+ }
+
+ $x = preg_replace('#^([01]*).*#', '$1', $x);
+ $x = str_pad($x, strlen($x) + (3 * strlen($x)) % 4, 0, STR_PAD_LEFT);
+
+ $str = '0x';
+ while (strlen($x)) {
+ $part = substr($x, 0, 4);
+ $str.= dechex(bindec($part));
+ $x = substr($x, 4);
+ }
+
+ if ($this->is_negative) {
+ $str = '-' . $str;
+ }
+
+ $temp = new Math_BigInteger($str, 8 * $base); // ie. either -16 or +16
+ $this->value = $temp->value;
+ $this->is_negative = $temp->is_negative;
+
+ break;
+ default:
+ // base not supported, so we'll let $this == 0
+ }
+ }
+
+ /**
+ * Converts a BigInteger to a byte string (eg. base-256).
+ *
+ * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+ * saved as two's compliment.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('65');
+ *
+ * echo $a->toBytes(); // outputs chr(65)
+ * ?>
+ * </code>
+ *
+ * @param Boolean $twos_compliment
+ * @return String
+ * @access public
+ * @internal Converts a base-2**26 number to base-2**8
+ */
+ function toBytes($twos_compliment = false)
+ {
+ if ($twos_compliment) {
+ $comparison = $this->compare(new Math_BigInteger());
+ if ($comparison == 0) {
+ return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+ }
+
+ $temp = $comparison < 0 ? $this->add(new Math_BigInteger(1)) : $this->copy();
+ $bytes = $temp->toBytes();
+
+ if (empty($bytes)) { // eg. if the number we're trying to convert is -1
+ $bytes = chr(0);
+ }
+
+ if (ord($bytes[0]) & 0x80) {
+ $bytes = chr(0) . $bytes;
+ }
+
+ return $comparison < 0 ? ~$bytes : $bytes;
+ }
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ if (gmp_cmp($this->value, gmp_init(0)) == 0) {
+ return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+ }
+
+ $temp = gmp_strval(gmp_abs($this->value), 16);
+ $temp = ( strlen($temp) & 1 ) ? '0' . $temp : $temp;
+ $temp = pack('H*', $temp);
+
+ return $this->precision > 0 ?
+ substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
+ ltrim($temp, chr(0));
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if ($this->value === '0') {
+ return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+ }
+
+ $value = '';
+ $current = $this->value;
+
+ if ($current[0] == '-') {
+ $current = substr($current, 1);
+ }
+
+ while (bccomp($current, '0', 0) > 0) {
+ $temp = bcmod($current, '16777216');
+ $value = chr($temp >> 16) . chr($temp >> 8) . chr($temp) . $value;
+ $current = bcdiv($current, '16777216', 0);
+ }
+
+ return $this->precision > 0 ?
+ substr(str_pad($value, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
+ ltrim($value, chr(0));
+ }
+
+ if (!count($this->value)) {
+ return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+ }
+ $result = $this->_int2bytes($this->value[count($this->value) - 1]);
+
+ $temp = $this->copy();
+
+ for ($i = count($temp->value) - 2; $i >= 0; --$i) {
+ $temp->_base256_lshift($result, 26);
+ $result = $result | str_pad($temp->_int2bytes($temp->value[$i]), strlen($result), chr(0), STR_PAD_LEFT);
+ }
+
+ return $this->precision > 0 ?
+ str_pad(substr($result, -(($this->precision + 7) >> 3)), ($this->precision + 7) >> 3, chr(0), STR_PAD_LEFT) :
+ $result;
+ }
+
+ /**
+ * Converts a BigInteger to a hex string (eg. base-16)).
+ *
+ * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+ * saved as two's compliment.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('65');
+ *
+ * echo $a->toHex(); // outputs '41'
+ * ?>
+ * </code>
+ *
+ * @param Boolean $twos_compliment
+ * @return String
+ * @access public
+ * @internal Converts a base-2**26 number to base-2**8
+ */
+ function toHex($twos_compliment = false)
+ {
+ return bin2hex($this->toBytes($twos_compliment));
+ }
+
+ /**
+ * Converts a BigInteger to a bit string (eg. base-2).
+ *
+ * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+ * saved as two's compliment.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('65');
+ *
+ * echo $a->toBits(); // outputs '1000001'
+ * ?>
+ * </code>
+ *
+ * @param Boolean $twos_compliment
+ * @return String
+ * @access public
+ * @internal Converts a base-2**26 number to base-2**2
+ */
+ function toBits($twos_compliment = false)
+ {
+ $hex = $this->toHex($twos_compliment);
+ $bits = '';
+ for ($i = strlen($hex) - 8, $start = strlen($hex) & 7; $i >= $start; $i-=8) {
+ $bits = str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT) . $bits;
+ }
+ if ($start) { // hexdec('') == 0
+ $bits = str_pad(decbin(hexdec(substr($hex, 0, $start))), 8, '0', STR_PAD_LEFT) . $bits;
+ }
+ $result = $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0');
+
+ if ($twos_compliment && $this->compare(new Math_BigInteger()) > 0 && $this->precision <= 0) {
+ return '0' . $result;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Converts a BigInteger to a base-10 number.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('50');
+ *
+ * echo $a->toString(); // outputs 50
+ * ?>
+ * </code>
+ *
+ * @return String
+ * @access public
+ * @internal Converts a base-2**26 number to base-10**7 (which is pretty much base-10)
+ */
+ function toString()
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ return gmp_strval($this->value);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if ($this->value === '0') {
+ return '0';
+ }
+
+ return ltrim($this->value, '0');
+ }
+
+ if (!count($this->value)) {
+ return '0';
+ }
+
+ $temp = $this->copy();
+ $temp->is_negative = false;
+
+ $divisor = new Math_BigInteger();
+ $divisor->value = array(10000000); // eg. 10**7
+ $result = '';
+ while (count($temp->value)) {
+ list($temp, $mod) = $temp->divide($divisor);
+ $result = str_pad(isset($mod->value[0]) ? $mod->value[0] : '', 7, '0', STR_PAD_LEFT) . $result;
+ }
+ $result = ltrim($result, '0');
+ if (empty($result)) {
+ $result = '0';
+ }
+
+ if ($this->is_negative) {
+ $result = '-' . $result;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Copy an object
+ *
+ * PHP5 passes objects by reference while PHP4 passes by value. As such, we need a function to guarantee
+ * that all objects are passed by value, when appropriate. More information can be found here:
+ *
+ * {@link http://php.net/language.oop5.basic#51624}
+ *
+ * @access public
+ * @see __clone()
+ * @return Math_BigInteger
+ */
+ function copy()
+ {
+ $temp = new Math_BigInteger();
+ $temp->value = $this->value;
+ $temp->is_negative = $this->is_negative;
+ $temp->generator = $this->generator;
+ $temp->precision = $this->precision;
+ $temp->bitmask = $this->bitmask;
+ return $temp;
+ }
+
+ /**
+ * __toString() magic method
+ *
+ * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call
+ * toString().
+ *
+ * @access public
+ * @internal Implemented per a suggestion by Techie-Michael - thanks!
+ */
+ function __toString()
+ {
+ return $this->toString();
+ }
+
+ /**
+ * __clone() magic method
+ *
+ * Although you can call Math_BigInteger::__toString() directly in PHP5, you cannot call Math_BigInteger::__clone()
+ * directly in PHP5. You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5
+ * only syntax of $y = clone $x. As such, if you're trying to write an application that works on both PHP4 and PHP5,
+ * call Math_BigInteger::copy(), instead.
+ *
+ * @access public
+ * @see copy()
+ * @return Math_BigInteger
+ */
+ function __clone()
+ {
+ return $this->copy();
+ }
+
+ /**
+ * __sleep() magic method
+ *
+ * Will be called, automatically, when serialize() is called on a Math_BigInteger object.
+ *
+ * @see __wakeup()
+ * @access public
+ */
+ function __sleep()
+ {
+ $this->hex = $this->toHex(true);
+ $vars = array('hex');
+ if ($this->generator != 'mt_rand') {
+ $vars[] = 'generator';
+ }
+ if ($this->precision > 0) {
+ $vars[] = 'precision';
+ }
+ return $vars;
+
+ }
+
+ /**
+ * __wakeup() magic method
+ *
+ * Will be called, automatically, when unserialize() is called on a Math_BigInteger object.
+ *
+ * @see __sleep()
+ * @access public
+ */
+ function __wakeup()
+ {
+ $temp = new Math_BigInteger($this->hex, -16);
+ $this->value = $temp->value;
+ $this->is_negative = $temp->is_negative;
+ $this->setRandomGenerator($this->generator);
+ if ($this->precision > 0) {
+ // recalculate $this->bitmask
+ $this->setPrecision($this->precision);
+ }
+ }
+
+ /**
+ * Adds two BigIntegers.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ *
+ * $c = $a->add($b);
+ *
+ * echo $c->toString(); // outputs 30
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $y
+ * @return Math_BigInteger
+ * @access public
+ * @internal Performs base-2**52 addition
+ */
+ function add($y)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_add($this->value, $y->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp = new Math_BigInteger();
+ $temp->value = bcadd($this->value, $y->value, 0);
+
+ return $this->_normalize($temp);
+ }
+
+ $temp = $this->_add($this->value, $this->is_negative, $y->value, $y->is_negative);
+
+ $result = new Math_BigInteger();
+ $result->value = $temp[MATH_BIGINTEGER_VALUE];
+ $result->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Performs addition.
+ *
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Array
+ * @access private
+ */
+ function _add($x_value, $x_negative, $y_value, $y_negative)
+ {
+ $x_size = count($x_value);
+ $y_size = count($y_value);
+
+ if ($x_size == 0) {
+ return array(
+ MATH_BIGINTEGER_VALUE => $y_value,
+ MATH_BIGINTEGER_SIGN => $y_negative
+ );
+ } else if ($y_size == 0) {
+ return array(
+ MATH_BIGINTEGER_VALUE => $x_value,
+ MATH_BIGINTEGER_SIGN => $x_negative
+ );
+ }
+
+ // subtract, if appropriate
+ if ( $x_negative != $y_negative ) {
+ if ( $x_value == $y_value ) {
+ return array(
+ MATH_BIGINTEGER_VALUE => array(),
+ MATH_BIGINTEGER_SIGN => false
+ );
+ }
+
+ $temp = $this->_subtract($x_value, false, $y_value, false);
+ $temp[MATH_BIGINTEGER_SIGN] = $this->_compare($x_value, false, $y_value, false) > 0 ?
+ $x_negative : $y_negative;
+
+ return $temp;
+ }
+
+ if ($x_size < $y_size) {
+ $size = $x_size;
+ $value = $y_value;
+ } else {
+ $size = $y_size;
+ $value = $x_value;
+ }
+
+ $value[] = 0; // just in case the carry adds an extra digit
+
+ $carry = 0;
+ for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) {
+ $sum = $x_value[$j] * 0x4000000 + $x_value[$i] + $y_value[$j] * 0x4000000 + $y_value[$i] + $carry;
+ $carry = $sum >= MATH_BIGINTEGER_MAX_DIGIT52; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
+ $sum = $carry ? $sum - MATH_BIGINTEGER_MAX_DIGIT52 : $sum;
+
+ $temp = (int) ($sum / 0x4000000);
+
+ $value[$i] = (int) ($sum - 0x4000000 * $temp); // eg. a faster alternative to fmod($sum, 0x4000000)
+ $value[$j] = $temp;
+ }
+
+ if ($j == $size) { // ie. if $y_size is odd
+ $sum = $x_value[$i] + $y_value[$i] + $carry;
+ $carry = $sum >= 0x4000000;
+ $value[$i] = $carry ? $sum - 0x4000000 : $sum;
+ ++$i; // ie. let $i = $j since we've just done $value[$i]
+ }
+
+ if ($carry) {
+ for (; $value[$i] == 0x3FFFFFF; ++$i) {
+ $value[$i] = 0;
+ }
+ ++$value[$i];
+ }
+
+ return array(
+ MATH_BIGINTEGER_VALUE => $this->_trim($value),
+ MATH_BIGINTEGER_SIGN => $x_negative
+ );
+ }
+
+ /**
+ * Subtracts two BigIntegers.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ *
+ * $c = $a->subtract($b);
+ *
+ * echo $c->toString(); // outputs -10
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $y
+ * @return Math_BigInteger
+ * @access public
+ * @internal Performs base-2**52 subtraction
+ */
+ function subtract($y)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_sub($this->value, $y->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp = new Math_BigInteger();
+ $temp->value = bcsub($this->value, $y->value, 0);
+
+ return $this->_normalize($temp);
+ }
+
+ $temp = $this->_subtract($this->value, $this->is_negative, $y->value, $y->is_negative);
+
+ $result = new Math_BigInteger();
+ $result->value = $temp[MATH_BIGINTEGER_VALUE];
+ $result->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Performs subtraction.
+ *
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Array
+ * @access private
+ */
+ function _subtract($x_value, $x_negative, $y_value, $y_negative)
+ {
+ $x_size = count($x_value);
+ $y_size = count($y_value);
+
+ if ($x_size == 0) {
+ return array(
+ MATH_BIGINTEGER_VALUE => $y_value,
+ MATH_BIGINTEGER_SIGN => !$y_negative
+ );
+ } else if ($y_size == 0) {
+ return array(
+ MATH_BIGINTEGER_VALUE => $x_value,
+ MATH_BIGINTEGER_SIGN => $x_negative
+ );
+ }
+
+ // add, if appropriate (ie. -$x - +$y or +$x - -$y)
+ if ( $x_negative != $y_negative ) {
+ $temp = $this->_add($x_value, false, $y_value, false);
+ $temp[MATH_BIGINTEGER_SIGN] = $x_negative;
+
+ return $temp;
+ }
+
+ $diff = $this->_compare($x_value, $x_negative, $y_value, $y_negative);
+
+ if ( !$diff ) {
+ return array(
+ MATH_BIGINTEGER_VALUE => array(),
+ MATH_BIGINTEGER_SIGN => false
+ );
+ }
+
+ // switch $x and $y around, if appropriate.
+ if ( (!$x_negative && $diff < 0) || ($x_negative && $diff > 0) ) {
+ $temp = $x_value;
+ $x_value = $y_value;
+ $y_value = $temp;
+
+ $x_negative = !$x_negative;
+
+ $x_size = count($x_value);
+ $y_size = count($y_value);
+ }
+
+ // at this point, $x_value should be at least as big as - if not bigger than - $y_value
+
+ $carry = 0;
+ for ($i = 0, $j = 1; $j < $y_size; $i+=2, $j+=2) {
+ $sum = $x_value[$j] * 0x4000000 + $x_value[$i] - $y_value[$j] * 0x4000000 - $y_value[$i] - $carry;
+ $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
+ $sum = $carry ? $sum + MATH_BIGINTEGER_MAX_DIGIT52 : $sum;
+
+ $temp = (int) ($sum / 0x4000000);
+
+ $x_value[$i] = (int) ($sum - 0x4000000 * $temp);
+ $x_value[$j] = $temp;
+ }
+
+ if ($j == $y_size) { // ie. if $y_size is odd
+ $sum = $x_value[$i] - $y_value[$i] - $carry;
+ $carry = $sum < 0;
+ $x_value[$i] = $carry ? $sum + 0x4000000 : $sum;
+ ++$i;
+ }
+
+ if ($carry) {
+ for (; !$x_value[$i]; ++$i) {
+ $x_value[$i] = 0x3FFFFFF;
+ }
+ --$x_value[$i];
+ }
+
+ return array(
+ MATH_BIGINTEGER_VALUE => $this->_trim($x_value),
+ MATH_BIGINTEGER_SIGN => $x_negative
+ );
+ }
+
+ /**
+ * Multiplies two BigIntegers
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ *
+ * $c = $a->multiply($b);
+ *
+ * echo $c->toString(); // outputs 200
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $x
+ * @return Math_BigInteger
+ * @access public
+ */
+ function multiply($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_mul($this->value, $x->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp = new Math_BigInteger();
+ $temp->value = bcmul($this->value, $x->value, 0);
+
+ return $this->_normalize($temp);
+ }
+
+ $temp = $this->_multiply($this->value, $this->is_negative, $x->value, $x->is_negative);
+
+ $product = new Math_BigInteger();
+ $product->value = $temp[MATH_BIGINTEGER_VALUE];
+ $product->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+ return $this->_normalize($product);
+ }
+
+ /**
+ * Performs multiplication.
+ *
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Array
+ * @access private
+ */
+ function _multiply($x_value, $x_negative, $y_value, $y_negative)
+ {
+ //if ( $x_value == $y_value ) {
+ // return array(
+ // MATH_BIGINTEGER_VALUE => $this->_square($x_value),
+ // MATH_BIGINTEGER_SIGN => $x_sign != $y_value
+ // );
+ //}
+
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+
+ if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+ return array(
+ MATH_BIGINTEGER_VALUE => array(),
+ MATH_BIGINTEGER_SIGN => false
+ );
+ }
+
+ return array(
+ MATH_BIGINTEGER_VALUE => min($x_length, $y_length) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ?
+ $this->_trim($this->_regularMultiply($x_value, $y_value)) :
+ $this->_trim($this->_karatsuba($x_value, $y_value)),
+ MATH_BIGINTEGER_SIGN => $x_negative != $y_negative
+ );
+ }
+
+ /**
+ * Performs long multiplication on two BigIntegers
+ *
+ * Modeled after 'multiply' in MutableBigInteger.java.
+ *
+ * @param Array $x_value
+ * @param Array $y_value
+ * @return Array
+ * @access private
+ */
+ function _regularMultiply($x_value, $y_value)
+ {
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+
+ if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+ return array();
+ }
+
+ if ( $x_length < $y_length ) {
+ $temp = $x_value;
+ $x_value = $y_value;
+ $y_value = $temp;
+
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+ }
+
+ $product_value = $this->_array_repeat(0, $x_length + $y_length);
+
+ // the following for loop could be removed if the for loop following it
+ // (the one with nested for loops) initially set $i to 0, but
+ // doing so would also make the result in one set of unnecessary adds,
+ // since on the outermost loops first pass, $product->value[$k] is going
+ // to always be 0
+
+ $carry = 0;
+
+ for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0
+ $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
+ $carry = (int) ($temp / 0x4000000);
+ $product_value[$j] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ $product_value[$j] = $carry;
+
+ // the above for loop is what the previous comment was talking about. the
+ // following for loop is the "one with nested for loops"
+ for ($i = 1; $i < $y_length; ++$i) {
+ $carry = 0;
+
+ for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) {
+ $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
+ $carry = (int) ($temp / 0x4000000);
+ $product_value[$k] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ $product_value[$k] = $carry;
+ }
+
+ return $product_value;
+ }
+
+ /**
+ * Performs Karatsuba multiplication on two BigIntegers
+ *
+ * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}.
+ *
+ * @param Array $x_value
+ * @param Array $y_value
+ * @return Array
+ * @access private
+ */
+ function _karatsuba($x_value, $y_value)
+ {
+ $m = min(count($x_value) >> 1, count($y_value) >> 1);
+
+ if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
+ return $this->_regularMultiply($x_value, $y_value);
+ }
+
+ $x1 = array_slice($x_value, $m);
+ $x0 = array_slice($x_value, 0, $m);
+ $y1 = array_slice($y_value, $m);
+ $y0 = array_slice($y_value, 0, $m);
+
+ $z2 = $this->_karatsuba($x1, $y1);
+ $z0 = $this->_karatsuba($x0, $y0);
+
+ $z1 = $this->_add($x1, false, $x0, false);
+ $temp = $this->_add($y1, false, $y0, false);
+ $z1 = $this->_karatsuba($z1[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_VALUE]);
+ $temp = $this->_add($z2, false, $z0, false);
+ $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+ $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
+ $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]);
+
+ $xy = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]);
+ $xy = $this->_add($xy[MATH_BIGINTEGER_VALUE], $xy[MATH_BIGINTEGER_SIGN], $z0, false);
+
+ return $xy[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Performs squaring
+ *
+ * @param Array $x
+ * @return Array
+ * @access private
+ */
+ function _square($x = false)
+ {
+ return count($x) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ?
+ $this->_trim($this->_baseSquare($x)) :
+ $this->_trim($this->_karatsubaSquare($x));
+ }
+
+ /**
+ * Performs traditional squaring on two BigIntegers
+ *
+ * Squaring can be done faster than multiplying a number by itself can be. See
+ * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} /
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information.
+ *
+ * @param Array $value
+ * @return Array
+ * @access private
+ */
+ function _baseSquare($value)
+ {
+ if ( empty($value) ) {
+ return array();
+ }
+ $square_value = $this->_array_repeat(0, 2 * count($value));
+
+ for ($i = 0, $max_index = count($value) - 1; $i <= $max_index; ++$i) {
+ $i2 = $i << 1;
+
+ $temp = $square_value[$i2] + $value[$i] * $value[$i];
+ $carry = (int) ($temp / 0x4000000);
+ $square_value[$i2] = (int) ($temp - 0x4000000 * $carry);
+
+ // note how we start from $i+1 instead of 0 as we do in multiplication.
+ for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) {
+ $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry;
+ $carry = (int) ($temp / 0x4000000);
+ $square_value[$k] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ // the following line can yield values larger 2**15. at this point, PHP should switch
+ // over to floats.
+ $square_value[$i + $max_index + 1] = $carry;
+ }
+
+ return $square_value;
+ }
+
+ /**
+ * Performs Karatsuba "squaring" on two BigIntegers
+ *
+ * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}.
+ *
+ * @param Array $value
+ * @return Array
+ * @access private
+ */
+ function _karatsubaSquare($value)
+ {
+ $m = count($value) >> 1;
+
+ if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
+ return $this->_baseSquare($value);
+ }
+
+ $x1 = array_slice($value, $m);
+ $x0 = array_slice($value, 0, $m);
+
+ $z2 = $this->_karatsubaSquare($x1);
+ $z0 = $this->_karatsubaSquare($x0);
+
+ $z1 = $this->_add($x1, false, $x0, false);
+ $z1 = $this->_karatsubaSquare($z1[MATH_BIGINTEGER_VALUE]);
+ $temp = $this->_add($z2, false, $z0, false);
+ $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+ $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
+ $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]);
+
+ $xx = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]);
+ $xx = $this->_add($xx[MATH_BIGINTEGER_VALUE], $xx[MATH_BIGINTEGER_SIGN], $z0, false);
+
+ return $xx[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Divides two BigIntegers.
+ *
+ * Returns an array whose first element contains the quotient and whose second element contains the
+ * "common residue". If the remainder would be positive, the "common residue" and the remainder are the
+ * same. If the remainder would be negative, the "common residue" is equal to the sum of the remainder
+ * and the divisor (basically, the "common residue" is the first positive modulo).
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ *
+ * list($quotient, $remainder) = $a->divide($b);
+ *
+ * echo $quotient->toString(); // outputs 0
+ * echo "\r\n";
+ * echo $remainder->toString(); // outputs 10
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $y
+ * @return Array
+ * @access public
+ * @internal This function is based off of {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}.
+ */
+ function divide($y)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $quotient = new Math_BigInteger();
+ $remainder = new Math_BigInteger();
+
+ list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value);
+
+ if (gmp_sign($remainder->value) < 0) {
+ $remainder->value = gmp_add($remainder->value, gmp_abs($y->value));
+ }
+
+ return array($this->_normalize($quotient), $this->_normalize($remainder));
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $quotient = new Math_BigInteger();
+ $remainder = new Math_BigInteger();
+
+ $quotient->value = bcdiv($this->value, $y->value, 0);
+ $remainder->value = bcmod($this->value, $y->value);
+
+ if ($remainder->value[0] == '-') {
+ $remainder->value = bcadd($remainder->value, $y->value[0] == '-' ? substr($y->value, 1) : $y->value, 0);
+ }
+
+ return array($this->_normalize($quotient), $this->_normalize($remainder));
+ }
+
+ if (count($y->value) == 1) {
+ list($q, $r) = $this->_divide_digit($this->value, $y->value[0]);
+ $quotient = new Math_BigInteger();
+ $remainder = new Math_BigInteger();
+ $quotient->value = $q;
+ $remainder->value = array($r);
+ $quotient->is_negative = $this->is_negative != $y->is_negative;
+ return array($this->_normalize($quotient), $this->_normalize($remainder));
+ }
+
+ static $zero;
+ if ( !isset($zero) ) {
+ $zero = new Math_BigInteger();
+ }
+
+ $x = $this->copy();
+ $y = $y->copy();
+
+ $x_sign = $x->is_negative;
+ $y_sign = $y->is_negative;
+
+ $x->is_negative = $y->is_negative = false;
+
+ $diff = $x->compare($y);
+
+ if ( !$diff ) {
+ $temp = new Math_BigInteger();
+ $temp->value = array(1);
+ $temp->is_negative = $x_sign != $y_sign;
+ return array($this->_normalize($temp), $this->_normalize(new Math_BigInteger()));
+ }
+
+ if ( $diff < 0 ) {
+ // if $x is negative, "add" $y.
+ if ( $x_sign ) {
+ $x = $y->subtract($x);
+ }
+ return array($this->_normalize(new Math_BigInteger()), $this->_normalize($x));
+ }
+
+ // normalize $x and $y as described in HAC 14.23 / 14.24
+ $msb = $y->value[count($y->value) - 1];
+ for ($shift = 0; !($msb & 0x2000000); ++$shift) {
+ $msb <<= 1;
+ }
+ $x->_lshift($shift);
+ $y->_lshift($shift);
+ $y_value = &$y->value;
+
+ $x_max = count($x->value) - 1;
+ $y_max = count($y->value) - 1;
+
+ $quotient = new Math_BigInteger();
+ $quotient_value = &$quotient->value;
+ $quotient_value = $this->_array_repeat(0, $x_max - $y_max + 1);
+
+ static $temp, $lhs, $rhs;
+ if (!isset($temp)) {
+ $temp = new Math_BigInteger();
+ $lhs = new Math_BigInteger();
+ $rhs = new Math_BigInteger();
+ }
+ $temp_value = &$temp->value;
+ $rhs_value = &$rhs->value;
+
+ // $temp = $y << ($x_max - $y_max-1) in base 2**26
+ $temp_value = array_merge($this->_array_repeat(0, $x_max - $y_max), $y_value);
+
+ while ( $x->compare($temp) >= 0 ) {
+ // calculate the "common residue"
+ ++$quotient_value[$x_max - $y_max];
+ $x = $x->subtract($temp);
+ $x_max = count($x->value) - 1;
+ }
+
+ for ($i = $x_max; $i >= $y_max + 1; --$i) {
+ $x_value = &$x->value;
+ $x_window = array(
+ isset($x_value[$i]) ? $x_value[$i] : 0,
+ isset($x_value[$i - 1]) ? $x_value[$i - 1] : 0,
+ isset($x_value[$i - 2]) ? $x_value[$i - 2] : 0
+ );
+ $y_window = array(
+ $y_value[$y_max],
+ ( $y_max > 0 ) ? $y_value[$y_max - 1] : 0
+ );
+
+ $q_index = $i - $y_max - 1;
+ if ($x_window[0] == $y_window[0]) {
+ $quotient_value[$q_index] = 0x3FFFFFF;
+ } else {
+ $quotient_value[$q_index] = (int) (
+ ($x_window[0] * 0x4000000 + $x_window[1])
+ /
+ $y_window[0]
+ );
+ }
+
+ $temp_value = array($y_window[1], $y_window[0]);
+
+ $lhs->value = array($quotient_value[$q_index]);
+ $lhs = $lhs->multiply($temp);
+
+ $rhs_value = array($x_window[2], $x_window[1], $x_window[0]);
+
+ while ( $lhs->compare($rhs) > 0 ) {
+ --$quotient_value[$q_index];
+
+ $lhs->value = array($quotient_value[$q_index]);
+ $lhs = $lhs->multiply($temp);
+ }
+
+ $adjust = $this->_array_repeat(0, $q_index);
+ $temp_value = array($quotient_value[$q_index]);
+ $temp = $temp->multiply($y);
+ $temp_value = &$temp->value;
+ $temp_value = array_merge($adjust, $temp_value);
+
+ $x = $x->subtract($temp);
+
+ if ($x->compare($zero) < 0) {
+ $temp_value = array_merge($adjust, $y_value);
+ $x = $x->add($temp);
+
+ --$quotient_value[$q_index];
+ }
+
+ $x_max = count($x_value) - 1;
+ }
+
+ // unnormalize the remainder
+ $x->_rshift($shift);
+
+ $quotient->is_negative = $x_sign != $y_sign;
+
+ // calculate the "common residue", if appropriate
+ if ( $x_sign ) {
+ $y->_rshift($shift);
+ $x = $y->subtract($x);
+ }
+
+ return array($this->_normalize($quotient), $this->_normalize($x));
+ }
+
+ /**
+ * Divides a BigInteger by a regular integer
+ *
+ * abc / x = a00 / x + b0 / x + c / x
+ *
+ * @param Array $dividend
+ * @param Array $divisor
+ * @return Array
+ * @access private
+ */
+ function _divide_digit($dividend, $divisor)
+ {
+ $carry = 0;
+ $result = array();
+
+ for ($i = count($dividend) - 1; $i >= 0; --$i) {
+ $temp = 0x4000000 * $carry + $dividend[$i];
+ $result[$i] = (int) ($temp / $divisor);
+ $carry = (int) ($temp - $divisor * $result[$i]);
+ }
+
+ return array($result, $carry);
+ }
+
+ /**
+ * Performs modular exponentiation.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ * $c = new Math_BigInteger('30');
+ *
+ * $c = $a->modPow($b, $c);
+ *
+ * echo $c->toString(); // outputs 10
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $e
+ * @param Math_BigInteger $n
+ * @return Math_BigInteger
+ * @access public
+ * @internal The most naive approach to modular exponentiation has very unreasonable requirements, and
+ * and although the approach involving repeated squaring does vastly better, it, too, is impractical
+ * for our purposes. The reason being that division - by far the most complicated and time-consuming
+ * of the basic operations (eg. +,-,*,/) - occurs multiple times within it.
+ *
+ * Modular reductions resolve this issue. Although an individual modular reduction takes more time
+ * then an individual division, when performed in succession (with the same modulo), they're a lot faster.
+ *
+ * The two most commonly used modular reductions are Barrett and Montgomery reduction. Montgomery reduction,
+ * although faster, only works when the gcd of the modulo and of the base being used is 1. In RSA, when the
+ * base is a power of two, the modulo - a product of two primes - is always going to have a gcd of 1 (because
+ * the product of two odd numbers is odd), but what about when RSA isn't used?
+ *
+ * In contrast, Barrett reduction has no such constraint. As such, some bigint implementations perform a
+ * Barrett reduction after every operation in the modpow function. Others perform Barrett reductions when the
+ * modulo is even and Montgomery reductions when the modulo is odd. BigInteger.java's modPow method, however,
+ * uses a trick involving the Chinese Remainder Theorem to factor the even modulo into two numbers - one odd and
+ * the other, a power of two - and recombine them, later. This is the method that this modPow function uses.
+ * {@link http://islab.oregonstate.edu/papers/j34monex.pdf Montgomery Reduction with Even Modulus} elaborates.
+ */
+ function modPow($e, $n)
+ {
+ $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs();
+
+ if ($e->compare(new Math_BigInteger()) < 0) {
+ $e = $e->abs();
+
+ $temp = $this->modInverse($n);
+ if ($temp === false) {
+ return false;
+ }
+
+ return $this->_normalize($temp->modPow($e, $n));
+ }
+
+ if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP ) {
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_powm($this->value, $e->value, $n->value);
+
+ return $this->_normalize($temp);
+ }
+
+ if ($this->compare(new Math_BigInteger()) < 0 || $this->compare($n) > 0) {
+ list(, $temp) = $this->divide($n);
+ return $temp->modPow($e, $n);
+ }
+
+ if (defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) {
+ $components = array(
+ 'modulus' => $n->toBytes(true),
+ 'publicExponent' => $e->toBytes(true)
+ );
+
+ $components = array(
+ 'modulus' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['modulus'])), $components['modulus']),
+ 'publicExponent' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['publicExponent'])), $components['publicExponent'])
+ );
+
+ $RSAPublicKey = pack('Ca*a*a*',
+ 48, $this->_encodeASN1Length(strlen($components['modulus']) + strlen($components['publicExponent'])),
+ $components['modulus'], $components['publicExponent']
+ );
+
+ $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
+ $RSAPublicKey = chr(0) . $RSAPublicKey;
+ $RSAPublicKey = chr(3) . $this->_encodeASN1Length(strlen($RSAPublicKey)) . $RSAPublicKey;
+
+ $encapsulated = pack('Ca*a*',
+ 48, $this->_encodeASN1Length(strlen($rsaOID . $RSAPublicKey)), $rsaOID . $RSAPublicKey
+ );
+
+ $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
+ chunk_split(base64_encode($encapsulated)) .
+ '-----END PUBLIC KEY-----';
+
+ $plaintext = str_pad($this->toBytes(), strlen($n->toBytes(true)) - 1, "\0", STR_PAD_LEFT);
+
+ if (openssl_public_encrypt($plaintext, $result, $RSAPublicKey, OPENSSL_NO_PADDING)) {
+ return new Math_BigInteger($result, 256);
+ }
+ }
+
+ if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+ $temp = new Math_BigInteger();
+ $temp->value = bcpowmod($this->value, $e->value, $n->value, 0);
+
+ return $this->_normalize($temp);
+ }
+
+ if ( empty($e->value) ) {
+ $temp = new Math_BigInteger();
+ $temp->value = array(1);
+ return $this->_normalize($temp);
+ }
+
+ if ( $e->value == array(1) ) {
+ list(, $temp) = $this->divide($n);
+ return $this->_normalize($temp);
+ }
+
+ if ( $e->value == array(2) ) {
+ $temp = new Math_BigInteger();
+ $temp->value = $this->_square($this->value);
+ list(, $temp) = $temp->divide($n);
+ return $this->_normalize($temp);
+ }
+
+ return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_BARRETT));
+
+ // is the modulo odd?
+ if ( $n->value[0] & 1 ) {
+ return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_MONTGOMERY));
+ }
+ // if it's not, it's even
+
+ // find the lowest set bit (eg. the max pow of 2 that divides $n)
+ for ($i = 0; $i < count($n->value); ++$i) {
+ if ( $n->value[$i] ) {
+ $temp = decbin($n->value[$i]);
+ $j = strlen($temp) - strrpos($temp, '1') - 1;
+ $j+= 26 * $i;
+ break;
+ }
+ }
+ // at this point, 2^$j * $n/(2^$j) == $n
+
+ $mod1 = $n->copy();
+ $mod1->_rshift($j);
+ $mod2 = new Math_BigInteger();
+ $mod2->value = array(1);
+ $mod2->_lshift($j);
+
+ $part1 = ( $mod1->value != array(1) ) ? $this->_slidingWindow($e, $mod1, MATH_BIGINTEGER_MONTGOMERY) : new Math_BigInteger();
+ $part2 = $this->_slidingWindow($e, $mod2, MATH_BIGINTEGER_POWEROF2);
+
+ $y1 = $mod2->modInverse($mod1);
+ $y2 = $mod1->modInverse($mod2);
+
+ $result = $part1->multiply($mod2);
+ $result = $result->multiply($y1);
+
+ $temp = $part2->multiply($mod1);
+ $temp = $temp->multiply($y2);
+
+ $result = $result->add($temp);
+ list(, $result) = $result->divide($n);
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Performs modular exponentiation.
+ *
+ * Alias for Math_BigInteger::modPow()
+ *
+ * @param Math_BigInteger $e
+ * @param Math_BigInteger $n
+ * @return Math_BigInteger
+ * @access public
+ */
+ function powMod($e, $n)
+ {
+ return $this->modPow($e, $n);
+ }
+
+ /**
+ * Sliding Window k-ary Modular Exponentiation
+ *
+ * Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} /
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}. In a departure from those algorithims,
+ * however, this function performs a modular reduction after every multiplication and squaring operation.
+ * As such, this function has the same preconditions that the reductions being used do.
+ *
+ * @param Math_BigInteger $e
+ * @param Math_BigInteger $n
+ * @param Integer $mode
+ * @return Math_BigInteger
+ * @access private
+ */
+ function _slidingWindow($e, $n, $mode)
+ {
+ static $window_ranges = array(7, 25, 81, 241, 673, 1793); // from BigInteger.java's oddModPow function
+ //static $window_ranges = array(0, 7, 36, 140, 450, 1303, 3529); // from MPM 7.3.1
+
+ $e_value = $e->value;
+ $e_length = count($e_value) - 1;
+ $e_bits = decbin($e_value[$e_length]);
+ for ($i = $e_length - 1; $i >= 0; --$i) {
+ $e_bits.= str_pad(decbin($e_value[$i]), 26, '0', STR_PAD_LEFT);
+ }
+
+ $e_length = strlen($e_bits);
+
+ // calculate the appropriate window size.
+ // $window_size == 3 if $window_ranges is between 25 and 81, for example.
+ for ($i = 0, $window_size = 1; $e_length > $window_ranges[$i] && $i < count($window_ranges); ++$window_size, ++$i);
+
+ $n_value = $n->value;
+
+ // precompute $this^0 through $this^$window_size
+ $powers = array();
+ $powers[1] = $this->_prepareReduce($this->value, $n_value, $mode);
+ $powers[2] = $this->_squareReduce($powers[1], $n_value, $mode);
+
+ // we do every other number since substr($e_bits, $i, $j+1) (see below) is supposed to end
+ // in a 1. ie. it's supposed to be odd.
+ $temp = 1 << ($window_size - 1);
+ for ($i = 1; $i < $temp; ++$i) {
+ $i2 = $i << 1;
+ $powers[$i2 + 1] = $this->_multiplyReduce($powers[$i2 - 1], $powers[2], $n_value, $mode);
+ }
+
+ $result = array(1);
+ $result = $this->_prepareReduce($result, $n_value, $mode);
+
+ for ($i = 0; $i < $e_length; ) {
+ if ( !$e_bits[$i] ) {
+ $result = $this->_squareReduce($result, $n_value, $mode);
+ ++$i;
+ } else {
+ for ($j = $window_size - 1; $j > 0; --$j) {
+ if ( !empty($e_bits[$i + $j]) ) {
+ break;
+ }
+ }
+
+ for ($k = 0; $k <= $j; ++$k) {// eg. the length of substr($e_bits, $i, $j+1)
+ $result = $this->_squareReduce($result, $n_value, $mode);
+ }
+
+ $result = $this->_multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $mode);
+
+ $i+=$j + 1;
+ }
+ }
+
+ $temp = new Math_BigInteger();
+ $temp->value = $this->_reduce($result, $n_value, $mode);
+
+ return $temp;
+ }
+
+ /**
+ * Modular reduction
+ *
+ * For most $modes this will return the remainder.
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @param Integer $mode
+ * @return Array
+ */
+ function _reduce($x, $n, $mode)
+ {
+ switch ($mode) {
+ case MATH_BIGINTEGER_MONTGOMERY:
+ return $this->_montgomery($x, $n);
+ case MATH_BIGINTEGER_BARRETT:
+ return $this->_barrett($x, $n);
+ case MATH_BIGINTEGER_POWEROF2:
+ $lhs = new Math_BigInteger();
+ $lhs->value = $x;
+ $rhs = new Math_BigInteger();
+ $rhs->value = $n;
+ return $x->_mod2($n);
+ case MATH_BIGINTEGER_CLASSIC:
+ $lhs = new Math_BigInteger();
+ $lhs->value = $x;
+ $rhs = new Math_BigInteger();
+ $rhs->value = $n;
+ list(, $temp) = $lhs->divide($rhs);
+ return $temp->value;
+ case MATH_BIGINTEGER_NONE:
+ return $x;
+ default:
+ // an invalid $mode was provided
+ }
+ }
+
+ /**
+ * Modular reduction preperation
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @param Integer $mode
+ * @return Array
+ */
+ function _prepareReduce($x, $n, $mode)
+ {
+ if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+ return $this->_prepMontgomery($x, $n);
+ }
+ return $this->_reduce($x, $n, $mode);
+ }
+
+ /**
+ * Modular multiply
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $y
+ * @param Array $n
+ * @param Integer $mode
+ * @return Array
+ */
+ function _multiplyReduce($x, $y, $n, $mode)
+ {
+ if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+ return $this->_montgomeryMultiply($x, $y, $n);
+ }
+ $temp = $this->_multiply($x, false, $y, false);
+ return $this->_reduce($temp[MATH_BIGINTEGER_VALUE], $n, $mode);
+ }
+
+ /**
+ * Modular square
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @param Integer $mode
+ * @return Array
+ */
+ function _squareReduce($x, $n, $mode)
+ {
+ if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+ return $this->_montgomeryMultiply($x, $x, $n);
+ }
+ return $this->_reduce($this->_square($x), $n, $mode);
+ }
+
+ /**
+ * Modulos for Powers of Two
+ *
+ * Calculates $x%$n, where $n = 2**$e, for some $e. Since this is basically the same as doing $x & ($n-1),
+ * we'll just use this function as a wrapper for doing that.
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Math_BigInteger
+ * @return Math_BigInteger
+ */
+ function _mod2($n)
+ {
+ $temp = new Math_BigInteger();
+ $temp->value = array(1);
+ return $this->bitwise_and($n->subtract($temp));
+ }
+
+ /**
+ * Barrett Modular Reduction
+ *
+ * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} /
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information. Modified slightly,
+ * so as not to require negative numbers (initially, this script didn't support negative numbers).
+ *
+ * Employs "folding", as described at
+ * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}. To quote from
+ * it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x."
+ *
+ * Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that
+ * usable on account of (1) its not using reasonable radix points as discussed in
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable
+ * radix points, it only works when there are an even number of digits in the denominator. The reason for (2) is that
+ * (x >> 1) + (x >> 1) != x / 2 + x / 2. If x is even, they're the same, but if x is odd, they're not. See the in-line
+ * comments for details.
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $n
+ * @param Array $m
+ * @return Array
+ */
+ function _barrett($n, $m)
+ {
+ static $cache = array(
+ MATH_BIGINTEGER_VARIABLE => array(),
+ MATH_BIGINTEGER_DATA => array()
+ );
+
+ $m_length = count($m);
+
+ // if ($this->_compare($n, $this->_square($m)) >= 0) {
+ if (count($n) > 2 * $m_length) {
+ $lhs = new Math_BigInteger();
+ $rhs = new Math_BigInteger();
+ $lhs->value = $n;
+ $rhs->value = $m;
+ list(, $temp) = $lhs->divide($rhs);
+ return $temp->value;
+ }
+
+ // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced
+ if ($m_length < 5) {
+ return $this->_regularBarrett($n, $m);
+ }
+
+ // n = 2 * m.length
+
+ if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+ $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+ $cache[MATH_BIGINTEGER_VARIABLE][] = $m;
+
+ $lhs = new Math_BigInteger();
+ $lhs_value = &$lhs->value;
+ $lhs_value = $this->_array_repeat(0, $m_length + ($m_length >> 1));
+ $lhs_value[] = 1;
+ $rhs = new Math_BigInteger();
+ $rhs->value = $m;
+
+ list($u, $m1) = $lhs->divide($rhs);
+ $u = $u->value;
+ $m1 = $m1->value;
+
+ $cache[MATH_BIGINTEGER_DATA][] = array(
+ 'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1)
+ 'm1'=> $m1 // m.length
+ );
+ } else {
+ extract($cache[MATH_BIGINTEGER_DATA][$key]);
+ }
+
+ $cutoff = $m_length + ($m_length >> 1);
+ $lsd = array_slice($n, 0, $cutoff); // m.length + (m.length >> 1)
+ $msd = array_slice($n, $cutoff); // m.length >> 1
+ $lsd = $this->_trim($lsd);
+ $temp = $this->_multiply($msd, false, $m1, false);
+ $n = $this->_add($lsd, false, $temp[MATH_BIGINTEGER_VALUE], false); // m.length + (m.length >> 1) + 1
+
+ if ($m_length & 1) {
+ return $this->_regularBarrett($n[MATH_BIGINTEGER_VALUE], $m);
+ }
+
+ // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2
+ $temp = array_slice($n[MATH_BIGINTEGER_VALUE], $m_length - 1);
+ // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2
+ // if odd: ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1
+ $temp = $this->_multiply($temp, false, $u, false);
+ // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1
+ // if odd: (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1)
+ $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], ($m_length >> 1) + 1);
+ // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1
+ // if odd: (m.length - (m.length >> 1)) + m.length = 2 * m.length - (m.length >> 1)
+ $temp = $this->_multiply($temp, false, $m, false);
+
+ // at this point, if m had an odd number of digits, we'd be subtracting a 2 * m.length - (m.length >> 1) digit
+ // number from a m.length + (m.length >> 1) + 1 digit number. ie. there'd be an extra digit and the while loop
+ // following this comment would loop a lot (hence our calling _regularBarrett() in that situation).
+
+ $result = $this->_subtract($n[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+ while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false) >= 0) {
+ $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false);
+ }
+
+ return $result[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * (Regular) Barrett Modular Reduction
+ *
+ * For numbers with more than four digits Math_BigInteger::_barrett() is faster. The difference between that and this
+ * is that this function does not fold the denominator into a smaller form.
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @return Array
+ */
+ function _regularBarrett($x, $n)
+ {
+ static $cache = array(
+ MATH_BIGINTEGER_VARIABLE => array(),
+ MATH_BIGINTEGER_DATA => array()
+ );
+
+ $n_length = count($n);
+
+ if (count($x) > 2 * $n_length) {
+ $lhs = new Math_BigInteger();
+ $rhs = new Math_BigInteger();
+ $lhs->value = $x;
+ $rhs->value = $n;
+ list(, $temp) = $lhs->divide($rhs);
+ return $temp->value;
+ }
+
+ if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+ $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+ $cache[MATH_BIGINTEGER_VARIABLE][] = $n;
+ $lhs = new Math_BigInteger();
+ $lhs_value = &$lhs->value;
+ $lhs_value = $this->_array_repeat(0, 2 * $n_length);
+ $lhs_value[] = 1;
+ $rhs = new Math_BigInteger();
+ $rhs->value = $n;
+ list($temp, ) = $lhs->divide($rhs); // m.length
+ $cache[MATH_BIGINTEGER_DATA][] = $temp->value;
+ }
+
+ // 2 * m.length - (m.length - 1) = m.length + 1
+ $temp = array_slice($x, $n_length - 1);
+ // (m.length + 1) + m.length = 2 * m.length + 1
+ $temp = $this->_multiply($temp, false, $cache[MATH_BIGINTEGER_DATA][$key], false);
+ // (2 * m.length + 1) - (m.length - 1) = m.length + 2
+ $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], $n_length + 1);
+
+ // m.length + 1
+ $result = array_slice($x, 0, $n_length + 1);
+ // m.length + 1
+ $temp = $this->_multiplyLower($temp, false, $n, false, $n_length + 1);
+ // $temp == array_slice($temp->_multiply($temp, false, $n, false)->value, 0, $n_length + 1)
+
+ if ($this->_compare($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]) < 0) {
+ $corrector_value = $this->_array_repeat(0, $n_length + 1);
+ $corrector_value[] = 1;
+ $result = $this->_add($result, false, $corrector, false);
+ $result = $result[MATH_BIGINTEGER_VALUE];
+ }
+
+ // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits
+ $result = $this->_subtract($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]);
+ while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false) > 0) {
+ $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false);
+ }
+
+ return $result[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Performs long multiplication up to $stop digits
+ *
+ * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved.
+ *
+ * @see _regularBarrett()
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Array
+ * @access private
+ */
+ function _multiplyLower($x_value, $x_negative, $y_value, $y_negative, $stop)
+ {
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+
+ if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+ return array(
+ MATH_BIGINTEGER_VALUE => array(),
+ MATH_BIGINTEGER_SIGN => false
+ );
+ }
+
+ if ( $x_length < $y_length ) {
+ $temp = $x_value;
+ $x_value = $y_value;
+ $y_value = $temp;
+
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+ }
+
+ $product_value = $this->_array_repeat(0, $x_length + $y_length);
+
+ // the following for loop could be removed if the for loop following it
+ // (the one with nested for loops) initially set $i to 0, but
+ // doing so would also make the result in one set of unnecessary adds,
+ // since on the outermost loops first pass, $product->value[$k] is going
+ // to always be 0
+
+ $carry = 0;
+
+ for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i
+ $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
+ $carry = (int) ($temp / 0x4000000);
+ $product_value[$j] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ if ($j < $stop) {
+ $product_value[$j] = $carry;
+ }
+
+ // the above for loop is what the previous comment was talking about. the
+ // following for loop is the "one with nested for loops"
+
+ for ($i = 1; $i < $y_length; ++$i) {
+ $carry = 0;
+
+ for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) {
+ $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
+ $carry = (int) ($temp / 0x4000000);
+ $product_value[$k] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ if ($k < $stop) {
+ $product_value[$k] = $carry;
+ }
+ }
+
+ return array(
+ MATH_BIGINTEGER_VALUE => $this->_trim($product_value),
+ MATH_BIGINTEGER_SIGN => $x_negative != $y_negative
+ );
+ }
+
+ /**
+ * Montgomery Modular Reduction
+ *
+ * ($x->_prepMontgomery($n))->_montgomery($n) yields $x % $n.
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=170 MPM 6.3} provides insights on how this can be
+ * improved upon (basically, by using the comba method). gcd($n, 2) must be equal to one for this function
+ * to work correctly.
+ *
+ * @see _prepMontgomery()
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @return Array
+ */
+ function _montgomery($x, $n)
+ {
+ static $cache = array(
+ MATH_BIGINTEGER_VARIABLE => array(),
+ MATH_BIGINTEGER_DATA => array()
+ );
+
+ if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+ $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+ $cache[MATH_BIGINTEGER_VARIABLE][] = $x;
+ $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($n);
+ }
+
+ $k = count($n);
+
+ $result = array(MATH_BIGINTEGER_VALUE => $x);
+
+ for ($i = 0; $i < $k; ++$i) {
+ $temp = $result[MATH_BIGINTEGER_VALUE][$i] * $cache[MATH_BIGINTEGER_DATA][$key];
+ $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+ $temp = $this->_regularMultiply(array($temp), $n);
+ $temp = array_merge($this->_array_repeat(0, $i), $temp);
+ $result = $this->_add($result[MATH_BIGINTEGER_VALUE], false, $temp, false);
+ }
+
+ $result[MATH_BIGINTEGER_VALUE] = array_slice($result[MATH_BIGINTEGER_VALUE], $k);
+
+ if ($this->_compare($result, false, $n, false) >= 0) {
+ $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], false, $n, false);
+ }
+
+ return $result[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Montgomery Multiply
+ *
+ * Interleaves the montgomery reduction and long multiplication algorithms together as described in
+ * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}
+ *
+ * @see _prepMontgomery()
+ * @see _montgomery()
+ * @access private
+ * @param Array $x
+ * @param Array $y
+ * @param Array $m
+ * @return Array
+ */
+ function _montgomeryMultiply($x, $y, $m)
+ {
+ $temp = $this->_multiply($x, false, $y, false);
+ return $this->_montgomery($temp[MATH_BIGINTEGER_VALUE], $m);
+
+ static $cache = array(
+ MATH_BIGINTEGER_VARIABLE => array(),
+ MATH_BIGINTEGER_DATA => array()
+ );
+
+ if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+ $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+ $cache[MATH_BIGINTEGER_VARIABLE][] = $m;
+ $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($m);
+ }
+
+ $n = max(count($x), count($y), count($m));
+ $x = array_pad($x, $n, 0);
+ $y = array_pad($y, $n, 0);
+ $m = array_pad($m, $n, 0);
+ $a = array(MATH_BIGINTEGER_VALUE => $this->_array_repeat(0, $n + 1));
+ for ($i = 0; $i < $n; ++$i) {
+ $temp = $a[MATH_BIGINTEGER_VALUE][0] + $x[$i] * $y[0];
+ $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+ $temp = $temp * $cache[MATH_BIGINTEGER_DATA][$key];
+ $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+ $temp = $this->_add($this->_regularMultiply(array($x[$i]), $y), false, $this->_regularMultiply(array($temp), $m), false);
+ $a = $this->_add($a[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false);
+ $a[MATH_BIGINTEGER_VALUE] = array_slice($a[MATH_BIGINTEGER_VALUE], 1);
+ }
+ if ($this->_compare($a[MATH_BIGINTEGER_VALUE], false, $m, false) >= 0) {
+ $a = $this->_subtract($a[MATH_BIGINTEGER_VALUE], false, $m, false);
+ }
+ return $a[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Prepare a number for use in Montgomery Modular Reductions
+ *
+ * @see _montgomery()
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @return Array
+ */
+ function _prepMontgomery($x, $n)
+ {
+ $lhs = new Math_BigInteger();
+ $lhs->value = array_merge($this->_array_repeat(0, count($n)), $x);
+ $rhs = new Math_BigInteger();
+ $rhs->value = $n;
+
+ list(, $temp) = $lhs->divide($rhs);
+ return $temp->value;
+ }
+
+ /**
+ * Modular Inverse of a number mod 2**26 (eg. 67108864)
+ *
+ * Based off of the bnpInvDigit function implemented and justified in the following URL:
+ *
+ * {@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js}
+ *
+ * The following URL provides more info:
+ *
+ * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85}
+ *
+ * As for why we do all the bitmasking... strange things can happen when converting from floats to ints. For
+ * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields
+ * int(-2147483648). To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't
+ * auto-converted to floats. The outermost bitmask is present because without it, there's no guarantee that
+ * the "residue" returned would be the so-called "common residue". We use fmod, in the last step, because the
+ * maximum possible $x is 26 bits and the maximum $result is 16 bits. Thus, we have to be able to handle up to
+ * 40 bits, which only 64-bit floating points will support.
+ *
+ * Thanks to Pedro Gimeno Fortea for input!
+ *
+ * @see _montgomery()
+ * @access private
+ * @param Array $x
+ * @return Integer
+ */
+ function _modInverse67108864($x) // 2**26 == 67108864
+ {
+ $x = -$x[0];
+ $result = $x & 0x3; // x**-1 mod 2**2
+ $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4
+ $result = ($result * (2 - ($x & 0xFF) * $result)) & 0xFF; // x**-1 mod 2**8
+ $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16
+ $result = fmod($result * (2 - fmod($x * $result, 0x4000000)), 0x4000000); // x**-1 mod 2**26
+ return $result & 0x3FFFFFF;
+ }
+
+ /**
+ * Calculates modular inverses.
+ *
+ * Say you have (30 mod 17 * x mod 17) mod 17 == 1. x can be found using modular inverses.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger(30);
+ * $b = new Math_BigInteger(17);
+ *
+ * $c = $a->modInverse($b);
+ * echo $c->toString(); // outputs 4
+ *
+ * echo "\r\n";
+ *
+ * $d = $a->multiply($c);
+ * list(, $d) = $d->divide($b);
+ * echo $d; // outputs 1 (as per the definition of modular inverse)
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $n
+ * @return mixed false, if no modular inverse exists, Math_BigInteger, otherwise.
+ * @access public
+ * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information.
+ */
+ function modInverse($n)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_invert($this->value, $n->value);
+
+ return ( $temp->value === false ) ? false : $this->_normalize($temp);
+ }
+
+ static $zero, $one;
+ if (!isset($zero)) {
+ $zero = new Math_BigInteger();
+ $one = new Math_BigInteger(1);
+ }
+
+ // $x mod -$n == $x mod $n.
+ $n = $n->abs();
+
+ if ($this->compare($zero) < 0) {
+ $temp = $this->abs();
+ $temp = $temp->modInverse($n);
+ return $this->_normalize($n->subtract($temp));
+ }
+
+ extract($this->extendedGCD($n));
+
+ if (!$gcd->equals($one)) {
+ return false;
+ }
+
+ $x = $x->compare($zero) < 0 ? $x->add($n) : $x;
+
+ return $this->compare($zero) < 0 ? $this->_normalize($n->subtract($x)) : $this->_normalize($x);
+ }
+
+ /**
+ * Calculates the greatest common divisor and Bézout's identity.
+ *
+ * Say you have 693 and 609. The GCD is 21. Bézout's identity states that there exist integers x and y such that
+ * 693*x + 609*y == 21. In point of fact, there are actually an infinite number of x and y combinations and which
+ * combination is returned is dependant upon which mode is in use. See
+ * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bézout's identity - Wikipedia} for more information.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger(693);
+ * $b = new Math_BigInteger(609);
+ *
+ * extract($a->extendedGCD($b));
+ *
+ * echo $gcd->toString() . "\r\n"; // outputs 21
+ * echo $a->toString() * $x->toString() + $b->toString() * $y->toString(); // outputs 21
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $n
+ * @return Math_BigInteger
+ * @access public
+ * @internal Calculates the GCD using the binary xGCD algorithim described in
+ * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=19 HAC 14.61}. As the text above 14.61 notes,
+ * the more traditional algorithim requires "relatively costly multiple-precision divisions".
+ */
+ function extendedGCD($n)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ extract(gmp_gcdext($this->value, $n->value));
+
+ return array(
+ 'gcd' => $this->_normalize(new Math_BigInteger($g)),
+ 'x' => $this->_normalize(new Math_BigInteger($s)),
+ 'y' => $this->_normalize(new Math_BigInteger($t))
+ );
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works
+ // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway. as is,
+ // the basic extended euclidean algorithim is what we're using.
+
+ $u = $this->value;
+ $v = $n->value;
+
+ $a = '1';
+ $b = '0';
+ $c = '0';
+ $d = '1';
+
+ while (bccomp($v, '0', 0) != 0) {
+ $q = bcdiv($u, $v, 0);
+
+ $temp = $u;
+ $u = $v;
+ $v = bcsub($temp, bcmul($v, $q, 0), 0);
+
+ $temp = $a;
+ $a = $c;
+ $c = bcsub($temp, bcmul($a, $q, 0), 0);
+
+ $temp = $b;
+ $b = $d;
+ $d = bcsub($temp, bcmul($b, $q, 0), 0);
+ }
+
+ return array(
+ 'gcd' => $this->_normalize(new Math_BigInteger($u)),
+ 'x' => $this->_normalize(new Math_BigInteger($a)),
+ 'y' => $this->_normalize(new Math_BigInteger($b))
+ );
+ }
+
+ $y = $n->copy();
+ $x = $this->copy();
+ $g = new Math_BigInteger();
+ $g->value = array(1);
+
+ while ( !(($x->value[0] & 1)|| ($y->value[0] & 1)) ) {
+ $x->_rshift(1);
+ $y->_rshift(1);
+ $g->_lshift(1);
+ }
+
+ $u = $x->copy();
+ $v = $y->copy();
+
+ $a = new Math_BigInteger();
+ $b = new Math_BigInteger();
+ $c = new Math_BigInteger();
+ $d = new Math_BigInteger();
+
+ $a->value = $d->value = $g->value = array(1);
+ $b->value = $c->value = array();
+
+ while ( !empty($u->value) ) {
+ while ( !($u->value[0] & 1) ) {
+ $u->_rshift(1);
+ if ( (!empty($a->value) && ($a->value[0] & 1)) || (!empty($b->value) && ($b->value[0] & 1)) ) {
+ $a = $a->add($y);
+ $b = $b->subtract($x);
+ }
+ $a->_rshift(1);
+ $b->_rshift(1);
+ }
+
+ while ( !($v->value[0] & 1) ) {
+ $v->_rshift(1);
+ if ( (!empty($d->value) && ($d->value[0] & 1)) || (!empty($c->value) && ($c->value[0] & 1)) ) {
+ $c = $c->add($y);
+ $d = $d->subtract($x);
+ }
+ $c->_rshift(1);
+ $d->_rshift(1);
+ }
+
+ if ($u->compare($v) >= 0) {
+ $u = $u->subtract($v);
+ $a = $a->subtract($c);
+ $b = $b->subtract($d);
+ } else {
+ $v = $v->subtract($u);
+ $c = $c->subtract($a);
+ $d = $d->subtract($b);
+ }
+ }
+
+ return array(
+ 'gcd' => $this->_normalize($g->multiply($v)),
+ 'x' => $this->_normalize($c),
+ 'y' => $this->_normalize($d)
+ );
+ }
+
+ /**
+ * Calculates the greatest common divisor
+ *
+ * Say you have 693 and 609. The GCD is 21.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger(693);
+ * $b = new Math_BigInteger(609);
+ *
+ * $gcd = a->extendedGCD($b);
+ *
+ * echo $gcd->toString() . "\r\n"; // outputs 21
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $n
+ * @return Math_BigInteger
+ * @access public
+ */
+ function gcd($n)
+ {
+ extract($this->extendedGCD($n));
+ return $gcd;
+ }
+
+ /**
+ * Absolute value.
+ *
+ * @return Math_BigInteger
+ * @access public
+ */
+ function abs()
+ {
+ $temp = new Math_BigInteger();
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp->value = gmp_abs($this->value);
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp->value = (bccomp($this->value, '0', 0) < 0) ? substr($this->value, 1) : $this->value;
+ break;
+ default:
+ $temp->value = $this->value;
+ }
+
+ return $temp;
+ }
+
+ /**
+ * Compares two numbers.
+ *
+ * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite. The reason for this is
+ * demonstrated thusly:
+ *
+ * $x > $y: $x->compare($y) > 0
+ * $x < $y: $x->compare($y) < 0
+ * $x == $y: $x->compare($y) == 0
+ *
+ * Note how the same comparison operator is used. If you want to test for equality, use $x->equals($y).
+ *
+ * @param Math_BigInteger $x
+ * @return Integer < 0 if $this is less than $x; > 0 if $this is greater than $x, and 0 if they are equal.
+ * @access public
+ * @see equals()
+ * @internal Could return $this->subtract($x), but that's not as fast as what we do do.
+ */
+ function compare($y)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ return gmp_cmp($this->value, $y->value);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ return bccomp($this->value, $y->value, 0);
+ }
+
+ return $this->_compare($this->value, $this->is_negative, $y->value, $y->is_negative);
+ }
+
+ /**
+ * Compares two numbers.
+ *
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Integer
+ * @see compare()
+ * @access private
+ */
+ function _compare($x_value, $x_negative, $y_value, $y_negative)
+ {
+ if ( $x_negative != $y_negative ) {
+ return ( !$x_negative && $y_negative ) ? 1 : -1;
+ }
+
+ $result = $x_negative ? -1 : 1;
+
+ if ( count($x_value) != count($y_value) ) {
+ return ( count($x_value) > count($y_value) ) ? $result : -$result;
+ }
+ $size = max(count($x_value), count($y_value));
+
+ $x_value = array_pad($x_value, $size, 0);
+ $y_value = array_pad($y_value, $size, 0);
+
+ for ($i = count($x_value) - 1; $i >= 0; --$i) {
+ if ($x_value[$i] != $y_value[$i]) {
+ return ( $x_value[$i] > $y_value[$i] ) ? $result : -$result;
+ }
+ }
+
+ return 0;
+ }
+
+ /**
+ * Tests the equality of two numbers.
+ *
+ * If you need to see if one number is greater than or less than another number, use Math_BigInteger::compare()
+ *
+ * @param Math_BigInteger $x
+ * @return Boolean
+ * @access public
+ * @see compare()
+ */
+ function equals($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ return gmp_cmp($this->value, $x->value) == 0;
+ default:
+ return $this->value === $x->value && $this->is_negative == $x->is_negative;
+ }
+ }
+
+ /**
+ * Set Precision
+ *
+ * Some bitwise operations give different results depending on the precision being used. Examples include left
+ * shift, not, and rotates.
+ *
+ * @param Math_BigInteger $x
+ * @access public
+ * @return Math_BigInteger
+ */
+ function setPrecision($bits)
+ {
+ $this->precision = $bits;
+ if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ) {
+ $this->bitmask = new Math_BigInteger(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256);
+ } else {
+ $this->bitmask = new Math_BigInteger(bcpow('2', $bits, 0));
+ }
+
+ $temp = $this->_normalize($this);
+ $this->value = $temp->value;
+ }
+
+ /**
+ * Logical And
+ *
+ * @param Math_BigInteger $x
+ * @access public
+ * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+ * @return Math_BigInteger
+ */
+ function bitwise_and($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_and($this->value, $x->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $left = $this->toBytes();
+ $right = $x->toBytes();
+
+ $length = max(strlen($left), strlen($right));
+
+ $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+ $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+ return $this->_normalize(new Math_BigInteger($left & $right, 256));
+ }
+
+ $result = $this->copy();
+
+ $length = min(count($x->value), count($this->value));
+
+ $result->value = array_slice($result->value, 0, $length);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $result->value[$i] = $result->value[$i] & $x->value[$i];
+ }
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Logical Or
+ *
+ * @param Math_BigInteger $x
+ * @access public
+ * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+ * @return Math_BigInteger
+ */
+ function bitwise_or($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_or($this->value, $x->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $left = $this->toBytes();
+ $right = $x->toBytes();
+
+ $length = max(strlen($left), strlen($right));
+
+ $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+ $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+ return $this->_normalize(new Math_BigInteger($left | $right, 256));
+ }
+
+ $length = max(count($this->value), count($x->value));
+ $result = $this->copy();
+ $result->value = array_pad($result->value, 0, $length);
+ $x->value = array_pad($x->value, 0, $length);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $result->value[$i] = $this->value[$i] | $x->value[$i];
+ }
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Logical Exclusive-Or
+ *
+ * @param Math_BigInteger $x
+ * @access public
+ * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+ * @return Math_BigInteger
+ */
+ function bitwise_xor($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_xor($this->value, $x->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $left = $this->toBytes();
+ $right = $x->toBytes();
+
+ $length = max(strlen($left), strlen($right));
+
+ $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+ $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+ return $this->_normalize(new Math_BigInteger($left ^ $right, 256));
+ }
+
+ $length = max(count($this->value), count($x->value));
+ $result = $this->copy();
+ $result->value = array_pad($result->value, 0, $length);
+ $x->value = array_pad($x->value, 0, $length);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $result->value[$i] = $this->value[$i] ^ $x->value[$i];
+ }
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Logical Not
+ *
+ * @access public
+ * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+ * @return Math_BigInteger
+ */
+ function bitwise_not()
+ {
+ // calculuate "not" without regard to $this->precision
+ // (will always result in a smaller number. ie. ~1 isn't 1111 1110 - it's 0)
+ $temp = $this->toBytes();
+ $pre_msb = decbin(ord($temp[0]));
+ $temp = ~$temp;
+ $msb = decbin(ord($temp[0]));
+ if (strlen($msb) == 8) {
+ $msb = substr($msb, strpos($msb, '0'));
+ }
+ $temp[0] = chr(bindec($msb));
+
+ // see if we need to add extra leading 1's
+ $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8;
+ $new_bits = $this->precision - $current_bits;
+ if ($new_bits <= 0) {
+ return $this->_normalize(new Math_BigInteger($temp, 256));
+ }
+
+ // generate as many leading 1's as we need to.
+ $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3);
+ $this->_base256_lshift($leading_ones, $current_bits);
+
+ $temp = str_pad($temp, ceil($this->bits / 8), chr(0), STR_PAD_LEFT);
+
+ return $this->_normalize(new Math_BigInteger($leading_ones | $temp, 256));
+ }
+
+ /**
+ * Logical Right Shift
+ *
+ * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.
+ *
+ * @param Integer $shift
+ * @return Math_BigInteger
+ * @access public
+ * @internal The only version that yields any speed increases is the internal version.
+ */
+ function bitwise_rightShift($shift)
+ {
+ $temp = new Math_BigInteger();
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ static $two;
+
+ if (!isset($two)) {
+ $two = gmp_init('2');
+ }
+
+ $temp->value = gmp_div_q($this->value, gmp_pow($two, $shift));
+
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0);
+
+ break;
+ default: // could just replace _lshift with this, but then all _lshift() calls would need to be rewritten
+ // and I don't want to do that...
+ $temp->value = $this->value;
+ $temp->_rshift($shift);
+ }
+
+ return $this->_normalize($temp);
+ }
+
+ /**
+ * Logical Left Shift
+ *
+ * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.
+ *
+ * @param Integer $shift
+ * @return Math_BigInteger
+ * @access public
+ * @internal The only version that yields any speed increases is the internal version.
+ */
+ function bitwise_leftShift($shift)
+ {
+ $temp = new Math_BigInteger();
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ static $two;
+
+ if (!isset($two)) {
+ $two = gmp_init('2');
+ }
+
+ $temp->value = gmp_mul($this->value, gmp_pow($two, $shift));
+
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0);
+
+ break;
+ default: // could just replace _rshift with this, but then all _lshift() calls would need to be rewritten
+ // and I don't want to do that...
+ $temp->value = $this->value;
+ $temp->_lshift($shift);
+ }
+
+ return $this->_normalize($temp);
+ }
+
+ /**
+ * Logical Left Rotate
+ *
+ * Instead of the top x bits being dropped they're appended to the shifted bit string.
+ *
+ * @param Integer $shift
+ * @return Math_BigInteger
+ * @access public
+ */
+ function bitwise_leftRotate($shift)
+ {
+ $bits = $this->toBytes();
+
+ if ($this->precision > 0) {
+ $precision = $this->precision;
+ if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+ $mask = $this->bitmask->subtract(new Math_BigInteger(1));
+ $mask = $mask->toBytes();
+ } else {
+ $mask = $this->bitmask->toBytes();
+ }
+ } else {
+ $temp = ord($bits[0]);
+ for ($i = 0; $temp >> $i; ++$i);
+ $precision = 8 * strlen($bits) - 8 + $i;
+ $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3);
+ }
+
+ if ($shift < 0) {
+ $shift+= $precision;
+ }
+ $shift%= $precision;
+
+ if (!$shift) {
+ return $this->copy();
+ }
+
+ $left = $this->bitwise_leftShift($shift);
+ $left = $left->bitwise_and(new Math_BigInteger($mask, 256));
+ $right = $this->bitwise_rightShift($precision - $shift);
+ $result = MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ? $left->bitwise_or($right) : $left->add($right);
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Logical Right Rotate
+ *
+ * Instead of the bottom x bits being dropped they're prepended to the shifted bit string.
+ *
+ * @param Integer $shift
+ * @return Math_BigInteger
+ * @access public
+ */
+ function bitwise_rightRotate($shift)
+ {
+ return $this->bitwise_leftRotate(-$shift);
+ }
+
+ /**
+ * Set random number generator function
+ *
+ * This function is deprecated.
+ *
+ * @param String $generator
+ * @access public
+ */
+ function setRandomGenerator($generator)
+ {
+ }
+
+ /**
+ * Generate a random number
+ *
+ * @param optional Integer $min
+ * @param optional Integer $max
+ * @return Math_BigInteger
+ * @access public
+ */
+ function random($min = false, $max = false)
+ {
+ if ($min === false) {
+ $min = new Math_BigInteger(0);
+ }
+
+ if ($max === false) {
+ $max = new Math_BigInteger(0x7FFFFFFF);
+ }
+
+ $compare = $max->compare($min);
+
+ if (!$compare) {
+ return $this->_normalize($min);
+ } else if ($compare < 0) {
+ // if $min is bigger then $max, swap $min and $max
+ $temp = $max;
+ $max = $min;
+ $min = $temp;
+ }
+
+ $generator = $this->generator;
+
+ $max = $max->subtract($min);
+ $max = ltrim($max->toBytes(), chr(0));
+ $size = strlen($max) - 1;
+
+ $crypt_random = function_exists('crypt_random_string') || (!class_exists('Crypt_Random') && function_exists('crypt_random_string'));
+ if ($crypt_random) {
+ $random = crypt_random_string($size);
+ } else {
+ $random = '';
+
+ if ($size & 1) {
+ $random.= chr(mt_rand(0, 255));
+ }
+
+ $blocks = $size >> 1;
+ for ($i = 0; $i < $blocks; ++$i) {
+ // mt_rand(-2147483648, 0x7FFFFFFF) always produces -2147483648 on some systems
+ $random.= pack('n', mt_rand(0, 0xFFFF));
+ }
+ }
+
+ $fragment = new Math_BigInteger($random, 256);
+ $leading = $fragment->compare(new Math_BigInteger(substr($max, 1), 256)) > 0 ?
+ ord($max[0]) - 1 : ord($max[0]);
+
+ if (!$crypt_random) {
+ $msb = chr(mt_rand(0, $leading));
+ } else {
+ $cutoff = floor(0xFF / $leading) * $leading;
+ while (true) {
+ $msb = ord(crypt_random_string(1));
+ if ($msb <= $cutoff) {
+ $msb%= $leading;
+ break;
+ }
+ }
+ $msb = chr($msb);
+ }
+
+ $random = new Math_BigInteger($msb . $random, 256);
+
+ return $this->_normalize($random->add($min));
+ }
+
+ /**
+ * Generate a random prime number.
+ *
+ * If there's not a prime within the given range, false will be returned. If more than $timeout seconds have elapsed,
+ * give up and return false.
+ *
+ * @param optional Integer $min
+ * @param optional Integer $max
+ * @param optional Integer $timeout
+ * @return Math_BigInteger
+ * @access public
+ * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=15 HAC 4.44}.
+ */
+ function randomPrime($min = false, $max = false, $timeout = false)
+ {
+ $compare = $max->compare($min);
+
+ if (!$compare) {
+ return $min;
+ } else if ($compare < 0) {
+ // if $min is bigger then $max, swap $min and $max
+ $temp = $max;
+ $max = $min;
+ $min = $temp;
+ }
+
+ // gmp_nextprime() requires PHP 5 >= 5.2.0 per <http://php.net/gmp-nextprime>.
+ if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP && function_exists('gmp_nextprime') ) {
+ // we don't rely on Math_BigInteger::random()'s min / max when gmp_nextprime() is being used since this function
+ // does its own checks on $max / $min when gmp_nextprime() is used. When gmp_nextprime() is not used, however,
+ // the same $max / $min checks are not performed.
+ if ($min === false) {
+ $min = new Math_BigInteger(0);
+ }
+
+ if ($max === false) {
+ $max = new Math_BigInteger(0x7FFFFFFF);
+ }
+
+ $x = $this->random($min, $max);
+
+ $x->value = gmp_nextprime($x->value);
+
+ if ($x->compare($max) <= 0) {
+ return $x;
+ }
+
+ $x->value = gmp_nextprime($min->value);
+
+ if ($x->compare($max) <= 0) {
+ return $x;
+ }
+
+ return false;
+ }
+
+ static $one, $two;
+ if (!isset($one)) {
+ $one = new Math_BigInteger(1);
+ $two = new Math_BigInteger(2);
+ }
+
+ $start = time();
+
+ $x = $this->random($min, $max);
+ if ($x->equals($two)) {
+ return $x;
+ }
+
+ $x->_make_odd();
+ if ($x->compare($max) > 0) {
+ // if $x > $max then $max is even and if $min == $max then no prime number exists between the specified range
+ if ($min->equals($max)) {
+ return false;
+ }
+ $x = $min->copy();
+ $x->_make_odd();
+ }
+
+ $initial_x = $x->copy();
+
+ while (true) {
+ if ($timeout !== false && time() - $start > $timeout) {
+ return false;
+ }
+
+ if ($x->isPrime()) {
+ return $x;
+ }
+
+ $x = $x->add($two);
+
+ if ($x->compare($max) > 0) {
+ $x = $min->copy();
+ if ($x->equals($two)) {
+ return $x;
+ }
+ $x->_make_odd();
+ }
+
+ if ($x->equals($initial_x)) {
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Make the current number odd
+ *
+ * If the current number is odd it'll be unchanged. If it's even, one will be added to it.
+ *
+ * @see randomPrime()
+ * @access private
+ */
+ function _make_odd()
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ gmp_setbit($this->value, 0);
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if ($this->value[strlen($this->value) - 1] % 2 == 0) {
+ $this->value = bcadd($this->value, '1');
+ }
+ break;
+ default:
+ $this->value[0] |= 1;
+ }
+ }
+
+ /**
+ * Checks a numer to see if it's prime
+ *
+ * Assuming the $t parameter is not set, this function has an error rate of 2**-80. The main motivation for the
+ * $t parameter is distributability. Math_BigInteger::randomPrime() can be distributed accross multiple pageloads
+ * on a website instead of just one.
+ *
+ * @param optional Integer $t
+ * @return Boolean
+ * @access public
+ * @internal Uses the
+ * {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}. See
+ * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24}.
+ */
+ function isPrime($t = false)
+ {
+ $length = strlen($this->toBytes());
+
+ if (!$t) {
+ // see HAC 4.49 "Note (controlling the error probability)"
+ if ($length >= 163) { $t = 2; } // floor(1300 / 8)
+ else if ($length >= 106) { $t = 3; } // floor( 850 / 8)
+ else if ($length >= 81 ) { $t = 4; } // floor( 650 / 8)
+ else if ($length >= 68 ) { $t = 5; } // floor( 550 / 8)
+ else if ($length >= 56 ) { $t = 6; } // floor( 450 / 8)
+ else if ($length >= 50 ) { $t = 7; } // floor( 400 / 8)
+ else if ($length >= 43 ) { $t = 8; } // floor( 350 / 8)
+ else if ($length >= 37 ) { $t = 9; } // floor( 300 / 8)
+ else if ($length >= 31 ) { $t = 12; } // floor( 250 / 8)
+ else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8)
+ else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8)
+ else { $t = 27; }
+ }
+
+ // ie. gmp_testbit($this, 0)
+ // ie. isEven() or !isOdd()
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ return gmp_prob_prime($this->value, $t) != 0;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if ($this->value === '2') {
+ return true;
+ }
+ if ($this->value[strlen($this->value) - 1] % 2 == 0) {
+ return false;
+ }
+ break;
+ default:
+ if ($this->value == array(2)) {
+ return true;
+ }
+ if (~$this->value[0] & 1) {
+ return false;
+ }
+ }
+
+ static $primes, $zero, $one, $two;
+
+ if (!isset($primes)) {
+ $primes = array(
+ 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
+ 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
+ 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227,
+ 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313,
+ 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
+ 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509,
+ 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617,
+ 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727,
+ 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829,
+ 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947,
+ 953, 967, 971, 977, 983, 991, 997
+ );
+
+ if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) {
+ for ($i = 0; $i < count($primes); ++$i) {
+ $primes[$i] = new Math_BigInteger($primes[$i]);
+ }
+ }
+
+ $zero = new Math_BigInteger();
+ $one = new Math_BigInteger(1);
+ $two = new Math_BigInteger(2);
+ }
+
+ if ($this->equals($one)) {
+ return false;
+ }
+
+ // see HAC 4.4.1 "Random search for probable primes"
+ if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) {
+ foreach ($primes as $prime) {
+ list(, $r) = $this->divide($prime);
+ if ($r->equals($zero)) {
+ return $this->equals($prime);
+ }
+ }
+ } else {
+ $value = $this->value;
+ foreach ($primes as $prime) {
+ list(, $r) = $this->_divide_digit($value, $prime);
+ if (!$r) {
+ return count($value) == 1 && $value[0] == $prime;
+ }
+ }
+ }
+
+ $n = $this->copy();
+ $n_1 = $n->subtract($one);
+ $n_2 = $n->subtract($two);
+
+ $r = $n_1->copy();
+ $r_value = $r->value;
+ // ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));
+ if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+ $s = 0;
+ // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals($one) check earlier
+ while ($r->value[strlen($r->value) - 1] % 2 == 0) {
+ $r->value = bcdiv($r->value, '2', 0);
+ ++$s;
+ }
+ } else {
+ for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) {
+ $temp = ~$r_value[$i] & 0xFFFFFF;
+ for ($j = 1; ($temp >> $j) & 1; ++$j);
+ if ($j != 25) {
+ break;
+ }
+ }
+ $s = 26 * $i + $j - 1;
+ $r->_rshift($s);
+ }
+
+ for ($i = 0; $i < $t; ++$i) {
+ $a = $this->random($two, $n_2);
+ $y = $a->modPow($r, $n);
+
+ if (!$y->equals($one) && !$y->equals($n_1)) {
+ for ($j = 1; $j < $s && !$y->equals($n_1); ++$j) {
+ $y = $y->modPow($two, $n);
+ if ($y->equals($one)) {
+ return false;
+ }
+ }
+
+ if (!$y->equals($n_1)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Logical Left Shift
+ *
+ * Shifts BigInteger's by $shift bits.
+ *
+ * @param Integer $shift
+ * @access private
+ */
+ function _lshift($shift)
+ {
+ if ( $shift == 0 ) {
+ return;
+ }
+
+ $num_digits = (int) ($shift / 26);
+ $shift %= 26;
+ $shift = 1 << $shift;
+
+ $carry = 0;
+
+ for ($i = 0; $i < count($this->value); ++$i) {
+ $temp = $this->value[$i] * $shift + $carry;
+ $carry = (int) ($temp / 0x4000000);
+ $this->value[$i] = (int) ($temp - $carry * 0x4000000);
+ }
+
+ if ( $carry ) {
+ $this->value[] = $carry;
+ }
+
+ while ($num_digits--) {
+ array_unshift($this->value, 0);
+ }
+ }
+
+ /**
+ * Logical Right Shift
+ *
+ * Shifts BigInteger's by $shift bits.
+ *
+ * @param Integer $shift
+ * @access private
+ */
+ function _rshift($shift)
+ {
+ if ($shift == 0) {
+ return;
+ }
+
+ $num_digits = (int) ($shift / 26);
+ $shift %= 26;
+ $carry_shift = 26 - $shift;
+ $carry_mask = (1 << $shift) - 1;
+
+ if ( $num_digits ) {
+ $this->value = array_slice($this->value, $num_digits);
+ }
+
+ $carry = 0;
+
+ for ($i = count($this->value) - 1; $i >= 0; --$i) {
+ $temp = $this->value[$i] >> $shift | $carry;
+ $carry = ($this->value[$i] & $carry_mask) << $carry_shift;
+ $this->value[$i] = $temp;
+ }
+
+ $this->value = $this->_trim($this->value);
+ }
+
+ /**
+ * Normalize
+ *
+ * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision
+ *
+ * @param Math_BigInteger
+ * @return Math_BigInteger
+ * @see _trim()
+ * @access private
+ */
+ function _normalize($result)
+ {
+ $result->precision = $this->precision;
+ $result->bitmask = $this->bitmask;
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ if (!empty($result->bitmask->value)) {
+ $result->value = gmp_and($result->value, $result->bitmask->value);
+ }
+
+ return $result;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if (!empty($result->bitmask->value)) {
+ $result->value = bcmod($result->value, $result->bitmask->value);
+ }
+
+ return $result;
+ }
+
+ $value = &$result->value;
+
+ if ( !count($value) ) {
+ return $result;
+ }
+
+ $value = $this->_trim($value);
+
+ if (!empty($result->bitmask->value)) {
+ $length = min(count($value), count($this->bitmask->value));
+ $value = array_slice($value, 0, $length);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $value[$i] = $value[$i] & $this->bitmask->value[$i];
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Trim
+ *
+ * Removes leading zeros
+ *
+ * @return Math_BigInteger
+ * @access private
+ */
+ function _trim($value)
+ {
+ for ($i = count($value) - 1; $i >= 0; --$i) {
+ if ( $value[$i] ) {
+ break;
+ }
+ unset($value[$i]);
+ }
+
+ return $value;
+ }
+
+ /**
+ * Array Repeat
+ *
+ * @param $input Array
+ * @param $multiplier mixed
+ * @return Array
+ * @access private
+ */
+ function _array_repeat($input, $multiplier)
+ {
+ return ($multiplier) ? array_fill(0, $multiplier, $input) : array();
+ }
+
+ /**
+ * Logical Left Shift
+ *
+ * Shifts binary strings $shift bits, essentially multiplying by 2**$shift.
+ *
+ * @param $x String
+ * @param $shift Integer
+ * @return String
+ * @access private
+ */
+ function _base256_lshift(&$x, $shift)
+ {
+ if ($shift == 0) {
+ return;
+ }
+
+ $num_bytes = $shift >> 3; // eg. floor($shift/8)
+ $shift &= 7; // eg. $shift % 8
+
+ $carry = 0;
+ for ($i = strlen($x) - 1; $i >= 0; --$i) {
+ $temp = ord($x[$i]) << $shift | $carry;
+ $x[$i] = chr($temp);
+ $carry = $temp >> 8;
+ }
+ $carry = ($carry != 0) ? chr($carry) : '';
+ $x = $carry . $x . str_repeat(chr(0), $num_bytes);
+ }
+
+ /**
+ * Logical Right Shift
+ *
+ * Shifts binary strings $shift bits, essentially dividing by 2**$shift and returning the remainder.
+ *
+ * @param $x String
+ * @param $shift Integer
+ * @return String
+ * @access private
+ */
+ function _base256_rshift(&$x, $shift)
+ {
+ if ($shift == 0) {
+ $x = ltrim($x, chr(0));
+ return '';
+ }
+
+ $num_bytes = $shift >> 3; // eg. floor($shift/8)
+ $shift &= 7; // eg. $shift % 8
+
+ $remainder = '';
+ if ($num_bytes) {
+ $start = $num_bytes > strlen($x) ? -strlen($x) : -$num_bytes;
+ $remainder = substr($x, $start);
+ $x = substr($x, 0, -$num_bytes);
+ }
+
+ $carry = 0;
+ $carry_shift = 8 - $shift;
+ for ($i = 0; $i < strlen($x); ++$i) {
+ $temp = (ord($x[$i]) >> $shift) | $carry;
+ $carry = (ord($x[$i]) << $carry_shift) & 0xFF;
+ $x[$i] = chr($temp);
+ }
+ $x = ltrim($x, chr(0));
+
+ $remainder = chr($carry >> $carry_shift) . $remainder;
+
+ return ltrim($remainder, chr(0));
+ }
+
+ // one quirk about how the following functions are implemented is that PHP defines N to be an unsigned long
+ // at 32-bits, while java's longs are 64-bits.
+
+ /**
+ * Converts 32-bit integers to bytes.
+ *
+ * @param Integer $x
+ * @return String
+ * @access private
+ */
+ function _int2bytes($x)
+ {
+ return ltrim(pack('N', $x), chr(0));
+ }
+
+ /**
+ * Converts bytes to 32-bit integers
+ *
+ * @param String $x
+ * @return Integer
+ * @access private
+ */
+ function _bytes2int($x)
+ {
+ $temp = unpack('Nint', str_pad($x, 4, chr(0), STR_PAD_LEFT));
+ return $temp['int'];
+ }
+
+ /**
+ * DER-encode an integer
+ *
+ * The ability to DER-encode integers is needed to create RSA public keys for use with OpenSSL
+ *
+ * @see modPow()
+ * @access private
+ * @param Integer $length
+ * @return String
+ */
+ function _encodeASN1Length($length)
+ {
+ if ($length <= 0x7F) {
+ return chr($length);
+ }
+
+ $temp = ltrim(pack('N', $length), chr(0));
+ return pack('Ca*', 0x80 | strlen($temp), $temp);
+ }
+} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php
new file mode 100644
index 00000000000..8db087d3d99
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php
@@ -0,0 +1,2029 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of SFTP.
+ *
+ * PHP versions 4 and 5
+ *
+ * Currently only supports SFTPv2 and v3, which, according to wikipedia.org, "is the most widely used version,
+ * implemented by the popular OpenSSH SFTP server". If you want SFTPv4/5/6 support, provide me with access
+ * to an SFTPv4/5/6 server.
+ *
+ * The API for this library is modeled after the API from PHP's {@link http://php.net/book.ftp FTP extension}.
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Net/SFTP.php');
+ *
+ * $sftp = new Net_SFTP('www.domain.tld');
+ * if (!$sftp->login('username', 'password')) {
+ * exit('Login Failed');
+ * }
+ *
+ * echo $sftp->pwd() . "\r\n";
+ * $sftp->put('filename.ext', 'hello, world!');
+ * print_r($sftp->nlist());
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Net
+ * @package Net_SFTP
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMIX Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Net_SSH2
+ */
+if (!class_exists('Net_SSH2')) {
+ require_once('Net/SSH2.php');
+}
+
+/**#@+
+ * @access public
+ * @see Net_SFTP::getLog()
+ */
+/**
+ * Returns the message numbers
+ */
+define('NET_SFTP_LOG_SIMPLE', NET_SSH2_LOG_SIMPLE);
+/**
+ * Returns the message content
+ */
+define('NET_SFTP_LOG_COMPLEX', NET_SSH2_LOG_COMPLEX);
+/**
+ * Outputs the message content in real-time.
+ */
+define('NET_SFTP_LOG_REALTIME', 3);
+/**#@-*/
+
+/**
+ * SFTP channel constant
+ *
+ * Net_SSH2::exec() uses 0 and Net_SSH2::read() / Net_SSH2::write() use 1.
+ *
+ * @see Net_SSH2::_send_channel_packet()
+ * @see Net_SSH2::_get_channel_packet()
+ * @access private
+ */
+define('NET_SFTP_CHANNEL', 2);
+
+/**#@+
+ * @access public
+ * @see Net_SFTP::put()
+ */
+/**
+ * Reads data from a local file.
+ */
+define('NET_SFTP_LOCAL_FILE', 1);
+/**
+ * Reads data from a string.
+ */
+// this value isn't really used anymore but i'm keeping it reserved for historical reasons
+define('NET_SFTP_STRING', 2);
+/**
+ * Resumes an upload
+ */
+define('NET_SFTP_RESUME', 4);
+/**#@-*/
+
+/**
+ * Pure-PHP implementations of SFTP.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Net_SFTP
+ */
+class Net_SFTP extends Net_SSH2 {
+ /**
+ * Packet Types
+ *
+ * @see Net_SFTP::Net_SFTP()
+ * @var Array
+ * @access private
+ */
+ var $packet_types = array();
+
+ /**
+ * Status Codes
+ *
+ * @see Net_SFTP::Net_SFTP()
+ * @var Array
+ * @access private
+ */
+ var $status_codes = array();
+
+ /**
+ * The Request ID
+ *
+ * The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support
+ * concurrent actions, so it's somewhat academic, here.
+ *
+ * @var Integer
+ * @see Net_SFTP::_send_sftp_packet()
+ * @access private
+ */
+ var $request_id = false;
+
+ /**
+ * The Packet Type
+ *
+ * The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support
+ * concurrent actions, so it's somewhat academic, here.
+ *
+ * @var Integer
+ * @see Net_SFTP::_get_sftp_packet()
+ * @access private
+ */
+ var $packet_type = -1;
+
+ /**
+ * Packet Buffer
+ *
+ * @var String
+ * @see Net_SFTP::_get_sftp_packet()
+ * @access private
+ */
+ var $packet_buffer = '';
+
+ /**
+ * Extensions supported by the server
+ *
+ * @var Array
+ * @see Net_SFTP::_initChannel()
+ * @access private
+ */
+ var $extensions = array();
+
+ /**
+ * Server SFTP version
+ *
+ * @var Integer
+ * @see Net_SFTP::_initChannel()
+ * @access private
+ */
+ var $version;
+
+ /**
+ * Current working directory
+ *
+ * @var String
+ * @see Net_SFTP::_realpath()
+ * @see Net_SFTP::chdir()
+ * @access private
+ */
+ var $pwd = false;
+
+ /**
+ * Packet Type Log
+ *
+ * @see Net_SFTP::getLog()
+ * @var Array
+ * @access private
+ */
+ var $packet_type_log = array();
+
+ /**
+ * Packet Log
+ *
+ * @see Net_SFTP::getLog()
+ * @var Array
+ * @access private
+ */
+ var $packet_log = array();
+
+ /**
+ * Error information
+ *
+ * @see Net_SFTP::getSFTPErrors()
+ * @see Net_SFTP::getLastSFTPError()
+ * @var String
+ * @access private
+ */
+ var $sftp_errors = array();
+
+ /**
+ * File Type
+ *
+ * @see Net_SFTP::_parseLongname()
+ * @var Integer
+ * @access private
+ */
+ var $fileType = 0;
+
+ /**
+ * Directory Cache
+ *
+ * Rather than always having to open a directory and close it immediately there after to see if a file is a directory or
+ * rather than always
+ *
+ * @see Net_SFTP::_save_dir()
+ * @see Net_SFTP::_remove_dir()
+ * @see Net_SFTP::_is_dir()
+ * @var Array
+ * @access private
+ */
+ var $dirs = array();
+
+ /**
+ * Default Constructor.
+ *
+ * Connects to an SFTP server
+ *
+ * @param String $host
+ * @param optional Integer $port
+ * @param optional Integer $timeout
+ * @return Net_SFTP
+ * @access public
+ */
+ function Net_SFTP($host, $port = 22, $timeout = 10)
+ {
+ parent::Net_SSH2($host, $port, $timeout);
+ $this->packet_types = array(
+ 1 => 'NET_SFTP_INIT',
+ 2 => 'NET_SFTP_VERSION',
+ /* the format of SSH_FXP_OPEN changed between SFTPv4 and SFTPv5+:
+ SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.1
+ pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 */
+ 3 => 'NET_SFTP_OPEN',
+ 4 => 'NET_SFTP_CLOSE',
+ 5 => 'NET_SFTP_READ',
+ 6 => 'NET_SFTP_WRITE',
+ 7 => 'NET_SFTP_LSTAT',
+ 9 => 'NET_SFTP_SETSTAT',
+ 11 => 'NET_SFTP_OPENDIR',
+ 12 => 'NET_SFTP_READDIR',
+ 13 => 'NET_SFTP_REMOVE',
+ 14 => 'NET_SFTP_MKDIR',
+ 15 => 'NET_SFTP_RMDIR',
+ 16 => 'NET_SFTP_REALPATH',
+ 17 => 'NET_SFTP_STAT',
+ /* the format of SSH_FXP_RENAME changed between SFTPv4 and SFTPv5+:
+ SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
+ pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.5 */
+ 18 => 'NET_SFTP_RENAME',
+
+ 101=> 'NET_SFTP_STATUS',
+ 102=> 'NET_SFTP_HANDLE',
+ /* the format of SSH_FXP_NAME changed between SFTPv3 and SFTPv4+:
+ SFTPv4+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.4
+ pre-SFTPv4 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-7 */
+ 103=> 'NET_SFTP_DATA',
+ 104=> 'NET_SFTP_NAME',
+ 105=> 'NET_SFTP_ATTRS',
+
+ 200=> 'NET_SFTP_EXTENDED'
+ );
+ $this->status_codes = array(
+ 0 => 'NET_SFTP_STATUS_OK',
+ 1 => 'NET_SFTP_STATUS_EOF',
+ 2 => 'NET_SFTP_STATUS_NO_SUCH_FILE',
+ 3 => 'NET_SFTP_STATUS_PERMISSION_DENIED',
+ 4 => 'NET_SFTP_STATUS_FAILURE',
+ 5 => 'NET_SFTP_STATUS_BAD_MESSAGE',
+ 6 => 'NET_SFTP_STATUS_NO_CONNECTION',
+ 7 => 'NET_SFTP_STATUS_CONNECTION_LOST',
+ 8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED'
+ );
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1
+ // the order, in this case, matters quite a lot - see Net_SFTP::_parseAttributes() to understand why
+ $this->attributes = array(
+ 0x00000001 => 'NET_SFTP_ATTR_SIZE',
+ 0x00000002 => 'NET_SFTP_ATTR_UIDGID', // defined in SFTPv3, removed in SFTPv4+
+ 0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS',
+ 0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME',
+ // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers
+ // yields inconsistent behavior depending on how php is compiled. so we left shift -1 (which, in
+ // two's compliment, consists of all 1 bits) by 31. on 64-bit systems this'll yield 0xFFFFFFFF80000000.
+ // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored.
+ -1 << 31 => 'NET_SFTP_ATTR_EXTENDED'
+ );
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3
+ // the flag definitions change somewhat in SFTPv5+. if SFTPv5+ support is added to this library, maybe name
+ // the array for that $this->open5_flags and similarily alter the constant names.
+ $this->open_flags = array(
+ 0x00000001 => 'NET_SFTP_OPEN_READ',
+ 0x00000002 => 'NET_SFTP_OPEN_WRITE',
+ 0x00000004 => 'NET_SFTP_OPEN_APPEND',
+ 0x00000008 => 'NET_SFTP_OPEN_CREATE',
+ 0x00000010 => 'NET_SFTP_OPEN_TRUNCATE'
+ );
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2
+ // see Net_SFTP::_parseLongname() for an explanation
+ $this->file_types = array(
+ 1 => 'NET_SFTP_TYPE_REGULAR',
+ 2 => 'NET_SFTP_TYPE_DIRECTORY',
+ 3 => 'NET_SFTP_TYPE_SYMLINK',
+ 4 => 'NET_SFTP_TYPE_SPECIAL'
+ );
+ $this->_define_array(
+ $this->packet_types,
+ $this->status_codes,
+ $this->attributes,
+ $this->open_flags,
+ $this->file_types
+ );
+ }
+
+ /**
+ * Login
+ *
+ * @param String $username
+ * @param optional String $password
+ * @return Boolean
+ * @access public
+ */
+ function login($username, $password = '')
+ {
+ if (!parent::login($username, $password)) {
+ return false;
+ }
+
+ $this->window_size_client_to_server[NET_SFTP_CHANNEL] = $this->window_size;
+
+ $packet = pack('CNa*N3',
+ NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SFTP_CHANNEL, $this->window_size, 0x4000);
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_OPEN;
+
+ $response = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+ if ($response === false) {
+ return false;
+ }
+
+ $packet = pack('CNNa*CNa*',
+ NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SFTP_CHANNEL], strlen('subsystem'), 'subsystem', 1, strlen('sftp'), 'sftp');
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+ $response = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+ if ($response === false) {
+ return false;
+ }
+
+ $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_DATA;
+
+ if (!$this->_send_sftp_packet(NET_SFTP_INIT, "\0\0\0\3")) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_VERSION) {
+ user_error('Expected SSH_FXP_VERSION');
+ return false;
+ }
+
+ extract(unpack('Nversion', $this->_string_shift($response, 4)));
+ $this->version = $version;
+ while (!empty($response)) {
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $key = $this->_string_shift($response, $length);
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $value = $this->_string_shift($response, $length);
+ $this->extensions[$key] = $value;
+ }
+
+ /*
+ SFTPv4+ defines a 'newline' extension. SFTPv3 seems to have unofficial support for it via 'newline@vandyke.com',
+ however, I'm not sure what 'newline@vandyke.com' is supposed to do (the fact that it's unofficial means that it's
+ not in the official SFTPv3 specs) and 'newline@vandyke.com' / 'newline' are likely not drop-in substitutes for
+ one another due to the fact that 'newline' comes with a SSH_FXF_TEXT bitmask whereas it seems unlikely that
+ 'newline@vandyke.com' would.
+ */
+ /*
+ if (isset($this->extensions['newline@vandyke.com'])) {
+ $this->extensions['newline'] = $this->extensions['newline@vandyke.com'];
+ unset($this->extensions['newline@vandyke.com']);
+ }
+ */
+
+ $this->request_id = 1;
+
+ /*
+ A Note on SFTPv4/5/6 support:
+ <http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-5.1> states the following:
+
+ "If the client wishes to interoperate with servers that support noncontiguous version
+ numbers it SHOULD send '3'"
+
+ Given that the server only sends its version number after the client has already done so, the above
+ seems to be suggesting that v3 should be the default version. This makes sense given that v3 is the
+ most popular.
+
+ <http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-5.5> states the following;
+
+ "If the server did not send the "versions" extension, or the version-from-list was not included, the
+ server MAY send a status response describing the failure, but MUST then close the channel without
+ processing any further requests."
+
+ So what do you do if you have a client whose initial SSH_FXP_INIT packet says it implements v3 and
+ a server whose initial SSH_FXP_VERSION reply says it implements v4 and only v4? If it only implements
+ v4, the "versions" extension is likely not going to have been sent so version re-negotiation as discussed
+ in draft-ietf-secsh-filexfer-13 would be quite impossible. As such, what Net_SFTP would do is close the
+ channel and reopen it with a new and updated SSH_FXP_INIT packet.
+ */
+ switch ($this->version) {
+ case 2:
+ case 3:
+ break;
+ default:
+ return false;
+ }
+
+ $this->pwd = $this->_realpath('.', false);
+
+ $this->_save_dir($this->pwd);
+
+ return true;
+ }
+
+ /**
+ * Returns the current directory name
+ *
+ * @return Mixed
+ * @access public
+ */
+ function pwd()
+ {
+ return $this->pwd;
+ }
+
+ /**
+ * Logs errors
+ *
+ * @param String $response
+ * @param optional Integer $status
+ * @access public
+ */
+ function _logError($response, $status = -1) {
+ if ($status == -1) {
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ }
+
+ $error = $this->status_codes[$status];
+
+ if ($this->version > 2) {
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $this->sftp_errors[] = $error . ': ' . $this->_string_shift($response, $length);
+ } else {
+ $this->sftp_errors[] = $error;
+ }
+ }
+
+ /**
+ * Canonicalize the Server-Side Path Name
+ *
+ * SFTP doesn't provide a mechanism by which the current working directory can be changed, so we'll emulate it. Returns
+ * the absolute (canonicalized) path.
+ *
+ * @see Net_SFTP::chdir()
+ * @param String $dir
+ * @return Mixed
+ * @access private
+ */
+ function _realpath($dir, $check_dir = true)
+ {
+ if ($check_dir && $this->_is_dir($dir)) {
+ return true;
+ }
+
+ /*
+ "This protocol represents file names as strings. File names are
+ assumed to use the slash ('/') character as a directory separator.
+
+ File names starting with a slash are "absolute", and are relative to
+ the root of the file system. Names starting with any other character
+ are relative to the user's default directory (home directory). Note
+ that identifying the user is assumed to take place outside of this
+ protocol."
+
+ -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-6
+ */
+ $file = '';
+ if ($this->pwd !== false) {
+ // if the SFTP server returned the canonicalized path even for non-existant files this wouldn't be necessary
+ // on OpenSSH it isn't necessary but on other SFTP servers it is. that and since the specs say nothing on
+ // the subject, we'll go ahead and work around it with the following.
+ if (empty($dir) || $dir[strlen($dir) - 1] != '/') {
+ $file = basename($dir);
+ $dir = dirname($dir);
+ }
+
+ $dir = $dir[0] == '/' ? '/' . rtrim(substr($dir, 1), '/') : rtrim($dir, '/');
+
+ if ($dir == '.' || $dir == $this->pwd) {
+ $temp = $this->pwd;
+ if (!empty($file)) {
+ $temp.= '/' . $file;
+ }
+ return $temp;
+ }
+
+ if ($dir[0] != '/') {
+ $dir = $this->pwd . '/' . $dir;
+ }
+ // on the surface it seems like maybe resolving a path beginning with / is unnecessary, but such paths
+ // can contain .'s and ..'s just like any other. we could parse those out as appropriate or we can let
+ // the server do it. we'll do the latter.
+ }
+
+ /*
+ that SSH_FXP_REALPATH returns SSH_FXP_NAME does not necessarily mean that anything actually exists at the
+ specified path. generally speaking, no attributes are returned with this particular SSH_FXP_NAME packet
+ regardless of whether or not a file actually exists. and in SFTPv3, the longname field and the filename
+ field match for this particular SSH_FXP_NAME packet. for other SSH_FXP_NAME packets, this will likely
+ not be the case, but for this one, it is.
+ */
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.9
+ if (!$this->_send_sftp_packet(NET_SFTP_REALPATH, pack('Na*', strlen($dir), $dir))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_NAME:
+ // although SSH_FXP_NAME is implemented differently in SFTPv3 than it is in SFTPv4+, the following
+ // should work on all SFTP versions since the only part of the SSH_FXP_NAME packet the following looks
+ // at is the first part and that part is defined the same in SFTP versions 3 through 6.
+ $this->_string_shift($response, 4); // skip over the count - it should be 1, anyway
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $realpath = $this->_string_shift($response, $length);
+ // the following is SFTPv3 only code. see Net_SFTP::_parseLongname() for more information.
+ // per the above comment, this is a shot in the dark that, on most servers, won't help us in determining
+ // the file type for Net_SFTP::stat() and Net_SFTP::lstat() but it's worth a shot.
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $this->fileType = $this->_parseLongname($this->_string_shift($response, $length));
+ break;
+ case NET_SFTP_STATUS:
+ $this->_logError($response);
+ return false;
+ default:
+ user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS');
+ return false;
+ }
+
+ // if $this->pwd isn't set than the only thing $realpath could be is for '.', which is pretty much guaranteed to
+ // be a bonafide directory
+ if (!empty($file)) {
+ $realpath.= '/' . $file;
+ }
+
+ return $realpath;
+ }
+
+ /**
+ * Changes the current directory
+ *
+ * @param String $dir
+ * @return Boolean
+ * @access public
+ */
+ function chdir($dir)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ if ($dir[strlen($dir) - 1] != '/') {
+ $dir.= '/';
+ }
+
+ // confirm that $dir is, in fact, a valid directory
+ if ($this->_is_dir($dir)) {
+ $this->pwd = $dir;
+ return true;
+ }
+
+ $dir = $this->_realpath($dir, false);
+
+ if ($this->_is_dir($dir)) {
+ $this->pwd = $dir;
+ return true;
+ }
+
+ if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) {
+ return false;
+ }
+
+ // see Net_SFTP::nlist() for a more thorough explanation of the following
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_HANDLE:
+ $handle = substr($response, 4);
+ break;
+ case NET_SFTP_STATUS:
+ $this->_logError($response);
+ return false;
+ default:
+ user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+ return false;
+ }
+
+ if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ return false;
+ }
+
+ $this->_save_dir($dir);
+
+ $this->pwd = $dir;
+ return true;
+ }
+
+ /**
+ * Returns a list of files in the given directory
+ *
+ * @param optional String $dir
+ * @return Mixed
+ * @access public
+ */
+ function nlist($dir = '.')
+ {
+ return $this->_list($dir, false);
+ }
+
+ /**
+ * Returns a detailed list of files in the given directory
+ *
+ * @param optional String $dir
+ * @return Mixed
+ * @access public
+ */
+ function rawlist($dir = '.')
+ {
+ return $this->_list($dir, true);
+ }
+
+ /**
+ * Reads a list, be it detailed or not, of files in the given directory
+ *
+ * $realpath exists because, in the case of the recursive deletes and recursive chmod's $realpath has already
+ * been calculated.
+ *
+ * @param String $dir
+ * @param optional Boolean $raw
+ * @param optional Boolean $realpath
+ * @return Mixed
+ * @access private
+ */
+ function _list($dir, $raw = true, $realpath = true)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $dir = $this->_realpath($dir . '/');
+ if ($dir === false) {
+ return false;
+ }
+
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.2
+ if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_HANDLE:
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.2
+ // since 'handle' is the last field in the SSH_FXP_HANDLE packet, we'll just remove the first four bytes that
+ // represent the length of the string and leave it at that
+ $handle = substr($response, 4);
+ break;
+ case NET_SFTP_STATUS:
+ // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+ $this->_logError($response);
+ return false;
+ default:
+ user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+ return false;
+ }
+
+ $this->_save_dir($dir);
+
+ $contents = array();
+ while (true) {
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.2
+ // why multiple SSH_FXP_READDIR packets would be sent when the response to a single one can span arbitrarily many
+ // SSH_MSG_CHANNEL_DATA messages is not known to me.
+ if (!$this->_send_sftp_packet(NET_SFTP_READDIR, pack('Na*', strlen($handle), $handle))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_NAME:
+ extract(unpack('Ncount', $this->_string_shift($response, 4)));
+ for ($i = 0; $i < $count; $i++) {
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $shortname = $this->_string_shift($response, $length);
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $longname = $this->_string_shift($response, $length);
+ $attributes = $this->_parseAttributes($response); // we also don't care about the attributes
+ if (!$raw) {
+ $contents[] = $shortname;
+ } else {
+ $contents[$shortname] = $attributes;
+ $fileType = $this->_parseLongname($longname);
+ if ($fileType) {
+ if ($fileType == NET_SFTP_TYPE_DIRECTORY && ($shortname != '.' && $shortname != '..')) {
+ $this->_save_dir($dir . '/' . $shortname);
+ }
+ $contents[$shortname]['type'] = $fileType;
+ }
+ }
+ // SFTPv6 has an optional boolean end-of-list field, but we'll ignore that, since the
+ // final SSH_FXP_STATUS packet should tell us that, already.
+ }
+ break;
+ case NET_SFTP_STATUS:
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_EOF) {
+ $this->_logError($response, $status);
+ return false;
+ }
+ break 2;
+ default:
+ user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS');
+ return false;
+ }
+ }
+
+ if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+ return false;
+ }
+
+ // "The client MUST release all resources associated with the handle regardless of the status."
+ // -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ return false;
+ }
+
+ return $contents;
+ }
+
+ /**
+ * Returns the file size, in bytes, or false, on failure
+ *
+ * Files larger than 4GB will show up as being exactly 4GB.
+ *
+ * @param String $filename
+ * @return Mixed
+ * @access public
+ */
+ function size($filename)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $filename = $this->_realpath($filename);
+ if ($filename === false) {
+ return false;
+ }
+
+ return $this->_size($filename);
+ }
+
+ /**
+ * Save directories to cache
+ *
+ * @param String $dir
+ * @access private
+ */
+ function _save_dir($dir)
+ {
+ // preg_replace('#^/|/(?=/)|/$#', '', $dir) == str_replace('//', '/', trim($dir, '/'))
+ $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir));
+
+ $temp = &$this->dirs;
+ foreach ($dirs as $dir) {
+ if (!isset($temp[$dir])) {
+ $temp[$dir] = array();
+ }
+ $temp = &$temp[$dir];
+ }
+ }
+
+ /**
+ * Remove directories from cache
+ *
+ * @param String $dir
+ * @access private
+ */
+ function _remove_dir($dir)
+ {
+ $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir));
+
+ $temp = &$this->dirs;
+ foreach ($dirs as $dir) {
+ if ($dir == end($dirs)) {
+ unset($temp[$dir]);
+ return true;
+ }
+ if (!isset($temp[$dir])) {
+ return false;
+ }
+ $temp = &$temp[$dir];
+ }
+ }
+
+ /**
+ * Checks cache for directory
+ *
+ * @param String $dir
+ * @access private
+ */
+ function _is_dir($dir)
+ {
+ $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir));
+
+ $temp = &$this->dirs;
+ foreach ($dirs as $dir) {
+ if (!isset($temp[$dir])) {
+ return false;
+ }
+ $temp = &$temp[$dir];
+ }
+ }
+
+ /**
+ * Returns general information about a file.
+ *
+ * Returns an array on success and false otherwise.
+ *
+ * @param String $filename
+ * @return Mixed
+ * @access public
+ */
+ function stat($filename)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $filename = $this->_realpath($filename);
+ if ($filename === false) {
+ return false;
+ }
+
+ $stat = $this->_stat($filename, NET_SFTP_STAT);
+ if ($stat === false) {
+ return false;
+ }
+
+ $pwd = $this->pwd;
+ $stat['type'] = $this->chdir($filename) ?
+ NET_SFTP_TYPE_DIRECTORY :
+ NET_SFTP_TYPE_REGULAR;
+ $this->pwd = $pwd;
+
+ return $stat;
+ }
+
+ /**
+ * Returns general information about a file or symbolic link.
+ *
+ * Returns an array on success and false otherwise.
+ *
+ * @param String $filename
+ * @return Mixed
+ * @access public
+ */
+ function lstat($filename)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $filename = $this->_realpath($filename);
+ if ($filename === false) {
+ return false;
+ }
+
+ $lstat = $this->_stat($filename, NET_SFTP_LSTAT);
+ $stat = $this->_stat($filename, NET_SFTP_STAT);
+ if ($stat === false) {
+ return false;
+ }
+
+ if ($lstat != $stat) {
+ return array_merge($lstat, array('type' => NET_SFTP_TYPE_SYMLINK));
+ }
+
+ $pwd = $this->pwd;
+ $lstat['type'] = $this->chdir($filename) ?
+ NET_SFTP_TYPE_DIRECTORY :
+ NET_SFTP_TYPE_REGULAR;
+ $this->pwd = $pwd;
+
+ return $lstat;
+ }
+
+ /**
+ * Returns general information about a file or symbolic link
+ *
+ * Determines information without calling Net_SFTP::_realpath().
+ * The second parameter can be either NET_SFTP_STAT or NET_SFTP_LSTAT.
+ *
+ * @param String $filename
+ * @param Integer $type
+ * @return Mixed
+ * @access private
+ */
+ function _stat($filename, $type)
+ {
+ // SFTPv4+ adds an additional 32-bit integer field - flags - to the following:
+ $packet = pack('Na*', strlen($filename), $filename);
+ if (!$this->_send_sftp_packet($type, $packet)) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_ATTRS:
+ $attributes = $this->_parseAttributes($response);
+ if ($this->fileType) {
+ $attributes['type'] = $this->fileType;
+ }
+ return $attributes;
+ case NET_SFTP_STATUS:
+ $this->_logError($response);
+ return false;
+ }
+
+ user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS');
+ return false;
+ }
+
+ /**
+ * Attempt to identify the file type
+ *
+ * @param String $path
+ * @param Array $stat
+ * @param Array $lstat
+ * @return Integer
+ * @access private
+ */
+ function _identify_type($path, $stat1, $stat2)
+ {
+ $stat1 = $this->_stat($path, $stat1);
+ $stat2 = $this->_stat($path, $stat2);
+
+ if ($stat1 != $stat2) {
+ return array_merge($stat1, array('type' => NET_SFTP_TYPE_SYMLINK));
+ }
+
+ $pwd = $this->pwd;
+ $stat1['type'] = $this->chdir($path) ?
+ NET_SFTP_TYPE_DIRECTORY :
+ NET_SFTP_TYPE_REGULAR;
+ $this->pwd = $pwd;
+
+ return $stat1;
+ }
+
+ /**
+ * Returns the file size, in bytes, or false, on failure
+ *
+ * Determines the size without calling Net_SFTP::_realpath()
+ *
+ * @param String $filename
+ * @return Mixed
+ * @access private
+ */
+ function _size($filename)
+ {
+ $result = $this->_stat($filename, NET_SFTP_LSTAT);
+ if ($result === false) {
+ return false;
+ }
+ return isset($result['size']) ? $result['size'] : -1;
+ }
+
+ /**
+ * Set permissions on a file.
+ *
+ * Returns the new file permissions on success or FALSE on error.
+ *
+ * @param Integer $mode
+ * @param String $filename
+ * @return Mixed
+ * @access public
+ */
+ function chmod($mode, $filename, $recursive = false)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $filename = $this->_realpath($filename);
+ if ($filename === false) {
+ return false;
+ }
+
+ if ($recursive) {
+ $i = 0;
+ $result = $this->_chmod_recursive($mode, $filename, $i);
+ $this->_read_put_responses($i);
+ return $result;
+ }
+
+ // SFTPv4+ has an additional byte field - type - that would need to be sent, as well. setting it to
+ // SSH_FILEXFER_TYPE_UNKNOWN might work. if not, we'd have to do an SSH_FXP_STAT before doing an SSH_FXP_SETSTAT.
+ $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
+ if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($filename), $filename, $attr))) {
+ return false;
+ }
+
+ /*
+ "Because some systems must use separate system calls to set various attributes, it is possible that a failure
+ response will be returned, but yet some of the attributes may be have been successfully modified. If possible,
+ servers SHOULD avoid this situation; however, clients MUST be aware that this is possible."
+
+ -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.6
+ */
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ }
+
+ // rather than return what the permissions *should* be, we'll return what they actually are. this will also
+ // tell us if the file actually exists.
+ // incidentally, SFTPv4+ adds an additional 32-bit integer field - flags - to the following:
+ $packet = pack('Na*', strlen($filename), $filename);
+ if (!$this->_send_sftp_packet(NET_SFTP_STAT, $packet)) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_ATTRS:
+ $attrs = $this->_parseAttributes($response);
+ return $attrs['permissions'];
+ case NET_SFTP_STATUS:
+ $this->_logError($response);
+ return false;
+ }
+
+ user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS');
+ return false;
+ }
+
+ /**
+ * Recursively chmods directories on the SFTP server
+ *
+ * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.
+ *
+ * @param Integer $mode
+ * @param String $filename
+ * @return Boolean
+ * @access private
+ */
+ function _chmod_recursive($mode, $path, &$i)
+ {
+ if (!$this->_read_put_responses($i)) {
+ return false;
+ }
+ $i = 0;
+ $entries = $this->_list($path, true, false);
+
+ if ($entries === false) {
+ return $this->chmod($mode, $path);
+ }
+
+ // normally $entries would have at least . and .. but it might not if the directories
+ // permissions didn't allow reading
+ if (empty($entries)) {
+ return false;
+ }
+
+ foreach ($entries as $filename=>$props) {
+ if ($filename == '.' || $filename == '..') {
+ continue;
+ }
+
+ if (!isset($props['type'])) {
+ return false;
+ }
+
+ $temp = $path . '/' . $filename;
+ if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {
+ if (!$this->_chmod_recursive($mode, $temp, $i)) {
+ return false;
+ }
+ } else {
+ $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
+ if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($temp), $temp, $attr))) {
+ return false;
+ }
+
+ $i++;
+
+ if ($i >= 50) {
+ if (!$this->_read_put_responses($i)) {
+ return false;
+ }
+ $i = 0;
+ }
+ }
+ }
+
+ $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
+ if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($path), $path, $attr))) {
+ return false;
+ }
+
+ $i++;
+
+ if ($i >= 50) {
+ if (!$this->_read_put_responses($i)) {
+ return false;
+ }
+ $i = 0;
+ }
+
+ return true;
+ }
+
+ /**
+ * Creates a directory.
+ *
+ * @param String $dir
+ * @return Boolean
+ * @access public
+ */
+ function mkdir($dir)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ if ($dir[0] != '/') {
+ $dir = $this->_realpath(rtrim($dir, '/'));
+ if ($dir === false) {
+ return false;
+ }
+ if (!$this->_mkdir_helper($dir)) {
+ return false;
+ }
+ } else {
+ $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir));
+ $temp = '';
+ foreach ($dirs as $dir) {
+ $temp.= '/' . $dir;
+ $result = $this->_mkdir_helper($temp);
+ }
+ if (!$result) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Helper function for directory creation
+ *
+ * @param String $dir
+ * @return Boolean
+ * @access private
+ */
+ function _mkdir_helper($dir)
+ {
+ // by not providing any permissions, hopefully the server will use the logged in users umask - their
+ // default permissions.
+ if (!$this->_send_sftp_packet(NET_SFTP_MKDIR, pack('Na*N', strlen($dir), $dir, 0))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ return false;
+ }
+
+ $this->_save_dir($dir);
+
+ return true;
+ }
+
+ /**
+ * Removes a directory.
+ *
+ * @param String $dir
+ * @return Boolean
+ * @access public
+ */
+ function rmdir($dir)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $dir = $this->_realpath($dir);
+ if ($dir === false) {
+ return false;
+ }
+
+ if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($dir), $dir))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED?
+ $this->_logError($response, $status);
+ return false;
+ }
+
+ $this->_remove_dir($dir);
+
+ return true;
+ }
+
+ /**
+ * Uploads a file to the SFTP server.
+ *
+ * By default, Net_SFTP::put() does not read from the local filesystem. $data is dumped directly into $remote_file.
+ * So, for example, if you set $data to 'filename.ext' and then do Net_SFTP::get(), you will get a file, twelve bytes
+ * long, containing 'filename.ext' as its contents.
+ *
+ * Setting $mode to NET_SFTP_LOCAL_FILE will change the above behavior. With NET_SFTP_LOCAL_FILE, $remote_file will
+ * contain as many bytes as filename.ext does on your local filesystem. If your filename.ext is 1MB then that is how
+ * large $remote_file will be, as well.
+ *
+ * Currently, only binary mode is supported. As such, if the line endings need to be adjusted, you will need to take
+ * care of that, yourself.
+ *
+ * @param String $remote_file
+ * @param String $data
+ * @param optional Integer $mode
+ * @return Boolean
+ * @access public
+ * @internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - Net_SFTP::setMode().
+ */
+ function put($remote_file, $data, $mode = NET_SFTP_STRING)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $remote_file = $this->_realpath($remote_file);
+ if ($remote_file === false) {
+ return false;
+ }
+
+ $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE;
+ // according to the SFTP specs, NET_SFTP_OPEN_APPEND should "force all writes to append data at the end of the file."
+ // in practice, it doesn't seem to do that.
+ //$flags|= ($mode & NET_SFTP_RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE;
+
+ // if NET_SFTP_OPEN_APPEND worked as it should the following (up until the -----------) wouldn't be necessary
+ $offset = 0;
+ if ($mode & NET_SFTP_RESUME) {
+ $size = $this->_size($remote_file);
+ $offset = $size !== false ? $size : 0;
+ } else {
+ $flags|= NET_SFTP_OPEN_TRUNCATE;
+ }
+ // --------------
+
+ $packet = pack('Na*N2', strlen($remote_file), $remote_file, $flags, 0);
+ if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_HANDLE:
+ $handle = substr($response, 4);
+ break;
+ case NET_SFTP_STATUS:
+ $this->_logError($response);
+ return false;
+ default:
+ user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+ return false;
+ }
+
+ $initialize = true;
+
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.3
+ if ($mode & NET_SFTP_LOCAL_FILE) {
+ if (!is_file($data)) {
+ user_error("$data is not a valid file");
+ return false;
+ }
+ $fp = @fopen($data, 'rb');
+ if (!$fp) {
+ return false;
+ }
+ $size = filesize($data);
+ } else {
+ $size = strlen($data);
+ }
+
+ $sent = 0;
+ $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;
+
+ $sftp_packet_size = 4096; // PuTTY uses 4096
+ $i = 0;
+ while ($sent < $size) {
+ $temp = $mode & NET_SFTP_LOCAL_FILE ? fread($fp, $sftp_packet_size) : $this->_string_shift($data, $sftp_packet_size);
+ $packet = pack('Na*N3a*', strlen($handle), $handle, 0, $offset + $sent, strlen($temp), $temp);
+ if (!$this->_send_sftp_packet(NET_SFTP_WRITE, $packet)) {
+ fclose($fp);
+ return false;
+ }
+ $sent+= strlen($temp);
+
+ $i++;
+
+ if ($i == 50) {
+ if (!$this->_read_put_responses($i)) {
+ $i = 0;
+ break;
+ }
+ $i = 0;
+ }
+ }
+
+ if (!$this->_read_put_responses($i)) {
+ return false;
+ }
+
+ if ($mode & NET_SFTP_LOCAL_FILE) {
+ fclose($fp);
+ }
+
+ if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Reads multiple successive SSH_FXP_WRITE responses
+ *
+ * Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i
+ * SSH_FXP_WRITEs, in succession, and then reading $i responses.
+ *
+ * @param Integer $i
+ * @return Boolean
+ * @access private
+ */
+ function _read_put_responses($i)
+ {
+ while ($i--) {
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ break;
+ }
+ }
+
+ return $i < 0;
+ }
+
+ /**
+ * Downloads a file from the SFTP server.
+ *
+ * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if
+ * the operation was unsuccessful. If $local_file is defined, returns true or false depending on the success of the
+ * operation
+ *
+ * @param String $remote_file
+ * @param optional String $local_file
+ * @return Mixed
+ * @access public
+ */
+ function get($remote_file, $local_file = false, $offset = 0, $length = -1)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $remote_file = $this->_realpath($remote_file);
+ if ($remote_file === false) {
+ return false;
+ }
+
+ $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0);
+ if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_HANDLE:
+ $handle = substr($response, 4);
+ break;
+ case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+ $this->_logError($response);
+ return false;
+ default:
+ user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+ return false;
+ }
+
+ if ($local_file !== false) {
+ $fp = fopen($local_file, 'wb');
+ if (!$fp) {
+ return false;
+ }
+ } else {
+ $content = '';
+ }
+
+ $size = (1 << 20) < $length || $length < 0 ? 1 << 20 : $length;
+ $start = $offset;
+ while (true) {
+ $packet = pack('Na*N3', strlen($handle), $handle, 0, $offset, $size);
+ if (!$this->_send_sftp_packet(NET_SFTP_READ, $packet)) {
+ if ($local_file !== false) {
+ fclose($fp);
+ }
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ switch ($this->packet_type) {
+ case NET_SFTP_DATA:
+ $temp = substr($response, 4);
+ $offset+= strlen($temp);
+ if ($local_file === false) {
+ $content.= $temp;
+ } else {
+ fputs($fp, $temp);
+ }
+ break;
+ case NET_SFTP_STATUS:
+ $this->_logError($response);
+ break 2;
+ default:
+ user_error('Expected SSH_FXP_DATA or SSH_FXP_STATUS');
+ if ($local_file !== false) {
+ fclose($fp);
+ }
+ return false;
+ }
+
+ if ($length > 0 && $length <= $offset - $size) {
+ if ($local_file === false) {
+ $content = substr($content, 0, $length);
+ } else {
+ ftruncate($fp, $length);
+ }
+ break;
+ }
+ }
+
+ if ($local_file !== false) {
+ fclose($fp);
+ }
+
+ if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ return false;
+ }
+
+ if (isset($content)) {
+ return $content;
+ }
+
+ return true;
+ }
+
+ /**
+ * Deletes a file on the SFTP server.
+ *
+ * @param String $path
+ * @param Boolean $recursive
+ * @return Boolean
+ * @access public
+ */
+ function delete($path, $recursive = true)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $path = $this->_realpath($path);
+ if ($path === false) {
+ return false;
+ }
+
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
+ if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($path), $path))) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ if (!$recursive) {
+ return false;
+ }
+ $i = 0;
+ $result = $this->_delete_recursive($path, $i);
+ $this->_read_put_responses($i);
+ return $result;
+ }
+
+ return true;
+ }
+
+ /**
+ * Recursively deletes directories on the SFTP server
+ *
+ * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.
+ *
+ * @param String $path
+ * @param Integer $i
+ * @return Boolean
+ * @access private
+ */
+ function _delete_recursive($path, &$i)
+ {
+ if (!$this->_read_put_responses($i)) {
+ return false;
+ }
+ $i = 0;
+ $entries = $this->_list($path, true, false);
+
+ // normally $entries would have at least . and .. but it might not if the directories
+ // permissions didn't allow reading
+ if (empty($entries)) {
+ return false;
+ }
+
+ foreach ($entries as $filename=>$props) {
+ if ($filename == '.' || $filename == '..') {
+ continue;
+ }
+
+ if (!isset($props['type'])) {
+ return false;
+ }
+
+ $temp = $path . '/' . $filename;
+ if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {
+ if (!$this->_delete_recursive($temp, $i)) {
+ return false;
+ }
+ } else {
+ if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($temp), $temp))) {
+ return false;
+ }
+
+ $i++;
+
+ if ($i >= 50) {
+ if (!$this->_read_put_responses($i)) {
+ return false;
+ }
+ $i = 0;
+ }
+ }
+ }
+
+ if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($path), $path))) {
+ return false;
+ }
+ $this->_remove_dir($path);
+
+ $i++;
+
+ if ($i >= 50) {
+ if (!$this->_read_put_responses($i)) {
+ return false;
+ }
+ $i = 0;
+ }
+
+ return true;
+ }
+
+ /**
+ * Renames a file or a directory on the SFTP server
+ *
+ * @param String $oldname
+ * @param String $newname
+ * @return Boolean
+ * @access public
+ */
+ function rename($oldname, $newname)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ $oldname = $this->_realpath($oldname);
+ $newname = $this->_realpath($newname);
+ if ($oldname === false || $newname === false) {
+ return false;
+ }
+
+ // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
+ $packet = pack('Na*Na*', strlen($oldname), $oldname, strlen($newname), $newname);
+ if (!$this->_send_sftp_packet(NET_SFTP_RENAME, $packet)) {
+ return false;
+ }
+
+ $response = $this->_get_sftp_packet();
+ if ($this->packet_type != NET_SFTP_STATUS) {
+ user_error('Expected SSH_FXP_STATUS');
+ return false;
+ }
+
+ // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+ extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+ if ($status != NET_SFTP_STATUS_OK) {
+ $this->_logError($response, $status);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Parse Attributes
+ *
+ * See '7. File Attributes' of draft-ietf-secsh-filexfer-13 for more info.
+ *
+ * @param String $response
+ * @return Array
+ * @access private
+ */
+ function _parseAttributes(&$response)
+ {
+ $attr = array();
+ extract(unpack('Nflags', $this->_string_shift($response, 4)));
+ // SFTPv4+ have a type field (a byte) that follows the above flag field
+ foreach ($this->attributes as $key => $value) {
+ switch ($flags & $key) {
+ case NET_SFTP_ATTR_SIZE: // 0x00000001
+ // size is represented by a 64-bit integer, so we perhaps ought to be doing the following:
+ // $attr['size'] = new Math_BigInteger($this->_string_shift($response, 8), 256);
+ // of course, you shouldn't be using Net_SFTP to transfer files that are in excess of 4GB
+ // (0xFFFFFFFF bytes), anyway. as such, we'll just represent all file sizes that are bigger than
+ // 4GB as being 4GB.
+ extract(unpack('Nupper/Nsize', $this->_string_shift($response, 8)));
+ if ($upper) {
+ $attr['size'] = 0xFFFFFFFF;
+ } else {
+ $attr['size'] = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;
+ }
+ break;
+ case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only)
+ $attr+= unpack('Nuid/Ngid', $this->_string_shift($response, 8));
+ break;
+ case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004
+ $attr+= unpack('Npermissions', $this->_string_shift($response, 4));
+ break;
+ case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008
+ $attr+= unpack('Natime/Nmtime', $this->_string_shift($response, 8));
+ break;
+ case NET_SFTP_ATTR_EXTENDED: // 0x80000000
+ extract(unpack('Ncount', $this->_string_shift($response, 4)));
+ for ($i = 0; $i < $count; $i++) {
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $key = $this->_string_shift($response, $length);
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $attr[$key] = $this->_string_shift($response, $length);
+ }
+ }
+ }
+ return $attr;
+ }
+
+ /**
+ * Parse Longname
+ *
+ * SFTPv3 doesn't provide any easy way of identifying a file type. You could try to open
+ * a file as a directory and see if an error is returned or you could try to parse the
+ * SFTPv3-specific longname field of the SSH_FXP_NAME packet. That's what this function does.
+ * The result is returned using the
+ * {@link http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 SFTPv4 type constants}.
+ *
+ * If the longname is in an unrecognized format bool(false) is returned.
+ *
+ * @param String $longname
+ * @return Mixed
+ * @access private
+ */
+ function _parseLongname($longname)
+ {
+ // http://en.wikipedia.org/wiki/Unix_file_types
+ // http://en.wikipedia.org/wiki/Filesystem_permissions#Notation_of_traditional_Unix_permissions
+ if (preg_match('#^[^/]([r-][w-][xstST-]){3}#', $longname)) {
+ switch ($longname[0]) {
+ case '-':
+ return NET_SFTP_TYPE_REGULAR;
+ case 'd':
+ return NET_SFTP_TYPE_DIRECTORY;
+ case 'l':
+ return NET_SFTP_TYPE_SYMLINK;
+ default:
+ return NET_SFTP_TYPE_SPECIAL;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Sends SFTP Packets
+ *
+ * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
+ *
+ * @param Integer $type
+ * @param String $data
+ * @see Net_SFTP::_get_sftp_packet()
+ * @see Net_SSH2::_send_channel_packet()
+ * @return Boolean
+ * @access private
+ */
+ function _send_sftp_packet($type, $data)
+ {
+ $packet = $this->request_id !== false ?
+ pack('NCNa*', strlen($data) + 5, $type, $this->request_id, $data) :
+ pack('NCa*', strlen($data) + 1, $type, $data);
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+ $result = $this->_send_channel_packet(NET_SFTP_CHANNEL, $packet);
+ $stop = strtok(microtime(), ' ') + strtok('');
+
+ if (defined('NET_SFTP_LOGGING')) {
+ $packet_type = '-> ' . $this->packet_types[$type] .
+ ' (' . round($stop - $start, 4) . 's)';
+ if (NET_SFTP_LOGGING == NET_SFTP_LOG_REALTIME) {
+ echo "<pre>\r\n" . $this->_format_log(array($data), array($packet_type)) . "\r\n</pre>\r\n";
+ flush();
+ ob_flush();
+ } else {
+ $this->packet_type_log[] = $packet_type;
+ if (NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX) {
+ $this->packet_log[] = $data;
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Receives SFTP Packets
+ *
+ * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
+ *
+ * Incidentally, the number of SSH_MSG_CHANNEL_DATA messages has no bearing on the number of SFTP packets present.
+ * There can be one SSH_MSG_CHANNEL_DATA messages containing two SFTP packets or there can be two SSH_MSG_CHANNEL_DATA
+ * messages containing one SFTP packet.
+ *
+ * @see Net_SFTP::_send_sftp_packet()
+ * @return String
+ * @access private
+ */
+ function _get_sftp_packet()
+ {
+ $this->curTimeout = false;
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+
+ // SFTP packet length
+ while (strlen($this->packet_buffer) < 4) {
+ $temp = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+ if (is_bool($temp)) {
+ $this->packet_type = false;
+ $this->packet_buffer = '';
+ return false;
+ }
+ $this->packet_buffer.= $temp;
+ }
+ extract(unpack('Nlength', $this->_string_shift($this->packet_buffer, 4)));
+ $tempLength = $length;
+ $tempLength-= strlen($this->packet_buffer);
+
+ // SFTP packet type and data payload
+ while ($tempLength > 0) {
+ $temp = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+ if (is_bool($temp)) {
+ $this->packet_type = false;
+ $this->packet_buffer = '';
+ return false;
+ }
+ $this->packet_buffer.= $temp;
+ $tempLength-= strlen($temp);
+ }
+
+ $stop = strtok(microtime(), ' ') + strtok('');
+
+ $this->packet_type = ord($this->_string_shift($this->packet_buffer));
+
+ if ($this->request_id !== false) {
+ $this->_string_shift($this->packet_buffer, 4); // remove the request id
+ $length-= 5; // account for the request id and the packet type
+ } else {
+ $length-= 1; // account for the packet type
+ }
+
+ $packet = $this->_string_shift($this->packet_buffer, $length);
+
+ if (defined('NET_SFTP_LOGGING')) {
+ $packet_type = '<- ' . $this->packet_types[$this->packet_type] .
+ ' (' . round($stop - $start, 4) . 's)';
+ if (NET_SFTP_LOGGING == NET_SFTP_LOG_REALTIME) {
+ echo "<pre>\r\n" . $this->_format_log(array($packet), array($packet_type)) . "\r\n</pre>\r\n";
+ flush();
+ ob_flush();
+ } else {
+ $this->packet_type_log[] = $packet_type;
+ if (NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX) {
+ $this->packet_log[] = $packet;
+ }
+ }
+ }
+
+ return $packet;
+ }
+
+ /**
+ * Returns a log of the packets that have been sent and received.
+ *
+ * Returns a string if NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX, an array if NET_SFTP_LOGGING == NET_SFTP_LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING')
+ *
+ * @access public
+ * @return String or Array
+ */
+ function getSFTPLog()
+ {
+ if (!defined('NET_SFTP_LOGGING')) {
+ return false;
+ }
+
+ switch (NET_SFTP_LOGGING) {
+ case NET_SFTP_LOG_COMPLEX:
+ return $this->_format_log($this->packet_log, $this->packet_type_log);
+ break;
+ //case NET_SFTP_LOG_SIMPLE:
+ default:
+ return $this->packet_type_log;
+ }
+ }
+
+ /**
+ * Returns all errors
+ *
+ * @return String
+ * @access public
+ */
+ function getSFTPErrors()
+ {
+ return $this->sftp_errors;
+ }
+
+ /**
+ * Returns the last error
+ *
+ * @return String
+ * @access public
+ */
+ function getLastSFTPError()
+ {
+ return count($this->sftp_errors) ? $this->sftp_errors[count($this->sftp_errors) - 1] : '';
+ }
+
+ /**
+ * Get supported SFTP versions
+ *
+ * @return Array
+ * @access public
+ */
+ function getSupportedVersions()
+ {
+ $temp = array('version' => $this->version);
+ if (isset($this->extensions['versions'])) {
+ $temp['extensions'] = $this->extensions['versions'];
+ }
+ return $temp;
+ }
+
+ /**
+ * Disconnect
+ *
+ * @param Integer $reason
+ * @return Boolean
+ * @access private
+ */
+ function _disconnect($reason)
+ {
+ $this->pwd = false;
+ parent::_disconnect($reason);
+ }
+} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php
new file mode 100644
index 00000000000..8f5c79938e4
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php
@@ -0,0 +1,1577 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of SSHv1.
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Net/SSH1.php');
+ *
+ * $ssh = new Net_SSH1('www.domain.tld');
+ * if (!$ssh->login('username', 'password')) {
+ * exit('Login Failed');
+ * }
+ *
+ * echo $ssh->exec('ls -la');
+ * ?>
+ * </code>
+ *
+ * Here's another short example:
+ * <code>
+ * <?php
+ * include('Net/SSH1.php');
+ *
+ * $ssh = new Net_SSH1('www.domain.tld');
+ * if (!$ssh->login('username', 'password')) {
+ * exit('Login Failed');
+ * }
+ *
+ * echo $ssh->read('username@username:~$');
+ * $ssh->write("ls -la\n");
+ * echo $ssh->read('username@username:~$');
+ * ?>
+ * </code>
+ *
+ * More information on the SSHv1 specification can be found by reading
+ * {@link http://www.snailbook.com/docs/protocol-1.5.txt protocol-1.5.txt}.
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Net
+ * @package Net_SSH1
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: SSH1.php,v 1.15 2010/03/22 22:01:38 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Math_BigInteger
+ *
+ * Used to do RSA encryption.
+ */
+if (!class_exists('Math_BigInteger')) {
+ require_once('Math/BigInteger.php');
+}
+
+/**
+ * Include Crypt_Null
+ */
+//require_once('Crypt/Null.php');
+
+/**
+ * Include Crypt_DES
+ */
+if (!class_exists('Crypt_DES')) {
+ require_once('Crypt/DES.php');
+}
+
+/**
+ * Include Crypt_TripleDES
+ */
+if (!class_exists('Crypt_TripleDES')) {
+ require_once('Crypt/TripleDES.php');
+}
+
+/**
+ * Include Crypt_RC4
+ */
+if (!class_exists('Crypt_RC4')) {
+ require_once('Crypt/RC4.php');
+}
+
+/**
+ * Include Crypt_Random
+ */
+// the class_exists() will only be called if the crypt_random_string function hasn't been defined and
+// will trigger a call to __autoload() if you're wanting to auto-load classes
+// call function_exists() a second time to stop the require_once from being called outside
+// of the auto loader
+if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) {
+ require_once('Crypt/Random.php');
+}
+
+/**#@+
+ * Encryption Methods
+ *
+ * @see Net_SSH1::getSupportedCiphers()
+ * @access public
+ */
+/**
+ * No encryption
+ *
+ * Not supported.
+ */
+define('NET_SSH1_CIPHER_NONE', 0);
+/**
+ * IDEA in CFB mode
+ *
+ * Not supported.
+ */
+define('NET_SSH1_CIPHER_IDEA', 1);
+/**
+ * DES in CBC mode
+ */
+define('NET_SSH1_CIPHER_DES', 2);
+/**
+ * Triple-DES in CBC mode
+ *
+ * All implementations are required to support this
+ */
+define('NET_SSH1_CIPHER_3DES', 3);
+/**
+ * TRI's Simple Stream encryption CBC
+ *
+ * Not supported nor is it defined in the official SSH1 specs. OpenSSH, however, does define it (see cipher.h),
+ * although it doesn't use it (see cipher.c)
+ */
+define('NET_SSH1_CIPHER_BROKEN_TSS', 4);
+/**
+ * RC4
+ *
+ * Not supported.
+ *
+ * @internal According to the SSH1 specs:
+ *
+ * "The first 16 bytes of the session key are used as the key for
+ * the server to client direction. The remaining 16 bytes are used
+ * as the key for the client to server direction. This gives
+ * independent 128-bit keys for each direction."
+ *
+ * This library currently only supports encryption when the same key is being used for both directions. This is
+ * because there's only one $crypto object. Two could be added ($encrypt and $decrypt, perhaps).
+ */
+define('NET_SSH1_CIPHER_RC4', 5);
+/**
+ * Blowfish
+ *
+ * Not supported nor is it defined in the official SSH1 specs. OpenSSH, however, defines it (see cipher.h) and
+ * uses it (see cipher.c)
+ */
+define('NET_SSH1_CIPHER_BLOWFISH', 6);
+/**#@-*/
+
+/**#@+
+ * Authentication Methods
+ *
+ * @see Net_SSH1::getSupportedAuthentications()
+ * @access public
+ */
+/**
+ * .rhosts or /etc/hosts.equiv
+ */
+define('NET_SSH1_AUTH_RHOSTS', 1);
+/**
+ * pure RSA authentication
+ */
+define('NET_SSH1_AUTH_RSA', 2);
+/**
+ * password authentication
+ *
+ * This is the only method that is supported by this library.
+ */
+define('NET_SSH1_AUTH_PASSWORD', 3);
+/**
+ * .rhosts with RSA host authentication
+ */
+define('NET_SSH1_AUTH_RHOSTS_RSA', 4);
+/**#@-*/
+
+/**#@+
+ * Terminal Modes
+ *
+ * @link http://3sp.com/content/developer/maverick-net/docs/Maverick.SSH.PseudoTerminalModesMembers.html
+ * @access private
+ */
+define('NET_SSH1_TTY_OP_END', 0);
+/**#@-*/
+
+/**
+ * The Response Type
+ *
+ * @see Net_SSH1::_get_binary_packet()
+ * @access private
+ */
+define('NET_SSH1_RESPONSE_TYPE', 1);
+
+/**
+ * The Response Data
+ *
+ * @see Net_SSH1::_get_binary_packet()
+ * @access private
+ */
+define('NET_SSH1_RESPONSE_DATA', 2);
+
+/**#@+
+ * Execution Bitmap Masks
+ *
+ * @see Net_SSH1::bitmap
+ * @access private
+ */
+define('NET_SSH1_MASK_CONSTRUCTOR', 0x00000001);
+define('NET_SSH1_MASK_LOGIN', 0x00000002);
+define('NET_SSH1_MASK_SHELL', 0x00000004);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Net_SSH1::getLog()
+ */
+/**
+ * Returns the message numbers
+ */
+define('NET_SSH1_LOG_SIMPLE', 1);
+/**
+ * Returns the message content
+ */
+define('NET_SSH1_LOG_COMPLEX', 2);
+/**
+ * Outputs the content real-time
+ */
+define('NET_SSH2_LOG_REALTIME', 3);
+/**
+ * Dumps the content real-time to a file
+ */
+define('NET_SSH2_LOG_REALTIME_FILE', 4);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Net_SSH1::read()
+ */
+/**
+ * Returns when a string matching $expect exactly is found
+ */
+define('NET_SSH1_READ_SIMPLE', 1);
+/**
+ * Returns when a string matching the regular expression $expect is found
+ */
+define('NET_SSH1_READ_REGEX', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of SSHv1.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Net_SSH1
+ */
+class Net_SSH1 {
+ /**
+ * The SSH identifier
+ *
+ * @var String
+ * @access private
+ */
+ var $identifier = 'SSH-1.5-phpseclib';
+
+ /**
+ * The Socket Object
+ *
+ * @var Object
+ * @access private
+ */
+ var $fsock;
+
+ /**
+ * The cryptography object
+ *
+ * @var Object
+ * @access private
+ */
+ var $crypto = false;
+
+ /**
+ * Execution Bitmap
+ *
+ * The bits that are set represent functions that have been called already. This is used to determine
+ * if a requisite function has been successfully executed. If not, an error should be thrown.
+ *
+ * @var Integer
+ * @access private
+ */
+ var $bitmap = 0;
+
+ /**
+ * The Server Key Public Exponent
+ *
+ * Logged for debug purposes
+ *
+ * @see Net_SSH1::getServerKeyPublicExponent()
+ * @var String
+ * @access private
+ */
+ var $server_key_public_exponent;
+
+ /**
+ * The Server Key Public Modulus
+ *
+ * Logged for debug purposes
+ *
+ * @see Net_SSH1::getServerKeyPublicModulus()
+ * @var String
+ * @access private
+ */
+ var $server_key_public_modulus;
+
+ /**
+ * The Host Key Public Exponent
+ *
+ * Logged for debug purposes
+ *
+ * @see Net_SSH1::getHostKeyPublicExponent()
+ * @var String
+ * @access private
+ */
+ var $host_key_public_exponent;
+
+ /**
+ * The Host Key Public Modulus
+ *
+ * Logged for debug purposes
+ *
+ * @see Net_SSH1::getHostKeyPublicModulus()
+ * @var String
+ * @access private
+ */
+ var $host_key_public_modulus;
+
+ /**
+ * Supported Ciphers
+ *
+ * Logged for debug purposes
+ *
+ * @see Net_SSH1::getSupportedCiphers()
+ * @var Array
+ * @access private
+ */
+ var $supported_ciphers = array(
+ NET_SSH1_CIPHER_NONE => 'No encryption',
+ NET_SSH1_CIPHER_IDEA => 'IDEA in CFB mode',
+ NET_SSH1_CIPHER_DES => 'DES in CBC mode',
+ NET_SSH1_CIPHER_3DES => 'Triple-DES in CBC mode',
+ NET_SSH1_CIPHER_BROKEN_TSS => 'TRI\'s Simple Stream encryption CBC',
+ NET_SSH1_CIPHER_RC4 => 'RC4',
+ NET_SSH1_CIPHER_BLOWFISH => 'Blowfish'
+ );
+
+ /**
+ * Supported Authentications
+ *
+ * Logged for debug purposes
+ *
+ * @see Net_SSH1::getSupportedAuthentications()
+ * @var Array
+ * @access private
+ */
+ var $supported_authentications = array(
+ NET_SSH1_AUTH_RHOSTS => '.rhosts or /etc/hosts.equiv',
+ NET_SSH1_AUTH_RSA => 'pure RSA authentication',
+ NET_SSH1_AUTH_PASSWORD => 'password authentication',
+ NET_SSH1_AUTH_RHOSTS_RSA => '.rhosts with RSA host authentication'
+ );
+
+ /**
+ * Server Identification
+ *
+ * @see Net_SSH1::getServerIdentification()
+ * @var String
+ * @access private
+ */
+ var $server_identification = '';
+
+ /**
+ * Protocol Flags
+ *
+ * @see Net_SSH1::Net_SSH1()
+ * @var Array
+ * @access private
+ */
+ var $protocol_flags = array();
+
+ /**
+ * Protocol Flag Log
+ *
+ * @see Net_SSH1::getLog()
+ * @var Array
+ * @access private
+ */
+ var $protocol_flag_log = array();
+
+ /**
+ * Message Log
+ *
+ * @see Net_SSH1::getLog()
+ * @var Array
+ * @access private
+ */
+ var $message_log = array();
+
+ /**
+ * Real-time log file pointer
+ *
+ * @see Net_SSH1::_append_log()
+ * @var Resource
+ * @access private
+ */
+ var $realtime_log_file;
+
+ /**
+ * Real-time log file size
+ *
+ * @see Net_SSH1::_append_log()
+ * @var Integer
+ * @access private
+ */
+ var $realtime_log_size;
+
+ /**
+ * Real-time log file wrap boolean
+ *
+ * @see Net_SSH1::_append_log()
+ * @var Boolean
+ * @access private
+ */
+ var $realtime_log_wrap;
+
+ /**
+ * Interactive Buffer
+ *
+ * @see Net_SSH1::read()
+ * @var Array
+ * @access private
+ */
+ var $interactiveBuffer = '';
+
+ /**
+ * Timeout
+ *
+ * @see Net_SSH1::setTimeout()
+ * @access private
+ */
+ var $timeout;
+
+ /**
+ * Current Timeout
+ *
+ * @see Net_SSH2::_get_channel_packet()
+ * @access private
+ */
+ var $curTimeout;
+
+ /**
+ * Default Constructor.
+ *
+ * Connects to an SSHv1 server
+ *
+ * @param String $host
+ * @param optional Integer $port
+ * @param optional Integer $timeout
+ * @param optional Integer $cipher
+ * @return Net_SSH1
+ * @access public
+ */
+ function Net_SSH1($host, $port = 22, $timeout = 10, $cipher = NET_SSH1_CIPHER_3DES)
+ {
+ $this->protocol_flags = array(
+ 1 => 'NET_SSH1_MSG_DISCONNECT',
+ 2 => 'NET_SSH1_SMSG_PUBLIC_KEY',
+ 3 => 'NET_SSH1_CMSG_SESSION_KEY',
+ 4 => 'NET_SSH1_CMSG_USER',
+ 9 => 'NET_SSH1_CMSG_AUTH_PASSWORD',
+ 10 => 'NET_SSH1_CMSG_REQUEST_PTY',
+ 12 => 'NET_SSH1_CMSG_EXEC_SHELL',
+ 13 => 'NET_SSH1_CMSG_EXEC_CMD',
+ 14 => 'NET_SSH1_SMSG_SUCCESS',
+ 15 => 'NET_SSH1_SMSG_FAILURE',
+ 16 => 'NET_SSH1_CMSG_STDIN_DATA',
+ 17 => 'NET_SSH1_SMSG_STDOUT_DATA',
+ 18 => 'NET_SSH1_SMSG_STDERR_DATA',
+ 19 => 'NET_SSH1_CMSG_EOF',
+ 20 => 'NET_SSH1_SMSG_EXITSTATUS',
+ 33 => 'NET_SSH1_CMSG_EXIT_CONFIRMATION'
+ );
+
+ $this->_define_array($this->protocol_flags);
+
+ $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout);
+ if (!$this->fsock) {
+ user_error(rtrim("Cannot connect to $host. Error $errno. $errstr"));
+ return;
+ }
+
+ $this->server_identification = $init_line = fgets($this->fsock, 255);
+
+ if (defined('NET_SSH1_LOGGING')) {
+ $this->_append_log('<-', $this->server_identification);
+ $this->_append_log('->', $this->identifier . "\r\n");
+ }
+
+ if (!preg_match('#SSH-([0-9\.]+)-(.+)#', $init_line, $parts)) {
+ user_error('Can only connect to SSH servers');
+ return;
+ }
+ if ($parts[1][0] != 1) {
+ user_error("Cannot connect to SSH $parts[1] servers");
+ return;
+ }
+
+ fputs($this->fsock, $this->identifier."\r\n");
+
+ $response = $this->_get_binary_packet();
+ if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_PUBLIC_KEY) {
+ user_error('Expected SSH_SMSG_PUBLIC_KEY');
+ return;
+ }
+
+ $anti_spoofing_cookie = $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 8);
+
+ $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+
+ $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
+ $server_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+ $this->server_key_public_exponent = $server_key_public_exponent;
+
+ $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
+ $server_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+ $this->server_key_public_modulus = $server_key_public_modulus;
+
+ $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+
+ $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
+ $host_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+ $this->host_key_public_exponent = $host_key_public_exponent;
+
+ $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
+ $host_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+ $this->host_key_public_modulus = $host_key_public_modulus;
+
+ $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+
+ // get a list of the supported ciphers
+ extract(unpack('Nsupported_ciphers_mask', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4)));
+ foreach ($this->supported_ciphers as $mask=>$name) {
+ if (($supported_ciphers_mask & (1 << $mask)) == 0) {
+ unset($this->supported_ciphers[$mask]);
+ }
+ }
+
+ // get a list of the supported authentications
+ extract(unpack('Nsupported_authentications_mask', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4)));
+ foreach ($this->supported_authentications as $mask=>$name) {
+ if (($supported_authentications_mask & (1 << $mask)) == 0) {
+ unset($this->supported_authentications[$mask]);
+ }
+ }
+
+ $session_id = pack('H*', md5($host_key_public_modulus->toBytes() . $server_key_public_modulus->toBytes() . $anti_spoofing_cookie));
+
+ $session_key = crypt_random_string(32);
+ $double_encrypted_session_key = $session_key ^ str_pad($session_id, 32, chr(0));
+
+ if ($server_key_public_modulus->compare($host_key_public_modulus) < 0) {
+ $double_encrypted_session_key = $this->_rsa_crypt(
+ $double_encrypted_session_key,
+ array(
+ $server_key_public_exponent,
+ $server_key_public_modulus
+ )
+ );
+ $double_encrypted_session_key = $this->_rsa_crypt(
+ $double_encrypted_session_key,
+ array(
+ $host_key_public_exponent,
+ $host_key_public_modulus
+ )
+ );
+ } else {
+ $double_encrypted_session_key = $this->_rsa_crypt(
+ $double_encrypted_session_key,
+ array(
+ $host_key_public_exponent,
+ $host_key_public_modulus
+ )
+ );
+ $double_encrypted_session_key = $this->_rsa_crypt(
+ $double_encrypted_session_key,
+ array(
+ $server_key_public_exponent,
+ $server_key_public_modulus
+ )
+ );
+ }
+
+ $cipher = isset($this->supported_ciphers[$cipher]) ? $cipher : NET_SSH1_CIPHER_3DES;
+ $data = pack('C2a*na*N', NET_SSH1_CMSG_SESSION_KEY, $cipher, $anti_spoofing_cookie, 8 * strlen($double_encrypted_session_key), $double_encrypted_session_key, 0);
+
+ if (!$this->_send_binary_packet($data)) {
+ user_error('Error sending SSH_CMSG_SESSION_KEY');
+ return;
+ }
+
+ switch ($cipher) {
+ //case NET_SSH1_CIPHER_NONE:
+ // $this->crypto = new Crypt_Null();
+ // break;
+ case NET_SSH1_CIPHER_DES:
+ $this->crypto = new Crypt_DES();
+ $this->crypto->disablePadding();
+ $this->crypto->enableContinuousBuffer();
+ $this->crypto->setKey(substr($session_key, 0, 8));
+ break;
+ case NET_SSH1_CIPHER_3DES:
+ $this->crypto = new Crypt_TripleDES(CRYPT_DES_MODE_3CBC);
+ $this->crypto->disablePadding();
+ $this->crypto->enableContinuousBuffer();
+ $this->crypto->setKey(substr($session_key, 0, 24));
+ break;
+ //case NET_SSH1_CIPHER_RC4:
+ // $this->crypto = new Crypt_RC4();
+ // $this->crypto->enableContinuousBuffer();
+ // $this->crypto->setKey(substr($session_key, 0, 16));
+ // break;
+ }
+
+ $response = $this->_get_binary_packet();
+
+ if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
+ user_error('Expected SSH_SMSG_SUCCESS');
+ return;
+ }
+
+ $this->bitmap = NET_SSH1_MASK_CONSTRUCTOR;
+ }
+
+ /**
+ * Login
+ *
+ * @param String $username
+ * @param optional String $password
+ * @return Boolean
+ * @access public
+ */
+ function login($username, $password = '')
+ {
+ if (!($this->bitmap & NET_SSH1_MASK_CONSTRUCTOR)) {
+ return false;
+ }
+
+ $data = pack('CNa*', NET_SSH1_CMSG_USER, strlen($username), $username);
+
+ if (!$this->_send_binary_packet($data)) {
+ user_error('Error sending SSH_CMSG_USER');
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+
+ if ($response === true) {
+ return false;
+ }
+ if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) {
+ $this->bitmap |= NET_SSH1_MASK_LOGIN;
+ return true;
+ } else if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_FAILURE) {
+ user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE');
+ return false;
+ }
+
+ $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen($password), $password);
+
+ if (!$this->_send_binary_packet($data)) {
+ user_error('Error sending SSH_CMSG_AUTH_PASSWORD');
+ return false;
+ }
+
+ // remove the username and password from the last logged packet
+ if (defined('NET_SSH1_LOGGING') && NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) {
+ $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen('password'), 'password');
+ $this->message_log[count($this->message_log) - 1] = $data;
+ }
+
+ $response = $this->_get_binary_packet();
+
+ if ($response === true) {
+ return false;
+ }
+ if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) {
+ $this->bitmap |= NET_SSH1_MASK_LOGIN;
+ return true;
+ } else if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_FAILURE) {
+ return false;
+ } else {
+ user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE');
+ return false;
+ }
+ }
+
+ /**
+ * Set Timeout
+ *
+ * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely. setTimeout() makes it so it'll timeout.
+ * Setting $timeout to false or 0 will mean there is no timeout.
+ *
+ * @param Mixed $timeout
+ */
+ function setTimeout($timeout)
+ {
+ $this->timeout = $this->curTimeout = $timeout;
+ }
+
+ /**
+ * Executes a command on a non-interactive shell, returns the output, and quits.
+ *
+ * An SSH1 server will close the connection after a command has been executed on a non-interactive shell. SSH2
+ * servers don't, however, this isn't an SSH2 client. The way this works, on the server, is by initiating a
+ * shell with the -s option, as discussed in the following links:
+ *
+ * {@link http://www.faqs.org/docs/bashman/bashref_65.html http://www.faqs.org/docs/bashman/bashref_65.html}
+ * {@link http://www.faqs.org/docs/bashman/bashref_62.html http://www.faqs.org/docs/bashman/bashref_62.html}
+ *
+ * To execute further commands, a new Net_SSH1 object will need to be created.
+ *
+ * Returns false on failure and the output, otherwise.
+ *
+ * @see Net_SSH1::interactiveRead()
+ * @see Net_SSH1::interactiveWrite()
+ * @param String $cmd
+ * @return mixed
+ * @access public
+ */
+ function exec($cmd, $block = true)
+ {
+ if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
+ user_error('Operation disallowed prior to login()');
+ return false;
+ }
+
+ $data = pack('CNa*', NET_SSH1_CMSG_EXEC_CMD, strlen($cmd), $cmd);
+
+ if (!$this->_send_binary_packet($data)) {
+ user_error('Error sending SSH_CMSG_EXEC_CMD');
+ return false;
+ }
+
+ if (!$block) {
+ return true;
+ }
+
+ $output = '';
+ $response = $this->_get_binary_packet();
+
+ if ($response !== false) {
+ do {
+ $output.= substr($response[NET_SSH1_RESPONSE_DATA], 4);
+ $response = $this->_get_binary_packet();
+ } while (is_array($response) && $response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_EXITSTATUS);
+ }
+
+ $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION);
+
+ // i don't think it's really all that important if this packet gets sent or not.
+ $this->_send_binary_packet($data);
+
+ fclose($this->fsock);
+
+ // reset the execution bitmap - a new Net_SSH1 object needs to be created.
+ $this->bitmap = 0;
+
+ return $output;
+ }
+
+ /**
+ * Creates an interactive shell
+ *
+ * @see Net_SSH1::interactiveRead()
+ * @see Net_SSH1::interactiveWrite()
+ * @return Boolean
+ * @access private
+ */
+ function _initShell()
+ {
+ // connect using the sample parameters in protocol-1.5.txt.
+ // according to wikipedia.org's entry on text terminals, "the fundamental type of application running on a text
+ // terminal is a command line interpreter or shell". thus, opening a terminal session to run the shell.
+ $data = pack('CNa*N4C', NET_SSH1_CMSG_REQUEST_PTY, strlen('vt100'), 'vt100', 24, 80, 0, 0, NET_SSH1_TTY_OP_END);
+
+ if (!$this->_send_binary_packet($data)) {
+ user_error('Error sending SSH_CMSG_REQUEST_PTY');
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+
+ if ($response === true) {
+ return false;
+ }
+ if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
+ user_error('Expected SSH_SMSG_SUCCESS');
+ return false;
+ }
+
+ $data = pack('C', NET_SSH1_CMSG_EXEC_SHELL);
+
+ if (!$this->_send_binary_packet($data)) {
+ user_error('Error sending SSH_CMSG_EXEC_SHELL');
+ return false;
+ }
+
+ $this->bitmap |= NET_SSH1_MASK_SHELL;
+
+ //stream_set_blocking($this->fsock, 0);
+
+ return true;
+ }
+
+ /**
+ * Inputs a command into an interactive shell.
+ *
+ * @see Net_SSH1::interactiveWrite()
+ * @param String $cmd
+ * @return Boolean
+ * @access public
+ */
+ function write($cmd)
+ {
+ return $this->interactiveWrite($cmd);
+ }
+
+ /**
+ * Returns the output of an interactive shell when there's a match for $expect
+ *
+ * $expect can take the form of a string literal or, if $mode == NET_SSH1_READ_REGEX,
+ * a regular expression.
+ *
+ * @see Net_SSH1::write()
+ * @param String $expect
+ * @param Integer $mode
+ * @return Boolean
+ * @access public
+ */
+ function read($expect, $mode = NET_SSH1_READ_SIMPLE)
+ {
+ if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
+ user_error('Operation disallowed prior to login()');
+ return false;
+ }
+
+ if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) {
+ user_error('Unable to initiate an interactive shell session');
+ return false;
+ }
+
+ $match = $expect;
+ while (true) {
+ if ($mode == NET_SSH1_READ_REGEX) {
+ preg_match($expect, $this->interactiveBuffer, $matches);
+ $match = isset($matches[0]) ? $matches[0] : '';
+ }
+ $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false;
+ if ($pos !== false) {
+ return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match));
+ }
+ $response = $this->_get_binary_packet();
+
+ if ($response === true) {
+ return $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer));
+ }
+ $this->interactiveBuffer.= substr($response[NET_SSH1_RESPONSE_DATA], 4);
+ }
+ }
+
+ /**
+ * Inputs a command into an interactive shell.
+ *
+ * @see Net_SSH1::interactiveRead()
+ * @param String $cmd
+ * @return Boolean
+ * @access public
+ */
+ function interactiveWrite($cmd)
+ {
+ if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
+ user_error('Operation disallowed prior to login()');
+ return false;
+ }
+
+ if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) {
+ user_error('Unable to initiate an interactive shell session');
+ return false;
+ }
+
+ $data = pack('CNa*', NET_SSH1_CMSG_STDIN_DATA, strlen($cmd), $cmd);
+
+ if (!$this->_send_binary_packet($data)) {
+ user_error('Error sending SSH_CMSG_STDIN');
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the output of an interactive shell when no more output is available.
+ *
+ * Requires PHP 4.3.0 or later due to the use of the stream_select() function. If you see stuff like
+ * "", you're seeing ANSI escape codes. According to
+ * {@link http://support.microsoft.com/kb/101875 How to Enable ANSI.SYS in a Command Window}, "Windows NT
+ * does not support ANSI escape sequences in Win32 Console applications", so if you're a Windows user,
+ * there's not going to be much recourse.
+ *
+ * @see Net_SSH1::interactiveRead()
+ * @return String
+ * @access public
+ */
+ function interactiveRead()
+ {
+ if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
+ user_error('Operation disallowed prior to login()');
+ return false;
+ }
+
+ if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) {
+ user_error('Unable to initiate an interactive shell session');
+ return false;
+ }
+
+ $read = array($this->fsock);
+ $write = $except = null;
+ if (stream_select($read, $write, $except, 0)) {
+ $response = $this->_get_binary_packet();
+ return substr($response[NET_SSH1_RESPONSE_DATA], 4);
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Disconnect
+ *
+ * @access public
+ */
+ function disconnect()
+ {
+ $this->_disconnect();
+ }
+
+ /**
+ * Destructor.
+ *
+ * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call
+ * disconnect().
+ *
+ * @access public
+ */
+ function __destruct()
+ {
+ $this->_disconnect();
+ }
+
+ /**
+ * Disconnect
+ *
+ * @param String $msg
+ * @access private
+ */
+ function _disconnect($msg = 'Client Quit')
+ {
+ if ($this->bitmap) {
+ $data = pack('C', NET_SSH1_CMSG_EOF);
+ $this->_send_binary_packet($data);
+ /*
+ $response = $this->_get_binary_packet();
+ if ($response === true) {
+ $response = array(NET_SSH1_RESPONSE_TYPE => -1);
+ }
+ switch ($response[NET_SSH1_RESPONSE_TYPE]) {
+ case NET_SSH1_SMSG_EXITSTATUS:
+ $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION);
+ break;
+ default:
+ $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg);
+ }
+ */
+ $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg);
+
+ $this->_send_binary_packet($data);
+ fclose($this->fsock);
+ $this->bitmap = 0;
+ }
+ }
+
+ /**
+ * Gets Binary Packets
+ *
+ * See 'The Binary Packet Protocol' of protocol-1.5.txt for more info.
+ *
+ * Also, this function could be improved upon by adding detection for the following exploit:
+ * http://www.securiteam.com/securitynews/5LP042K3FY.html
+ *
+ * @see Net_SSH1::_send_binary_packet()
+ * @return Array
+ * @access private
+ */
+ function _get_binary_packet()
+ {
+ if (feof($this->fsock)) {
+ //user_error('connection closed prematurely');
+ return false;
+ }
+
+ if ($this->curTimeout) {
+ $read = array($this->fsock);
+ $write = $except = NULL;
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+ $sec = floor($this->curTimeout);
+ $usec = 1000000 * ($this->curTimeout - $sec);
+ // on windows this returns a "Warning: Invalid CRT parameters detected" error
+ if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+ //$this->_disconnect('Timeout');
+ return true;
+ }
+ $elapsed = strtok(microtime(), ' ') + strtok('') - $start;
+ $this->curTimeout-= $elapsed;
+ }
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+ $temp = unpack('Nlength', fread($this->fsock, 4));
+
+ $padding_length = 8 - ($temp['length'] & 7);
+ $length = $temp['length'] + $padding_length;
+
+ while ($length > 0) {
+ $temp = fread($this->fsock, $length);
+ $raw.= $temp;
+ $length-= strlen($temp);
+ }
+ $stop = strtok(microtime(), ' ') + strtok('');
+
+ if (strlen($raw) && $this->crypto !== false) {
+ $raw = $this->crypto->decrypt($raw);
+ }
+
+ $padding = substr($raw, 0, $padding_length);
+ $type = $raw[$padding_length];
+ $data = substr($raw, $padding_length + 1, -4);
+
+ $temp = unpack('Ncrc', substr($raw, -4));
+
+ //if ( $temp['crc'] != $this->_crc($padding . $type . $data) ) {
+ // user_error('Bad CRC in packet from server');
+ // return false;
+ //}
+
+ $type = ord($type);
+
+ if (defined('NET_SSH1_LOGGING')) {
+ $temp = isset($this->protocol_flags[$type]) ? $this->protocol_flags[$type] : 'UNKNOWN';
+ $temp = '<- ' . $temp .
+ ' (' . round($stop - $start, 4) . 's)';
+ $this->_append_log($temp, $data);
+ }
+
+ return array(
+ NET_SSH1_RESPONSE_TYPE => $type,
+ NET_SSH1_RESPONSE_DATA => $data
+ );
+ }
+
+ /**
+ * Sends Binary Packets
+ *
+ * Returns true on success, false on failure.
+ *
+ * @see Net_SSH1::_get_binary_packet()
+ * @param String $data
+ * @return Boolean
+ * @access private
+ */
+ function _send_binary_packet($data)
+ {
+ if (feof($this->fsock)) {
+ //user_error('connection closed prematurely');
+ return false;
+ }
+
+ $length = strlen($data) + 4;
+
+ $padding = crypt_random_string(8 - ($length & 7));
+
+ $orig = $data;
+ $data = $padding . $data;
+ $data.= pack('N', $this->_crc($data));
+
+ if ($this->crypto !== false) {
+ $data = $this->crypto->encrypt($data);
+ }
+
+ $packet = pack('Na*', $length, $data);
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+ $result = strlen($packet) == fputs($this->fsock, $packet);
+ $stop = strtok(microtime(), ' ') + strtok('');
+
+ if (defined('NET_SSH1_LOGGING')) {
+ $temp = isset($this->protocol_flags[ord($orig[0])]) ? $this->protocol_flags[ord($orig[0])] : 'UNKNOWN';
+ $temp = '-> ' . $temp .
+ ' (' . round($stop - $start, 4) . 's)';
+ $this->_append_log($temp, $orig);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Cyclic Redundancy Check (CRC)
+ *
+ * PHP's crc32 function is implemented slightly differently than the one that SSH v1 uses, so
+ * we've reimplemented it. A more detailed discussion of the differences can be found after
+ * $crc_lookup_table's initialization.
+ *
+ * @see Net_SSH1::_get_binary_packet()
+ * @see Net_SSH1::_send_binary_packet()
+ * @param String $data
+ * @return Integer
+ * @access private
+ */
+ function _crc($data)
+ {
+ static $crc_lookup_table = array(
+ 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
+ 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
+ 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
+ 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
+ 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
+ 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+ 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
+ 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
+ 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
+ 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
+ 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
+ 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+ 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
+ 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
+ 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
+ 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
+ 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
+ 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+ 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
+ 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
+ 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
+ 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
+ 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
+ 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+ 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
+ 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
+ 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
+ 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
+ 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
+ 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+ 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
+ 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
+ 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
+ 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
+ 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
+ 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+ 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
+ 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
+ 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
+ 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
+ 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
+ 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+ 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
+ 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
+ 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
+ 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
+ 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
+ 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+ 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
+ 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
+ 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
+ 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
+ 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
+ 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+ 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
+ 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
+ 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
+ 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
+ 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
+ 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+ 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
+ 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
+ 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
+ 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+ );
+
+ // For this function to yield the same output as PHP's crc32 function, $crc would have to be
+ // set to 0xFFFFFFFF, initially - not 0x00000000 as it currently is.
+ $crc = 0x00000000;
+ $length = strlen($data);
+
+ for ($i=0;$i<$length;$i++) {
+ // We AND $crc >> 8 with 0x00FFFFFF because we want the eight newly added bits to all
+ // be zero. PHP, unfortunately, doesn't always do this. 0x80000000 >> 8, as an example,
+ // yields 0xFF800000 - not 0x00800000. The following link elaborates:
+ // http://www.php.net/manual/en/language.operators.bitwise.php#57281
+ $crc = (($crc >> 8) & 0x00FFFFFF) ^ $crc_lookup_table[($crc & 0xFF) ^ ord($data[$i])];
+ }
+
+ // In addition to having to set $crc to 0xFFFFFFFF, initially, the return value must be XOR'd with
+ // 0xFFFFFFFF for this function to return the same thing that PHP's crc32 function would.
+ return $crc;
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+
+ /**
+ * RSA Encrypt
+ *
+ * Returns mod(pow($m, $e), $n), where $n should be the product of two (large) primes $p and $q and where $e
+ * should be a number with the property that gcd($e, ($p - 1) * ($q - 1)) == 1. Could just make anything that
+ * calls this call modexp, instead, but I think this makes things clearer, maybe...
+ *
+ * @see Net_SSH1::Net_SSH1()
+ * @param Math_BigInteger $m
+ * @param Array $key
+ * @return Math_BigInteger
+ * @access private
+ */
+ function _rsa_crypt($m, $key)
+ {
+ /*
+ if (!class_exists('Crypt_RSA')) {
+ require_once('Crypt/RSA.php');
+ }
+
+ $rsa = new Crypt_RSA();
+ $rsa->loadKey($key, CRYPT_RSA_PUBLIC_FORMAT_RAW);
+ $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
+ return $rsa->encrypt($m);
+ */
+
+ // To quote from protocol-1.5.txt:
+ // The most significant byte (which is only partial as the value must be
+ // less than the public modulus, which is never a power of two) is zero.
+ //
+ // The next byte contains the value 2 (which stands for public-key
+ // encrypted data in the PKCS standard [PKCS#1]). Then, there are non-
+ // zero random bytes to fill any unused space, a zero byte, and the data
+ // to be encrypted in the least significant bytes, the last byte of the
+ // data in the least significant byte.
+
+ // Presumably the part of PKCS#1 they're refering to is "Section 7.2.1 Encryption Operation",
+ // under "7.2 RSAES-PKCS1-v1.5" and "7 Encryption schemes" of the following URL:
+ // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf
+ $modulus = $key[1]->toBytes();
+ $length = strlen($modulus) - strlen($m) - 3;
+ $random = '';
+ while (strlen($random) != $length) {
+ $block = crypt_random_string($length - strlen($random));
+ $block = str_replace("\x00", '', $block);
+ $random.= $block;
+ }
+ $temp = chr(0) . chr(2) . $random . chr(0) . $m;
+
+ $m = new Math_BigInteger($temp, 256);
+ $m = $m->modPow($key[0], $key[1]);
+
+ return $m->toBytes();
+ }
+
+ /**
+ * Define Array
+ *
+ * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of
+ * named constants from it, using the value as the name of the constant and the index as the value of the constant.
+ * If any of the constants that would be defined already exists, none of the constants will be defined.
+ *
+ * @param Array $array
+ * @access private
+ */
+ function _define_array()
+ {
+ $args = func_get_args();
+ foreach ($args as $arg) {
+ foreach ($arg as $key=>$value) {
+ if (!defined($value)) {
+ define($value, $key);
+ } else {
+ break 2;
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns a log of the packets that have been sent and received.
+ *
+ * Returns a string if NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX, an array if NET_SSH2_LOGGING == NET_SSH2_LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
+ *
+ * @access public
+ * @return String or Array
+ */
+ function getLog()
+ {
+ if (!defined('NET_SSH1_LOGGING')) {
+ return false;
+ }
+
+ switch (NET_SSH1_LOGGING) {
+ case NET_SSH1_LOG_SIMPLE:
+ return $this->message_number_log;
+ break;
+ case NET_SSH1_LOG_COMPLEX:
+ return $this->_format_log($this->message_log, $this->protocol_flags_log);
+ break;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Formats a log for printing
+ *
+ * @param Array $message_log
+ * @param Array $message_number_log
+ * @access private
+ * @return String
+ */
+ function _format_log($message_log, $message_number_log)
+ {
+ static $boundary = ':', $long_width = 65, $short_width = 16;
+
+ $output = '';
+ for ($i = 0; $i < count($message_log); $i++) {
+ $output.= $message_number_log[$i] . "\r\n";
+ $current_log = $message_log[$i];
+ $j = 0;
+ do {
+ if (strlen($current_log)) {
+ $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 ';
+ }
+ $fragment = $this->_string_shift($current_log, $short_width);
+ $hex = substr(
+ preg_replace(
+ '#(.)#es',
+ '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)',
+ $fragment),
+ strlen($boundary)
+ );
+ // replace non ASCII printable characters with dots
+ // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
+ // also replace < with a . since < messes up the output on web browsers
+ $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
+ $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n";
+ $j++;
+ } while (strlen($current_log));
+ $output.= "\r\n";
+ }
+
+ return $output;
+ }
+
+ /**
+ * Return the server key public exponent
+ *
+ * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead,
+ * the raw bytes. This behavior is similar to PHP's md5() function.
+ *
+ * @param optional Boolean $raw_output
+ * @return String
+ * @access public
+ */
+ function getServerKeyPublicExponent($raw_output = false)
+ {
+ return $raw_output ? $this->server_key_public_exponent->toBytes() : $this->server_key_public_exponent->toString();
+ }
+
+ /**
+ * Return the server key public modulus
+ *
+ * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead,
+ * the raw bytes. This behavior is similar to PHP's md5() function.
+ *
+ * @param optional Boolean $raw_output
+ * @return String
+ * @access public
+ */
+ function getServerKeyPublicModulus($raw_output = false)
+ {
+ return $raw_output ? $this->server_key_public_modulus->toBytes() : $this->server_key_public_modulus->toString();
+ }
+
+ /**
+ * Return the host key public exponent
+ *
+ * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead,
+ * the raw bytes. This behavior is similar to PHP's md5() function.
+ *
+ * @param optional Boolean $raw_output
+ * @return String
+ * @access public
+ */
+ function getHostKeyPublicExponent($raw_output = false)
+ {
+ return $raw_output ? $this->host_key_public_exponent->toBytes() : $this->host_key_public_exponent->toString();
+ }
+
+ /**
+ * Return the host key public modulus
+ *
+ * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead,
+ * the raw bytes. This behavior is similar to PHP's md5() function.
+ *
+ * @param optional Boolean $raw_output
+ * @return String
+ * @access public
+ */
+ function getHostKeyPublicModulus($raw_output = false)
+ {
+ return $raw_output ? $this->host_key_public_modulus->toBytes() : $this->host_key_public_modulus->toString();
+ }
+
+ /**
+ * Return a list of ciphers supported by SSH1 server.
+ *
+ * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output
+ * is set to true, returns, instead, an array of constants. ie. instead of array('Triple-DES in CBC mode'), you'll
+ * get array(NET_SSH1_CIPHER_3DES).
+ *
+ * @param optional Boolean $raw_output
+ * @return Array
+ * @access public
+ */
+ function getSupportedCiphers($raw_output = false)
+ {
+ return $raw_output ? array_keys($this->supported_ciphers) : array_values($this->supported_ciphers);
+ }
+
+ /**
+ * Return a list of authentications supported by SSH1 server.
+ *
+ * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output
+ * is set to true, returns, instead, an array of constants. ie. instead of array('password authentication'), you'll
+ * get array(NET_SSH1_AUTH_PASSWORD).
+ *
+ * @param optional Boolean $raw_output
+ * @return Array
+ * @access public
+ */
+ function getSupportedAuthentications($raw_output = false)
+ {
+ return $raw_output ? array_keys($this->supported_authentications) : array_values($this->supported_authentications);
+ }
+
+ /**
+ * Return the server identification.
+ *
+ * @return String
+ * @access public
+ */
+ function getServerIdentification()
+ {
+ return rtrim($this->server_identification);
+ }
+
+ /**
+ * Logs data packets
+ *
+ * Makes sure that only the last 1MB worth of packets will be logged
+ *
+ * @param String $data
+ * @access private
+ */
+ function _append_log($protocol_flags, $message)
+ {
+ switch (NET_SSH1_LOGGING) {
+ // useful for benchmarks
+ case NET_SSH1_LOG_SIMPLE:
+ $this->protocol_flags_log[] = $protocol_flags;
+ break;
+ // the most useful log for SSH1
+ case NET_SSH1_LOG_COMPLEX:
+ $this->protocol_flags_log[] = $protocol_flags;
+ $this->_string_shift($message);
+ $this->log_size+= strlen($message);
+ $this->message_log[] = $message;
+ while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
+ $this->log_size-= strlen(array_shift($this->message_log));
+ array_shift($this->protocol_flags_log);
+ }
+ break;
+ // dump the output out realtime; packets may be interspersed with non packets,
+ // passwords won't be filtered out and select other packets may not be correctly
+ // identified
+ case NET_SSH1_LOG_REALTIME:
+ echo "<pre>\r\n" . $this->_format_log(array($message), array($protocol_flags)) . "\r\n</pre>\r\n";
+ @flush();
+ @ob_flush();
+ break;
+ // basically the same thing as NET_SSH1_LOG_REALTIME with the caveat that NET_SSH1_LOG_REALTIME_FILE
+ // needs to be defined and that the resultant log file will be capped out at NET_SSH1_LOG_MAX_SIZE.
+ // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
+ // at the beginning of the file
+ case NET_SSH1_LOG_REALTIME_FILE:
+ if (!isset($this->realtime_log_file)) {
+ // PHP doesn't seem to like using constants in fopen()
+ $filename = NET_SSH2_LOG_REALTIME_FILE;
+ $fp = fopen($filename, 'w');
+ $this->realtime_log_file = $fp;
+ }
+ if (!is_resource($this->realtime_log_file)) {
+ break;
+ }
+ $entry = $this->_format_log(array($message), array($protocol_flags));
+ if ($this->realtime_log_wrap) {
+ $temp = "<<< START >>>\r\n";
+ $entry.= $temp;
+ fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
+ }
+ $this->realtime_log_size+= strlen($entry);
+ if ($this->realtime_log_size > NET_SSH1_LOG_MAX_SIZE) {
+ fseek($this->realtime_log_file, 0);
+ $this->realtime_log_size = strlen($entry);
+ $this->realtime_log_wrap = true;
+ }
+ fputs($this->realtime_log_file, $entry);
+ }
+ }
+} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php
new file mode 100644
index 00000000000..43bfbca2dbe
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php
@@ -0,0 +1,3009 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of SSHv2.
+ *
+ * PHP versions 4 and 5
+ *
+ * Here are some examples of how to use this library:
+ * <code>
+ * <?php
+ * include('Net/SSH2.php');
+ *
+ * $ssh = new Net_SSH2('www.domain.tld');
+ * if (!$ssh->login('username', 'password')) {
+ * exit('Login Failed');
+ * }
+ *
+ * echo $ssh->exec('pwd');
+ * echo $ssh->exec('ls -la');
+ * ?>
+ * </code>
+ *
+ * <code>
+ * <?php
+ * include('Crypt/RSA.php');
+ * include('Net/SSH2.php');
+ *
+ * $key = new Crypt_RSA();
+ * //$key->setPassword('whatever');
+ * $key->loadKey(file_get_contents('privatekey'));
+ *
+ * $ssh = new Net_SSH2('www.domain.tld');
+ * if (!$ssh->login('username', $key)) {
+ * exit('Login Failed');
+ * }
+ *
+ * echo $ssh->read('username@username:~$');
+ * $ssh->write("ls -la\n");
+ * echo $ssh->read('username@username:~$');
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category Net
+ * @package Net_SSH2
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @version $Id: SSH2.php,v 1.53 2010-10-24 01:24:30 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Math_BigInteger
+ *
+ * Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.
+ */
+if (!class_exists('Math_BigInteger')) {
+ require_once('Math/BigInteger.php');
+}
+
+/**
+ * Include Crypt_Random
+ */
+// the class_exists() will only be called if the crypt_random_string function hasn't been defined and
+// will trigger a call to __autoload() if you're wanting to auto-load classes
+// call function_exists() a second time to stop the require_once from being called outside
+// of the auto loader
+if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) {
+ require_once('Crypt/Random.php');
+}
+
+/**
+ * Include Crypt_Hash
+ */
+if (!class_exists('Crypt_Hash')) {
+ require_once('Crypt/Hash.php');
+}
+
+/**
+ * Include Crypt_TripleDES
+ */
+if (!class_exists('Crypt_TripleDES')) {
+ require_once('Crypt/TripleDES.php');
+}
+
+/**
+ * Include Crypt_RC4
+ */
+if (!class_exists('Crypt_RC4')) {
+ require_once('Crypt/RC4.php');
+}
+
+/**
+ * Include Crypt_AES
+ */
+if (!class_exists('Crypt_AES')) {
+ require_once('Crypt/AES.php');
+}
+
+/**#@+
+ * Execution Bitmap Masks
+ *
+ * @see Net_SSH2::bitmap
+ * @access private
+ */
+define('NET_SSH2_MASK_CONSTRUCTOR', 0x00000001);
+define('NET_SSH2_MASK_LOGIN', 0x00000002);
+define('NET_SSH2_MASK_SHELL', 0x00000004);
+/**#@-*/
+
+/**#@+
+ * Channel constants
+ *
+ * RFC4254 refers not to client and server channels but rather to sender and recipient channels. we don't refer
+ * to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with
+ * a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a
+ * recepient channel. at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel
+ * would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snipet:
+ * The 'recipient channel' is the channel number given in the original
+ * open request, and 'sender channel' is the channel number allocated by
+ * the other side.
+ *
+ * @see Net_SSH2::_send_channel_packet()
+ * @see Net_SSH2::_get_channel_packet()
+ * @access private
+ */
+define('NET_SSH2_CHANNEL_EXEC', 0); // PuTTy uses 0x100
+define('NET_SSH2_CHANNEL_SHELL',1);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Net_SSH2::getLog()
+ */
+/**
+ * Returns the message numbers
+ */
+define('NET_SSH2_LOG_SIMPLE', 1);
+/**
+ * Returns the message content
+ */
+define('NET_SSH2_LOG_COMPLEX', 2);
+/**
+ * Outputs the content real-time
+ */
+define('NET_SSH2_LOG_REALTIME', 3);
+/**
+ * Dumps the content real-time to a file
+ */
+define('NET_SSH2_LOG_REALTIME_FILE', 4);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Net_SSH2::read()
+ */
+/**
+ * Returns when a string matching $expect exactly is found
+ */
+define('NET_SSH2_READ_SIMPLE', 1);
+/**
+ * Returns when a string matching the regular expression $expect is found
+ */
+define('NET_SSH2_READ_REGEX', 2);
+/**
+ * Make sure that the log never gets larger than this
+ */
+define('NET_SSH2_LOG_MAX_SIZE', 1024 * 1024);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of SSHv2.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Net_SSH2
+ */
+class Net_SSH2 {
+ /**
+ * The SSH identifier
+ *
+ * @var String
+ * @access private
+ */
+ var $identifier = 'SSH-2.0-phpseclib_0.3';
+
+ /**
+ * The Socket Object
+ *
+ * @var Object
+ * @access private
+ */
+ var $fsock;
+
+ /**
+ * Execution Bitmap
+ *
+ * The bits that are set represent functions that have been called already. This is used to determine
+ * if a requisite function has been successfully executed. If not, an error should be thrown.
+ *
+ * @var Integer
+ * @access private
+ */
+ var $bitmap = 0;
+
+ /**
+ * Error information
+ *
+ * @see Net_SSH2::getErrors()
+ * @see Net_SSH2::getLastError()
+ * @var String
+ * @access private
+ */
+ var $errors = array();
+
+ /**
+ * Server Identifier
+ *
+ * @see Net_SSH2::getServerIdentification()
+ * @var String
+ * @access private
+ */
+ var $server_identifier = '';
+
+ /**
+ * Key Exchange Algorithms
+ *
+ * @see Net_SSH2::getKexAlgorithims()
+ * @var Array
+ * @access private
+ */
+ var $kex_algorithms;
+
+ /**
+ * Server Host Key Algorithms
+ *
+ * @see Net_SSH2::getServerHostKeyAlgorithms()
+ * @var Array
+ * @access private
+ */
+ var $server_host_key_algorithms;
+
+ /**
+ * Encryption Algorithms: Client to Server
+ *
+ * @see Net_SSH2::getEncryptionAlgorithmsClient2Server()
+ * @var Array
+ * @access private
+ */
+ var $encryption_algorithms_client_to_server;
+
+ /**
+ * Encryption Algorithms: Server to Client
+ *
+ * @see Net_SSH2::getEncryptionAlgorithmsServer2Client()
+ * @var Array
+ * @access private
+ */
+ var $encryption_algorithms_server_to_client;
+
+ /**
+ * MAC Algorithms: Client to Server
+ *
+ * @see Net_SSH2::getMACAlgorithmsClient2Server()
+ * @var Array
+ * @access private
+ */
+ var $mac_algorithms_client_to_server;
+
+ /**
+ * MAC Algorithms: Server to Client
+ *
+ * @see Net_SSH2::getMACAlgorithmsServer2Client()
+ * @var Array
+ * @access private
+ */
+ var $mac_algorithms_server_to_client;
+
+ /**
+ * Compression Algorithms: Client to Server
+ *
+ * @see Net_SSH2::getCompressionAlgorithmsClient2Server()
+ * @var Array
+ * @access private
+ */
+ var $compression_algorithms_client_to_server;
+
+ /**
+ * Compression Algorithms: Server to Client
+ *
+ * @see Net_SSH2::getCompressionAlgorithmsServer2Client()
+ * @var Array
+ * @access private
+ */
+ var $compression_algorithms_server_to_client;
+
+ /**
+ * Languages: Server to Client
+ *
+ * @see Net_SSH2::getLanguagesServer2Client()
+ * @var Array
+ * @access private
+ */
+ var $languages_server_to_client;
+
+ /**
+ * Languages: Client to Server
+ *
+ * @see Net_SSH2::getLanguagesClient2Server()
+ * @var Array
+ * @access private
+ */
+ var $languages_client_to_server;
+
+ /**
+ * Block Size for Server to Client Encryption
+ *
+ * "Note that the length of the concatenation of 'packet_length',
+ * 'padding_length', 'payload', and 'random padding' MUST be a multiple
+ * of the cipher block size or 8, whichever is larger. This constraint
+ * MUST be enforced, even when using stream ciphers."
+ *
+ * -- http://tools.ietf.org/html/rfc4253#section-6
+ *
+ * @see Net_SSH2::Net_SSH2()
+ * @see Net_SSH2::_send_binary_packet()
+ * @var Integer
+ * @access private
+ */
+ var $encrypt_block_size = 8;
+
+ /**
+ * Block Size for Client to Server Encryption
+ *
+ * @see Net_SSH2::Net_SSH2()
+ * @see Net_SSH2::_get_binary_packet()
+ * @var Integer
+ * @access private
+ */
+ var $decrypt_block_size = 8;
+
+ /**
+ * Server to Client Encryption Object
+ *
+ * @see Net_SSH2::_get_binary_packet()
+ * @var Object
+ * @access private
+ */
+ var $decrypt = false;
+
+ /**
+ * Client to Server Encryption Object
+ *
+ * @see Net_SSH2::_send_binary_packet()
+ * @var Object
+ * @access private
+ */
+ var $encrypt = false;
+
+ /**
+ * Client to Server HMAC Object
+ *
+ * @see Net_SSH2::_send_binary_packet()
+ * @var Object
+ * @access private
+ */
+ var $hmac_create = false;
+
+ /**
+ * Server to Client HMAC Object
+ *
+ * @see Net_SSH2::_get_binary_packet()
+ * @var Object
+ * @access private
+ */
+ var $hmac_check = false;
+
+ /**
+ * Size of server to client HMAC
+ *
+ * We need to know how big the HMAC will be for the server to client direction so that we know how many bytes to read.
+ * For the client to server side, the HMAC object will make the HMAC as long as it needs to be. All we need to do is
+ * append it.
+ *
+ * @see Net_SSH2::_get_binary_packet()
+ * @var Integer
+ * @access private
+ */
+ var $hmac_size = false;
+
+ /**
+ * Server Public Host Key
+ *
+ * @see Net_SSH2::getServerPublicHostKey()
+ * @var String
+ * @access private
+ */
+ var $server_public_host_key;
+
+ /**
+ * Session identifer
+ *
+ * "The exchange hash H from the first key exchange is additionally
+ * used as the session identifier, which is a unique identifier for
+ * this connection."
+ *
+ * -- http://tools.ietf.org/html/rfc4253#section-7.2
+ *
+ * @see Net_SSH2::_key_exchange()
+ * @var String
+ * @access private
+ */
+ var $session_id = false;
+
+ /**
+ * Exchange hash
+ *
+ * The current exchange hash
+ *
+ * @see Net_SSH2::_key_exchange()
+ * @var String
+ * @access private
+ */
+ var $exchange_hash = false;
+
+ /**
+ * Message Numbers
+ *
+ * @see Net_SSH2::Net_SSH2()
+ * @var Array
+ * @access private
+ */
+ var $message_numbers = array();
+
+ /**
+ * Disconnection Message 'reason codes' defined in RFC4253
+ *
+ * @see Net_SSH2::Net_SSH2()
+ * @var Array
+ * @access private
+ */
+ var $disconnect_reasons = array();
+
+ /**
+ * SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254
+ *
+ * @see Net_SSH2::Net_SSH2()
+ * @var Array
+ * @access private
+ */
+ var $channel_open_failure_reasons = array();
+
+ /**
+ * Terminal Modes
+ *
+ * @link http://tools.ietf.org/html/rfc4254#section-8
+ * @see Net_SSH2::Net_SSH2()
+ * @var Array
+ * @access private
+ */
+ var $terminal_modes = array();
+
+ /**
+ * SSH_MSG_CHANNEL_EXTENDED_DATA's data_type_codes
+ *
+ * @link http://tools.ietf.org/html/rfc4254#section-5.2
+ * @see Net_SSH2::Net_SSH2()
+ * @var Array
+ * @access private
+ */
+ var $channel_extended_data_type_codes = array();
+
+ /**
+ * Send Sequence Number
+ *
+ * See 'Section 6.4. Data Integrity' of rfc4253 for more info.
+ *
+ * @see Net_SSH2::_send_binary_packet()
+ * @var Integer
+ * @access private
+ */
+ var $send_seq_no = 0;
+
+ /**
+ * Get Sequence Number
+ *
+ * See 'Section 6.4. Data Integrity' of rfc4253 for more info.
+ *
+ * @see Net_SSH2::_get_binary_packet()
+ * @var Integer
+ * @access private
+ */
+ var $get_seq_no = 0;
+
+ /**
+ * Server Channels
+ *
+ * Maps client channels to server channels
+ *
+ * @see Net_SSH2::_get_channel_packet()
+ * @see Net_SSH2::exec()
+ * @var Array
+ * @access private
+ */
+ var $server_channels = array();
+
+ /**
+ * Channel Buffers
+ *
+ * If a client requests a packet from one channel but receives two packets from another those packets should
+ * be placed in a buffer
+ *
+ * @see Net_SSH2::_get_channel_packet()
+ * @see Net_SSH2::exec()
+ * @var Array
+ * @access private
+ */
+ var $channel_buffers = array();
+
+ /**
+ * Channel Status
+ *
+ * Contains the type of the last sent message
+ *
+ * @see Net_SSH2::_get_channel_packet()
+ * @var Array
+ * @access private
+ */
+ var $channel_status = array();
+
+ /**
+ * Packet Size
+ *
+ * Maximum packet size indexed by channel
+ *
+ * @see Net_SSH2::_send_channel_packet()
+ * @var Array
+ * @access private
+ */
+ var $packet_size_client_to_server = array();
+
+ /**
+ * Message Number Log
+ *
+ * @see Net_SSH2::getLog()
+ * @var Array
+ * @access private
+ */
+ var $message_number_log = array();
+
+ /**
+ * Message Log
+ *
+ * @see Net_SSH2::getLog()
+ * @var Array
+ * @access private
+ */
+ var $message_log = array();
+
+ /**
+ * The Window Size
+ *
+ * Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 4GB)
+ *
+ * @var Integer
+ * @see Net_SSH2::_send_channel_packet()
+ * @see Net_SSH2::exec()
+ * @access private
+ */
+ var $window_size = 0x7FFFFFFF;
+
+ /**
+ * Window size
+ *
+ * Window size indexed by channel
+ *
+ * @see Net_SSH2::_send_channel_packet()
+ * @var Array
+ * @access private
+ */
+ var $window_size_client_to_server = array();
+
+ /**
+ * Server signature
+ *
+ * Verified against $this->session_id
+ *
+ * @see Net_SSH2::getServerPublicHostKey()
+ * @var String
+ * @access private
+ */
+ var $signature = '';
+
+ /**
+ * Server signature format
+ *
+ * ssh-rsa or ssh-dss.
+ *
+ * @see Net_SSH2::getServerPublicHostKey()
+ * @var String
+ * @access private
+ */
+ var $signature_format = '';
+
+ /**
+ * Interactive Buffer
+ *
+ * @see Net_SSH2::read()
+ * @var Array
+ * @access private
+ */
+ var $interactiveBuffer = '';
+
+ /**
+ * Current log size
+ *
+ * Should never exceed NET_SSH2_LOG_MAX_SIZE
+ *
+ * @see Net_SSH2::_send_binary_packet()
+ * @see Net_SSH2::_get_binary_packet()
+ * @var Integer
+ * @access private
+ */
+ var $log_size;
+
+ /**
+ * Timeout
+ *
+ * @see Net_SSH2::setTimeout()
+ * @access private
+ */
+ var $timeout;
+
+ /**
+ * Current Timeout
+ *
+ * @see Net_SSH2::_get_channel_packet()
+ * @access private
+ */
+ var $curTimeout;
+
+ /**
+ * Real-time log file pointer
+ *
+ * @see Net_SSH2::_append_log()
+ * @var Resource
+ * @access private
+ */
+ var $realtime_log_file;
+
+ /**
+ * Real-time log file size
+ *
+ * @see Net_SSH2::_append_log()
+ * @var Integer
+ * @access private
+ */
+ var $realtime_log_size;
+
+ /**
+ * Has the signature been validated?
+ *
+ * @see Net_SSH2::getServerPublicHostKey()
+ * @var Boolean
+ * @access private
+ */
+ var $signature_validated = false;
+
+ /**
+ * Real-time log file wrap boolean
+ *
+ * @see Net_SSH2::_append_log()
+ * @access private
+ */
+ var $realtime_log_wrap;
+
+ /**
+ * Flag to suppress stderr from output
+ *
+ * @see Net_SSH2::enableQuietMode()
+ * @access private
+ */
+ var $quiet_mode = false;
+
+ /**
+ * Time of first network activity
+ *
+ * @access private
+ */
+ var $last_packet;
+
+ /**
+ * Exit status returned from ssh if any
+ *
+ * @var Integer
+ * @access private
+ */
+ var $exit_status;
+
+ /**
+ * Default Constructor.
+ *
+ * Connects to an SSHv2 server
+ *
+ * @param String $host
+ * @param optional Integer $port
+ * @param optional Integer $timeout
+ * @return Net_SSH2
+ * @access public
+ */
+ function Net_SSH2($host, $port = 22, $timeout = 10)
+ {
+ $this->last_packet = strtok(microtime(), ' ') + strtok(''); // == microtime(true) in PHP5
+ $this->message_numbers = array(
+ 1 => 'NET_SSH2_MSG_DISCONNECT',
+ 2 => 'NET_SSH2_MSG_IGNORE',
+ 3 => 'NET_SSH2_MSG_UNIMPLEMENTED',
+ 4 => 'NET_SSH2_MSG_DEBUG',
+ 5 => 'NET_SSH2_MSG_SERVICE_REQUEST',
+ 6 => 'NET_SSH2_MSG_SERVICE_ACCEPT',
+ 20 => 'NET_SSH2_MSG_KEXINIT',
+ 21 => 'NET_SSH2_MSG_NEWKEYS',
+ 30 => 'NET_SSH2_MSG_KEXDH_INIT',
+ 31 => 'NET_SSH2_MSG_KEXDH_REPLY',
+ 50 => 'NET_SSH2_MSG_USERAUTH_REQUEST',
+ 51 => 'NET_SSH2_MSG_USERAUTH_FAILURE',
+ 52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS',
+ 53 => 'NET_SSH2_MSG_USERAUTH_BANNER',
+
+ 80 => 'NET_SSH2_MSG_GLOBAL_REQUEST',
+ 81 => 'NET_SSH2_MSG_REQUEST_SUCCESS',
+ 82 => 'NET_SSH2_MSG_REQUEST_FAILURE',
+ 90 => 'NET_SSH2_MSG_CHANNEL_OPEN',
+ 91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION',
+ 92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE',
+ 93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST',
+ 94 => 'NET_SSH2_MSG_CHANNEL_DATA',
+ 95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA',
+ 96 => 'NET_SSH2_MSG_CHANNEL_EOF',
+ 97 => 'NET_SSH2_MSG_CHANNEL_CLOSE',
+ 98 => 'NET_SSH2_MSG_CHANNEL_REQUEST',
+ 99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS',
+ 100 => 'NET_SSH2_MSG_CHANNEL_FAILURE'
+ );
+ $this->disconnect_reasons = array(
+ 1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',
+ 2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',
+ 3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',
+ 4 => 'NET_SSH2_DISCONNECT_RESERVED',
+ 5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',
+ 6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',
+ 7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',
+ 8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',
+ 9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',
+ 10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',
+ 11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',
+ 12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',
+ 13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',
+ 14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',
+ 15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'
+ );
+ $this->channel_open_failure_reasons = array(
+ 1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED'
+ );
+ $this->terminal_modes = array(
+ 0 => 'NET_SSH2_TTY_OP_END'
+ );
+ $this->channel_extended_data_type_codes = array(
+ 1 => 'NET_SSH2_EXTENDED_DATA_STDERR'
+ );
+
+ $this->_define_array(
+ $this->message_numbers,
+ $this->disconnect_reasons,
+ $this->channel_open_failure_reasons,
+ $this->terminal_modes,
+ $this->channel_extended_data_type_codes,
+ array(60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'),
+ array(60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'),
+ array(60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
+ 61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE')
+ );
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+ $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout);
+ if (!$this->fsock) {
+ user_error(rtrim("Cannot connect to $host. Error $errno. $errstr"));
+ return;
+ }
+ $elapsed = strtok(microtime(), ' ') + strtok('') - $start;
+
+ $timeout-= $elapsed;
+
+ if ($timeout <= 0) {
+ user_error(rtrim("Cannot connect to $host. Timeout error"));
+ return;
+ }
+
+ $read = array($this->fsock);
+ $write = $except = NULL;
+
+ $sec = floor($timeout);
+ $usec = 1000000 * ($timeout - $sec);
+
+ // on windows this returns a "Warning: Invalid CRT parameters detected" error
+ // the !count() is done as a workaround for <https://bugs.php.net/42682>
+ if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+ user_error(rtrim("Cannot connect to $host. Banner timeout"));
+ return;
+ }
+
+ /* According to the SSH2 specs,
+
+ "The server MAY send other lines of data before sending the version
+ string. Each line SHOULD be terminated by a Carriage Return and Line
+ Feed. Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
+ in ISO-10646 UTF-8 [RFC3629] (language is not specified). Clients
+ MUST be able to process such lines." */
+ $temp = '';
+ $extra = '';
+ while (!feof($this->fsock) && !preg_match('#^SSH-(\d\.\d+)#', $temp, $matches)) {
+ if (substr($temp, -2) == "\r\n") {
+ $extra.= $temp;
+ $temp = '';
+ }
+ $temp.= fgets($this->fsock, 255);
+ }
+
+ if (feof($this->fsock)) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ $ext = array();
+ if (extension_loaded('mcrypt')) {
+ $ext[] = 'mcrypt';
+ }
+ if (extension_loaded('gmp')) {
+ $ext[] = 'gmp';
+ } else if (extension_loaded('bcmath')) {
+ $ext[] = 'bcmath';
+ }
+
+ if (!empty($ext)) {
+ $this->identifier.= ' (' . implode(', ', $ext) . ')';
+ }
+
+ if (defined('NET_SSH2_LOGGING')) {
+ $this->_append_log('<-', $extra . $temp);
+ $this->_append_log('->', $this->identifier . "\r\n");
+ }
+
+ $this->server_identifier = trim($temp, "\r\n");
+ if (strlen($extra)) {
+ $this->errors[] = utf8_decode($extra);
+ }
+
+ if ($matches[1] != '1.99' && $matches[1] != '2.0') {
+ user_error("Cannot connect to SSH $matches[1] servers");
+ return;
+ }
+
+ fputs($this->fsock, $this->identifier . "\r\n");
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return;
+ }
+
+ if (ord($response[0]) != NET_SSH2_MSG_KEXINIT) {
+ user_error('Expected SSH_MSG_KEXINIT');
+ return;
+ }
+
+ if (!$this->_key_exchange($response)) {
+ return;
+ }
+
+ $this->bitmap = NET_SSH2_MASK_CONSTRUCTOR;
+ }
+
+ /**
+ * Key Exchange
+ *
+ * @param String $kexinit_payload_server
+ * @access private
+ */
+ function _key_exchange($kexinit_payload_server)
+ {
+ static $kex_algorithms = array(
+ 'diffie-hellman-group1-sha1', // REQUIRED
+ 'diffie-hellman-group14-sha1' // REQUIRED
+ );
+
+ static $server_host_key_algorithms = array(
+ 'ssh-rsa', // RECOMMENDED sign Raw RSA Key
+ 'ssh-dss' // REQUIRED sign Raw DSS Key
+ );
+
+ static $encryption_algorithms = array(
+ // from <http://tools.ietf.org/html/rfc4345#section-4>:
+ 'arcfour256',
+ 'arcfour128',
+
+ 'arcfour', // OPTIONAL the ARCFOUR stream cipher with a 128-bit key
+
+ 'aes128-cbc', // RECOMMENDED AES with a 128-bit key
+ 'aes192-cbc', // OPTIONAL AES with a 192-bit key
+ 'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key
+
+ // from <http://tools.ietf.org/html/rfc4344#section-4>:
+ 'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key
+ 'aes192-ctr', // RECOMMENDED AES with 192-bit key
+ 'aes256-ctr', // RECOMMENDED AES with 256-bit key
+ '3des-ctr', // RECOMMENDED Three-key 3DES in SDCTR mode
+
+ '3des-cbc', // REQUIRED three-key 3DES in CBC mode
+ 'none' // OPTIONAL no encryption; NOT RECOMMENDED
+ );
+
+ static $mac_algorithms = array(
+ 'hmac-sha1-96', // RECOMMENDED first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20)
+ 'hmac-sha1', // REQUIRED HMAC-SHA1 (digest length = key length = 20)
+ 'hmac-md5-96', // OPTIONAL first 96 bits of HMAC-MD5 (digest length = 12, key length = 16)
+ 'hmac-md5', // OPTIONAL HMAC-MD5 (digest length = key length = 16)
+ 'none' // OPTIONAL no MAC; NOT RECOMMENDED
+ );
+
+ static $compression_algorithms = array(
+ 'none' // REQUIRED no compression
+ //'zlib' // OPTIONAL ZLIB (LZ77) compression
+ );
+
+ // some SSH servers have buggy implementations of some of the above algorithms
+ switch ($this->server_identifier) {
+ case 'SSH-2.0-SSHD':
+ $mac_algorithms = array_values(array_diff(
+ $mac_algorithms,
+ array('hmac-sha1-96', 'hmac-md5-96')
+ ));
+ }
+
+ static $str_kex_algorithms, $str_server_host_key_algorithms,
+ $encryption_algorithms_server_to_client, $mac_algorithms_server_to_client, $compression_algorithms_server_to_client,
+ $encryption_algorithms_client_to_server, $mac_algorithms_client_to_server, $compression_algorithms_client_to_server;
+
+ if (empty($str_kex_algorithms)) {
+ $str_kex_algorithms = implode(',', $kex_algorithms);
+ $str_server_host_key_algorithms = implode(',', $server_host_key_algorithms);
+ $encryption_algorithms_server_to_client = $encryption_algorithms_client_to_server = implode(',', $encryption_algorithms);
+ $mac_algorithms_server_to_client = $mac_algorithms_client_to_server = implode(',', $mac_algorithms);
+ $compression_algorithms_server_to_client = $compression_algorithms_client_to_server = implode(',', $compression_algorithms);
+ }
+
+ $client_cookie = crypt_random_string(16);
+
+ $response = $kexinit_payload_server;
+ $this->_string_shift($response, 1); // skip past the message number (it should be SSH_MSG_KEXINIT)
+ $server_cookie = $this->_string_shift($response, 16);
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->kex_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->server_host_key_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->encryption_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->encryption_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->mac_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->mac_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->compression_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->compression_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->languages_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->languages_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+ extract(unpack('Cfirst_kex_packet_follows', $this->_string_shift($response, 1)));
+ $first_kex_packet_follows = $first_kex_packet_follows != 0;
+
+ // the sending of SSH2_MSG_KEXINIT could go in one of two places. this is the second place.
+ $kexinit_payload_client = pack('Ca*Na*Na*Na*Na*Na*Na*Na*Na*Na*Na*CN',
+ NET_SSH2_MSG_KEXINIT, $client_cookie, strlen($str_kex_algorithms), $str_kex_algorithms,
+ strlen($str_server_host_key_algorithms), $str_server_host_key_algorithms, strlen($encryption_algorithms_client_to_server),
+ $encryption_algorithms_client_to_server, strlen($encryption_algorithms_server_to_client), $encryption_algorithms_server_to_client,
+ strlen($mac_algorithms_client_to_server), $mac_algorithms_client_to_server, strlen($mac_algorithms_server_to_client),
+ $mac_algorithms_server_to_client, strlen($compression_algorithms_client_to_server), $compression_algorithms_client_to_server,
+ strlen($compression_algorithms_server_to_client), $compression_algorithms_server_to_client, 0, '', 0, '',
+ 0, 0
+ );
+
+ if (!$this->_send_binary_packet($kexinit_payload_client)) {
+ return false;
+ }
+ // here ends the second place.
+
+ // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange
+ for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_server_to_client); $i++);
+ if ($i == count($encryption_algorithms)) {
+ user_error('No compatible server to client encryption algorithms found');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ // we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the
+ // diffie-hellman key exchange as fast as possible
+ $decrypt = $encryption_algorithms[$i];
+ switch ($decrypt) {
+ case '3des-cbc':
+ case '3des-ctr':
+ $decryptKeyLength = 24; // eg. 192 / 8
+ break;
+ case 'aes256-cbc':
+ case 'aes256-ctr':
+ $decryptKeyLength = 32; // eg. 256 / 8
+ break;
+ case 'aes192-cbc':
+ case 'aes192-ctr':
+ $decryptKeyLength = 24; // eg. 192 / 8
+ break;
+ case 'aes128-cbc':
+ case 'aes128-ctr':
+ $decryptKeyLength = 16; // eg. 128 / 8
+ break;
+ case 'arcfour':
+ case 'arcfour128':
+ $decryptKeyLength = 16; // eg. 128 / 8
+ break;
+ case 'arcfour256':
+ $decryptKeyLength = 32; // eg. 128 / 8
+ break;
+ case 'none';
+ $decryptKeyLength = 0;
+ }
+
+ for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_client_to_server); $i++);
+ if ($i == count($encryption_algorithms)) {
+ user_error('No compatible client to server encryption algorithms found');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ $encrypt = $encryption_algorithms[$i];
+ switch ($encrypt) {
+ case '3des-cbc':
+ case '3des-ctr':
+ $encryptKeyLength = 24;
+ break;
+ case 'aes256-cbc':
+ case 'aes256-ctr':
+ $encryptKeyLength = 32;
+ break;
+ case 'aes192-cbc':
+ case 'aes192-ctr':
+ $encryptKeyLength = 24;
+ break;
+ case 'aes128-cbc':
+ case 'aes128-ctr':
+ $encryptKeyLength = 16;
+ break;
+ case 'arcfour':
+ case 'arcfour128':
+ $encryptKeyLength = 16;
+ break;
+ case 'arcfour256':
+ $encryptKeyLength = 32;
+ break;
+ case 'none';
+ $encryptKeyLength = 0;
+ }
+
+ $keyLength = $decryptKeyLength > $encryptKeyLength ? $decryptKeyLength : $encryptKeyLength;
+
+ // through diffie-hellman key exchange a symmetric key is obtained
+ for ($i = 0; $i < count($kex_algorithms) && !in_array($kex_algorithms[$i], $this->kex_algorithms); $i++);
+ if ($i == count($kex_algorithms)) {
+ user_error('No compatible key exchange algorithms found');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ switch ($kex_algorithms[$i]) {
+ // see http://tools.ietf.org/html/rfc2409#section-6.2 and
+ // http://tools.ietf.org/html/rfc2412, appendex E
+ case 'diffie-hellman-group1-sha1':
+ $p = pack('H256', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
+ '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
+ '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
+ 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF');
+ $keyLength = $keyLength < 160 ? $keyLength : 160;
+ $hash = 'sha1';
+ break;
+ // see http://tools.ietf.org/html/rfc3526#section-3
+ case 'diffie-hellman-group14-sha1':
+ $p = pack('H512', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
+ '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
+ '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
+ 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
+ '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
+ '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
+ 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
+ '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF');
+ $keyLength = $keyLength < 160 ? $keyLength : 160;
+ $hash = 'sha1';
+ }
+
+ $p = new Math_BigInteger($p, 256);
+ //$q = $p->bitwise_rightShift(1);
+
+ /* To increase the speed of the key exchange, both client and server may
+ reduce the size of their private exponents. It should be at least
+ twice as long as the key material that is generated from the shared
+ secret. For more details, see the paper by van Oorschot and Wiener
+ [VAN-OORSCHOT].
+
+ -- http://tools.ietf.org/html/rfc4419#section-6.2 */
+ $q = new Math_BigInteger(1);
+ $q = $q->bitwise_leftShift(2 * $keyLength);
+ $q = $q->subtract(new Math_BigInteger(1));
+
+ $g = new Math_BigInteger(2);
+ $x = new Math_BigInteger();
+ $x = $x->random(new Math_BigInteger(1), $q);
+ $e = $g->modPow($x, $p);
+
+ $eBytes = $e->toBytes(true);
+ $data = pack('CNa*', NET_SSH2_MSG_KEXDH_INIT, strlen($eBytes), $eBytes);
+
+ if (!$this->_send_binary_packet($data)) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+ extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+ if ($type != NET_SSH2_MSG_KEXDH_REPLY) {
+ user_error('Expected SSH_MSG_KEXDH_REPLY');
+ return false;
+ }
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->server_public_host_key = $server_public_host_key = $this->_string_shift($response, $temp['length']);
+
+ $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+ $public_key_format = $this->_string_shift($server_public_host_key, $temp['length']);
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $fBytes = $this->_string_shift($response, $temp['length']);
+ $f = new Math_BigInteger($fBytes, -256);
+
+ $temp = unpack('Nlength', $this->_string_shift($response, 4));
+ $this->signature = $this->_string_shift($response, $temp['length']);
+
+ $temp = unpack('Nlength', $this->_string_shift($this->signature, 4));
+ $this->signature_format = $this->_string_shift($this->signature, $temp['length']);
+
+ $key = $f->modPow($x, $p);
+ $keyBytes = $key->toBytes(true);
+
+ $this->exchange_hash = pack('Na*Na*Na*Na*Na*Na*Na*Na*',
+ strlen($this->identifier), $this->identifier, strlen($this->server_identifier), $this->server_identifier,
+ strlen($kexinit_payload_client), $kexinit_payload_client, strlen($kexinit_payload_server),
+ $kexinit_payload_server, strlen($this->server_public_host_key), $this->server_public_host_key, strlen($eBytes),
+ $eBytes, strlen($fBytes), $fBytes, strlen($keyBytes), $keyBytes
+ );
+
+ $this->exchange_hash = pack('H*', $hash($this->exchange_hash));
+
+ if ($this->session_id === false) {
+ $this->session_id = $this->exchange_hash;
+ }
+
+ for ($i = 0; $i < count($server_host_key_algorithms) && !in_array($server_host_key_algorithms[$i], $this->server_host_key_algorithms); $i++);
+ if ($i == count($server_host_key_algorithms)) {
+ user_error('No compatible server host key algorithms found');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ if ($public_key_format != $server_host_key_algorithms[$i] || $this->signature_format != $server_host_key_algorithms[$i]) {
+ user_error('Sever Host Key Algorithm Mismatch');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ $packet = pack('C',
+ NET_SSH2_MSG_NEWKEYS
+ );
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+ if ($type != NET_SSH2_MSG_NEWKEYS) {
+ user_error('Expected SSH_MSG_NEWKEYS');
+ return false;
+ }
+
+ switch ($encrypt) {
+ case '3des-cbc':
+ $this->encrypt = new Crypt_TripleDES();
+ // $this->encrypt_block_size = 64 / 8 == the default
+ break;
+ case '3des-ctr':
+ $this->encrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
+ // $this->encrypt_block_size = 64 / 8 == the default
+ break;
+ case 'aes256-cbc':
+ case 'aes192-cbc':
+ case 'aes128-cbc':
+ $this->encrypt = new Crypt_AES();
+ $this->encrypt_block_size = 16; // eg. 128 / 8
+ break;
+ case 'aes256-ctr':
+ case 'aes192-ctr':
+ case 'aes128-ctr':
+ $this->encrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
+ $this->encrypt_block_size = 16; // eg. 128 / 8
+ break;
+ case 'arcfour':
+ case 'arcfour128':
+ case 'arcfour256':
+ $this->encrypt = new Crypt_RC4();
+ break;
+ case 'none';
+ //$this->encrypt = new Crypt_Null();
+ }
+
+ switch ($decrypt) {
+ case '3des-cbc':
+ $this->decrypt = new Crypt_TripleDES();
+ break;
+ case '3des-ctr':
+ $this->decrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
+ break;
+ case 'aes256-cbc':
+ case 'aes192-cbc':
+ case 'aes128-cbc':
+ $this->decrypt = new Crypt_AES();
+ $this->decrypt_block_size = 16;
+ break;
+ case 'aes256-ctr':
+ case 'aes192-ctr':
+ case 'aes128-ctr':
+ $this->decrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
+ $this->decrypt_block_size = 16;
+ break;
+ case 'arcfour':
+ case 'arcfour128':
+ case 'arcfour256':
+ $this->decrypt = new Crypt_RC4();
+ break;
+ case 'none';
+ //$this->decrypt = new Crypt_Null();
+ }
+
+ $keyBytes = pack('Na*', strlen($keyBytes), $keyBytes);
+
+ if ($this->encrypt) {
+ $this->encrypt->enableContinuousBuffer();
+ $this->encrypt->disablePadding();
+
+ $iv = pack('H*', $hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id));
+ while ($this->encrypt_block_size > strlen($iv)) {
+ $iv.= pack('H*', $hash($keyBytes . $this->exchange_hash . $iv));
+ }
+ $this->encrypt->setIV(substr($iv, 0, $this->encrypt_block_size));
+
+ $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'C' . $this->session_id));
+ while ($encryptKeyLength > strlen($key)) {
+ $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key));
+ }
+ $this->encrypt->setKey(substr($key, 0, $encryptKeyLength));
+ }
+
+ if ($this->decrypt) {
+ $this->decrypt->enableContinuousBuffer();
+ $this->decrypt->disablePadding();
+
+ $iv = pack('H*', $hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id));
+ while ($this->decrypt_block_size > strlen($iv)) {
+ $iv.= pack('H*', $hash($keyBytes . $this->exchange_hash . $iv));
+ }
+ $this->decrypt->setIV(substr($iv, 0, $this->decrypt_block_size));
+
+ $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'D' . $this->session_id));
+ while ($decryptKeyLength > strlen($key)) {
+ $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key));
+ }
+ $this->decrypt->setKey(substr($key, 0, $decryptKeyLength));
+ }
+
+ /* The "arcfour128" algorithm is the RC4 cipher, as described in
+ [SCHNEIER], using a 128-bit key. The first 1536 bytes of keystream
+ generated by the cipher MUST be discarded, and the first byte of the
+ first encrypted packet MUST be encrypted using the 1537th byte of
+ keystream.
+
+ -- http://tools.ietf.org/html/rfc4345#section-4 */
+ if ($encrypt == 'arcfour128' || $encrypt == 'arcfour256') {
+ $this->encrypt->encrypt(str_repeat("\0", 1536));
+ }
+ if ($decrypt == 'arcfour128' || $decrypt == 'arcfour256') {
+ $this->decrypt->decrypt(str_repeat("\0", 1536));
+ }
+
+ for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_client_to_server); $i++);
+ if ($i == count($mac_algorithms)) {
+ user_error('No compatible client to server message authentication algorithms found');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ $createKeyLength = 0; // ie. $mac_algorithms[$i] == 'none'
+ switch ($mac_algorithms[$i]) {
+ case 'hmac-sha1':
+ $this->hmac_create = new Crypt_Hash('sha1');
+ $createKeyLength = 20;
+ break;
+ case 'hmac-sha1-96':
+ $this->hmac_create = new Crypt_Hash('sha1-96');
+ $createKeyLength = 20;
+ break;
+ case 'hmac-md5':
+ $this->hmac_create = new Crypt_Hash('md5');
+ $createKeyLength = 16;
+ break;
+ case 'hmac-md5-96':
+ $this->hmac_create = new Crypt_Hash('md5-96');
+ $createKeyLength = 16;
+ }
+
+ for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_server_to_client); $i++);
+ if ($i == count($mac_algorithms)) {
+ user_error('No compatible server to client message authentication algorithms found');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ $checkKeyLength = 0;
+ $this->hmac_size = 0;
+ switch ($mac_algorithms[$i]) {
+ case 'hmac-sha1':
+ $this->hmac_check = new Crypt_Hash('sha1');
+ $checkKeyLength = 20;
+ $this->hmac_size = 20;
+ break;
+ case 'hmac-sha1-96':
+ $this->hmac_check = new Crypt_Hash('sha1-96');
+ $checkKeyLength = 20;
+ $this->hmac_size = 12;
+ break;
+ case 'hmac-md5':
+ $this->hmac_check = new Crypt_Hash('md5');
+ $checkKeyLength = 16;
+ $this->hmac_size = 16;
+ break;
+ case 'hmac-md5-96':
+ $this->hmac_check = new Crypt_Hash('md5-96');
+ $checkKeyLength = 16;
+ $this->hmac_size = 12;
+ }
+
+ $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id));
+ while ($createKeyLength > strlen($key)) {
+ $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key));
+ }
+ $this->hmac_create->setKey(substr($key, 0, $createKeyLength));
+
+ $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'F' . $this->session_id));
+ while ($checkKeyLength > strlen($key)) {
+ $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key));
+ }
+ $this->hmac_check->setKey(substr($key, 0, $checkKeyLength));
+
+ for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_server_to_client); $i++);
+ if ($i == count($compression_algorithms)) {
+ user_error('No compatible server to client compression algorithms found');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+ $this->decompress = $compression_algorithms[$i] == 'zlib';
+
+ for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_client_to_server); $i++);
+ if ($i == count($compression_algorithms)) {
+ user_error('No compatible client to server compression algorithms found');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+ $this->compress = $compression_algorithms[$i] == 'zlib';
+
+ return true;
+ }
+
+ /**
+ * Login
+ *
+ * The $password parameter can be a plaintext password or a Crypt_RSA object.
+ *
+ * @param String $username
+ * @param optional String $password
+ * @return Boolean
+ * @access public
+ * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
+ * by sending dummy SSH_MSG_IGNORE messages.
+ */
+ function login($username, $password = null)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR)) {
+ return false;
+ }
+
+ $packet = pack('CNa*',
+ NET_SSH2_MSG_SERVICE_REQUEST, strlen('ssh-userauth'), 'ssh-userauth'
+ );
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+ if ($type != NET_SSH2_MSG_SERVICE_ACCEPT) {
+ user_error('Expected SSH_MSG_SERVICE_ACCEPT');
+ return false;
+ }
+
+ // although PHP5's get_class() preserves the case, PHP4's does not
+ if (is_object($password) && strtolower(get_class($password)) == 'crypt_rsa') {
+ return $this->_privatekey_login($username, $password);
+ }
+
+ if (!isset($password)) {
+ $packet = pack('CNa*Na*Na*',
+ NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
+ strlen('none'), 'none'
+ );
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+ switch ($type) {
+ case NET_SSH2_MSG_USERAUTH_SUCCESS:
+ $this->bitmap |= NET_SSH2_MASK_LOGIN;
+ return true;
+ //case NET_SSH2_MSG_USERAUTH_FAILURE:
+ default:
+ return false;
+ }
+ }
+
+ $packet = pack('CNa*Na*Na*CNa*',
+ NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
+ strlen('password'), 'password', 0, strlen($password), $password
+ );
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ // remove the username and password from the last logged packet
+ if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) {
+ $packet = pack('CNa*Na*Na*CNa*',
+ NET_SSH2_MSG_USERAUTH_REQUEST, strlen('username'), 'username', strlen('ssh-connection'), 'ssh-connection',
+ strlen('password'), 'password', 0, strlen('password'), 'password'
+ );
+ $this->message_log[count($this->message_log) - 1] = $packet;
+ }
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+ switch ($type) {
+ case NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ: // in theory, the password can be changed
+ if (defined('NET_SSH2_LOGGING')) {
+ $this->message_number_log[count($this->message_number_log) - 1] = 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ';
+ }
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . utf8_decode($this->_string_shift($response, $length));
+ return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
+ case NET_SSH2_MSG_USERAUTH_FAILURE:
+ // can we use keyboard-interactive authentication? if not then either the login is bad or the server employees
+ // multi-factor authentication
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $auth_methods = explode(',', $this->_string_shift($response, $length));
+ if (in_array('keyboard-interactive', $auth_methods)) {
+ if ($this->_keyboard_interactive_login($username, $password)) {
+ $this->bitmap |= NET_SSH2_MASK_LOGIN;
+ return true;
+ }
+ return false;
+ }
+ return false;
+ case NET_SSH2_MSG_USERAUTH_SUCCESS:
+ $this->bitmap |= NET_SSH2_MASK_LOGIN;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Login via keyboard-interactive authentication
+ *
+ * See {@link http://tools.ietf.org/html/rfc4256 RFC4256} for details. This is not a full-featured keyboard-interactive authenticator.
+ *
+ * @param String $username
+ * @param String $password
+ * @return Boolean
+ * @access private
+ */
+ function _keyboard_interactive_login($username, $password)
+ {
+ $packet = pack('CNa*Na*Na*Na*Na*',
+ NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
+ strlen('keyboard-interactive'), 'keyboard-interactive', 0, '', 0, ''
+ );
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ return $this->_keyboard_interactive_process($password);
+ }
+
+ /**
+ * Handle the keyboard-interactive requests / responses.
+ *
+ * @param String $responses...
+ * @return Boolean
+ * @access private
+ */
+ function _keyboard_interactive_process()
+ {
+ $responses = func_get_args();
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+ switch ($type) {
+ case NET_SSH2_MSG_USERAUTH_INFO_REQUEST:
+ // see http://tools.ietf.org/html/rfc4256#section-3.2
+ if (defined('NET_SSH2_LOGGING')) {
+ $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+ 'UNKNOWN',
+ 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
+ $this->message_number_log[count($this->message_number_log) - 1]
+ );
+ }
+
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $this->_string_shift($response, $length); // name; may be empty
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $this->_string_shift($response, $length); // instruction; may be empty
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $this->_string_shift($response, $length); // language tag; may be empty
+ extract(unpack('Nnum_prompts', $this->_string_shift($response, 4)));
+ /*
+ for ($i = 0; $i < $num_prompts; $i++) {
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ // prompt - ie. "Password: "; must not be empty
+ $this->_string_shift($response, $length);
+ $echo = $this->_string_shift($response) != chr(0);
+ }
+ */
+
+ /*
+ After obtaining the requested information from the user, the client
+ MUST respond with an SSH_MSG_USERAUTH_INFO_RESPONSE message.
+ */
+ // see http://tools.ietf.org/html/rfc4256#section-3.4
+ $packet = $logged = pack('CN', NET_SSH2_MSG_USERAUTH_INFO_RESPONSE, count($responses));
+ for ($i = 0; $i < count($responses); $i++) {
+ $packet.= pack('Na*', strlen($responses[$i]), $responses[$i]);
+ $logged.= pack('Na*', strlen('dummy-answer'), 'dummy-answer');
+ }
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ if (defined('NET_SSH2_LOGGING')) {
+ $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+ 'UNKNOWN',
+ 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE',
+ $this->message_number_log[count($this->message_number_log) - 1]
+ );
+ $this->message_log[count($this->message_log) - 1] = $logged;
+ }
+
+ /*
+ After receiving the response, the server MUST send either an
+ SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, or another
+ SSH_MSG_USERAUTH_INFO_REQUEST message.
+ */
+ // maybe phpseclib should force close the connection after x request / responses? unless something like that is done
+ // there could be an infinite loop of request / responses.
+ return $this->_keyboard_interactive_process();
+ case NET_SSH2_MSG_USERAUTH_SUCCESS:
+ return true;
+ case NET_SSH2_MSG_USERAUTH_FAILURE:
+ return false;
+ }
+
+ return false;
+ }
+
+ /**
+ * Login with an RSA private key
+ *
+ * @param String $username
+ * @param Crypt_RSA $password
+ * @return Boolean
+ * @access private
+ * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
+ * by sending dummy SSH_MSG_IGNORE messages.
+ */
+ function _privatekey_login($username, $privatekey)
+ {
+ // see http://tools.ietf.org/html/rfc4253#page-15
+ $publickey = $privatekey->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_RAW);
+ if ($publickey === false) {
+ return false;
+ }
+
+ $publickey = array(
+ 'e' => $publickey['e']->toBytes(true),
+ 'n' => $publickey['n']->toBytes(true)
+ );
+ $publickey = pack('Na*Na*Na*',
+ strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey['e']), $publickey['e'], strlen($publickey['n']), $publickey['n']
+ );
+
+ $part1 = pack('CNa*Na*Na*',
+ NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
+ strlen('publickey'), 'publickey'
+ );
+ $part2 = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey), $publickey);
+
+ $packet = $part1 . chr(0) . $part2;
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+ switch ($type) {
+ case NET_SSH2_MSG_USERAUTH_FAILURE:
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $this->errors[] = 'SSH_MSG_USERAUTH_FAILURE: ' . $this->_string_shift($response, $length);
+ return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
+ case NET_SSH2_MSG_USERAUTH_PK_OK:
+ // we'll just take it on faith that the public key blob and the public key algorithm name are as
+ // they should be
+ if (defined('NET_SSH2_LOGGING')) {
+ $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+ 'UNKNOWN',
+ 'NET_SSH2_MSG_USERAUTH_PK_OK',
+ $this->message_number_log[count($this->message_number_log) - 1]
+ );
+ }
+ }
+
+ $packet = $part1 . chr(1) . $part2;
+ $privatekey->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
+ $signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet));
+ $signature = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($signature), $signature);
+ $packet.= pack('Na*', strlen($signature), $signature);
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+ switch ($type) {
+ case NET_SSH2_MSG_USERAUTH_FAILURE:
+ // either the login is bad or the server employs multi-factor authentication
+ return false;
+ case NET_SSH2_MSG_USERAUTH_SUCCESS:
+ $this->bitmap |= NET_SSH2_MASK_LOGIN;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Set Timeout
+ *
+ * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely. setTimeout() makes it so it'll timeout.
+ * Setting $timeout to false or 0 will mean there is no timeout.
+ *
+ * @param Mixed $timeout
+ */
+ function setTimeout($timeout)
+ {
+ $this->timeout = $this->curTimeout = $timeout;
+ }
+
+ /**
+ * Execute Command
+ *
+ * If $block is set to false then Net_SSH2::_get_channel_packet(NET_SSH2_CHANNEL_EXEC) will need to be called manually.
+ * In all likelihood, this is not a feature you want to be taking advantage of.
+ *
+ * @param String $command
+ * @param optional Boolean $block
+ * @return String
+ * @access public
+ */
+ function exec($command, $block = true)
+ {
+ $this->curTimeout = $this->timeout;
+
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ return false;
+ }
+
+ // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to
+ // be adjusted". 0x7FFFFFFF is, at 4GB, the max size. technically, it should probably be decremented, but,
+ // honestly, if you're transfering more than 4GB, you probably shouldn't be using phpseclib, anyway.
+ // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info
+ $this->window_size_client_to_server[NET_SSH2_CHANNEL_EXEC] = 0x7FFFFFFF;
+ // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy
+ // uses 0x4000, that's what will be used here, as well.
+ $packet_size = 0x4000;
+
+ $packet = pack('CNa*N3',
+ NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SSH2_CHANNEL_EXEC, $this->window_size_client_to_server[NET_SSH2_CHANNEL_EXEC], $packet_size);
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_OPEN;
+
+ $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
+ if ($response === false) {
+ return false;
+ }
+
+ // sending a pty-req SSH_MSG_CHANNEL_REQUEST message is unnecessary and, in fact, in most cases, slows things
+ // down. the one place where it might be desirable is if you're doing something like Net_SSH2::exec('ping localhost &').
+ // with a pty-req SSH_MSG_CHANNEL_REQUEST, exec() will return immediately and the ping process will then
+ // then immediately terminate. without such a request exec() will loop indefinitely. the ping process won't end but
+ // neither will your script.
+
+ // although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by
+ // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the
+ // "maximum size of an individual data packet". ie. SSH_MSG_CHANNEL_DATA. RFC4254#section-5.2 corroborates.
+ $packet = pack('CNNa*CNa*',
+ NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_EXEC], strlen('exec'), 'exec', 1, strlen($command), $command);
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+ $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
+ if ($response === false) {
+ return false;
+ }
+
+ $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA;
+
+ if (!$block) {
+ return true;
+ }
+
+ $output = '';
+ while (true) {
+ $temp = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
+ switch (true) {
+ case $temp === true:
+ return $output;
+ case $temp === false:
+ return false;
+ default:
+ $output.= $temp;
+ }
+ }
+ }
+
+ /**
+ * Creates an interactive shell
+ *
+ * @see Net_SSH2::read()
+ * @see Net_SSH2::write()
+ * @return Boolean
+ * @access private
+ */
+ function _initShell()
+ {
+ $this->window_size_client_to_server[NET_SSH2_CHANNEL_SHELL] = 0x7FFFFFFF;
+ $packet_size = 0x4000;
+
+ $packet = pack('CNa*N3',
+ NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SSH2_CHANNEL_SHELL, $this->window_size_client_to_server[NET_SSH2_CHANNEL_SHELL], $packet_size);
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_OPEN;
+
+ $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL);
+ if ($response === false) {
+ return false;
+ }
+
+ $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);
+ $packet = pack('CNNa*CNa*N5a*',
+ NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_SHELL], strlen('pty-req'), 'pty-req', 1, strlen('vt100'), 'vt100',
+ 80, 24, 0, 0, strlen($terminal_modes), $terminal_modes);
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ list(, $type) = unpack('C', $this->_string_shift($response, 1));
+
+ switch ($type) {
+ case NET_SSH2_MSG_CHANNEL_SUCCESS:
+ break;
+ case NET_SSH2_MSG_CHANNEL_FAILURE:
+ default:
+ user_error('Unable to request pseudo-terminal');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+ }
+
+ $packet = pack('CNNa*C',
+ NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_SHELL], strlen('shell'), 'shell', 1);
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+
+ $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+ $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL);
+ if ($response === false) {
+ return false;
+ }
+
+ $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA;
+
+ $this->bitmap |= NET_SSH2_MASK_SHELL;
+
+ return true;
+ }
+
+ /**
+ * Returns the output of an interactive shell
+ *
+ * Returns when there's a match for $expect, which can take the form of a string literal or,
+ * if $mode == NET_SSH2_READ_REGEX, a regular expression.
+ *
+ * @see Net_SSH2::read()
+ * @param String $expect
+ * @param Integer $mode
+ * @return String
+ * @access public
+ */
+ function read($expect = '', $mode = NET_SSH2_READ_SIMPLE)
+ {
+ $this->curTimeout = $this->timeout;
+
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ user_error('Operation disallowed prior to login()');
+ return false;
+ }
+
+ if (!($this->bitmap & NET_SSH2_MASK_SHELL) && !$this->_initShell()) {
+ user_error('Unable to initiate an interactive shell session');
+ return false;
+ }
+
+ $match = $expect;
+ while (true) {
+ if ($mode == NET_SSH2_READ_REGEX) {
+ preg_match($expect, $this->interactiveBuffer, $matches);
+ $match = isset($matches[0]) ? $matches[0] : '';
+ }
+ $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false;
+ if ($pos !== false) {
+ return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match));
+ }
+ $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL);
+ if (is_bool($response)) {
+ return $response ? $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer)) : false;
+ }
+
+ $this->interactiveBuffer.= $response;
+ }
+ }
+
+ /**
+ * Inputs a command into an interactive shell.
+ *
+ * @see Net_SSH1::interactiveWrite()
+ * @param String $cmd
+ * @return Boolean
+ * @access public
+ */
+ function write($cmd)
+ {
+ if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ user_error('Operation disallowed prior to login()');
+ return false;
+ }
+
+ if (!($this->bitmap & NET_SSH2_MASK_SHELL) && !$this->_initShell()) {
+ user_error('Unable to initiate an interactive shell session');
+ return false;
+ }
+
+ return $this->_send_channel_packet(NET_SSH2_CHANNEL_SHELL, $cmd);
+ }
+
+ /**
+ * Disconnect
+ *
+ * @access public
+ */
+ function disconnect()
+ {
+ $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+ if (isset($this->realtime_log_file) && is_resource($this->realtime_log_file)) {
+ fclose($this->realtime_log_file);
+ }
+ }
+
+ /**
+ * Destructor.
+ *
+ * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call
+ * disconnect().
+ *
+ * @access public
+ */
+ function __destruct()
+ {
+ $this->disconnect();
+ }
+
+ /**
+ * Gets Binary Packets
+ *
+ * See '6. Binary Packet Protocol' of rfc4253 for more info.
+ *
+ * @see Net_SSH2::_send_binary_packet()
+ * @return String
+ * @access private
+ */
+ function _get_binary_packet()
+ {
+ if (!is_resource($this->fsock) || feof($this->fsock)) {
+ user_error('Connection closed prematurely');
+ $this->bitmask = 0;
+ return false;
+ }
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+ $raw = fread($this->fsock, $this->decrypt_block_size);
+
+ if (!strlen($raw)) {
+ return '';
+ }
+
+ if ($this->decrypt !== false) {
+ $raw = $this->decrypt->decrypt($raw);
+ }
+ if ($raw === false) {
+ user_error('Unable to decrypt content');
+ return false;
+ }
+
+ extract(unpack('Npacket_length/Cpadding_length', $this->_string_shift($raw, 5)));
+
+ $remaining_length = $packet_length + 4 - $this->decrypt_block_size;
+
+ // quoting <http://tools.ietf.org/html/rfc4253#section-6.1>,
+ // "implementations SHOULD check that the packet length is reasonable"
+ // PuTTY uses 0x9000 as the actual max packet size and so to shall we
+ if ($remaining_length < -$this->decrypt_block_size || $remaining_length > 0x9000 || $remaining_length % $this->decrypt_block_size != 0) {
+ user_error('Invalid size');
+ return false;
+ }
+
+ $buffer = '';
+ while ($remaining_length > 0) {
+ $temp = fread($this->fsock, $remaining_length);
+ $buffer.= $temp;
+ $remaining_length-= strlen($temp);
+ }
+ $stop = strtok(microtime(), ' ') + strtok('');
+ if (strlen($buffer)) {
+ $raw.= $this->decrypt !== false ? $this->decrypt->decrypt($buffer) : $buffer;
+ }
+
+ $payload = $this->_string_shift($raw, $packet_length - $padding_length - 1);
+ $padding = $this->_string_shift($raw, $padding_length); // should leave $raw empty
+
+ if ($this->hmac_check !== false) {
+ $hmac = fread($this->fsock, $this->hmac_size);
+ if ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) {
+ user_error('Invalid HMAC');
+ return false;
+ }
+ }
+
+ //if ($this->decompress) {
+ // $payload = gzinflate(substr($payload, 2));
+ //}
+
+ $this->get_seq_no++;
+
+ if (defined('NET_SSH2_LOGGING')) {
+ $current = strtok(microtime(), ' ') + strtok('');
+ $message_number = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';
+ $message_number = '<- ' . $message_number .
+ ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
+ $this->_append_log($message_number, $payload);
+ $this->last_packet = $current;
+ }
+
+ return $this->_filter($payload);
+ }
+
+ /**
+ * Filter Binary Packets
+ *
+ * Because some binary packets need to be ignored...
+ *
+ * @see Net_SSH2::_get_binary_packet()
+ * @return String
+ * @access private
+ */
+ function _filter($payload)
+ {
+ switch (ord($payload[0])) {
+ case NET_SSH2_MSG_DISCONNECT:
+ $this->_string_shift($payload, 1);
+ extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8)));
+ $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . utf8_decode($this->_string_shift($payload, $length));
+ $this->bitmask = 0;
+ return false;
+ case NET_SSH2_MSG_IGNORE:
+ $payload = $this->_get_binary_packet();
+ break;
+ case NET_SSH2_MSG_DEBUG:
+ $this->_string_shift($payload, 2);
+ extract(unpack('Nlength', $this->_string_shift($payload, 4)));
+ $this->errors[] = 'SSH_MSG_DEBUG: ' . utf8_decode($this->_string_shift($payload, $length));
+ $payload = $this->_get_binary_packet();
+ break;
+ case NET_SSH2_MSG_UNIMPLEMENTED:
+ return false;
+ case NET_SSH2_MSG_KEXINIT:
+ if ($this->session_id !== false) {
+ if (!$this->_key_exchange($payload)) {
+ $this->bitmask = 0;
+ return false;
+ }
+ $payload = $this->_get_binary_packet();
+ }
+ }
+
+ // see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in
+ if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && !($this->bitmap & NET_SSH2_MASK_LOGIN) && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) {
+ $this->_string_shift($payload, 1);
+ extract(unpack('Nlength', $this->_string_shift($payload, 4)));
+ $this->errors[] = 'SSH_MSG_USERAUTH_BANNER: ' . utf8_decode($this->_string_shift($payload, $length));
+ $payload = $this->_get_binary_packet();
+ }
+
+ // only called when we've already logged in
+ if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && ($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+ switch (ord($payload[0])) {
+ case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4
+ $this->_string_shift($payload, 1);
+ extract(unpack('Nlength', $this->_string_shift($payload)));
+ $this->errors[] = 'SSH_MSG_GLOBAL_REQUEST: ' . utf8_decode($this->_string_shift($payload, $length));
+
+ if (!$this->_send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE))) {
+ return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+ }
+
+ $payload = $this->_get_binary_packet();
+ break;
+ case NET_SSH2_MSG_CHANNEL_OPEN: // see http://tools.ietf.org/html/rfc4254#section-5.1
+ $this->_string_shift($payload, 1);
+ extract(unpack('N', $this->_string_shift($payload, 4)));
+ $this->errors[] = 'SSH_MSG_CHANNEL_OPEN: ' . utf8_decode($this->_string_shift($payload, $length));
+
+ $this->_string_shift($payload, 4); // skip over client channel
+ extract(unpack('Nserver_channel', $this->_string_shift($payload, 4)));
+
+ $packet = pack('CN3a*Na*',
+ NET_SSH2_MSG_REQUEST_FAILURE, $server_channel, NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED, 0, '', 0, '');
+
+ if (!$this->_send_binary_packet($packet)) {
+ return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+ }
+
+ $payload = $this->_get_binary_packet();
+ break;
+ case NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST:
+ $payload = $this->_get_binary_packet();
+ }
+ }
+
+ return $payload;
+ }
+
+ /**
+ * Enable Quiet Mode
+ *
+ * Suppress stderr from output
+ *
+ * @access public
+ */
+ function enableQuietMode()
+ {
+ $this->quiet_mode = true;
+ }
+
+ /**
+ * Disable Quiet Mode
+ *
+ * Show stderr in output
+ *
+ * @access public
+ */
+ function disableQuietMode()
+ {
+ $this->quiet_mode = false;
+ }
+
+ /**
+ * Gets channel data
+ *
+ * Returns the data as a string if it's available and false if not.
+ *
+ * @param $client_channel
+ * @return Mixed
+ * @access private
+ */
+ function _get_channel_packet($client_channel, $skip_extended = false)
+ {
+ if (!empty($this->channel_buffers[$client_channel])) {
+ return array_shift($this->channel_buffers[$client_channel]);
+ }
+
+ while (true) {
+ if ($this->curTimeout) {
+ $read = array($this->fsock);
+ $write = $except = NULL;
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+ $sec = floor($this->curTimeout);
+ $usec = 1000000 * ($this->curTimeout - $sec);
+ // on windows this returns a "Warning: Invalid CRT parameters detected" error
+ if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+ $this->_close_channel($client_channel);
+ return true;
+ }
+ $elapsed = strtok(microtime(), ' ') + strtok('') - $start;
+ $this->curTimeout-= $elapsed;
+ }
+
+ $response = $this->_get_binary_packet();
+ if ($response === false) {
+ user_error('Connection closed by server');
+ return false;
+ }
+
+ if (!strlen($response)) {
+ return '';
+ }
+
+ extract(unpack('Ctype/Nchannel', $this->_string_shift($response, 5)));
+
+ switch ($this->channel_status[$channel]) {
+ case NET_SSH2_MSG_CHANNEL_OPEN:
+ switch ($type) {
+ case NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION:
+ extract(unpack('Nserver_channel', $this->_string_shift($response, 4)));
+ $this->server_channels[$channel] = $server_channel;
+ $this->_string_shift($response, 4); // skip over (server) window size
+ $temp = unpack('Npacket_size_client_to_server', $this->_string_shift($response, 4));
+ $this->packet_size_client_to_server[$channel] = $temp['packet_size_client_to_server'];
+ return $client_channel == $channel ? true : $this->_get_channel_packet($client_channel, $skip_extended);
+ //case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE:
+ default:
+ user_error('Unable to open channel');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+ }
+ break;
+ case NET_SSH2_MSG_CHANNEL_REQUEST:
+ switch ($type) {
+ case NET_SSH2_MSG_CHANNEL_SUCCESS:
+ return true;
+ //case NET_SSH2_MSG_CHANNEL_FAILURE:
+ default:
+ user_error('Unable to request pseudo-terminal');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+ }
+ case NET_SSH2_MSG_CHANNEL_CLOSE:
+ return $type == NET_SSH2_MSG_CHANNEL_CLOSE ? true : $this->_get_channel_packet($client_channel, $skip_extended);
+ }
+
+ switch ($type) {
+ case NET_SSH2_MSG_CHANNEL_DATA:
+ /*
+ if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
+ // SCP requires null packets, such as this, be sent. further, in the case of the ssh.com SSH server
+ // this actually seems to make things twice as fast. more to the point, the message right after
+ // SSH_MSG_CHANNEL_DATA (usually SSH_MSG_IGNORE) won't block for as long as it would have otherwise.
+ // in OpenSSH it slows things down but only by a couple thousandths of a second.
+ $this->_send_channel_packet($client_channel, chr(0));
+ }
+ */
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $data = $this->_string_shift($response, $length);
+ if ($client_channel == $channel) {
+ return $data;
+ }
+ if (!isset($this->channel_buffers[$client_channel])) {
+ $this->channel_buffers[$client_channel] = array();
+ }
+ $this->channel_buffers[$client_channel][] = $data;
+ break;
+ case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:
+ if ($skip_extended || $this->quiet_mode) {
+ break;
+ }
+ /*
+ if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
+ $this->_send_channel_packet($client_channel, chr(0));
+ }
+ */
+ // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR
+ extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8)));
+ $data = $this->_string_shift($response, $length);
+ if ($client_channel == $channel) {
+ return $data;
+ }
+ if (!isset($this->channel_buffers[$client_channel])) {
+ $this->channel_buffers[$client_channel] = array();
+ }
+ $this->channel_buffers[$client_channel][] = $data;
+ break;
+ case NET_SSH2_MSG_CHANNEL_REQUEST:
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $value = $this->_string_shift($response, $length);
+ switch ($value) {
+ case 'exit-signal':
+ $this->_string_shift($response, 1);
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ $this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length);
+ $this->_string_shift($response, 1);
+ extract(unpack('Nlength', $this->_string_shift($response, 4)));
+ if ($length) {
+ $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length);
+ }
+ case 'exit-status':
+ extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5)));
+ $this->exit_status = $exit_status;
+ // "The channel needs to be closed with SSH_MSG_CHANNEL_CLOSE after this message."
+ // -- http://tools.ietf.org/html/rfc4254#section-6.10
+ $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
+ $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
+
+ $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF;
+ default:
+ // "Some systems may not implement signals, in which case they SHOULD ignore this message."
+ // -- http://tools.ietf.org/html/rfc4254#section-6.9
+ break;
+ }
+ break;
+ case NET_SSH2_MSG_CHANNEL_CLOSE:
+ $this->curTimeout = 0;
+
+ if ($this->bitmap & NET_SSH2_MASK_SHELL) {
+ $this->bitmap&= ~NET_SSH2_MASK_SHELL;
+ }
+ if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) {
+ $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
+ }
+
+ $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
+ return true;
+ case NET_SSH2_MSG_CHANNEL_EOF:
+ break;
+ default:
+ user_error('Error reading channel data');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+ }
+ }
+ }
+
+ /**
+ * Sends Binary Packets
+ *
+ * See '6. Binary Packet Protocol' of rfc4253 for more info.
+ *
+ * @param String $data
+ * @see Net_SSH2::_get_binary_packet()
+ * @return Boolean
+ * @access private
+ */
+ function _send_binary_packet($data)
+ {
+ if (!is_resource($this->fsock) || feof($this->fsock)) {
+ user_error('Connection closed prematurely');
+ $this->bitmask = 0;
+ return false;
+ }
+
+ //if ($this->compress) {
+ // // the -4 removes the checksum:
+ // // http://php.net/function.gzcompress#57710
+ // $data = substr(gzcompress($data), 0, -4);
+ //}
+
+ // 4 (packet length) + 1 (padding length) + 4 (minimal padding amount) == 9
+ $packet_length = strlen($data) + 9;
+ // round up to the nearest $this->encrypt_block_size
+ $packet_length+= (($this->encrypt_block_size - 1) * $packet_length) % $this->encrypt_block_size;
+ // subtracting strlen($data) is obvious - subtracting 5 is necessary because of packet_length and padding_length
+ $padding_length = $packet_length - strlen($data) - 5;
+ $padding = crypt_random_string($padding_length);
+
+ // we subtract 4 from packet_length because the packet_length field isn't supposed to include itself
+ $packet = pack('NCa*', $packet_length - 4, $padding_length, $data . $padding);
+
+ $hmac = $this->hmac_create !== false ? $this->hmac_create->hash(pack('Na*', $this->send_seq_no, $packet)) : '';
+ $this->send_seq_no++;
+
+ if ($this->encrypt !== false) {
+ $packet = $this->encrypt->encrypt($packet);
+ }
+
+ $packet.= $hmac;
+
+ $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+ $result = strlen($packet) == fputs($this->fsock, $packet);
+ $stop = strtok(microtime(), ' ') + strtok('');
+
+ if (defined('NET_SSH2_LOGGING')) {
+ $current = strtok(microtime(), ' ') + strtok('');
+ $message_number = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN (' . ord($data[0]) . ')';
+ $message_number = '-> ' . $message_number .
+ ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
+ $this->_append_log($message_number, $data);
+ $this->last_packet = $current;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Logs data packets
+ *
+ * Makes sure that only the last 1MB worth of packets will be logged
+ *
+ * @param String $data
+ * @access private
+ */
+ function _append_log($message_number, $message)
+ {
+ switch (NET_SSH2_LOGGING) {
+ // useful for benchmarks
+ case NET_SSH2_LOG_SIMPLE:
+ $this->message_number_log[] = $message_number;
+ break;
+ // the most useful log for SSH2
+ case NET_SSH2_LOG_COMPLEX:
+ $this->message_number_log[] = $message_number;
+ $this->_string_shift($message);
+ $this->log_size+= strlen($message);
+ $this->message_log[] = $message;
+ while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
+ $this->log_size-= strlen(array_shift($this->message_log));
+ array_shift($this->message_number_log);
+ }
+ break;
+ // dump the output out realtime; packets may be interspersed with non packets,
+ // passwords won't be filtered out and select other packets may not be correctly
+ // identified
+ case NET_SSH2_LOG_REALTIME:
+ echo "<pre>\r\n" . $this->_format_log(array($message), array($message_number)) . "\r\n</pre>\r\n";
+ @flush();
+ @ob_flush();
+ break;
+ // basically the same thing as NET_SSH2_LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILE
+ // needs to be defined and that the resultant log file will be capped out at NET_SSH2_LOG_MAX_SIZE.
+ // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
+ // at the beginning of the file
+ case NET_SSH2_LOG_REALTIME_FILE:
+ if (!isset($this->realtime_log_file)) {
+ // PHP doesn't seem to like using constants in fopen()
+ $filename = NET_SSH2_LOG_REALTIME_FILE;
+ $fp = fopen($filename, 'w');
+ $this->realtime_log_file = $fp;
+ }
+ if (!is_resource($this->realtime_log_file)) {
+ break;
+ }
+ $entry = $this->_format_log(array($message), array($message_number));
+ if ($this->realtime_log_wrap) {
+ $temp = "<<< START >>>\r\n";
+ $entry.= $temp;
+ fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
+ }
+ $this->realtime_log_size+= strlen($entry);
+ if ($this->realtime_log_size > NET_SSH2_LOG_MAX_SIZE) {
+ fseek($this->realtime_log_file, 0);
+ $this->realtime_log_size = strlen($entry);
+ $this->realtime_log_wrap = true;
+ }
+ fputs($this->realtime_log_file, $entry);
+ }
+ }
+
+ /**
+ * Sends channel data
+ *
+ * Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate
+ *
+ * @param Integer $client_channel
+ * @param String $data
+ * @return Boolean
+ * @access private
+ */
+ function _send_channel_packet($client_channel, $data)
+ {
+ while (strlen($data) > $this->packet_size_client_to_server[$client_channel]) {
+ // resize the window, if appropriate
+ $this->window_size_client_to_server[$client_channel]-= $this->packet_size_client_to_server[$client_channel];
+ if ($this->window_size_client_to_server[$client_channel] < 0) {
+ $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$client_channel], $this->window_size);
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+ $this->window_size_client_to_server[$client_channel]+= $this->window_size;
+ }
+
+ $packet = pack('CN2a*',
+ NET_SSH2_MSG_CHANNEL_DATA,
+ $this->server_channels[$client_channel],
+ $this->packet_size_client_to_server[$client_channel],
+ $this->_string_shift($data, $this->packet_size_client_to_server[$client_channel])
+ );
+
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+ }
+
+ // resize the window, if appropriate
+ $this->window_size_client_to_server[$client_channel]-= strlen($data);
+ if ($this->window_size_client_to_server[$client_channel] < 0) {
+ $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$client_channel], $this->window_size);
+ if (!$this->_send_binary_packet($packet)) {
+ return false;
+ }
+ $this->window_size_client_to_server[$client_channel]+= $this->window_size;
+ }
+
+ return $this->_send_binary_packet(pack('CN2a*',
+ NET_SSH2_MSG_CHANNEL_DATA,
+ $this->server_channels[$client_channel],
+ strlen($data),
+ $data));
+ }
+
+ /**
+ * Closes and flushes a channel
+ *
+ * Net_SSH2 doesn't properly close most channels. For exec() channels are normally closed by the server
+ * and for SFTP channels are presumably closed when the client disconnects. This functions is intended
+ * for SCP more than anything.
+ *
+ * @param Integer $client_channel
+ * @return Boolean
+ * @access private
+ */
+ function _close_channel($client_channel)
+ {
+ // see http://tools.ietf.org/html/rfc4254#section-5.3
+
+ $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
+
+ $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));
+
+ $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
+
+ $this->curTimeout = 0;
+
+ while (!is_bool($this->_get_channel_packet($client_channel)));
+
+ if ($this->bitmap & NET_SSH2_MASK_SHELL) {
+ $this->bitmap&= ~NET_SSH2_MASK_SHELL;
+ }
+ }
+
+ /**
+ * Disconnect
+ *
+ * @param Integer $reason
+ * @return Boolean
+ * @access private
+ */
+ function _disconnect($reason)
+ {
+ if ($this->bitmap) {
+ $data = pack('CNNa*Na*', NET_SSH2_MSG_DISCONNECT, $reason, 0, '', 0, '');
+ $this->_send_binary_packet($data);
+ $this->bitmap = 0;
+ fclose($this->fsock);
+ return false;
+ }
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+
+ /**
+ * Define Array
+ *
+ * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of
+ * named constants from it, using the value as the name of the constant and the index as the value of the constant.
+ * If any of the constants that would be defined already exists, none of the constants will be defined.
+ *
+ * @param Array $array
+ * @access private
+ */
+ function _define_array()
+ {
+ $args = func_get_args();
+ foreach ($args as $arg) {
+ foreach ($arg as $key=>$value) {
+ if (!defined($value)) {
+ define($value, $key);
+ } else {
+ break 2;
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns a log of the packets that have been sent and received.
+ *
+ * Returns a string if NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX, an array if NET_SSH2_LOGGING == NET_SSH2_LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
+ *
+ * @access public
+ * @return String or Array
+ */
+ function getLog()
+ {
+ if (!defined('NET_SSH2_LOGGING')) {
+ return false;
+ }
+
+ switch (NET_SSH2_LOGGING) {
+ case NET_SSH2_LOG_SIMPLE:
+ return $this->message_number_log;
+ break;
+ case NET_SSH2_LOG_COMPLEX:
+ return $this->_format_log($this->message_log, $this->message_number_log);
+ break;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Formats a log for printing
+ *
+ * @param Array $message_log
+ * @param Array $message_number_log
+ * @access private
+ * @return String
+ */
+ function _format_log($message_log, $message_number_log)
+ {
+ static $boundary = ':', $long_width = 65, $short_width = 16;
+
+ $output = '';
+ for ($i = 0; $i < count($message_log); $i++) {
+ $output.= $message_number_log[$i] . "\r\n";
+ $current_log = $message_log[$i];
+ $j = 0;
+ do {
+ if (strlen($current_log)) {
+ $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 ';
+ }
+ $fragment = $this->_string_shift($current_log, $short_width);
+ $hex = substr(
+ preg_replace(
+ '#(.)#es',
+ '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)',
+ $fragment),
+ strlen($boundary)
+ );
+ // replace non ASCII printable characters with dots
+ // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
+ // also replace < with a . since < messes up the output on web browsers
+ $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
+ $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n";
+ $j++;
+ } while (strlen($current_log));
+ $output.= "\r\n";
+ }
+
+ return $output;
+ }
+
+ /**
+ * Returns all errors
+ *
+ * @return String
+ * @access public
+ */
+ function getErrors()
+ {
+ return $this->errors;
+ }
+
+ /**
+ * Returns the last error
+ *
+ * @return String
+ * @access public
+ */
+ function getLastError()
+ {
+ return $this->errors[count($this->errors) - 1];
+ }
+
+ /**
+ * Return the server identification.
+ *
+ * @return String
+ * @access public
+ */
+ function getServerIdentification()
+ {
+ return $this->server_identifier;
+ }
+
+ /**
+ * Return a list of the key exchange algorithms the server supports.
+ *
+ * @return Array
+ * @access public
+ */
+ function getKexAlgorithms()
+ {
+ return $this->kex_algorithms;
+ }
+
+ /**
+ * Return a list of the host key (public key) algorithms the server supports.
+ *
+ * @return Array
+ * @access public
+ */
+ function getServerHostKeyAlgorithms()
+ {
+ return $this->server_host_key_algorithms;
+ }
+
+ /**
+ * Return a list of the (symmetric key) encryption algorithms the server supports, when receiving stuff from the client.
+ *
+ * @return Array
+ * @access public
+ */
+ function getEncryptionAlgorithmsClient2Server()
+ {
+ return $this->encryption_algorithms_client_to_server;
+ }
+
+ /**
+ * Return a list of the (symmetric key) encryption algorithms the server supports, when sending stuff to the client.
+ *
+ * @return Array
+ * @access public
+ */
+ function getEncryptionAlgorithmsServer2Client()
+ {
+ return $this->encryption_algorithms_server_to_client;
+ }
+
+ /**
+ * Return a list of the MAC algorithms the server supports, when receiving stuff from the client.
+ *
+ * @return Array
+ * @access public
+ */
+ function getMACAlgorithmsClient2Server()
+ {
+ return $this->mac_algorithms_client_to_server;
+ }
+
+ /**
+ * Return a list of the MAC algorithms the server supports, when sending stuff to the client.
+ *
+ * @return Array
+ * @access public
+ */
+ function getMACAlgorithmsServer2Client()
+ {
+ return $this->mac_algorithms_server_to_client;
+ }
+
+ /**
+ * Return a list of the compression algorithms the server supports, when receiving stuff from the client.
+ *
+ * @return Array
+ * @access public
+ */
+ function getCompressionAlgorithmsClient2Server()
+ {
+ return $this->compression_algorithms_client_to_server;
+ }
+
+ /**
+ * Return a list of the compression algorithms the server supports, when sending stuff to the client.
+ *
+ * @return Array
+ * @access public
+ */
+ function getCompressionAlgorithmsServer2Client()
+ {
+ return $this->compression_algorithms_server_to_client;
+ }
+
+ /**
+ * Return a list of the languages the server supports, when sending stuff to the client.
+ *
+ * @return Array
+ * @access public
+ */
+ function getLanguagesServer2Client()
+ {
+ return $this->languages_server_to_client;
+ }
+
+ /**
+ * Return a list of the languages the server supports, when receiving stuff from the client.
+ *
+ * @return Array
+ * @access public
+ */
+ function getLanguagesClient2Server()
+ {
+ return $this->languages_client_to_server;
+ }
+
+ /**
+ * Returns the server public host key.
+ *
+ * Caching this the first time you connect to a server and checking the result on subsequent connections
+ * is recommended. Returns false if the server signature is not signed correctly with the public host key.
+ *
+ * @return Mixed
+ * @access public
+ */
+ function getServerPublicHostKey()
+ {
+ $signature = $this->signature;
+ $server_public_host_key = $this->server_public_host_key;
+
+ extract(unpack('Nlength', $this->_string_shift($server_public_host_key, 4)));
+ $this->_string_shift($server_public_host_key, $length);
+
+ if ($this->signature_validated) {
+ return $this->bitmap ?
+ $this->signature_format . ' ' . base64_encode($this->server_public_host_key) :
+ false;
+ }
+
+ $this->signature_validated = true;
+
+ switch ($this->signature_format) {
+ case 'ssh-dss':
+ $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+ $p = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+ $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+ $q = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+ $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+ $g = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+ $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+ $y = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+ /* The value for 'dss_signature_blob' is encoded as a string containing
+ r, followed by s (which are 160-bit integers, without lengths or
+ padding, unsigned, and in network byte order). */
+ $temp = unpack('Nlength', $this->_string_shift($signature, 4));
+ if ($temp['length'] != 40) {
+ user_error('Invalid signature');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ $r = new Math_BigInteger($this->_string_shift($signature, 20), 256);
+ $s = new Math_BigInteger($this->_string_shift($signature, 20), 256);
+
+ if ($r->compare($q) >= 0 || $s->compare($q) >= 0) {
+ user_error('Invalid signature');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ $w = $s->modInverse($q);
+
+ $u1 = $w->multiply(new Math_BigInteger(sha1($this->exchange_hash), 16));
+ list(, $u1) = $u1->divide($q);
+
+ $u2 = $w->multiply($r);
+ list(, $u2) = $u2->divide($q);
+
+ $g = $g->modPow($u1, $p);
+ $y = $y->modPow($u2, $p);
+
+ $v = $g->multiply($y);
+ list(, $v) = $v->divide($p);
+ list(, $v) = $v->divide($q);
+
+ if (!$v->equals($r)) {
+ user_error('Bad server signature');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+ }
+
+ break;
+ case 'ssh-rsa':
+ $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+ $e = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+ $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+ $n = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+ $nLength = $temp['length'];
+
+ /*
+ $temp = unpack('Nlength', $this->_string_shift($signature, 4));
+ $signature = $this->_string_shift($signature, $temp['length']);
+
+ if (!class_exists('Crypt_RSA')) {
+ require_once('Crypt/RSA.php');
+ }
+
+ $rsa = new Crypt_RSA();
+ $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
+ $rsa->loadKey(array('e' => $e, 'n' => $n), CRYPT_RSA_PUBLIC_FORMAT_RAW);
+ if (!$rsa->verify($this->exchange_hash, $signature)) {
+ user_error('Bad server signature');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+ }
+ */
+
+ $temp = unpack('Nlength', $this->_string_shift($signature, 4));
+ $s = new Math_BigInteger($this->_string_shift($signature, $temp['length']), 256);
+
+ // validate an RSA signature per "8.2 RSASSA-PKCS1-v1_5", "5.2.2 RSAVP1", and "9.1 EMSA-PSS" in the
+ // following URL:
+ // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf
+
+ // also, see SSHRSA.c (rsa2_verifysig) in PuTTy's source.
+
+ if ($s->compare(new Math_BigInteger()) < 0 || $s->compare($n->subtract(new Math_BigInteger(1))) > 0) {
+ user_error('Invalid signature');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
+
+ $s = $s->modPow($e, $n);
+ $s = $s->toBytes();
+
+ $h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($this->exchange_hash));
+ $h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 3 - strlen($h)) . $h;
+
+ if ($s != $h) {
+ user_error('Bad server signature');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+ }
+ break;
+ default:
+ user_error('Unsupported signature format');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+ }
+
+ return $this->signature_format . ' ' . base64_encode($this->server_public_host_key);
+ }
+
+ /**
+ * Returns the exit status of an SSH command or false.
+ *
+ * @return Integer or false
+ * @access public
+ */
+ function getExitStatus()
+ {
+ if (is_null($this->exit_status)) {
+ return false;
+ }
+ return $this->exit_status;
+ }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf b/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf
new file mode 100644
index 00000000000..6baa566102c
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf
@@ -0,0 +1,6 @@
+# minimalist openssl.cnf file for use with phpseclib
+
+HOME = .
+RANDFILE = $ENV::HOME/.rnd
+
+[ v3_ca ] \ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist b/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist
new file mode 100644
index 00000000000..f579ab4fd27
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit bootstrap="tests/bootstrap.php"
+ colors="true"
+>
+ <testsuites>
+ <testsuite name="phpseclib Test Suite">
+ <directory>./tests/</directory>
+ </testsuite>
+ </testsuites>
+
+ <!-- Code Coverage -->
+ <filter>
+ <whitelist>
+ <directory>./phpseclib/</directory>
+ </whitelist>
+ </filter>
+</phpunit>
diff --git a/apps/files_external/ajax/addRootCertificate.php b/apps/files_external/ajax/addRootCertificate.php
index be60b415e1b..2f67e801b2c 100644
--- a/apps/files_external/ajax/addRootCertificate.php
+++ b/apps/files_external/ajax/addRootCertificate.php
@@ -12,8 +12,10 @@ $data = fread($fh, filesize($_FILES['rootcert_import']['tmp_name']));
fclose($fh);
$filename = $_FILES['rootcert_import']['name'];
-$view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_external/uploads');
-if ( ! $view->file_exists('')) $view->mkdir('');
+$view = new \OC\Files\View('/'.\OCP\User::getUser().'/files_external/uploads');
+if (!$view->file_exists('')){
+ $view->mkdir('');
+}
$isValid = openssl_pkey_get_public($data);
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index 837d35c9c63..d976c017523 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -6,14 +6,15 @@
* See the COPYING-README file.
*/
-OC::$CLASSPATH['OC_FileStorage_StreamWrapper']='apps/files_external/lib/streamwrapper.php';
-OC::$CLASSPATH['OC_Filestorage_FTP']='apps/files_external/lib/ftp.php';
-OC::$CLASSPATH['OC_Filestorage_DAV']='apps/files_external/lib/webdav.php';
-OC::$CLASSPATH['OC_Filestorage_Google']='apps/files_external/lib/google.php';
-OC::$CLASSPATH['OC_Filestorage_SWIFT']='apps/files_external/lib/swift.php';
-OC::$CLASSPATH['OC_Filestorage_SMB']='apps/files_external/lib/smb.php';
-OC::$CLASSPATH['OC_Filestorage_AmazonS3']='apps/files_external/lib/amazons3.php';
-OC::$CLASSPATH['OC_Filestorage_Dropbox']='apps/files_external/lib/dropbox.php';
+OC::$CLASSPATH['OC\Files\Storage\StreamWrapper']='apps/files_external/lib/streamwrapper.php';
+OC::$CLASSPATH['OC\Files\Storage\FTP']='apps/files_external/lib/ftp.php';
+OC::$CLASSPATH['OC\Files\Storage\DAV']='apps/files_external/lib/webdav.php';
+OC::$CLASSPATH['OC\Files\Storage\Google']='apps/files_external/lib/google.php';
+OC::$CLASSPATH['OC\Files\Storage\SWIFT']='apps/files_external/lib/swift.php';
+OC::$CLASSPATH['OC\Files\Storage\SMB']='apps/files_external/lib/smb.php';
+OC::$CLASSPATH['OC\Files\Storage\AmazonS3']='apps/files_external/lib/amazons3.php';
+OC::$CLASSPATH['OC\Files\Storage\Dropbox']='apps/files_external/lib/dropbox.php';
+OC::$CLASSPATH['OC\Files\Storage\SFTP']='apps/files_external/lib/sftp.php';
OC::$CLASSPATH['OC_Mount_Config']='apps/files_external/lib/config.php';
OCP\App::registerAdmin('files_external', 'settings');
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index 3da1913c5fc..2c04216a9fb 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>Mount external storage sources</description>
<licence>AGPL</licence>
<author>Robin Appelman, Michael Gapczynski</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<types>
<filesystem/>
diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js
index 9314a4c7927..a8bbb7b02e2 100644
--- a/apps/files_external/js/dropbox.js
+++ b/apps/files_external/js/dropbox.js
@@ -1,6 +1,6 @@
$(document).ready(function() {
- $('#externalStorage tbody tr.OC_Filestorage_Dropbox').each(function() {
+ $('#externalStorage tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Dropbox').each(function() {
var configured = $(this).find('[data-parameter="configured"]');
if ($(configured).val() == 'true') {
$(this).find('.configuration input').attr('disabled', 'disabled');
@@ -37,18 +37,18 @@ $(document).ready(function() {
}
});
- $('#externalStorage tbody tr.OC_Filestorage_Dropbox td').live('paste', function() {
+ $('#externalStorage tbody').on('paste', 'tr.OC_Filestorage_Dropbox td', function() {
var tr = $(this).parent();
setTimeout(function() {
onDropboxInputsChange(tr);
}, 20);
});
- $('#externalStorage tbody tr.OC_Filestorage_Dropbox td').live('keyup', function() {
+ $('#externalStorage tbody').on('keyup', 'tr.OC_Filestorage_Dropbox td', function() {
onDropboxInputsChange($(this).parent());
});
- $('#externalStorage tbody tr.OC_Filestorage_Dropbox .chzn-select').live('change', function() {
+ $('#externalStorage tbody').on('change', 'tr.OC_Filestorage_Dropbox .chzn-select', function() {
onDropboxInputsChange($(this).parent().parent());
});
@@ -72,7 +72,7 @@ $(document).ready(function() {
}
}
- $('.dropbox').live('click', function(event) {
+ $('.dropbox').on('click', function(event) {
event.preventDefault();
var tr = $(this).parent().parent();
var app_key = $(this).parent().find('[data-parameter="app_key"]').val();
diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js
index ad6fc6a0f9a..46333d89d68 100644
--- a/apps/files_external/js/google.js
+++ b/apps/files_external/js/google.js
@@ -4,7 +4,7 @@ $(document).ready(function() {
setupGoogleRow(tr);
});
- $('#selectBackend').live('change', function() {
+ $('#selectBackend').on('change', function() {
if ($(this).val() == 'OC_Filestorage_Google') {
setupGoogleRow($('#externalStorage tbody>tr:last').prev('tr'));
}
@@ -43,18 +43,18 @@ $(document).ready(function() {
}
}
- $('#externalStorage tbody tr.OC_Filestorage_Google td').live('paste', function() {
+ $('#externalStorage tbody').on('paste', 'tr.OC_Filestorage_Google td', function() {
var tr = $(this).parent();
setTimeout(function() {
onGoogleInputsChange(tr);
}, 20);
});
- $('#externalStorage tbody tr.OC_Filestorage_Google td').live('keyup', function() {
+ $('#externalStorage tbody').on('keyup', 'tr.OC_Filestorage_Google td', function() {
onGoogleInputsChange($(this).parent());
});
- $('#externalStorage tbody tr.OC_Filestorage_Google .chzn-select').live('change', function() {
+ $('#externalStorage tbody').on('change', 'tr.OC_Filestorage_Google .chzn-select', function() {
onGoogleInputsChange($(this).parent().parent());
});
@@ -73,7 +73,7 @@ $(document).ready(function() {
}
}
- $('.google').live('click', function(event) {
+ $('.google').on('click', function(event) {
event.preventDefault();
var tr = $(this).parent().parent();
var configured = $(this).parent().find('[data-parameter="configured"]');
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index 2a8d8d2c284..5dffbce5bdf 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -146,7 +146,7 @@ OC.MountConfig={
$(document).ready(function() {
$('.chzn-select').chosen();
- $('#selectBackend').live('change', function() {
+ $('#selectBackend').on('change', function() {
var tr = $(this).parent().parent();
$('#externalStorage tbody').append($(tr).clone());
$('#externalStorage tbody tr').last().find('.mountPoint input').val('');
@@ -176,7 +176,7 @@ $(document).ready(function() {
td.append('<input type="text" data-parameter="'+parameter+'" placeholder="'+placeholder+'" />');
}
});
- if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass).length == 1) {
+ if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length == 1) {
OC.addScript('files_external', parameters['custom']);
}
return false;
@@ -220,7 +220,7 @@ $(document).ready(function() {
return defaultMountPoint+append;
}
- $('#externalStorage td').live('paste', function() {
+ $('#externalStorage').on('paste', 'td', function() {
var tr = $(this).parent();
setTimeout(function() {
OC.MountConfig.saveStorage(tr);
@@ -229,7 +229,7 @@ $(document).ready(function() {
var timer;
- $('#externalStorage td input').live('keyup', function() {
+ $('#externalStorage').on('keyup', 'td input', function() {
clearTimeout(timer);
var tr = $(this).parent().parent();
if ($(this).val) {
@@ -239,15 +239,15 @@ $(document).ready(function() {
}
});
- $('#externalStorage td input:checkbox').live('change', function() {
+ $('#externalStorage').on('change', 'td input:checkbox', function() {
OC.MountConfig.saveStorage($(this).parent().parent().parent());
});
- $('.applicable .chzn-select').live('change', function() {
+ $('.applicable').on('change', '.chzn-select', function() {
OC.MountConfig.saveStorage($(this).parent().parent());
});
- $('td.remove>img').live('click', function() {
+ $('td.remove>img').on('click', function() {
var tr = $(this).parent().parent();
var mountPoint = $(tr).find('.mountPoint input').val();
if ( ! mountPoint) {
diff --git a/apps/files_external/l10n/af_ZA.php b/apps/files_external/l10n/af_ZA.php
new file mode 100644
index 00000000000..cf9b951828d
--- /dev/null
+++ b/apps/files_external/l10n/af_ZA.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Users" => "Gebruikers"
+);
diff --git a/apps/files_external/l10n/bg_BG.php b/apps/files_external/l10n/bg_BG.php
index 1f2c29d54c5..6342da3f3a2 100644
--- a/apps/files_external/l10n/bg_BG.php
+++ b/apps/files_external/l10n/bg_BG.php
@@ -6,6 +6,7 @@
"Backend" => "ÐдминиÑтрациÑ",
"Configuration" => "КонфигурациÑ",
"Options" => "Опции",
+"Applicable" => "Приложимо",
"None set" => "ÐÑма избрано",
"All Users" => "Ð’Ñички потребители",
"Groups" => "Групи",
diff --git a/apps/files_external/l10n/bn_BD.php b/apps/files_external/l10n/bn_BD.php
index ad983b52e43..a4a2b23030b 100644
--- a/apps/files_external/l10n/bn_BD.php
+++ b/apps/files_external/l10n/bn_BD.php
@@ -1,6 +1,24 @@
<?php $TRANSLATIONS = array(
-"Backend" => "পà§à¦°à¦¶à¦¾à¦¸à¦•",
-"Groups" => "গোষà§à¦ à§€",
-"Users" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারিবৃনà§à¦¦",
-"Delete" => "মà§à¦›à§‡ ফেল"
+"Access granted" => "অধিগমনের অনà§à¦®à¦¤à¦¿ পà§à¦°à¦¦à¦¾à¦¨ করা হলো",
+"Error configuring Dropbox storage" => "Dropbox সংরকà§à¦·à¦£à¦¾à¦—ার নিরà§à¦§à¦¾à¦°à¦£ করতে সমসà§à¦¯à¦¾ ",
+"Grant access" => "অধিগমনের অনà§à¦®à¦¤à¦¿ পà§à¦°à¦¦à¦¾à¦¨ কর",
+"Fill out all required fields" => "আবশà§à¦¯à¦¿à¦• সমসà§à¦¤ কà§à¦·à§‡à¦¤à§à¦° পূরণ করà§à¦¨",
+"Please provide a valid Dropbox app key and secret." => "দয়া করে সঠিক à¦à¦¬à¦‚ বৈধ Dropbox app key and secret পà§à¦°à¦¦à¦¾à¦¨ করà§à¦¨à¥¤",
+"Error configuring Google Drive storage" => "Google Drive সংরকà§à¦·à¦£à¦¾à¦—ার নিরà§à¦§à¦¾à¦°à¦£ করতে সমসà§à¦¯à¦¾ ",
+"External Storage" => "বাহà§à¦¯à¦¿à¦• সংরকà§à¦·à¦£à¦¾à¦—ার",
+"Mount point" => "মাউনà§à¦Ÿ পয়েনà§à¦Ÿ",
+"Backend" => "পশà§à¦šà¦¾à¦¦à¦ªà¦Ÿ",
+"Configuration" => "কনফিগারেসন",
+"Options" => "বিকলà§à¦ªà¦¸à¦®à§‚হ",
+"Applicable" => "পà§à¦°à¦¯à§‹à¦œà§à¦¯",
+"Add mount point" => "মাউনà§à¦Ÿ পয়েনà§à¦Ÿ যোগ কর",
+"None set" => "কোনটিই নিরà§à¦§à¦¾à¦°à¦£ করা হয় নি",
+"All Users" => "সমসà§à¦¤ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী",
+"Groups" => "গোষà§à¦ à§€à¦¸à¦®à§‚হ",
+"Users" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী",
+"Delete" => "মà§à¦›à§‡ ফেল",
+"Enable User External Storage" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর বাহà§à¦¯à¦¿à¦• সংরকà§à¦·à¦£à¦¾à¦—ার সকà§à¦°à¦¿à§Ÿ কর",
+"Allow users to mount their own external storage" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীদেরকে তাদের নিজসà§à¦¬ বাহà§à¦¯à¦¿à¦• সংরকà§à¦·à¦¨à¦¾à¦—ার সাউনà§à¦Ÿ করতে অনà§à¦®à§‹à¦¦à¦¨ দাও",
+"SSL root certificates" => "SSL রà§à¦Ÿ সনদপতà§à¦°",
+"Import Root Certificate" => "রà§à¦Ÿ সনদপতà§à¦°à¦Ÿà¦¿ আমদানি করà§à¦¨"
);
diff --git a/apps/files_external/l10n/fa.php b/apps/files_external/l10n/fa.php
index b866201361a..5acf3eac5a5 100644
--- a/apps/files_external/l10n/fa.php
+++ b/apps/files_external/l10n/fa.php
@@ -1,5 +1,10 @@
<?php $TRANSLATIONS = array(
+"External Storage" => "Ø­Ø§ÙØ¸Ù‡ خارجی",
+"Configuration" => "پیکربندی",
+"Options" => "تنظیمات",
+"Applicable" => "قابل اجرا",
"Groups" => "گروه ها",
"Users" => "کاربران",
-"Delete" => "حذÙ"
+"Delete" => "حذÙ",
+"Enable User External Storage" => "ÙØ¹Ø§Ù„ سازی Ø­Ø§ÙØ¸Ù‡ خارجی کاربر"
);
diff --git a/apps/files_external/l10n/fi_FI.php b/apps/files_external/l10n/fi_FI.php
index d7b16e0d3ee..8c7381db71d 100644
--- a/apps/files_external/l10n/fi_FI.php
+++ b/apps/files_external/l10n/fi_FI.php
@@ -4,6 +4,8 @@
"Grant access" => "Salli pääsy",
"Fill out all required fields" => "Täytä kaikki vaaditut kentät",
"Error configuring Google Drive storage" => "Virhe Google Drive levyn asetuksia tehtäessä",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Varoitus:</b> \"smbclient\" ei ole asennettuna. CIFS-/SMB-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan smbclient.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Varoitus:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. FTP-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
"External Storage" => "Erillinen tallennusväline",
"Mount point" => "Liitospiste",
"Backend" => "Taustaosa",
diff --git a/apps/files_external/l10n/ko.php b/apps/files_external/l10n/ko.php
index cb691cf5e3d..47b75f74b86 100644
--- a/apps/files_external/l10n/ko.php
+++ b/apps/files_external/l10n/ko.php
@@ -5,8 +5,8 @@
"Fill out all required fields" => "모든 필수 í•­ëª©ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤",
"Please provide a valid Dropbox app key and secret." => "올바른 Dropbox 앱 키와 암호를 입력하십시오.",
"Error configuring Google Drive storage" => "Google 드ë¼ì´ë¸Œ 저장소 설정 오류",
-"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>경고</b>\"smbclient\"ê°€ 설치ë˜ì§€ 않았습니다. CIFS/SMB 공유애 ì—°ê²°ì´ ë¶ˆê°€ëŠ¥ 합니다.. 시스템 관리ìžì—게 요청하여 설치하시기 ë°”ëžë‹ˆë‹¤.",
-"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>경고</b>PHPìš© FTP ì§€ì›ì´ 사용 불가능 하거나 설치ë˜ì§€ 않았습니다. FTP ê³µìœ ì— ì—°ê²°ì´ ë¶ˆê°€ëŠ¥ 합니다. 시스템 관리ìžì—게 요청하여 설치하시기 ë°”ëžë‹ˆë‹¤. ",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>경고:</b> \"smbclient\"ê°€ 설치ë˜ì§€ 않았습니다. CIFS/SMB 공유 ìžì›ì— ì—°ê²°í•  수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>경고:</b> PHP FTP ì§€ì›ì´ 비활성화ë˜ì–´ 있거나 설치ë˜ì§€ 않았습니다. FTP 공유를 마운트할 수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오.",
"External Storage" => "외부 저장소",
"Mount point" => "마운트 ì§€ì ",
"Backend" => "백엔드",
diff --git a/apps/files_external/l10n/lv.php b/apps/files_external/l10n/lv.php
index 26452f98b01..ee53346fcde 100644
--- a/apps/files_external/l10n/lv.php
+++ b/apps/files_external/l10n/lv.php
@@ -1,5 +1,26 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Piešķirta pieeja",
+"Error configuring Dropbox storage" => "Kļūda, konfigurÄ“jot Dropbox krÄtuvi",
+"Grant access" => "Piešķirt pieeju",
+"Fill out all required fields" => "Aizpildīt visus pieprasītos laukus",
+"Please provide a valid Dropbox app key and secret." => "LÅ«dzu, norÄdiet derÄ«gu Dropbox lietotnes atslÄ“gu un noslÄ“pumu.",
+"Error configuring Google Drive storage" => "Kļūda, konfigurÄ“jot Google Drive krÄtuvi",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>BrÄ«dinÄjums:</b> nav uzinstalÄ“ts “smbclientâ€. Nevar montÄ“t CIFS/SMB koplietojumus. LÅ«dzu, vaicÄjiet savam sistÄ“mas administratoram, lai to uzinstalÄ“.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>BrÄ«dinÄjums: </b> uz PHP nav aktivÄ“ts vai instalÄ“ts FTP atbalsts. Nevar montÄ“t FTP koplietojumus. LÅ«dzu, vaicÄjiet savam sistÄ“mas administratoram, lai to uzinstalÄ“.",
+"External Storage" => "Ä€rÄ“jÄ krÄtuve",
+"Mount point" => "Montēšanas punkts",
+"Backend" => "Aizmugure",
+"Configuration" => "KonfigurÄcija",
+"Options" => "Opcijas",
+"Applicable" => "Piemērojams",
+"Add mount point" => "Pievienot montēšanas punktu",
+"None set" => "Neviens nav iestatīts",
+"All Users" => "Visi lietotÄji",
"Groups" => "Grupas",
"Users" => "LietotÄji",
-"Delete" => "Izdzēst"
+"Delete" => "Dzēst",
+"Enable User External Storage" => "AktivÄ“t lietotÄja ÄrÄ“jo krÄtuvi",
+"Allow users to mount their own external storage" => "Ä»aut lietotÄjiem montÄ“t paÅ¡iem savu ÄrÄ“jo krÄtuvi",
+"SSL root certificates" => "SSL saknes sertifikÄti",
+"Import Root Certificate" => "ImportÄ“t saknes sertifikÄtus"
);
diff --git a/apps/files_external/l10n/pt_BR.php b/apps/files_external/l10n/pt_BR.php
index 26e927a423e..85393954886 100644
--- a/apps/files_external/l10n/pt_BR.php
+++ b/apps/files_external/l10n/pt_BR.php
@@ -5,6 +5,8 @@
"Fill out all required fields" => "Preencha todos os campos obrigatórios",
"Please provide a valid Dropbox app key and secret." => "Por favor forneça um app key e secret válido do Dropbox",
"Error configuring Google Drive storage" => "Erro ao configurar armazenamento do Google Drive",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Aviso:</b> \"smbclient\" não está instalado. Não será possível montar compartilhamentos de CIFS/SMB. Por favor, peça ao seu administrador do sistema para instalá-lo.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Aviso:</b> O suporte para FTP do PHP não está ativado ou instalado. Não será possível montar compartilhamentos FTP. Por favor, peça ao seu administrador do sistema para instalá-lo.",
"External Storage" => "Armazenamento Externo",
"Mount point" => "Ponto de montagem",
"Backend" => "Backend",
diff --git a/apps/files_external/l10n/ro.php b/apps/files_external/l10n/ro.php
index 6a152786808..ca2c9f7e5c8 100644
--- a/apps/files_external/l10n/ro.php
+++ b/apps/files_external/l10n/ro.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"Access granted" => "Acces permis",
+"Error configuring Dropbox storage" => "Eroare la configurarea mediului de stocare Dropbox",
+"Grant access" => "Permite accesul",
+"Fill out all required fields" => "Completează toate câmpurile necesare",
+"Please provide a valid Dropbox app key and secret." => "Prezintă te rog o cheie de Dropbox validă și parola",
+"Error configuring Google Drive storage" => "Eroare la configurarea mediului de stocare Google Drive",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Atenție:</b> \"smbclient\" nu este instalat. Montarea mediilor CIFS/SMB partajate nu este posibilă. Solicită administratorului sistemului tău să îl instaleaze.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Atenție:</b> suportul pentru FTP în PHP nu este activat sau instalat. Montarea mediilor FPT partajate nu este posibilă. Solicită administratorului sistemului tău să îl instaleze.",
"External Storage" => "Stocare externă",
"Mount point" => "Punctul de montare",
"Backend" => "Backend",
diff --git a/apps/files_external/l10n/sk_SK.php b/apps/files_external/l10n/sk_SK.php
index 04d5e3c7ee4..d464d192ffc 100644
--- a/apps/files_external/l10n/sk_SK.php
+++ b/apps/files_external/l10n/sk_SK.php
@@ -5,6 +5,8 @@
"Fill out all required fields" => "Vyplňte všetky vyžadované kolónky",
"Please provide a valid Dropbox app key and secret." => "Zadajte platný kÄ¾ÃºÄ aplikácie a heslo Dropbox",
"Error configuring Google Drive storage" => "Chyba pri konfigurácii úložiska Google drive",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Upozornenie:</b> \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Upozornenie:</b> Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje.",
"External Storage" => "Externé úložisko",
"Mount point" => "Prípojný bod",
"Backend" => "Backend",
@@ -13,12 +15,12 @@
"Applicable" => "Aplikovateľné",
"Add mount point" => "Pridať prípojný bod",
"None set" => "Žiadne nastavené",
-"All Users" => "Všetci užívatelia",
+"All Users" => "Všetci používatelia",
"Groups" => "Skupiny",
-"Users" => "Užívatelia",
+"Users" => "Používatelia",
"Delete" => "Odstrániť",
"Enable User External Storage" => "Povoliť externé úložisko",
-"Allow users to mount their own external storage" => "Povoliť užívateľom pripojiť ich vlastné externé úložisko",
+"Allow users to mount their own external storage" => "Povoliť používateľom pripojiť ich vlastné externé úložisko",
"SSL root certificates" => "Koreňové SSL certifikáty",
"Import Root Certificate" => "Importovať koreňový certifikát"
);
diff --git a/apps/files_external/l10n/th_TH.php b/apps/files_external/l10n/th_TH.php
index 70ab8d33485..870995c8e7a 100644
--- a/apps/files_external/l10n/th_TH.php
+++ b/apps/files_external/l10n/th_TH.php
@@ -5,6 +5,8 @@
"Fill out all required fields" => "à¸à¸£à¸­à¸à¸‚้อมูลในช่องข้อมูลที่จำเป็นต้องà¸à¸£à¸­à¸à¸—ั้งหมด",
"Please provide a valid Dropbox app key and secret." => "à¸à¸£à¸¸à¸“าà¸à¸£à¸­à¸à¸£à¸«à¸±à¸ª app key ของ Dropbox à¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸¥à¸±à¸š",
"Error configuring Google Drive storage" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าà¸à¸²à¸£à¸ˆà¸±à¸”เà¸à¹‡à¸šà¸‚้อมูลในพื้นที่ของ Google Drive",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>คำเตือน:</b> \"smbclient\" ยังไม่ได้ถูà¸à¸•ิดตั้ง. à¸à¸²à¸£à¸Šà¸µà¹‰ CIFS/SMB เพื่อà¹à¸Šà¸£à¹Œà¸‚้อมูลไม่สามารถà¸à¸£à¸°à¸—ำได้ à¸à¸£à¸¸à¸“าสอบถามข้อมูลเพิ่มเติมจาà¸à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸šà¹€à¸žà¸·à¹ˆà¸­à¸•ิดตั้ง.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>คำเตือน:</b> à¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ FTP ในภาษา PHP ยังไม่ได้ถูà¸à¹€à¸›à¸´à¸”ใช้งานหรือถูà¸à¸•ิดตั้ง. à¸à¸²à¸£à¸Šà¸µà¹‰ FTP เพื่อà¹à¸Šà¸£à¹Œà¸‚้อมูลไม่สามารถดำเนินà¸à¸²à¸£à¹„ด้ à¸à¸£à¸¸à¸“าสอบถามข้อมูลเพิ่มเติมจาà¸à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸šà¹€à¸žà¸·à¹ˆà¸­à¸•ิดตั้ง",
"External Storage" => "พื้นทีจัดเà¸à¹‡à¸šà¸‚้อมูลจาà¸à¸ à¸²à¸¢à¸™à¸­à¸",
"Mount point" => "จุดชี้ตำà¹à¸«à¸™à¹ˆà¸‡",
"Backend" => "ด้านหลังระบบ",
diff --git a/apps/files_external/l10n/vi.php b/apps/files_external/l10n/vi.php
index 0160692cb65..c522c669e1e 100644
--- a/apps/files_external/l10n/vi.php
+++ b/apps/files_external/l10n/vi.php
@@ -5,6 +5,8 @@
"Fill out all required fields" => "Äiá»n vào tất cả các trưá»ng bắt buá»™c",
"Please provide a valid Dropbox app key and secret." => "Xin vui lòng cung cấp một ứng dụng Dropbox hợp lệ và mã bí mật.",
"Error configuring Google Drive storage" => "Lỗi cấu hình lưu trữ Google Drive",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Cảnh báo:</b> \"smbclient\" chưa được cài đặt. Mount CIFS/SMB shares là không thể thá»±c hiện được. Hãy há»i ngưá»i quản trị hệ thống để cài đặt nó.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Cảnh báo:</b> FTP trong PHP chưa được cài đặt hoặc chưa được mở. Mount FTP shares là không thể. Xin hãy yêu cầu quản trị hệ thống của bạn cài đặt nó.",
"External Storage" => "Lưu trữ ngoài",
"Mount point" => "Äiểm gắn",
"Backend" => "phụ trợ",
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
index 5ab89df732d..3800a14c37c 100644
--- a/apps/files_external/lib/amazons3.php
+++ b/apps/files_external/lib/amazons3.php
@@ -1,32 +1,35 @@
<?php
/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@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 Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@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 OC\Files\Storage;
require_once 'aws-sdk/sdk.class.php';
-class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
+class AmazonS3 extends \OC\Files\Storage\Common {
private $s3;
private $bucket;
private $objects = array();
+ private $id;
private static $tempFiles = array();
@@ -34,7 +37,8 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
public function __construct($params) {
if (isset($params['key']) && isset($params['secret']) && isset($params['bucket'])) {
- $this->s3 = new AmazonS3(array('key' => $params['key'], 'secret' => $params['secret']));
+ $this->id = 'amazon::' . $params['key'] . md5($params['secret']);
+ $this->s3 = new \AmazonS3(array('key' => $params['key'], 'secret' => $params['secret']));
$this->bucket = $params['bucket'];
} else {
throw new Exception();
@@ -51,7 +55,7 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
return $response;
// This object could be a folder, a '/' must be at the end of the path
} else if (substr($path, -1) != '/') {
- $response = $this->s3->get_object_metadata($this->bucket, $path.'/');
+ $response = $this->s3->get_object_metadata($this->bucket, $path . '/');
if ($response) {
$this->objects[$path] = $response;
return $response;
@@ -61,6 +65,10 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
return false;
}
+ public function getId() {
+ return $this->id;
+ }
+
public function mkdir($path) {
// Folders in Amazon S3 are 0 byte objects with a '/' at the end of the name
if (substr($path, -1) != '/') {
@@ -100,8 +108,8 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
foreach ($response->body->CommonPrefixes as $object) {
$files[] = basename($object->Prefix);
}
- OC_FakeDirStream::$dirs['amazons3'.$path] = $files;
- return opendir('fakedir://amazons3'.$path);
+ \OC\Files\Stream\Dir::register('amazons3' . $path, $files);
+ return opendir('fakedir://amazons3' . $path);
}
return false;
}
@@ -111,15 +119,10 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
$stat['size'] = $this->s3->get_bucket_filesize($this->bucket);
$stat['atime'] = time();
$stat['mtime'] = $stat['atime'];
- $stat['ctime'] = $stat['atime'];
- } else {
- $object = $this->getObject($path);
- if ($object) {
- $stat['size'] = $object['Size'];
- $stat['atime'] = time();
- $stat['mtime'] = strtotime($object['LastModified']);
- $stat['ctime'] = $stat['mtime'];
- }
+ } else if ($object = $this->getObject($path)) {
+ $stat['size'] = $object['Size'];
+ $stat['atime'] = time();
+ $stat['mtime'] = strtotime($object['LastModified']);
}
if (isset($stat)) {
return $stat;
@@ -170,7 +173,7 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
switch ($mode) {
case 'r':
case 'rb':
- $tmpFile = OC_Helper::tmpFile();
+ $tmpFile = \OC_Helper::tmpFile();
$handle = fopen($tmpFile, 'w');
$response = $this->s3->get_object($this->bucket, $path, array('fileDownload' => $handle));
if ($response->isOK()) {
@@ -194,14 +197,14 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
} else {
$ext = '';
}
- $tmpFile = OC_Helper::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack');
+ $tmpFile = \OC_Helper::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
}
self::$tempFiles[$tmpFile] = $path;
- return fopen('close://'.$tmpFile, $mode);
+ return fopen('close://' . $tmpFile, $mode);
}
return false;
}
@@ -210,8 +213,8 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
if (isset(self::$tempFiles[$tmpFile])) {
$handle = fopen($tmpFile, 'r');
$response = $this->s3->create_object($this->bucket,
- self::$tempFiles[$tmpFile],
- array('fileUpload' => $handle));
+ self::$tempFiles[$tmpFile],
+ array('fileUpload' => $handle));
if ($response->isOK()) {
unlink($tmpFile);
}
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index fd654f04e98..2f3dbf10691 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -39,19 +39,19 @@ class OC_Mount_Config {
*/
public static function getBackends() {
- $backends['OC_Filestorage_Local']=array(
+ $backends['\OC\Files\Storage\Local']=array(
'backend' => 'Local',
'configuration' => array(
'datadir' => 'Location'));
- $backends['OC_Filestorage_AmazonS3']=array(
+ $backends['\OC\Files\Storage\AmazonS3']=array(
'backend' => 'Amazon S3',
'configuration' => array(
'key' => 'Key',
'secret' => '*Secret',
'bucket' => 'Bucket'));
- $backends['OC_Filestorage_Dropbox']=array(
+ $backends['\OC\Files\Storage\Dropbox']=array(
'backend' => 'Dropbox',
'configuration' => array(
'configured' => '#configured',
@@ -61,7 +61,7 @@ class OC_Mount_Config {
'token_secret' => '#token_secret'),
'custom' => 'dropbox');
- if(OC_Mount_Config::checkphpftp()) $backends['OC_Filestorage_FTP']=array(
+ if(OC_Mount_Config::checkphpftp()) $backends['\OC\Files\Storage\FTP']=array(
'backend' => 'FTP',
'configuration' => array(
'host' => 'URL',
@@ -70,7 +70,7 @@ class OC_Mount_Config {
'root' => '&Root',
'secure' => '!Secure ftps://'));
- $backends['OC_Filestorage_Google']=array(
+ $backends['\OC\Files\Storage\Google']=array(
'backend' => 'Google Drive',
'configuration' => array(
'configured' => '#configured',
@@ -78,7 +78,7 @@ class OC_Mount_Config {
'token_secret' => '#token secret'),
'custom' => 'google');
- $backends['OC_Filestorage_SWIFT']=array(
+ $backends['\OC\Files\Storage\SWIFT']=array(
'backend' => 'OpenStack Swift',
'configuration' => array(
'host' => 'URL',
@@ -87,7 +87,7 @@ class OC_Mount_Config {
'root' => '&Root',
'secure' => '!Secure ftps://'));
- if(OC_Mount_Config::checksmbclient()) $backends['OC_Filestorage_SMB']=array(
+ if(OC_Mount_Config::checksmbclient()) $backends['\OC\Files\Storage\SMB']=array(
'backend' => 'SMB / CIFS',
'configuration' => array(
'host' => 'URL',
@@ -96,14 +96,22 @@ class OC_Mount_Config {
'share' => 'Share',
'root' => '&Root'));
- $backends['OC_Filestorage_DAV']=array(
+ $backends['\OC\Files\Storage\DAV']=array(
'backend' => 'ownCloud / WebDAV',
'configuration' => array(
'host' => 'URL',
'user' => 'Username',
'password' => '*Password',
'root' => '&Root',
- 'secure' => '!Secure https://'));
+ 'secure' => '!Secure https://'));
+
+ $backends['\OC\Files\Storage\SFTP']=array(
+ 'backend' => 'SFTP',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Root'));
return($backends);
}
@@ -120,6 +128,10 @@ class OC_Mount_Config {
if (isset($mountPoints[self::MOUNT_TYPE_GROUP])) {
foreach ($mountPoints[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
foreach ($mounts as $mountPoint => $mount) {
+ // Update old classes to new namespace
+ if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
+ $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ }
// Remove '/$user/files/' from mount point
$mountPoint = substr($mountPoint, 13);
// Merge the mount point into the current mount points
@@ -141,6 +153,10 @@ class OC_Mount_Config {
if (isset($mountPoints[self::MOUNT_TYPE_USER])) {
foreach ($mountPoints[self::MOUNT_TYPE_USER] as $user => $mounts) {
foreach ($mounts as $mountPoint => $mount) {
+ // Update old classes to new namespace
+ if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
+ $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ }
// Remove '/$user/files/' from mount point
$mountPoint = substr($mountPoint, 13);
// Merge the mount point into the current mount points
@@ -174,6 +190,10 @@ class OC_Mount_Config {
$personal = array();
if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) {
foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) {
+ // Update old classes to new namespace
+ if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
+ $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ }
// Remove '/uid/files/' from mount point
$personal[substr($mountPoint, strlen($uid) + 8)] = array(
'class' => $mount['class'],
@@ -202,22 +222,6 @@ class OC_Mount_Config {
}
/**
- * Add directory for mount point to the filesystem
- * @param OC_Fileview instance $view
- * @param string path to mount point
- */
- private static function addMountPointDirectory($view, $path) {
- $dir = '';
- foreach ( explode('/', $path) as $pathPart) {
- $dir = $dir.'/'.$pathPart;
- if ( !$view->file_exists($dir)) {
- $view->mkdir($dir);
- }
- }
- }
-
-
- /**
* Add a mount point to the filesystem
* @param string Mount point
* @param string Backend class
@@ -236,36 +240,11 @@ class OC_Mount_Config {
if ($isPersonal) {
// Verify that the mount point applies for the current user
// Prevent non-admin users from mounting local storage
- if ($applicable != OCP\User::getUser() || $class == 'OC_Filestorage_Local') {
+ if ($applicable != OCP\User::getUser() || $class == '\OC\Files\Storage\Local') {
return false;
}
- $view = new OC_FilesystemView('/'.OCP\User::getUser().'/files');
- self::addMountPointDirectory($view, ltrim($mountPoint, '/'));
$mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
} else {
- $view = new OC_FilesystemView('/');
- switch ($mountType) {
- case 'user':
- if ($applicable == "all") {
- $users = OCP\User::getUsers();
- foreach ( $users as $user ) {
- $path = $user.'/files/'.ltrim($mountPoint, '/');
- self::addMountPointDirectory($view, $path);
- }
- } else {
- $path = $applicable.'/files/'.ltrim($mountPoint, '/');
- self::addMountPointDirectory($view, $path);
- }
- break;
- case 'group' :
- $groupMembers = OC_Group::usersInGroups(array($applicable));
- foreach ( $groupMembers as $user ) {
- $path = $user.'/files/'.ltrim($mountPoint, '/');
- self::addMountPointDirectory($view, $path);
- }
- break;
- }
-
$mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
}
$mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions)));
@@ -426,7 +405,7 @@ class OC_Mount_Config {
}
/**
- * check if smbclient is installed
+ * check if smbclient is installed
*/
public static function checksmbclient() {
if(function_exists('shell_exec')) {
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
index 66dfd3e595e..11644e4a2c8 100755
--- a/apps/files_external/lib/dropbox.php
+++ b/apps/files_external/lib/dropbox.php
@@ -20,12 +20,15 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+namespace OC\Files\Storage;
+
require_once 'Dropbox/autoload.php';
-class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
+class Dropbox extends \OC\Files\Storage\Common {
private $dropbox;
private $root;
+ private $id;
private $metaData = array();
private static $tempFiles = array();
@@ -37,12 +40,14 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
&& isset($params['token'])
&& isset($params['token_secret'])
) {
+ $this->id = 'dropbox::'.$params['app_key'] . $params['token']. '/' . $params['root'];
$this->root=isset($params['root'])?$params['root']:'';
- $oauth = new Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']);
+ $oauth = new \Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']);
$oauth->setToken($params['token'], $params['token_secret']);
- $this->dropbox = new Dropbox_API($oauth, 'dropbox');
+ $this->dropbox = new \Dropbox_API($oauth, 'dropbox');
+ $this->mkdir('');
} else {
- throw new Exception('Creating OC_Filestorage_Dropbox storage failed');
+ throw new \Exception('Creating \OC\Files\Storage\Dropbox storage failed');
}
}
@@ -54,8 +59,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
if ($list) {
try {
$response = $this->dropbox->getMetaData($path);
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
if ($response && isset($response['contents'])) {
@@ -75,21 +80,25 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
$response = $this->dropbox->getMetaData($path, 'false');
$this->metaData[$path] = $response;
return $response;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
}
}
+ public function getId(){
+ return $this->id;
+ }
+
public function mkdir($path) {
$path = $this->root.$path;
try {
$this->dropbox->createFolder($path);
return true;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -105,7 +114,7 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
foreach ($contents as $file) {
$files[] = basename($file['path']);
}
- OC_FakeDirStream::$dirs['dropbox'.$path] = $files;
+ \OC\Files\Stream\Dir::register('dropbox'.$path, $files);
return opendir('fakedir://dropbox'.$path);
}
return false;
@@ -117,7 +126,6 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
$stat['size'] = $metaData['bytes'];
$stat['atime'] = time();
$stat['mtime'] = (isset($metaData['modified'])) ? strtotime($metaData['modified']) : time();
- $stat['ctime'] = $stat['mtime'];
return $stat;
}
return false;
@@ -162,8 +170,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$this->dropbox->delete($path);
return true;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -174,8 +182,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$this->dropbox->move($path1, $path2);
return true;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -186,8 +194,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$this->dropbox->copy($path1, $path2);
return true;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -197,13 +205,13 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
switch ($mode) {
case 'r':
case 'rb':
- $tmpFile = OC_Helper::tmpFile();
+ $tmpFile = \OC_Helper::tmpFile();
try {
$data = $this->dropbox->getFile($path);
file_put_contents($tmpFile, $data);
return fopen($tmpFile, 'r');
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
case 'w':
@@ -223,8 +231,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
} else {
$ext = '';
}
- $tmpFile = OC_Helper::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack');
+ $tmpFile = \OC_Helper::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
@@ -241,8 +249,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$this->dropbox->putFile(self::$tempFiles[$tmpFile], $handle);
unlink($tmpFile);
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
}
}
}
@@ -263,8 +271,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$info = $this->dropbox->getAccountInfo();
return $info['quota_info']['quota'] - $info['quota_info']['normal'];
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php
index ca408d5d224..a76a3dc80f8 100644
--- a/apps/files_external/lib/ftp.php
+++ b/apps/files_external/lib/ftp.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
+namespace OC\Files\Storage;
+
+class FTP extends \OC\Files\Storage\StreamWrapper{
private $password;
private $user;
private $host;
@@ -38,14 +40,18 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
$this->mkdir('');
}
} else {
- throw new Exception();
+ throw new \Exception();
}
}
+ public function getId(){
+ return 'ftp::' . $this->user . '@' . $this->host . '/' . $this->root;
+ }
+
/**
* construct the ftp url
- * @param string path
+ * @param string $path
* @return string
*/
public function constructUrl($path) {
@@ -56,7 +62,8 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
$url.='://'.$this->user.':'.$this->password.'@'.$this->host.$this->root.$path;
return $url;
}
- public function fopen($path, $mode) {
+ public function fopen($path,$mode) {
+ $this->init();
switch($mode) {
case 'r':
case 'rb':
@@ -66,7 +73,7 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
case 'ab':
//these are supported by the wrapper
$context = stream_context_create(array('ftp' => array('overwrite' => true)));
- return fopen($this->constructUrl($path), $mode, false, $context);
+ return fopen($this->constructUrl($path),$mode, false,$context);
case 'r+':
case 'w+':
case 'wb+':
@@ -82,16 +89,18 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
$ext='';
}
$tmpFile=OCP\Files::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$this->getFile($path, $tmpFile);
}
self::$tempFiles[$tmpFile]=$path;
- return fopen('close://'.$tmpFile, $mode);
+ return fopen('close://'.$tmpFile,$mode);
}
+ return false;
}
public function writeBack($tmpFile) {
+ $this->init();
if (isset(self::$tempFiles[$tmpFile])) {
$this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
unlink($tmpFile);
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index 8710c979117..86d768022a6 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -20,14 +20,17 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+namespace OC\Files\Storage;
+
require_once 'Google/common.inc.php';
-class OC_Filestorage_Google extends OC_Filestorage_Common {
+class Google extends \OC\Files\Storage\Common {
private $consumer;
private $oauth_token;
private $sig_method;
private $entries;
+ private $id;
private static $tempFiles = array();
@@ -38,12 +41,13 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
) {
$consumer_key = isset($params['consumer_key']) ? $params['consumer_key'] : 'anonymous';
$consumer_secret = isset($params['consumer_secret']) ? $params['consumer_secret'] : 'anonymous';
- $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
- $this->oauth_token = new OAuthToken($params['token'], $params['token_secret']);
- $this->sig_method = new OAuthSignatureMethod_HMAC_SHA1();
+ $this->id = 'google::' . $params['token'];
+ $this->consumer = new \OAuthConsumer($consumer_key, $consumer_secret);
+ $this->oauth_token = new \OAuthToken($params['token'], $params['token_secret']);
+ $this->sig_method = new \OAuthSignatureMethod_HMAC_SHA1();
$this->entries = array();
} else {
- throw new Exception('Creating OC_Filestorage_Google storage failed');
+ throw new \Exception('Creating \OC\Files\Storage\Google storage failed');
}
}
@@ -68,7 +72,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
$tempStr .= '&' . urlencode($key) . '=' . urlencode($value);
}
$uri = preg_replace('/&/', '?', $tempStr, 1);
- $request = OAuthRequest::from_consumer_and_token($this->consumer,
+ $request = \OAuthRequest::from_consumer_and_token($this->consumer,
$this->oauth_token,
$httpMethod,
$uri,
@@ -110,7 +114,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
if ($isDownload) {
- $tmpFile = OC_Helper::tmpFile();
+ $tmpFile = \OC_Helper::tmpFile();
$handle = fopen($tmpFile, 'w');
curl_setopt($curl, CURLOPT_FILE, $handle);
}
@@ -139,7 +143,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
private function getFeed($feedUri, $httpMethod, $postData = null) {
$result = $this->sendRequest($feedUri, $httpMethod, $postData);
if ($result) {
- $dom = new DOMDocument();
+ $dom = new \DOMDocument();
$dom->loadXML($result);
return $dom;
}
@@ -194,6 +198,9 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
}
+ public function getId(){
+ return $this->id;
+ }
public function mkdir($path) {
$collection = dirname($path);
@@ -266,7 +273,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
$this->entries[$name] = $entry;
}
}
- OC_FakeDirStream::$dirs['google'.$path] = $files;
+ \OC\Files\Stream\Dir::register('google'.$path, $files);
return opendir('fakedir://google'.$path);
}
@@ -287,7 +294,6 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
//$stat['atime'] = strtotime($entry->getElementsByTagNameNS('http://schemas.google.com/g/2005',
// 'lastViewed')->item(0)->nodeValue);
$stat['mtime'] = strtotime($entry->getElementsByTagName('updated')->item(0)->nodeValue);
- $stat['ctime'] = strtotime($entry->getElementsByTagName('published')->item(0)->nodeValue);
}
}
if (isset($stat)) {
@@ -443,8 +449,8 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
} else {
$ext = '';
}
- $tmpFile = OC_Helper::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack');
+ $tmpFile = \OC_Helper::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
@@ -482,7 +488,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
if (isset($uploadUri) && $handle = fopen($path, 'r')) {
$uploadUri .= '?convert=false';
- $mimetype = OC_Helper::getMimeType($path);
+ $mimetype = \OC_Helper::getMimeType($path);
$size = filesize($path);
$headers = array('X-Upload-Content-Type: ' => $mimetype, 'X-Upload-Content-Length: ' => $size);
$postData = '<?xml version="1.0" encoding="UTF-8"?>';
diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php
new file mode 100644
index 00000000000..551a5a64ef2
--- /dev/null
+++ b/apps/files_external/lib/sftp.php
@@ -0,0 +1,291 @@
+<?php
+/**
+ * Copyright (c) 2012 Henrik Kjölhede <hkjolhede@gmail.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Files\Storage;
+
+set_include_path(get_include_path() . PATH_SEPARATOR . \OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib');
+require('Net/SFTP.php');
+
+class SFTP extends \OC\Files\Storage\Common {
+ private $host;
+ private $user;
+ private $password;
+ private $root;
+
+ private $client;
+
+ private static $tempFiles = array();
+
+ public function __construct($params) {
+ $this->host = $params['host'];
+ $proto = strpos($this->host, '://');
+ if ($proto != false) {
+ $this->host = substr($this->host, $proto+3);
+ }
+ $this->user = $params['user'];
+ $this->password = $params['password'];
+ $this->root = isset($params['root']) ? $this->cleanPath($params['root']) : '/';
+ if ($this->root[0] != '/') $this->root = '/' . $this->root;
+ if (substr($this->root, -1, 1) != '/') $this->root .= '/';
+
+ $host_keys = $this->read_host_keys();
+
+ $this->client = new \Net_SFTP($this->host);
+ if (!$this->client->login($this->user, $this->password)) {
+ throw new \Exception('Login failed');
+ }
+
+ $current_host_key = $this->client->getServerPublicHostKey();
+
+ if (array_key_exists($this->host, $host_keys)) {
+ if ($host_keys[$this->host] != $current_host_key) {
+ throw new \Exception('Host public key does not match known key');
+ }
+ } else {
+ $host_keys[$this->host] = $current_host_key;
+ $this->write_host_keys($host_keys);
+ }
+
+ if(!$this->file_exists('')){
+ $this->mkdir('');
+ }
+ }
+
+ public function test() {
+ if (!isset($params['host']) || !isset($params['user']) || !isset($params['password'])) {
+ throw new \Exception("Required parameters not set");
+ }
+ }
+
+ public function getId(){
+ return 'sftp::' . $this->user . '@' . $this->host . '/' . $this->root;
+ }
+
+ private function abs_path($path) {
+ return $this->root . $this->cleanPath($path);
+ }
+
+ private function host_keys_path() {
+ try {
+ $storage_view = \OCP\Files::getStorage('files_external');
+ if ($storage_view) {
+ return \OCP\Config::getSystemValue('datadirectory') .
+ $storage_view->getAbsolutePath('') .
+ 'ssh_host_keys';
+ }
+ } catch (\Exception $e) {
+ }
+ return false;
+ }
+
+ private function write_host_keys($keys) {
+ try {
+ $key_path = $this->host_keys_path();
+ $fp = fopen($key_path, 'w');
+ foreach ($keys as $host => $key) {
+ fwrite($fp, $host . '::' . $key . "\n");
+ }
+ fclose($fp);
+ return true;
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ private function read_host_keys() {
+ try {
+ $key_path = $this->host_keys_path();
+ if (file_exists($key_path)) {
+ $hosts = array();
+ $keys = array();
+ $lines = file($key_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+ if ($lines) {
+ foreach ($lines as $line) {
+ $host_key_arr = explode("::", $line, 2);
+ if (count($host_key_arr) == 2) {
+ $hosts[] = $host_key_arr[0];
+ $keys[] = $host_key_arr[1];
+ }
+ }
+ return array_combine($hosts, $keys);
+ }
+ }
+ } catch (\Exception $e) {
+ }
+ return array();
+ }
+
+ public function mkdir($path) {
+ try {
+ return $this->client->mkdir($this->abs_path($path));
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function rmdir($path) {
+ try {
+ return $this->client->delete($this->abs_path($path), true);
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function opendir($path) {
+ try {
+ $list = $this->client->nlist($this->abs_path($path));
+
+ $id = md5('sftp:' . $path);
+ $dir_stream = array();
+ foreach($list as $file) {
+ if ($file != '.' && $file != '..') {
+ $dir_stream[] = $file;
+ }
+ }
+ \OC\Files\Stream\Dir::register($id, $dir_stream);
+ return opendir('fakedir://' . $id);
+ } catch(\Exception $e) {
+ return false;
+ }
+ }
+
+ public function filetype($path) {
+ try {
+ $stat = $this->client->stat($this->abs_path($path));
+ if ($stat['type'] == NET_SFTP_TYPE_REGULAR) return 'file';
+ if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) return 'dir';
+ } catch (\Exeption $e) {
+ }
+ return false;
+ }
+
+ public function isReadable($path) {
+ return true;
+ }
+
+ public function isUpdatable($path) {
+ return true;
+ }
+
+ public function file_exists($path) {
+ try {
+ return $this->client->stat($this->abs_path($path)) === false ? false : true;
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function unlink($path) {
+ try {
+ return $this->client->delete($this->abs_path($path), true);
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function fopen($path, $mode) {
+ try {
+ $abs_path = $this->abs_path($path);
+ switch($mode) {
+ case 'r':
+ case 'rb':
+ if ( !$this->file_exists($path)) return false;
+ if (strrpos($path, '.')!==false) {
+ $ext=substr($path, strrpos($path, '.'));
+ } else {
+ $ext='';
+ }
+ $tmp = \OC_Helper::tmpFile($ext);
+ $this->getFile($abs_path, $tmp);
+ return fopen($tmp, $mode);
+
+ case 'w':
+ case 'wb':
+ case 'a':
+ case 'ab':
+ case 'r+':
+ case 'w+':
+ case 'wb+':
+ case 'a+':
+ case 'x':
+ case 'x+':
+ case 'c':
+ case 'c+':
+ if (strrpos($path, '.')!==false) {
+ $ext=substr($path, strrpos($path, '.'));
+ } else {
+ $ext='';
+ }
+ $tmpFile=\OC_Helper::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
+ if ($this->file_exists($path)) {
+ $this->getFile($abs_path, $tmpFile);
+ }
+ self::$tempFiles[$tmpFile]=$abs_path;
+ return fopen('close://'.$tmpFile, $mode);
+ }
+ } catch (\Exception $e) {
+ }
+ return false;
+ }
+
+ public function writeBack($tmpFile) {
+ if (array_key_exists($tmpFile, self::$tempFiles)) {
+ $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
+ unlink($tmpFile);
+ unset(self::$tempFiles[$tmpFile]);
+ }
+ }
+
+ public function free_space($path) {
+ return -1;
+ }
+
+ public function touch($path, $mtime=null) {
+ try {
+ if (!is_null($mtime)) return false;
+ if (!$this->file_exists($path)) {
+ $this->client->put($this->abs_path($path), '');
+ } else {
+ return false;
+ }
+ } catch (\Exception $e) {
+ return false;
+ }
+ return true;
+ }
+
+ public function getFile($path, $target) {
+ $this->client->get($path, $target);
+ }
+
+ public function uploadFile($path, $target) {
+ $this->client->put($target, $path, NET_SFTP_LOCAL_FILE);
+ }
+
+ public function rename($source, $target) {
+ try {
+ return $this->client->rename($this->abs_path($source), $this->abs_path($target));
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function stat($path) {
+ try {
+ $stat = $this->client->stat($this->abs_path($path));
+
+ $mtime = $stat ? $stat['mtime'] : -1;
+ $size = $stat ? $stat['size'] : 0;
+
+ return array('mtime' => $mtime, 'size' => $size, 'ctime' => -1);
+ } catch (\Exception $e) {
+ return false;
+ }
+
+ }
+}
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index 5b73e993e4f..cea5de36817 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -6,9 +6,11 @@
* See the COPYING-README file.
*/
+namespace OC\Files\Storage;
+
require_once 'smb4php/smb.php';
-class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
+class SMB extends \OC\Files\Storage\StreamWrapper{
private $password;
private $user;
private $host;
@@ -34,14 +36,13 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
if (substr($this->share, -1, 1)=='/') {
$this->share=substr($this->share, 0, -1);
}
- //create the root folder if necesary
- if ( ! $this->is_dir('')) {
- $this->mkdir('');
- }
} else {
- throw new Exception();
+ throw new \Exception();
}
-
+ }
+
+ public function getId(){
+ return 'smb::' . $this->user . '@' . $this->host . '/' . $this->share . '/' . $this->root;
}
public function constructUrl($path) {
@@ -69,11 +70,13 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
/**
* check if a file or folder has been updated since $time
+ * @param string $path
* @param int $time
* @return bool
*/
- public function hasUpdated($path, $time) {
- if ( ! $path and $this->root=='/') {
+ public function hasUpdated($path,$time) {
+ $this->init();
+ if(!$path and $this->root=='/') {
// mtime doesn't work for shares, but giving the nature of the backend,
// doing a full update is still just fast enough
return true;
diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php
index a386e333995..7c3ddcf8a2c 100644
--- a/apps/files_external/lib/streamwrapper.php
+++ b/apps/files_external/lib/streamwrapper.php
@@ -6,16 +6,33 @@
* See the COPYING-README file.
*/
+namespace OC\Files\Storage;
+
+abstract class StreamWrapper extends \OC\Files\Storage\Common{
+ private $ready = false;
+
+ protected function init(){
+ if($this->ready){
+ return;
+ }
+ $this->ready = true;
+
+ //create the root folder if necesary
+ if(!$this->is_dir('')) {
+ $this->mkdir('');
+ }
+ }
-abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
abstract public function constructUrl($path);
public function mkdir($path) {
+ $this->init();
return mkdir($this->constructUrl($path));
}
public function rmdir($path) {
- if ($this->file_exists($path)) {
+ $this->init();
+ if($this->file_exists($path)) {
$succes = rmdir($this->constructUrl($path));
clearstatcache();
return $succes;
@@ -25,10 +42,12 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
}
public function opendir($path) {
+ $this->init();
return opendir($this->constructUrl($path));
}
public function filetype($path) {
+ $this->init();
return filetype($this->constructUrl($path));
}
@@ -41,46 +60,54 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
}
public function file_exists($path) {
+ $this->init();
return file_exists($this->constructUrl($path));
}
public function unlink($path) {
+ $this->init();
$succes = unlink($this->constructUrl($path));
clearstatcache();
return $succes;
}
- public function fopen($path, $mode) {
- return fopen($this->constructUrl($path), $mode);
+ public function fopen($path,$mode) {
+ $this->init();
+ return fopen($this->constructUrl($path),$mode);
}
public function free_space($path) {
return 0;
}
- public function touch($path, $mtime = null) {
- if (is_null($mtime)) {
- $fh = $this->fopen($path, 'a');
- fwrite($fh, '');
+ public function touch($path,$mtime=null) {
+ $this->init();
+ if(is_null($mtime)) {
+ $fh = $this->fopen($path,'a');
+ fwrite($fh,'');
fclose($fh);
} else {
return false;//not supported
}
}
- public function getFile($path, $target) {
- return copy($this->constructUrl($path), $target);
+ public function getFile($path,$target) {
+ $this->init();
+ return copy($this->constructUrl($path),$target);
}
- public function uploadFile($path, $target) {
- return copy($path, $this->constructUrl($target));
+ public function uploadFile($path,$target) {
+ $this->init();
+ return copy($path,$this->constructUrl($target));
}
- public function rename($path1, $path2) {
- return rename($this->constructUrl($path1), $this->constructUrl($path2));
+ public function rename($path1,$path2) {
+ $this->init();
+ return rename($this->constructUrl($path1),$this->constructUrl($path2));
}
public function stat($path) {
+ $this->init();
return stat($this->constructUrl($path));
}
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index e2add2c9873..bab49524746 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -6,24 +6,28 @@
* See the COPYING-README file.
*/
+namespace OC\Files\Storage;
+
require_once 'php-cloudfiles/cloudfiles.php';
-class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
+class SWIFT extends \OC\Files\Storage\Common{
+ private $id;
private $host;
private $root;
private $user;
private $token;
private $secure;
+ private $ready = false;
/**
- * @var CF_Authentication auth
+ * @var \CF_Authentication auth
*/
private $auth;
/**
- * @var CF_Connection conn
+ * @var \CF_Connection conn
*/
private $conn;
/**
- * @var CF_Container rootContainer
+ * @var \CF_Container rootContainer
*/
private $rootContainer;
@@ -35,18 +39,18 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* translate directory path to container name
- * @param string path
+ * @param string $path
* @return string
*/
private function getContainerName($path) {
- $path=trim(trim($this->root, '/')."/".$path, '/.');
+ $path=trim(trim($this->root, '/') . "/".$path, '/.');
return str_replace('/', '\\', $path);
}
/**
* get container by path
- * @param string path
- * @return CF_Container
+ * @param string $path
+ * @return \CF_Container
*/
private function getContainer($path) {
if ($path=='' or $path=='/') {
@@ -59,15 +63,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$container=$this->conn->get_container($this->getContainerName($path));
$this->containers[$path]=$container;
return $container;
- } catch(NoSuchContainerException $e) {
+ } catch(\NoSuchContainerException $e) {
return null;
}
}
/**
* create container
- * @param string path
- * @return CF_Container
+ * @param string $path
+ * @return \CF_Container
*/
private function createContainer($path) {
if ($path=='' or $path=='/' or $path=='.') {
@@ -89,8 +93,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* get object by path
- * @param string path
- * @return CF_Object
+ * @param string $path
+ * @return \CF_Object
*/
private function getObject($path) {
if (isset($this->objects[$path])) {
@@ -107,7 +111,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$obj=$container->get_object(basename($path));
$this->objects[$path]=$obj;
return $obj;
- } catch(NoSuchObjectException $e) {
+ } catch(\NoSuchObjectException $e) {
return null;
}
}
@@ -132,8 +136,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* create object
- * @param string path
- * @return CF_Object
+ * @param string $path
+ * @return \CF_Object
*/
private function createObject($path) {
$container=$this->getContainer(dirname($path));
@@ -154,7 +158,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* check if container for path exists
- * @param string path
+ * @param string $path
* @return bool
*/
private function containerExists($path) {
@@ -163,15 +167,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* get the list of emulated sub containers
- * @param CF_Container container
+ * @param \CF_Container $container
* @return array
*/
private function getSubContainers($container) {
- $tmpFile=OCP\Files::tmpFile();
+ $tmpFile=\OCP\Files::tmpFile();
$obj=$this->getSubContainerFile($container);
try {
$obj->save_to_filename($tmpFile);
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return array();
}
$obj->save_to_filename($tmpFile);
@@ -185,15 +189,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* add an emulated sub container
- * @param CF_Container container
- * @param string name
+ * @param \CF_Container $container
+ * @param string $name
* @return bool
*/
private function addSubContainer($container, $name) {
if ( ! $name) {
return false;
}
- $tmpFile=OCP\Files::tmpFile();
+ $tmpFile=\OCP\Files::tmpFile();
$obj=$this->getSubContainerFile($container);
try {
$obj->save_to_filename($tmpFile);
@@ -201,16 +205,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
foreach ($containers as &$sub) {
$sub=trim($sub);
}
- if (array_search($name, $containers)!==false) {
+ if(array_search($name, $containers) !== false) {
unlink($tmpFile);
return false;
} else {
$fh=fopen($tmpFile, 'a');
- fwrite($fh, $name."\n");
+ fwrite($fh,$name . "\n");
}
- } catch(Exception $e) {
- $containers=array();
- file_put_contents($tmpFile, $name."\n");
+ } catch(\Exception $e) {
+ file_put_contents($tmpFile, $name . "\n");
}
$obj->load_from_filename($tmpFile);
@@ -220,20 +223,20 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* remove an emulated sub container
- * @param CF_Container container
- * @param string name
+ * @param \CF_Container $container
+ * @param string $name
* @return bool
*/
private function removeSubContainer($container, $name) {
if ( ! $name) {
return false;
}
- $tmpFile=OCP\Files::tmpFile();
+ $tmpFile=\OCP\Files::tmpFile();
$obj=$this->getSubContainerFile($container);
try {
$obj->save_to_filename($tmpFile);
$containers=file($tmpFile);
- } catch (Exception $e) {
+ } catch (\Exception $e) {
return false;
}
foreach ($containers as &$sub) {
@@ -255,8 +258,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* ensure a subcontainer file exists and return it's object
- * @param CF_Container container
- * @return CF_Object
+ * @param \CF_Container $container
+ * @return \CF_Object
*/
private function getSubContainerFile($container) {
try {
@@ -284,24 +287,37 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
if ( ! $this->root || $this->root[0]!='/') {
$this->root='/'.$this->root;
}
- $this->auth = new CF_Authentication($this->user, $this->token, null, $this->host);
- $this->auth->authenticate();
+ } else {
+ throw new \Exception();
+ }
- $this->conn = new CF_Connection($this->auth);
+ }
- if ( ! $this->containerExists('/')) {
- $this->rootContainer=$this->createContainer('/');
- } else {
- $this->rootContainer=$this->getContainer('/');
- }
+ private function init(){
+ if($this->ready){
+ return;
+ }
+ $this->ready = true;
+
+ $this->auth = new \CF_Authentication($this->user, $this->token, null, $this->host);
+ $this->auth->authenticate();
+
+ $this->conn = new \CF_Connection($this->auth);
+
+ if ( ! $this->containerExists('/')) {
+ $this->rootContainer=$this->createContainer('/');
} else {
- throw new Exception();
+ $this->rootContainer=$this->getContainer('/');
}
-
+ }
+
+ public function getId(){
+ return $this->id;
}
public function mkdir($path) {
+ $this->init();
if ($this->containerExists($path)) {
return false;
} else {
@@ -311,7 +327,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function rmdir($path) {
- if ( ! $this->containerExists($path)) {
+ $this->init();
+ if (!$this->containerExists($path)) {
return false;
} else {
$this->emptyContainer($path);
@@ -348,6 +365,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function opendir($path) {
+ $this->init();
$container=$this->getContainer($path);
$files=$this->getObjects($container);
$i=array_search(self::SUBCONTAINER_FILE, $files);
@@ -357,11 +375,12 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$subContainers=$this->getSubContainers($container);
$files=array_merge($files, $subContainers);
$id=$this->getContainerName($path);
- OC_FakeDirStream::$dirs[$id]=$files;
+ \OC\Files\Stream\Dir::register($id, $files);
return opendir('fakedir://'.$id);
}
public function filetype($path) {
+ $this->init();
if ($this->containerExists($path)) {
return 'dir';
} else {
@@ -378,6 +397,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function file_exists($path) {
+ $this->init();
if ($this->is_dir($path)) {
return true;
} else {
@@ -386,6 +406,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function file_get_contents($path) {
+ $this->init();
$obj=$this->getObject($path);
if (is_null($obj)) {
return false;
@@ -394,6 +415,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function file_put_contents($path, $content) {
+ $this->init();
$obj=$this->getObject($path);
if (is_null($obj)) {
$container=$this->getContainer(dirname($path));
@@ -407,6 +429,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function unlink($path) {
+ $this->init();
if ($this->containerExists($path)) {
return $this->rmdir($path);
}
@@ -420,6 +443,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function fopen($path, $mode) {
+ $this->init();
switch($mode) {
case 'r':
case 'rb':
@@ -445,7 +469,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
case 'c':
case 'c+':
$tmpFile=$this->getTmpFile($path);
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
self::$tempFiles[$tmpFile]=$path;
return fopen('close://'.$tmpFile, $mode);
}
@@ -463,6 +487,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function touch($path, $mtime=null) {
+ $this->init();
$obj=$this->getObject($path);
if (is_null($obj)) {
return false;
@@ -477,6 +502,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function rename($path1, $path2) {
+ $this->init();
$sourceContainer=$this->getContainer(dirname($path1));
$targetContainer=$this->getContainer(dirname($path2));
$result=$sourceContainer->move_object_to(basename($path1), $targetContainer, basename($path2));
@@ -489,6 +515,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function copy($path1, $path2) {
+ $this->init();
$sourceContainer=$this->getContainer(dirname($path1));
$targetContainer=$this->getContainer(dirname($path2));
$result=$sourceContainer->copy_object_to(basename($path1), $targetContainer, basename($path2));
@@ -500,6 +527,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function stat($path) {
+ $this->init();
$container=$this->getContainer($path);
if ( ! is_null($container)) {
return array(
@@ -528,17 +556,19 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
private function getTmpFile($path) {
+ $this->init();
$obj=$this->getObject($path);
if ( ! is_null($obj)) {
- $tmpFile=OCP\Files::tmpFile();
+ $tmpFile=\OCP\Files::tmpFile();
$obj->save_to_filename($tmpFile);
return $tmpFile;
} else {
- return OCP\Files::tmpFile();
+ return \OCP\Files::tmpFile();
}
}
private function fromTmpFile($tmpFile, $path) {
+ $this->init();
$obj=$this->getObject($path);
if (is_null($obj)) {
$obj=$this->createObject($path);
@@ -549,7 +579,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* remove custom mtime metadata
- * @param CF_Object obj
+ * @param \CF_Object $obj
*/
private function resetMTime($obj) {
if (isset($obj->metadata['Mtime'])) {
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index c3a0c1482dc..2b7ab4cee0a 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -6,14 +6,17 @@
* See the COPYING-README file.
*/
-class OC_FileStorage_DAV extends OC_Filestorage_Common{
+namespace OC\Files\Storage;
+
+class DAV extends \OC\Files\Storage\Common{
private $password;
private $user;
private $host;
private $secure;
private $root;
+ private $ready;
/**
- * @var Sabre_DAV_Client
+ * @var \Sabre_DAV_Client
*/
private $client;
@@ -44,6 +47,16 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
if (substr($this->root, -1, 1)!='/') {
$this->root.='/';
}
+ } else {
+ throw new \Exception();
+ }
+ }
+
+ private function init(){
+ if($this->ready){
+ return;
+ }
+ $this->ready = true;
$settings = array(
'baseUri' => $this->createBaseUri(),
@@ -51,21 +64,21 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
'password' => $this->password,
);
- $this->client = new Sabre_DAV_Client($settings);
+ $this->client = new \Sabre_DAV_Client($settings);
- $caview = \OCP\Files::getStorage('files_external');
- if ($caview) {
- $certPath=\OCP\Config::getSystemValue('datadirectory').$caview->getAbsolutePath("").'rootcerts.crt';
- if (file_exists($certPath)) {
- $this->client->addTrustedCertificates($certPath);
- }
+ $caview = \OCP\Files::getStorage('files_external');
+ if ($caview) {
+ $certPath=\OCP\Config::getSystemValue('datadirectory').$caview->getAbsolutePath("").'rootcerts.crt';
+ if (file_exists($certPath)) {
+ $this->client->addTrustedCertificates($certPath);
}
- //create the root folder if necesary
- $this->mkdir('');
- } else {
- throw new Exception();
}
-
+ //create the root folder if necesary
+ $this->mkdir('');
+ }
+
+ public function getId(){
+ return 'webdav::' . $this->user . '@' . $this->host . '/' . $this->root;
}
private function createBaseUri() {
@@ -78,40 +91,45 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
public function mkdir($path) {
+ $this->init();
$path=$this->cleanPath($path);
return $this->simpleResponse('MKCOL', $path, null, 201);
}
public function rmdir($path) {
+ $this->init();
$path=$this->cleanPath($path);
return $this->simpleResponse('DELETE', $path, null, 204);
}
public function opendir($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array(), 1);
$id=md5('webdav'.$this->root.$path);
- OC_FakeDirStream::$dirs[$id]=array();
+ $content = array();
$files=array_keys($response);
array_shift($files);//the first entry is the current directory
foreach ($files as $file) {
$file = urldecode(basename($file));
- OC_FakeDirStream::$dirs[$id][]=$file;
+ $content[]=$file;
}
+ \OC\Files\Stream\Dir::register($id, $content);
return opendir('fakedir://'.$id);
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return false;
}
}
public function filetype($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array('{DAV:}resourcetype'));
$responseType=$response["{DAV:}resourcetype"]->resourceType;
return (count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file';
- } catch(Exception $e) {
+ } catch(\Exception $e) {
error_log($e->getMessage());
\OCP\Util::writeLog("webdav client", \OCP\Util::sanitizeHTML($e->getMessage()), \OCP\Util::ERROR);
return false;
@@ -127,20 +145,23 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
public function file_exists($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$this->client->propfind($path, array('{DAV:}resourcetype'));
return true;//no 404 exception
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return false;
}
}
public function unlink($path) {
- return $this->simpleResponse('DELETE', $path, null, 204);
+ $this->init();
+ return $this->simpleResponse('DELETE', $path, null ,204);
}
- public function fopen($path, $mode) {
+ public function fopen($path,$mode) {
+ $this->init();
$path=$this->cleanPath($path);
switch($mode) {
case 'r':
@@ -177,9 +198,9 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
} else {
$ext='';
}
- $tmpFile=OCP\Files::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
- if ($this->file_exists($path)) {
+ $tmpFile = \OCP\Files::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
+ if($this->file_exists($path)) {
$this->getFile($path, $tmpFile);
}
self::$tempFiles[$tmpFile]=$path;
@@ -195,6 +216,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
public function free_space($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array('{DAV:}quota-available-bytes'));
@@ -203,12 +225,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
} else {
return 0;
}
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return 0;
}
}
public function touch($path, $mtime=null) {
+ $this->init();
if (is_null($mtime)) {
$mtime=time();
}
@@ -216,12 +239,14 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime));
}
- public function getFile($path, $target) {
- $source=$this->fopen($path, 'r');
- file_put_contents($target, $source);
+ public function getFile($path,$target) {
+ $this->init();
+ $source=$this->fopen($path,'r');
+ file_put_contents($target,$source);
}
- public function uploadFile($path, $target) {
+ public function uploadFile($path,$target) {
+ $this->init();
$source=fopen($path, 'r');
$curl = curl_init();
@@ -235,49 +260,46 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
curl_close ($curl);
}
- public function rename($path1, $path2) {
+ public function rename($path1,$path2) {
+ $this->init();
$path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2);
try {
- $response=$this->client->request('MOVE', $path1, null, array('Destination'=>$path2));
+ $this->client->request('MOVE', $path1, null, array('Destination'=>$path2));
return true;
- } catch(Exception $e) {
- echo $e;
- echo 'fail';
- var_dump($response);
+ } catch(\Exception $e) {
return false;
}
}
- public function copy($path1, $path2) {
+ public function copy($path1,$path2) {
+ $this->init();
$path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2);
try {
- $response=$this->client->request('COPY', $path1, null, array('Destination'=>$path2));
+ $this->client->request('COPY', $path1, null, array('Destination'=>$path2));
return true;
- } catch(Exception $e) {
- echo $e;
- echo 'fail';
- var_dump($response);
+ } catch(\Exception $e) {
return false;
}
}
public function stat($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array('{DAV:}getlastmodified', '{DAV:}getcontentlength'));
return array(
'mtime'=>strtotime($response['{DAV:}getlastmodified']),
'size'=>(int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0,
- 'ctime'=>-1,
);
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return array();
}
}
public function getMimeType($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array('{DAV:}getcontenttype', '{DAV:}resourcetype'));
@@ -290,7 +312,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
} else {
return false;
}
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return false;
}
}
@@ -303,12 +325,12 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
}
- private function simpleResponse($method, $path, $body, $expected) {
+ private function simpleResponse($method,$path,$body,$expected) {
$path=$this->cleanPath($path);
try {
$response=$this->client->request($method, $path, $body);
return $response['statusCode']==$expected;
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return false;
}
}
diff --git a/apps/files_external/personal.php b/apps/files_external/personal.php
index 4215b28787e..268d1880232 100755
--- a/apps/files_external/personal.php
+++ b/apps/files_external/personal.php
@@ -24,7 +24,7 @@ OCP\Util::addScript('files_external', 'settings');
OCP\Util::addStyle('files_external', 'settings');
$backends = OC_Mount_Config::getBackends();
// Remove local storage
-unset($backends['OC_Filestorage_Local']);
+unset($backends['\OC\Files\Storage\Local']);
$tmpl = new OCP\Template('files_external', 'settings');
$tmpl->assign('isAdminPage', false, false);
$tmpl->assign('mounts', OC_Mount_Config::getPersonalMountPoints());
diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php
index 62bbf3a5ae1..c6025aa0ffe 100644
--- a/apps/files_external/templates/settings.php
+++ b/apps/files_external/templates/settings.php
@@ -1,7 +1,7 @@
<form id="files_external">
<fieldset class="personalblock">
<legend><strong><?php echo $l->t('External Storage'); ?></strong></legend>
- <?php if (isset($_['dependencies']) and ($_['dependencies']<>'')) echo ''.$_['dependencies'].''; ?>
+ <?php if (isset($_['dependencies']) and ($_['dependencies']<>'')) echo ''.$_['dependencies'].''; ?>
<table id="externalStorage" data-admin='<?php echo json_encode($_['isAdminPage']); ?>'>
<thead>
<tr>
@@ -53,7 +53,7 @@
<?php elseif (strpos($placeholder, '!') !== false): ?>
<label><input type="checkbox"
data-parameter="<?php echo $parameter; ?>"
- <?php if ($value == 'true'): ?> checked="checked"<?php endif; ?>
+ <?php if ($value == 'true'): ?> checked="checked"<?php endif; ?>
/><?php echo substr($placeholder, 1); ?></label>
<?php elseif (strpos($placeholder, '&') !== false): ?>
<input type="text"
@@ -110,7 +110,7 @@
<?php endif; ?>
<td <?php if ($mountPoint != ''): ?>class="remove"
<?php else: ?>style="visibility:hidden;"
- <?php endif ?>><img alt="<?php echo $l->t('Delete'); ?>"
+ <?php endif ?>><img alt="<?php echo $l->t('Delete'); ?>"
title="<?php echo $l->t('Delete'); ?>"
class="svg action"
src="<?php echo image_path('core', 'actions/delete.svg'); ?>" /></td>
diff --git a/apps/files_external/tests/amazons3.php b/apps/files_external/tests/amazons3.php
index 39f96fe8e55..6b3a942b5ba 100644
--- a/apps/files_external/tests/amazons3.php
+++ b/apps/files_external/tests/amazons3.php
@@ -20,7 +20,9 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Filestorage_AmazonS3 extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class AmazonS3 extends Storage {
private $config;
private $id;
@@ -32,12 +34,12 @@ class Test_Filestorage_AmazonS3 extends Test_FileStorage {
$this->markTestSkipped('AmazonS3 backend not configured');
}
$this->config['amazons3']['bucket'] = $id; // Make sure we have a new empty bucket to work in
- $this->instance = new OC_Filestorage_AmazonS3($this->config['amazons3']);
+ $this->instance = new \OC\Files\Storage\AmazonS3($this->config['amazons3']);
}
public function tearDown() {
if ($this->instance) {
- $s3 = new AmazonS3(array('key' => $this->config['amazons3']['key'],
+ $s3 = new \AmazonS3(array('key' => $this->config['amazons3']['key'],
'secret' => $this->config['amazons3']['secret']));
if ($s3->delete_all_objects($this->id)) {
$s3->delete_bucket($this->id);
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index ff16b1c1d8a..1d4f30c713d 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -51,5 +51,12 @@ return array(
'app_secret' => '',
'token' => '',
'token_secret' => ''
+ ),
+ 'sftp' => array (
+ 'run'=>false,
+ 'host'=>'localhost',
+ 'user'=>'test',
+ 'password'=>'test',
+ 'root'=>'/test'
)
);
diff --git a/apps/files_external/tests/dropbox.php b/apps/files_external/tests/dropbox.php
index 304cb3ca38c..e4e598b06b0 100644
--- a/apps/files_external/tests/dropbox.php
+++ b/apps/files_external/tests/dropbox.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_Dropbox extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class Dropbox extends Storage {
private $config;
public function setUp() {
@@ -16,7 +18,7 @@ class Test_Filestorage_Dropbox extends Test_FileStorage {
$this->markTestSkipped('Dropbox backend not configured');
}
$this->config['dropbox']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_Dropbox($this->config['dropbox']);
+ $this->instance = new \OC\Files\Storage\Dropbox($this->config['dropbox']);
}
public function tearDown() {
diff --git a/apps/files_external/tests/ftp.php b/apps/files_external/tests/ftp.php
index d0404b5f34c..923b5e39681 100644
--- a/apps/files_external/tests/ftp.php
+++ b/apps/files_external/tests/ftp.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_FTP extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class FTP extends Storage {
private $config;
public function setUp() {
@@ -16,12 +18,12 @@ class Test_Filestorage_FTP extends Test_FileStorage {
$this->markTestSkipped('FTP backend not configured');
}
$this->config['ftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_FTP($this->config['ftp']);
+ $this->instance = new \OC\Files\Storage\FTP($this->config['ftp']);
}
public function tearDown() {
if ($this->instance) {
- OCP\Files::rmdirr($this->instance->constructUrl(''));
+ \OCP\Files::rmdirr($this->instance->constructUrl(''));
}
}
@@ -32,18 +34,18 @@ class Test_Filestorage_FTP extends Test_FileStorage {
'root' => '/',
'secure' => false );
$instance = new OC_Filestorage_FTP($config);
- $this->assertEqual('ftp://ftp:ftp@localhost/', $instance->constructUrl(''));
+ $this->assertEquals('ftp://ftp:ftp@localhost/', $instance->constructUrl(''));
$config['secure'] = true;
$instance = new OC_Filestorage_FTP($config);
- $this->assertEqual('ftps://ftp:ftp@localhost/', $instance->constructUrl(''));
+ $this->assertEquals('ftps://ftp:ftp@localhost/', $instance->constructUrl(''));
$config['secure'] = 'false';
$instance = new OC_Filestorage_FTP($config);
- $this->assertEqual('ftp://ftp:ftp@localhost/', $instance->constructUrl(''));
+ $this->assertEquals('ftp://ftp:ftp@localhost/', $instance->constructUrl(''));
$config['secure'] = 'true';
$instance = new OC_Filestorage_FTP($config);
- $this->assertEqual('ftps://ftp:ftp@localhost/', $instance->constructUrl(''));
+ $this->assertEquals('ftps://ftp:ftp@localhost/', $instance->constructUrl(''));
}
}
diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php
index 379bf992ff5..f344163a8b9 100644
--- a/apps/files_external/tests/google.php
+++ b/apps/files_external/tests/google.php
@@ -20,8 +20,9 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Filestorage_Google extends Test_FileStorage {
+namespace Test\Files\Storage;
+class Google extends Storage {
private $config;
public function setUp() {
@@ -31,7 +32,7 @@ class Test_Filestorage_Google extends Test_FileStorage {
$this->markTestSkipped('Google backend not configured');
}
$this->config['google']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_Google($this->config['google']);
+ $this->instance = new \OC\Files\Storage\Google($this->config['google']);
}
public function tearDown() {
diff --git a/apps/files_external/tests/sftp.php b/apps/files_external/tests/sftp.php
new file mode 100644
index 00000000000..16964e20878
--- /dev/null
+++ b/apps/files_external/tests/sftp.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Henrik Kjölhede
+ * @copyright 2013 Henrik Kjölhede hkjolhede@gmail.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;
+
+class SFTP extends Storage {
+ private $config;
+
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if ( ! is_array($this->config) or ! isset($this->config['sftp']) or ! $this->config['sftp']['run']) {
+ $this->markTestSkipped('SFTP backend not configured');
+ }
+ $this->config['sftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new \OC\Files\Storage\SFTP($this->config['sftp']);
+ }
+
+ public function tearDown() {
+ if ($this->instance) {
+ $this->instance->rmdir('/');
+ }
+ }
+} \ No newline at end of file
diff --git a/apps/files_external/tests/smb.php b/apps/files_external/tests/smb.php
index 2d6268ef269..be3ea5a8308 100644
--- a/apps/files_external/tests/smb.php
+++ b/apps/files_external/tests/smb.php
@@ -6,7 +6,10 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_SMB extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class SMB extends Storage {
+
private $config;
public function setUp() {
@@ -16,12 +19,12 @@ class Test_Filestorage_SMB extends Test_FileStorage {
$this->markTestSkipped('Samba backend not configured');
}
$this->config['smb']['root'] .= $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_SMB($this->config['smb']);
+ $this->instance = new \OC\Files\Storage\SMB($this->config['smb']);
}
public function tearDown() {
if ($this->instance) {
- OCP\Files::rmdirr($this->instance->constructUrl(''));
+ \OCP\Files::rmdirr($this->instance->constructUrl(''));
}
}
}
diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/swift.php
index 8b25db50996..5c782840246 100644
--- a/apps/files_external/tests/swift.php
+++ b/apps/files_external/tests/swift.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_SWIFT extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class SWIFT extends Storage {
private $config;
public function setUp() {
@@ -16,7 +18,7 @@ class Test_Filestorage_SWIFT extends Test_FileStorage {
$this->markTestSkipped('OpenStack SWIFT backend not configured');
}
$this->config['swift']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_SWIFT($this->config['swift']);
+ $this->instance = new \OC\Files\Storage\SWIFT($this->config['swift']);
}
diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php
index dd938a0c93a..1702898045e 100644
--- a/apps/files_external/tests/webdav.php
+++ b/apps/files_external/tests/webdav.php
@@ -6,7 +6,10 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_DAV extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class DAV extends Storage {
+
private $config;
public function setUp() {
@@ -16,7 +19,7 @@ class Test_Filestorage_DAV extends Test_FileStorage {
$this->markTestSkipped('WebDAV backend not configured');
}
$this->config['webdav']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_DAV($this->config['webdav']);
+ $this->instance = new \OC\Files\Storage\DAV($this->config['webdav']);
}
public function tearDown() {
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index 0104d0d017f..d3e05cc62d8 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -2,8 +2,11 @@
OC::$CLASSPATH['OC_Share_Backend_File'] = "apps/files_sharing/lib/share/file.php";
OC::$CLASSPATH['OC_Share_Backend_Folder'] = 'apps/files_sharing/lib/share/folder.php';
-OC::$CLASSPATH['OC_Filestorage_Shared'] = "apps/files_sharing/lib/sharedstorage.php";
-OCP\Util::connectHook('OC_Filesystem', 'setup', 'OC_Filestorage_Shared', 'setup');
+OC::$CLASSPATH['OC\Files\Storage\Shared'] = "apps/files_sharing/lib/sharedstorage.php";
+OC::$CLASSPATH['OC\Files\Cache\Shared_Cache'] = 'apps/files_sharing/lib/cache.php';
+OC::$CLASSPATH['OC\Files\Cache\Shared_Permissions'] = 'apps/files_sharing/lib/permissions.php';
+OC::$CLASSPATH['OC\Files\Cache\Shared_Watcher'] = 'apps/files_sharing/lib/watcher.php';
+OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file');
-OCP\Util::addScript('files_sharing', 'share'); \ No newline at end of file
+OCP\Util::addScript('files_sharing', 'share');
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index a44d0338bb6..1f24a4dde83 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>File sharing between users</description>
<licence>AGPL</licence>
<author>Michael Gapczynski</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<default_enable/>
<types>
diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php
index e998626f4a4..1d22b32b503 100644
--- a/apps/files_sharing/appinfo/update.php
+++ b/apps/files_sharing/appinfo/update.php
@@ -9,10 +9,12 @@ if (version_compare($installedVersion, '0.3', '<')) {
OC_User::useBackend(new OC_User_Database());
OC_Group::useBackend(new OC_Group_Database());
OC_App::loadApps(array('authentication'));
+ $rootView = new \OC\Files\View('');
while ($row = $result->fetchRow()) {
- $itemSource = OC_FileCache::getId($row['source'], '');
+ $meta = $rootView->getFileInfo($$row['source']);
+ $itemSource = $meta['fileid'];
if ($itemSource != -1) {
- $file = OC_FileCache::get($row['source'], '');
+ $file = $meta;
if ($file['mimetype'] == 'httpd/unix-directory') {
$itemType = 'folder';
} else {
@@ -68,6 +70,6 @@ if (version_compare($installedVersion, '0.3.3', '<')) {
OC_App::loadApps(array('authentication'));
$users = OC_User::getUsers();
foreach ($users as $user) {
- OC_FileCache::delete('Shared', '/'.$user.'/files/');
+// OC_FileCache::delete('Shared', '/'.$user.'/files/');
}
-} \ No newline at end of file
+}
diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css
index 492014344f7..13f42b130df 100644
--- a/apps/files_sharing/css/public.css
+++ b/apps/files_sharing/css/public.css
@@ -34,9 +34,8 @@ body {
background:#eee;
border-bottom:1px solid #f8f8f8;
min-height:30em;
- padding-top:2em;
text-align:center;
- margin:50px auto;
+ margin:45px auto;
}
#noPreview {
@@ -60,6 +59,7 @@ p.info a {
#imgframe {
height:75%;
padding-bottom:2em;
+ padding-top:2em;
width:80%;
margin:0 auto;
}
@@ -67,4 +67,8 @@ p.info a {
#imgframe img {
max-height:100%;
max-width:100%;
-} \ No newline at end of file
+}
+
+thead{
+ background-color: white;
+}
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index 8a546d62163..eb5a6e8cb7f 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -1,7 +1,9 @@
$(document).ready(function() {
- if (typeof OC.Share !== 'undefined' && typeof FileActions !== 'undefined' && !publicListView) {
-
+ var disableSharing = $('#disableSharing').data('status');
+
+ if (typeof OC.Share !== 'undefined' && typeof FileActions !== 'undefined' && !disableSharing) {
+
FileActions.register('all', 'Share', OC.PERMISSION_READ, OC.imagePath('core', 'actions/share'), function(filename) {
if ($('#dir').val() == '/') {
var item = $('#dir').val() + filename;
diff --git a/apps/files_sharing/l10n/af_ZA.php b/apps/files_sharing/l10n/af_ZA.php
new file mode 100644
index 00000000000..344585a62fc
--- /dev/null
+++ b/apps/files_sharing/l10n/af_ZA.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Wagwoord",
+"web services under your control" => "webdienste onder jou beheer"
+);
diff --git a/apps/files_sharing/l10n/bn_BD.php b/apps/files_sharing/l10n/bn_BD.php
index 785dfcd2f1d..c3af434ee29 100644
--- a/apps/files_sharing/l10n/bn_BD.php
+++ b/apps/files_sharing/l10n/bn_BD.php
@@ -1,6 +1,9 @@
<?php $TRANSLATIONS = array(
"Password" => "কূটশবà§à¦¦",
-"Submit" => "পাঠাও",
+"Submit" => "জমা দাও",
+"%s shared the folder %s with you" => "%s আপনার সাথে %s ফোলà§à¦¡à¦¾à¦°à¦Ÿà¦¿ ভাগাভাগি করেছেন",
+"%s shared the file %s with you" => "%s আপনার সাথে %s ফাইলটি ভাগাভাগি করেছেন",
"Download" => "ডাউনলোড",
-"web services under your control" => "ওয়েব সেবাসমূহ à¦à¦–ন আপনার হাতের মà§à¦ à§‹à§Ÿ"
+"No preview available for" => "à¦à¦° জনà§à¦¯ কোন পà§à¦°à¦¾à¦•বীকà§à¦·à¦£ সà§à¦²à¦­ নয়",
+"web services under your control" => "ওয়েব সারà§à¦­à¦¿à¦¸ আপনার হাতের মà§à¦ à§‹à§Ÿ"
);
diff --git a/apps/files_sharing/l10n/fa.php b/apps/files_sharing/l10n/fa.php
index 06e1862e8b3..4313acae1ad 100644
--- a/apps/files_sharing/l10n/fa.php
+++ b/apps/files_sharing/l10n/fa.php
@@ -1,6 +1,9 @@
<?php $TRANSLATIONS = array(
-"Size" => "اندازه",
-"Modified" => "تاریخ",
-"Delete all" => "حذ٠همه",
-"Delete" => "حذÙ"
+"Password" => "گذرواژه",
+"Submit" => "ثبت",
+"%s shared the folder %s with you" => "%sپوشه %s را با شما به اشتراک گذاشت",
+"%s shared the file %s with you" => "%sÙØ§ÛŒÙ„ %s را با شما به اشتراک گذاشت",
+"Download" => "دانلود",
+"No preview available for" => "هیچگونه پیش نمایشی موجود نیست",
+"web services under your control" => "سرویس های تحت وب در کنترل شما"
);
diff --git a/apps/files_sharing/l10n/lb.php b/apps/files_sharing/l10n/lb.php
new file mode 100644
index 00000000000..8aba5806aa0
--- /dev/null
+++ b/apps/files_sharing/l10n/lb.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Passwuert"
+);
diff --git a/apps/files_sharing/l10n/lv.php b/apps/files_sharing/l10n/lv.php
new file mode 100644
index 00000000000..0b224867089
--- /dev/null
+++ b/apps/files_sharing/l10n/lv.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Parole",
+"Submit" => "Iesniegt",
+"%s shared the folder %s with you" => "%s ar jums dalÄ«jÄs ar mapi %s",
+"%s shared the file %s with you" => "%s ar jums dalÄ«jÄs ar datni %s",
+"Download" => "LejupielÄdÄ“t",
+"No preview available for" => "Nav pieejams priekšskatījums priekš",
+"web services under your control" => "jÅ«su vadÄ«bÄ esoÅ¡ie tÄ«mekļa servisi"
+);
diff --git a/apps/files_sharing/l10n/sr.php b/apps/files_sharing/l10n/sr.php
new file mode 100644
index 00000000000..6e277f67711
--- /dev/null
+++ b/apps/files_sharing/l10n/sr.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Лозинка",
+"Submit" => "Пошаљи",
+"Download" => "Преузми"
+);
diff --git a/apps/files_sharing/l10n/zh_TW.php b/apps/files_sharing/l10n/zh_TW.php
index fa4f8075c6e..f1d28731a7f 100644
--- a/apps/files_sharing/l10n/zh_TW.php
+++ b/apps/files_sharing/l10n/zh_TW.php
@@ -4,5 +4,6 @@
"%s shared the folder %s with you" => "%s 分享了資料夾 %s 給您",
"%s shared the file %s with you" => "%s 分享了檔案 %s 給您",
"Download" => "下載",
-"No preview available for" => "無法é è¦½"
+"No preview available for" => "無法é è¦½",
+"web services under your control" => "在您掌控之下的網路æœå‹™"
);
diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
new file mode 100644
index 00000000000..9655e447875
--- /dev/null
+++ b/apps/files_sharing/lib/cache.php
@@ -0,0 +1,258 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@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 OC\Files\Cache;
+
+/**
+ * Metadata cache for shared files
+ *
+ * don't use this class directly if you need to get metadata, use \OC\Files\Filesystem::getFileInfo instead
+ */
+class Shared_Cache extends Cache {
+
+ private $files = array();
+
+ public function __construct($storage) {
+
+ }
+
+ /**
+ * @brief Get the source cache of a shared file or folder
+ * @param string $target Shared target file path
+ * @return \OC\Files\Cache\Cache
+ */
+ private function getSourceCache($target) {
+ $source = \OC_Share_Backend_File::getSource($target);
+ if (isset($source['path'])) {
+ $source['path'] = '/' . $source['uid_owner'] . '/' . $source['path'];
+ \OC\Files\Filesystem::initMountPoints($source['uid_owner']);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source['path']);
+ if ($storage) {
+ $this->files[$target] = $internalPath;
+ $cache = $storage->getCache();
+ $this->storageId = $storage->getId();
+ $this->numericId = $cache->getNumericStorageId();
+ return $cache;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * get the stored metadata of a file or folder
+ *
+ * @param string/int $file
+ * @return array
+ */
+ public function get($file) {
+ if ($file == '') {
+ return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT);
+ } else if (is_string($file)) {
+ if ($cache = $this->getSourceCache($file)) {
+ return $cache->get($this->files[$file]);
+ }
+ } else {
+ $query = \OC_DB::prepare(
+ 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
+ FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $result = $query->execute(array($file));
+ $data = $result->fetchRow();
+ $data['fileid'] = (int)$data['fileid'];
+ $data['size'] = (int)$data['size'];
+ $data['mtime'] = (int)$data['mtime'];
+ $data['encrypted'] = (bool)$data['encrypted'];
+ $data['mimetype'] = $this->getMimetype($data['mimetype']);
+ $data['mimepart'] = $this->getMimetype($data['mimepart']);
+ return $data;
+ }
+ return false;
+ }
+
+ /**
+ * get the metadata of all files stored in $folder
+ *
+ * @param string $folder
+ * @return array
+ */
+ public function getFolderContents($folder) {
+ if ($folder == '') {
+ $files = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS);
+ foreach ($files as &$file) {
+ $file['mimetype'] = $this->getMimetype($file['mimetype']);
+ $file['mimepart'] = $this->getMimetype($file['mimepart']);
+ }
+ return $files;
+ } else {
+ if ($cache = $this->getSourceCache($folder)) {
+ return $cache->getFolderContents($this->files[$folder]);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * store meta data for a file or folder
+ *
+ * @param string $file
+ * @param array $data
+ *
+ * @return int file id
+ */
+ public function put($file, array $data) {
+ if ($cache = $this->getSourceCache($file)) {
+ return $cache->put($this->files[$file], $data);
+ }
+ return false;
+ }
+
+ /**
+ * get the file id for a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getId($file) {
+ if ($cache = $this->getSourceCache($file)) {
+ return $cache->getId($this->files[$file]);
+ }
+ return -1;
+ }
+
+ /**
+ * check if a file is available in the cache
+ *
+ * @param string $file
+ * @return bool
+ */
+ public function inCache($file) {
+ if ($file == '') {
+ return true;
+ }
+ return parent::inCache($file);
+ }
+
+ /**
+ * remove a file or folder from the cache
+ *
+ * @param string $file
+ */
+ public function remove($file) {
+ if ($cache = $this->getSourceCache($file)) {
+ $cache->remove($this->files[$file]);
+ }
+ }
+
+ /**
+ * Move a file or folder in the cache
+ *
+ * @param string $source
+ * @param string $target
+ */
+ public function move($source, $target) {
+ if ($cache = $this->getSourceCache($source)) {
+ $targetPath = \OC_Share_Backend_File::getSourcePath(dirname($target));
+ if ($targetPath) {
+ $targetPath .= '/' . basename($target);
+ $cache->move($this->files[$source], $targetPath);
+ }
+
+ }
+ }
+
+ /**
+ * remove all entries for files that are stored on the storage from the cache
+ */
+ public function clear() {
+ // Not a valid action for Shared Cache
+ }
+
+ /**
+ * @param string $file
+ *
+ * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+ */
+ public function getStatus($file) {
+ if ($file == '') {
+ return self::COMPLETE;
+ }
+ if ($cache = $this->getSourceCache($file)) {
+ return $cache->getStatus($this->files[$file]);
+ }
+ return self::NOT_FOUND;
+ }
+
+ /**
+ * search for files matching $pattern
+ *
+ * @param string $pattern
+ * @return array of file data
+ */
+ public function search($pattern) {
+ // TODO
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $part1
+ * @param string $part2
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ if (strpos($mimetype, '/')) {
+ $where = '`mimetype` = ?';
+ } else {
+ $where = '`mimepart` = ?';
+ }
+ $mimetype = $this->getMimetypeId($mimetype);
+ $ids = $this->getAll();
+ $placeholders = join(',', array_fill(0, count($ids), '?'));
+ $query = \OC_DB::prepare('
+ SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
+ FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `fileid` IN (' . $placeholders . ')'
+ );
+ $result = $query->execute(array_merge(array($mimetype), $ids));
+ return $result->fetchAll();
+ }
+
+ /**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @return int
+ */
+ public function calculateFolderSize($path) {
+ if ($cache = $this->getSourceCache($path)) {
+ return $cache->calculateFolderSize($this->files[$path]);
+ }
+ return 0;
+ }
+
+ /**
+ * get all file ids on the files on the storage
+ *
+ * @return int[]
+ */
+ public function getAll() {
+ return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
+ }
+
+}
diff --git a/apps/files_sharing/lib/permissions.php b/apps/files_sharing/lib/permissions.php
new file mode 100644
index 00000000000..2b068ff9350
--- /dev/null
+++ b/apps/files_sharing/lib/permissions.php
@@ -0,0 +1,85 @@
+<?php
+/**
+* ownCloud
+*
+* @author Michael Gapczynski
+* @copyright 2012 Michael Gapczynski mtgap@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 OC\Files\Cache;
+
+class Shared_Permissions extends Permissions {
+
+ /**
+ * get the permissions for a single file
+ *
+ * @param int $fileId
+ * @param string $user
+ * @return int (-1 if file no permissions set)
+ */
+ public function get($fileId, $user) {
+ if ($fileId == -1) {
+ return \OCP\PERMISSION_READ;
+ }
+ $source = \OCP\Share::getItemSharedWithBySource('file', $fileId, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE, null, true);
+ if ($source) {
+ return $source['permissions'];
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * set the permissions of a file
+ *
+ * @param int $fileId
+ * @param string $user
+ * @param int $permissions
+ */
+ public function set($fileId, $user, $permissions) {
+ // Not a valid action for Shared Permissions
+ }
+
+ /**
+ * get the permissions of multiply files
+ *
+ * @param int[] $fileIds
+ * @param string $user
+ * @return int[]
+ */
+ public function getMultiple($fileIds, $user) {
+ if (count($fileIds) === 0) {
+ return array();
+ }
+ foreach ($fileIds as $fileId) {
+ $filePermissions[$fileId] = self::get($fileId, $user);
+ }
+ return $filePermissions;
+ }
+
+ /**
+ * remove the permissions for a file
+ *
+ * @param int $fileId
+ * @param string $user
+ */
+ public function remove($fileId, $user) {
+ // Not a valid action for Shared Permissions
+ }
+
+ public function removeMultiple($fileIds, $user) {
+ // Not a valid action for Shared Permissions
+ }
+}
diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php
index ac585236831..6d3c55a008f 100644
--- a/apps/files_sharing/lib/share/file.php
+++ b/apps/files_sharing/lib/share/file.php
@@ -22,16 +22,18 @@
class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
const FORMAT_SHARED_STORAGE = 0;
- const FORMAT_FILE_APP = 1;
+ const FORMAT_GET_FOLDER_CONTENTS = 1;
const FORMAT_FILE_APP_ROOT = 2;
const FORMAT_OPENDIR = 3;
+ const FORMAT_GET_ALL = 4;
private $path;
public function isValidSource($itemSource, $uidOwner) {
- $path = OC_FileCache::getPath($itemSource, $uidOwner);
- if ($path) {
- $this->path = $path;
+ $query = \OC_DB::prepare('SELECT `name` FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $result = $query->execute(array($itemSource));
+ if ($row = $result->fetchRow()) {
+ $this->path = $row['name'];
return true;
}
return false;
@@ -70,37 +72,21 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
public function formatItems($items, $format, $parameters = null) {
if ($format == self::FORMAT_SHARED_STORAGE) {
// Only 1 item should come through for this format call
- return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions']);
- } else if ($format == self::FORMAT_FILE_APP) {
- if (isset($parameters['mimetype_filter']) && $parameters['mimetype_filter']) {
- $mimetype_filter = $parameters['mimetype_filter'];
- }
+ return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions'], 'uid_owner' => $items[key($items)]['uid_owner']);
+ } else if ($format == self::FORMAT_GET_FOLDER_CONTENTS) {
$files = array();
foreach ($items as $item) {
- if (isset($mimetype_filter)
- && strpos($item['mimetype'], $mimetype_filter) !== 0
- && $item['mimetype'] != 'httpd/unix-directory') {
- continue;
- }
$file = array();
- $file['id'] = $item['file_source'];
+ $file['fileid'] = $item['file_source'];
+ $file['storage'] = $item['storage'];
$file['path'] = $item['file_target'];
+ $file['parent'] = $item['file_parent'];
$file['name'] = basename($item['file_target']);
- $file['ctime'] = $item['ctime'];
- $file['mtime'] = $item['mtime'];
$file['mimetype'] = $item['mimetype'];
+ $file['mimepart'] = $item['mimepart'];
$file['size'] = $item['size'];
+ $file['mtime'] = $item['mtime'];
$file['encrypted'] = $item['encrypted'];
- $file['versioned'] = $item['versioned'];
- $file['directory'] = $parameters['folder'];
- $file['type'] = ($item['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
- $file['permissions'] = $item['permissions'];
- if ($file['type'] == 'file') {
- // Remove Create permission if type is file
- $file['permissions'] &= ~OCP\PERMISSION_CREATE;
- }
- // NOTE: Temporary fix to allow unsharing of files in root of Shared directory
- $file['permissions'] |= OCP\PERMISSION_DELETE;
$files[] = $file;
}
return $files;
@@ -111,17 +97,48 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
if ($item['mtime'] > $mtime) {
$mtime = $item['mtime'];
}
- $size += $item['size'];
+ $size += (int)$item['size'];
}
- return array(0 => array('id' => -1, 'name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size, 'writable' => false, 'type' => 'dir', 'directory' => '', 'permissions' => OCP\PERMISSION_READ));
+ return array('fileid' => -1, 'name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size);
} else if ($format == self::FORMAT_OPENDIR) {
$files = array();
foreach ($items as $item) {
$files[] = basename($item['file_target']);
}
return $files;
+ } else if ($format == self::FORMAT_GET_ALL) {
+ $ids = array();
+ foreach ($items as $item) {
+ $ids[] = $item['file_source'];
+ }
+ return $ids;
}
return array();
}
+ public static function getSource($target) {
+ if ($target == '') {
+ return false;
+ }
+ $target = '/'.$target;
+ $target = rtrim($target, '/');
+ $pos = strpos($target, '/', 1);
+ // Get shared folder name
+ if ($pos !== false) {
+ $folder = substr($target, 0, $pos);
+ $source = \OCP\Share::getItemSharedWith('folder', $folder, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
+ if ($source) {
+ $source['path'] = $source['path'].substr($target, strlen($folder));
+ return $source;
+ }
+ } else {
+ $source = \OCP\Share::getItemSharedWith('file', $target, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
+ if ($source) {
+ return $source;
+ }
+ }
+ \OCP\Util::writeLog('files_sharing', 'File source not found for: '.$target, \OCP\Util::ERROR);
+ return false;
+ }
+
}
diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php
index d414fcf10fc..11c8c6b1e80 100644
--- a/apps/files_sharing/lib/share/folder.php
+++ b/apps/files_sharing/lib/share/folder.php
@@ -21,47 +21,26 @@
class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share_Backend_Collection {
- public function formatItems($items, $format, $parameters = null) {
- if ($format == self::FORMAT_SHARED_STORAGE) {
- // Only 1 item should come through for this format call
- return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions']);
- } else if ($format == self::FORMAT_FILE_APP && isset($parameters['folder'])) {
- // Only 1 item should come through for this format call
- $folder = $items[key($items)];
- if (isset($parameters['mimetype_filter'])) {
- $mimetype_filter = $parameters['mimetype_filter'];
- } else {
- $mimetype_filter = '';
- }
- $path = $folder['path'].substr($parameters['folder'], 7 + strlen($folder['file_target']));
- $files = OC_FileCache::getFolderContent($path, '', $mimetype_filter);
- foreach ($files as &$file) {
- $file['directory'] = $parameters['folder'];
- $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
- $file['permissions'] = $folder['permissions'];
- if ($file['type'] == 'file') {
- // Remove Create permission if type is file
- $file['permissions'] &= ~OCP\PERMISSION_CREATE;
- }
- }
- return $files;
- }
- return array();
- }
-
public function getChildren($itemSource) {
$children = array();
$parents = array($itemSource);
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?');
+ $result = $query->execute(array('httpd/unix-directory'));
+ if ($row = $result->fetchRow()) {
+ $mimetype = $row['id'];
+ } else {
+ $mimetype = -1;
+ }
while (!empty($parents)) {
$parents = "'".implode("','", $parents)."'";
- $query = OC_DB::prepare('SELECT `id`, `name`, `mimetype` FROM `*PREFIX*fscache` WHERE `parent` IN ('.$parents.')');
+ $query = OC_DB::prepare('SELECT `fileid`, `name`, `mimetype` FROM `*PREFIX*filecache` WHERE `parent` IN ('.$parents.')');
$result = $query->execute();
$parents = array();
while ($file = $result->fetchRow()) {
- $children[] = array('source' => $file['id'], 'file_path' => $file['name']);
+ $children[] = array('source' => $file['fileid'], 'file_path' => $file['name']);
// If a child folder is found look inside it
- if ($file['mimetype'] == 'httpd/unix-directory') {
- $parents[] = $file['id'];
+ if ($file['mimetype'] == $mimetype) {
+ $parents[] = $file['fileid'];
}
}
}
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 50db9166fe7..65812b7e2fd 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -20,10 +20,12 @@
*
*/
+namespace OC\Files\Storage;
+
/**
* Convert target path to source path and pass the function call to the correct storage provider
*/
-class OC_Filestorage_Shared extends OC_Filestorage_Common {
+class Shared extends \OC\Files\Storage\Common {
private $sharedFolder;
private $files = array();
@@ -32,54 +34,36 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
$this->sharedFolder = $arguments['sharedFolder'];
}
+ public function getId(){
+ return 'shared::' . $this->sharedFolder;
+ }
+
/**
- * @brief Get the source file path and the permissions granted for a shared file
+ * @brief Get the source file path, permissions, and owner for a shared file
* @param string Shared target file path
- * @return Returns array with the keys path and permissions or false if not found
+ * @return Returns array with the keys path, permissions, and owner or false if not found
*/
private function getFile($target) {
- $target = '/'.$target;
- $target = rtrim($target, '/');
- if (isset($this->files[$target])) {
- return $this->files[$target];
- } else {
- $pos = strpos($target, '/', 1);
- // Get shared folder name
- if ($pos !== false) {
- $folder = substr($target, 0, $pos);
- if (isset($this->files[$folder])) {
- $file = $this->files[$folder];
- } else {
- $file = OCP\Share::getItemSharedWith('folder', $folder, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
- }
- if ($file) {
- $this->files[$target]['path'] = $file['path'].substr($target, strlen($folder));
- $this->files[$target]['permissions'] = $file['permissions'];
- return $this->files[$target];
- }
- } else {
- $file = OCP\Share::getItemSharedWith('file', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
- if ($file) {
- $this->files[$target] = $file;
- return $this->files[$target];
- }
+ if (!isset($this->files[$target])) {
+ $source = \OC_Share_Backend_File::getSource($target);
+ if ($source) {
+ $source['path'] = '/'.$source['uid_owner'].'/'.$source['path'];
}
- OCP\Util::writeLog('files_sharing', 'File source not found for: '.$target, OCP\Util::ERROR);
- return false;
+ $this->files[$target] = $source;
}
+ return $this->files[$target];
}
/**
* @brief Get the source file path for a shared file
* @param string Shared target file path
- * @return Returns source file path or false if not found
+ * @return string source file path or false if not found
*/
private function getSourcePath($target) {
- $file = $this->getFile($target);
- if (isset($file['path'])) {
- $uid = substr($file['path'], 1, strpos($file['path'], '/', 1) - 1);
- OC_Filesystem::mount('OC_Filestorage_Local', array('datadir' => OC_User::getHome($uid)), $uid);
- return $file['path'];
+ $source = $this->getFile($target);
+ if ($source) {
+ \OC\Files\Filesystem::initMountPoints($source['uid_owner']);
+ return $source['path'];
}
return false;
}
@@ -87,61 +71,42 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
/**
* @brief Get the permissions granted for a shared file
* @param string Shared target file path
- * @return Returns CRUDS permissions granted or false if not found
+ * @return int CRUDS permissions granted or false if not found
*/
- private function getPermissions($target) {
- $file = $this->getFile($target);
- if (isset($file['permissions'])) {
- return $file['permissions'];
+ public function getPermissions($target) {
+ $source = $this->getFile($target);
+ if ($source) {
+ return $source['permissions'];
}
return false;
}
- /**
- * @brief Get the internal path to pass to the storage filesystem call
- * @param string Source file path
- * @return Source file path with mount point stripped out
- */
- private function getInternalPath($path) {
- $mountPoint = OC_Filesystem::getMountPoint($path);
- $internalPath = substr($path, strlen($mountPoint));
- return $internalPath;
- }
-
- public function getOwner($target) {
- $shared_item = OCP\Share::getItemSharedWith('folder', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
- if ($shared_item) {
- return $shared_item[0]["uid_owner"];
- }
- return null;
- }
-
public function mkdir($path) {
if ($path == '' || $path == '/' || !$this->isCreatable(dirname($path))) {
return false;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->mkdir($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->mkdir($internalPath);
}
return false;
}
public function rmdir($path) {
if (($source = $this->getSourcePath($path)) && $this->isDeletable($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->rmdir($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->rmdir($internalPath);
}
return false;
}
public function opendir($path) {
if ($path == '' || $path == '/') {
- $files = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_Folder::FORMAT_OPENDIR);
- OC_FakeDirStream::$dirs['shared'] = $files;
+ $files = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_Folder::FORMAT_OPENDIR);
+ \OC\Files\Stream\Dir::register('shared', $files);
return opendir('fakedir://shared');
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->opendir($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->opendir($internalPath);
}
return false;
}
@@ -150,16 +115,16 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '' || $path == '/') {
return true;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->is_dir($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->is_dir($internalPath);
}
return false;
}
public function is_file($path) {
if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->is_file($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->is_file($internalPath);
}
return false;
}
@@ -168,11 +133,10 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '' || $path == '/') {
$stat['size'] = $this->filesize($path);
$stat['mtime'] = $this->filemtime($path);
- $stat['ctime'] = $this->filectime($path);
return $stat;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->stat($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->stat($internalPath);
}
return false;
}
@@ -181,8 +145,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '' || $path == '/') {
return 'dir';
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filetype($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->filetype($internalPath);
}
return false;
}
@@ -191,8 +155,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '' || $path == '/' || $this->is_dir($path)) {
return 0;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filesize($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->filesize($internalPath);
}
return false;
}
@@ -201,7 +165,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '') {
return false;
}
- return ($this->getPermissions($path) & OCP\PERMISSION_CREATE);
+ return ($this->getPermissions($path) & \OCP\PERMISSION_CREATE);
}
public function isReadable($path) {
@@ -212,54 +176,33 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '') {
return false;
}
- return ($this->getPermissions($path) & OCP\PERMISSION_UPDATE);
+ return ($this->getPermissions($path) & \OCP\PERMISSION_UPDATE);
}
public function isDeletable($path) {
if ($path == '') {
return true;
}
- return ($this->getPermissions($path) & OCP\PERMISSION_DELETE);
+ return ($this->getPermissions($path) & \OCP\PERMISSION_DELETE);
}
public function isSharable($path) {
if ($path == '') {
return false;
}
- return ($this->getPermissions($path) & OCP\PERMISSION_SHARE);
+ return ($this->getPermissions($path) & \OCP\PERMISSION_SHARE);
}
public function file_exists($path) {
if ($path == '' || $path == '/') {
return true;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->file_exists($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->file_exists($internalPath);
}
return false;
}
- public function filectime($path) {
- if ($path == '' || $path == '/') {
- $ctime = 0;
- if ($dh = $this->opendir($path)) {
- while (($filename = readdir($dh)) !== false) {
- $tempctime = $this->filectime($filename);
- if ($tempctime < $ctime) {
- $ctime = $tempctime;
- }
- }
- }
- return $ctime;
- } else {
- $source = $this->getSourcePath($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filectime($this->getInternalPath($source));
- }
- }
- }
-
public function filemtime($path) {
if ($path == '' || $path == '/') {
$mtime = 0;
@@ -275,8 +218,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
} else {
$source = $this->getSourcePath($path);
if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filemtime($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->filemtime($internalPath);
}
}
}
@@ -288,9 +231,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
'target' => $this->sharedFolder.$path,
'source' => $source,
);
- OCP\Util::emitHook('OC_Filestorage_Shared', 'file_get_contents', $info);
- $storage = OC_Filesystem::getStorage($source);
- return $storage->file_get_contents($this->getInternalPath($source));
+ \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_get_contents', $info);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->file_get_contents($internalPath);
}
}
@@ -304,9 +247,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
'target' => $this->sharedFolder.$path,
'source' => $source,
);
- OCP\Util::emitHook('OC_Filestorage_Shared', 'file_put_contents', $info);
- $storage = OC_Filesystem::getStorage($source);
- $result = $storage->file_put_contents($this->getInternalPath($source), $data);
+ \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_put_contents', $info);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ $result = $storage->file_put_contents($internalPath, $data);
return $result;
}
return false;
@@ -316,8 +259,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
// Delete the file if DELETE permission is granted
if ($source = $this->getSourcePath($path)) {
if ($this->isDeletable($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->unlink($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->unlink($internalPath);
} else if (dirname($path) == '/' || dirname($path) == '.') {
// Unshare the file from the user if in the root of the Shared folder
if ($this->is_dir($path)) {
@@ -325,7 +268,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
} else {
$itemType = 'file';
}
- return OCP\Share::unshareFromSelf($itemType, $path);
+ return \OCP\Share::unshareFromSelf($itemType, $path);
}
}
return false;
@@ -340,8 +283,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if (dirname($path1) == dirname($path2)) {
// Rename the file if UPDATE permission is granted
if ($this->isUpdatable($path1)) {
- $storage = OC_Filesystem::getStorage($oldSource);
- return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource));
+ list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
+ list( , $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
+ return $storage->rename($oldInternalPath, $newInternalPath);
}
} else {
// Move the file if DELETE and CREATE permissions are granted
@@ -355,8 +299,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
return $this->unlink($path1);
}
} else {
- $storage = OC_Filesystem::getStorage($oldSource);
- return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource));
+ list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
+ list( , $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
+ return $storage->rename($oldInternalPath, $newInternalPath);
}
}
}
@@ -369,7 +314,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($this->isCreatable(dirname($path2))) {
$source = $this->fopen($path1, 'r');
$target = $this->fopen($path2, 'w');
- return OC_Helper::streamCopy($source, $target);
+ return \OC_Helper::streamCopy($source, $target);
}
return false;
}
@@ -400,9 +345,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
'source' => $source,
'mode' => $mode,
);
- OCP\Util::emitHook('OC_Filestorage_Shared', 'fopen', $info);
- $storage = OC_Filesystem::getStorage($source);
- return $storage->fopen($this->getInternalPath($source), $mode);
+ \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'fopen', $info);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->fopen($internalPath, $mode);
}
return false;
}
@@ -412,47 +357,88 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
return 'httpd/unix-directory';
}
if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->getMimeType($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->getMimeType($internalPath);
}
return false;
}
public function free_space($path) {
+ if ($path == '') {
+ return -1;
+ }
$source = $this->getSourcePath($path);
if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->free_space($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->free_space($internalPath);
}
}
public function getLocalFile($path) {
if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->getLocalFile($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->getLocalFile($internalPath);
}
return false;
}
public function touch($path, $mtime = null) {
if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->touch($this->getInternalPath($source), $mtime);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->touch($internalPath, $mtime);
}
return false;
}
public static function setup($options) {
- $user_dir = $options['user_dir'];
- OC_Filesystem::mount('OC_Filestorage_Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/');
+ if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user'] || \OCP\Share::getItemsSharedWith('file')) {
+ $user_dir = $options['user_dir'];
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/');
+ }
}
- /**
- * check if a file or folder has been updated since $time
- * @param int $time
- * @return bool
- */
public function hasUpdated($path, $time) {
- //TODO
+ if ($path == '') {
+ return false;
+ }
+ return $this->filemtime($path) > $time;
+ }
+
+ public function getCache($path = '') {
+ return new \OC\Files\Cache\Shared_Cache($this);
+ }
+
+ public function getScanner($path = '') {
+ return new \OC\Files\Cache\Scanner($this);
+ }
+
+ public function getPermissionsCache($path = '') {
+ return new \OC\Files\Cache\Shared_Permissions($this);
+ }
+
+ public function getWatcher($path = '') {
+ return new \OC\Files\Cache\Shared_Watcher($this);
+ }
+
+ public function getOwner($path) {
+ if ($path == '') {
+ return false;
+ }
+ $source = $this->getFile($path);
+ if ($source) {
+ return $source['uid_owner'];
+ }
return false;
}
+
+ public function getETag($path) {
+ if ($path == '') {
+ return parent::getETag($path);
+ }
+ if ($source = $this->getSourcePath($path)) {
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->getETag($internalPath);
+ }
+ return null;
+ }
+
}
diff --git a/apps/files_sharing/lib/watcher.php b/apps/files_sharing/lib/watcher.php
new file mode 100644
index 00000000000..e67d1ee9086
--- /dev/null
+++ b/apps/files_sharing/lib/watcher.php
@@ -0,0 +1,51 @@
+<?php
+/**
+* ownCloud
+*
+* @author Michael Gapczynski
+* @copyright 2012 Michael Gapczynski mtgap@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 OC\Files\Cache;
+
+/**
+ * check the storage backends for updates and change the cache accordingly
+ */
+class Shared_Watcher extends Watcher {
+
+ /**
+ * check $path for updates
+ *
+ * @param string $path
+ */
+ public function checkUpdate($path) {
+ if ($path != '') {
+ parent::checkUpdate($path);
+ }
+ }
+
+ /**
+ * remove deleted files in $path from the cache
+ *
+ * @param string $path
+ */
+ public function cleanFolder($path) {
+ if ($path != '') {
+ parent::cleanFolder($path);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index fef0ed8a8c2..38d598f7780 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -1,57 +1,17 @@
<?php
+$RUNTIME_NOSETUPFS = true;
// Load other apps for file previews
OC_App::loadApps();
-// Compatibility with shared-by-link items from ownCloud 4.0
-// requires old Sharing table !
-// support will be removed in OC 5.0,a
-if (isset($_GET['token'])) {
- unset($_GET['file']);
- $qry = \OC_DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ? LIMIT 1');
- $filepath = $qry->execute(array($_GET['token']))->fetchOne();
- if(isset($filepath)) {
- $info = OC_FileCache_Cached::get($filepath, '');
- if(strtolower($info['mimetype']) == 'httpd/unix-directory') {
- $_GET['dir'] = $filepath;
- } else {
- $_GET['file'] = $filepath;
- }
- \OCP\Util::writeLog('files_sharing', 'You have files that are shared by link originating from ownCloud 4.0. Redistribute the new links, because backwards compatibility will be removed in ownCloud 5.', \OCP\Util::WARN);
- }
-}
-
-function getID($path) {
- // use the share table from the db to find the item source if the file was reshared because shared files
- //are not stored in the file cache.
- if (substr(OC_Filesystem::getMountPoint($path), -7, 6) == "Shared") {
- $path_parts = explode('/', $path, 5);
- $user = $path_parts[1];
- $intPath = '/'.$path_parts[4];
- $query = \OC_DB::prepare('SELECT `item_source` FROM `*PREFIX*share` WHERE `uid_owner` = ? AND `file_target` = ? ');
- $result = $query->execute(array($user, $intPath));
- $row = $result->fetchRow();
- $fileSource = $row['item_source'];
+function fileCmp($a, $b) {
+ if ($a['type'] == 'dir' and $b['type'] != 'dir') {
+ return -1;
+ } elseif ($a['type'] != 'dir' and $b['type'] == 'dir') {
+ return 1;
} else {
- $fileSource = OC_Filecache::getId($path, '');
+ return strnatcasecmp($a['name'], $b['name']);
}
-
- return $fileSource;
}
-// Enf of backward compatibility
-
-/**
- * lookup file path and owner by fetching it from the fscache
- * needed becaus OC_FileCache::getPath($id, $user) already requires the user
- * @param int $id
- * @return array
- */
-function getPathAndUser($id) {
- $query = \OC_DB::prepare('SELECT `user`, `path` FROM `*PREFIX*fscache` WHERE `id` = ?');
- $result = $query->execute(array($id));
- $row = $result->fetchRow();
- return $row;
-}
-
if (isset($_GET['t'])) {
$token = $_GET['t'];
@@ -61,60 +21,32 @@ if (isset($_GET['t'])) {
$type = $linkItem['item_type'];
$fileSource = $linkItem['file_source'];
$shareOwner = $linkItem['uid_owner'];
-
- if (OCP\User::userExists($shareOwner) && $fileSource != -1 ) {
-
- $pathAndUser = getPathAndUser($linkItem['file_source']);
- $fileOwner = $pathAndUser['user'];
-
- //if this is a reshare check the file owner also exists
- if ($shareOwner != $fileOwner && ! OCP\User::userExists($fileOwner)) {
- OCP\Util::writeLog('share', 'original file owner '.$fileOwner.' does not exist for share '.$linkItem['id'], \OCP\Util::ERROR);
- header('HTTP/1.0 404 Not Found');
- $tmpl = new OCP\Template('', '404', 'guest');
- $tmpl->printPage();
- exit();
+ $fileOwner = null;
+ $path = null;
+ if (isset($linkItem['parent'])) {
+ $parent = $linkItem['parent'];
+ while (isset($parent)) {
+ $query = \OC_DB::prepare('SELECT `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `id` = ?', 1);
+ $item = $query->execute(array($parent))->fetchRow();
+ if (isset($item['parent'])) {
+ $parent = $item['parent'];
+ } else {
+ $fileOwner = $item['uid_owner'];
+ break;
+ }
}
-
- //mount filesystem of file owner
- OC_Util::setupFS($fileOwner);
- }
- }
-} else if (isset($_GET['file']) || isset($_GET['dir'])) {
- OCP\Util::writeLog('share', 'Missing token, trying fallback file/dir links', \OCP\Util::DEBUG);
- if (isset($_GET['dir'])) {
- $type = 'folder';
- $path = $_GET['dir'];
- if(strlen($path)>1 and substr($path, -1, 1)==='/') {
- $path=substr($path, 0, -1);
- }
- $baseDir = $path;
- $dir = $baseDir;
- } else {
- $type = 'file';
- $path = $_GET['file'];
- if(strlen($path)>1 and substr($path, -1, 1)==='/') {
- $path=substr($path, 0, -1);
+ } else {
+ $fileOwner = $shareOwner;
}
- }
- $shareOwner = substr($path, 1, strpos($path, '/', 1) - 1);
-
- if (OCP\User::userExists($shareOwner)) {
- OC_Util::setupFS($shareOwner);
- $fileSource = getId($path);
- if ($fileSource != -1 ) {
- $linkItem = OCP\Share::getItemSharedWithByLink($type, $fileSource, $shareOwner);
- $pathAndUser['path'] = $path;
- $path_parts = explode('/', $path, 5);
- $pathAndUser['user'] = $path_parts[1];
- $fileOwner = $path_parts[1];
+ if (isset($fileOwner)) {
+ OC_Util::setupFS($fileOwner);
+ $path = \OC\Files\Filesystem::getPath($linkItem['file_source']);
}
}
-}
-
-if ($linkItem) {
+}
+if (isset($path)) {
if (!isset($linkItem['item_type'])) {
- OCP\Util::writeLog('share', 'No item type set for share id: '.$linkItem['id'], \OCP\Util::ERROR);
+ OCP\Util::writeLog('share', 'No item type set for share id: ' . $linkItem['id'], \OCP\Util::ERROR);
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
$tmpl->printPage();
@@ -122,11 +54,13 @@ if ($linkItem) {
}
if (isset($linkItem['share_with'])) {
// Authenticate share_with
- $url = OCP\Util::linkToPublic('files').'&t='.$token;
+ $url = OCP\Util::linkToPublic('files') . '&t=' . $token;
if (isset($_GET['file'])) {
- $url .= '&file='.urlencode($_GET['file']);
- } else if (isset($_GET['dir'])) {
- $url .= '&dir='.urlencode($_GET['dir']);
+ $url .= '&file=' . urlencode($_GET['file']);
+ } else {
+ if (isset($_GET['dir'])) {
+ $url .= '&dir=' . urlencode($_GET['dir']);
+ }
}
if (isset($_POST['password'])) {
$password = $_POST['password'];
@@ -134,7 +68,8 @@ if ($linkItem) {
// Check Password
$forcePortable = (CRYPT_BLOWFISH != 1);
$hasher = new PasswordHash(8, $forcePortable);
- if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''), $linkItem['share_with']))) {
+ if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''),
+ $linkItem['share_with']))) {
$tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
$tmpl->assign('URL', $url);
$tmpl->assign('error', true);
@@ -145,128 +80,124 @@ if ($linkItem) {
$_SESSION['public_link_authenticated'] = $linkItem['id'];
}
} else {
- OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type'].' for share id '.$linkItem['id'], \OCP\Util::ERROR);
+ OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type']
+ .' for share id '.$linkItem['id'], \OCP\Util::ERROR);
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
$tmpl->printPage();
exit();
}
- // Check if item id is set in session
- } else if (!isset($_SESSION['public_link_authenticated']) || $_SESSION['public_link_authenticated'] !== $linkItem['id']) {
- // Prompt for password
- $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
- $tmpl->assign('URL', $url);
- $tmpl->printPage();
- exit();
+
+ } else {
+ // Check if item id is set in session
+ if (!isset($_SESSION['public_link_authenticated'])
+ || $_SESSION['public_link_authenticated'] !== $linkItem['id']
+ ) {
+ // Prompt for password
+ $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
+ $tmpl->assign('URL', $url);
+ $tmpl->printPage();
+ exit();
+ }
}
}
- $basePath = substr($pathAndUser['path'], strlen('/'.$fileOwner.'/files'));
- $path = $basePath;
- if (isset($_GET['path'])) {
- $path .= $_GET['path'];
- }
- if (!$path || !OC_Filesystem::isValidPath($path) || !OC_Filesystem::file_exists($path)) {
- OCP\Util::writeLog('share', 'Invalid path '.$path.' for share id '.$linkItem['id'], \OCP\Util::ERROR);
- header('HTTP/1.0 404 Not Found');
- $tmpl = new OCP\Template('', '404', 'guest');
- $tmpl->printPage();
- exit();
+ $basePath = $path;
+ if (isset($_GET['path']) && \OC\Files\Filesystem::isReadable($basePath . $_GET['path'])) {
+ $getPath = \OC\Files\Filesystem::normalizePath($_GET['path']);
+ $path .= $getPath;
+ } else {
+ $getPath = '';
}
$dir = dirname($path);
$file = basename($path);
// Download the file
if (isset($_GET['download'])) {
- if (isset($_GET['path']) && $_GET['path'] !== '' ) {
- if ( isset($_GET['files']) ) { // download selected files
- OC_Files::get($path, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
- } else if (isset($_GET['path']) && $_GET['path'] != '' ) { // download a file from a shared directory
- OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
- } else { // download the whole shared directory
- OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
- }
- } else { // download a single shared file
+ if (isset($_GET['files'])) { // download selected files
+ OC_Files::get($path, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ } else {
OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
}
-
+ exit();
} else {
OCP\Util::addStyle('files_sharing', 'public');
OCP\Util::addScript('files_sharing', 'public');
OCP\Util::addScript('files', 'fileactions');
$tmpl = new OCP\Template('files_sharing', 'public', 'base');
$tmpl->assign('uidOwner', $shareOwner);
- $tmpl->assign('dir', $dir);
+ $tmpl->assign('displayName', \OCP\User::getDisplayName($shareOwner));
$tmpl->assign('filename', $file);
- $tmpl->assign('mimetype', OC_Filesystem::getMimeType($path));
- if (isset($_GET['path'])) {
- $getPath = $_GET['path'];
- } else {
- $getPath = '';
- }
- //
- $urlLinkIdentifiers= (isset($token)?'&t='.$token:'').(isset($_GET['dir'])?'&dir='.$_GET['dir']:'').(isset($_GET['file'])?'&file='.$_GET['file']:'');
+ $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
+ $tmpl->assign('fileTarget', basename($linkItem['file_target']));
+ $urlLinkIdentifiers= (isset($token)?'&t='.$token:'')
+ .(isset($_GET['dir'])?'&dir='.$_GET['dir']:'')
+ .(isset($_GET['file'])?'&file='.$_GET['file']:'');
// Show file list
- if (OC_Filesystem::is_dir($path)) {
+ if (\OC\Files\Filesystem::is_dir($path)) {
+ $tmpl->assign('dir', $getPath);
+
OCP\Util::addStyle('files', 'files');
OCP\Util::addScript('files', 'files');
OCP\Util::addScript('files', 'filelist');
+ OCP\Util::addscript('files', 'keyboardshortcuts');
$files = array();
$rootLength = strlen($basePath) + 1;
- foreach (OC_Files::getDirectoryContent($path) as $i) {
+ foreach (\OC\Files\Filesystem::getDirectoryContent($path) as $i) {
$i['date'] = OCP\Util::formatDate($i['mtime']);
if ($i['type'] == 'file') {
$fileinfo = pathinfo($i['name']);
$i['basename'] = $fileinfo['filename'];
- $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
- }
- $i['directory'] = '/'.substr($i['directory'], $rootLength);
- if ($i['directory'] == '/') {
- $i['directory'] = '';
+ if (!empty($fileinfo['extension'])) {
+ $i['extension'] = '.' . $fileinfo['extension'];
+ } else {
+ $i['extension'] = '';
+ }
}
+ $i['directory'] = $getPath;
$i['permissions'] = OCP\PERMISSION_READ;
$files[] = $i;
}
+ usort($files, "fileCmp");
+
// Make breadcrumb
$breadcrumb = array();
$pathtohere = '';
-
- //add base breadcrumb
- $breadcrumb[] = array('dir' => '/', 'name' => basename($basePath));
-
- //add subdir breadcrumbs
- foreach (explode('/', urldecode($getPath)) as $i) {
+ foreach (explode('/', $getPath) as $i) {
if ($i != '') {
- $pathtohere .= '/'.$i;
+ $pathtohere .= '/' . $i;
$breadcrumb[] = array('dir' => $pathtohere, 'name' => $i);
}
}
-
$list = new OCP\Template('files', 'part.list', '');
$list->assign('files', $files, false);
- $list->assign('publicListView', true);
- $list->assign('baseURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&path=', false);
- $list->assign('downloadURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&download&path=', false);
- $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '' );
+ $list->assign('disableSharing', true);
+ $list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false);
+ $list->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=', false);
+ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
- $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&path=', false);
+ $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false);
$folder = new OCP\Template('files', 'index', '');
$folder->assign('fileList', $list->fetchPage(), false);
$folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
- $folder->assign('dir', basename($dir));
+ $folder->assign('dir', $getPath);
$folder->assign('isCreatable', false);
$folder->assign('permissions', 0);
$folder->assign('files', $files);
$folder->assign('uploadMaxFilesize', 0);
$folder->assign('uploadMaxHumanFilesize', 0);
$folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ $folder->assign('usedSpacePercent', 0);
$tmpl->assign('folder', $folder->fetchPage(), false);
$tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath));
} else {
+ $tmpl->assign('dir', $dir);
+
// Show file preview if viewer is available
if ($type == 'file') {
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&download');
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download');
} else {
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files').$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
+ .$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
}
}
$tmpl->printPage();
@@ -278,3 +209,4 @@ if ($linkItem) {
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
$tmpl->printPage();
+
diff --git a/apps/files_sharing/templates/authenticate.php b/apps/files_sharing/templates/authenticate.php
index 9695caebf18..6bce6857ac8 100644
--- a/apps/files_sharing/templates/authenticate.php
+++ b/apps/files_sharing/templates/authenticate.php
@@ -1,8 +1,8 @@
<form action="<?php echo $_['URL']; ?>" method="post">
<fieldset>
- <p>
+ <p class="infield">
<label for="password" class="infield"><?php echo $l->t('Password'); ?></label>
- <input type="password" name="password" id="password" value="" />
+ <input type="password" name="password" id="password" value="" autofocus />
<input type="submit" value="<?php echo $l->t('Submit'); ?>" />
</p>
</fieldset>
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 647e1e08a31..7776fd63b3c 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -1,11 +1,3 @@
-<script type="text/javascript">
- <?php if ( array_key_exists('publicListView', $_) && $_['publicListView'] == true ) {
- echo "var publicListView = true;";
- } else {
- echo "var publicListView = false;";
- }
- ?>
-</script>
<input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir">
<input type="hidden" name="downloadURL" value="<?php echo $_['downloadURL'] ?>" id="downloadURL">
<input type="hidden" name="filename" value="<?php echo $_['filename'] ?>" id="filename">
@@ -14,9 +6,9 @@
<a href="<?php echo link_to('', 'index.php'); ?>" title="" id="owncloud"><img class="svg" src="<?php echo image_path('', 'logo-wide.svg'); ?>" alt="ownCloud" /></a>
<div class="header-right">
<?php if (isset($_['folder'])): ?>
- <span id="details"><?php echo $l->t('%s shared the folder %s with you', array($_['uidOwner'], $_['filename'])) ?></span>
+ <span id="details"><?php echo $l->t('%s shared the folder %s with you', array($_['displayName'], $_['fileTarget'])) ?></span>
<?php else: ?>
- <span id="details"><?php echo $l->t('%s shared the file %s with you', array($_['uidOwner'], $_['filename'])) ?></span>
+ <span id="details"><?php echo $l->t('%s shared the file %s with you', array($_['displayName'], $_['fileTarget'])) ?></span>
<?php endif; ?>
<?php if (!isset($_['folder']) || $_['allowZipDownload']): ?>
<a href="<?php echo $_['downloadURL']; ?>" class="button" id="download"><img class="svg" alt="Download" src="<?php echo OCP\image_path("core", "actions/download.svg"); ?>" /><?php echo $l->t('Download')?></a>
@@ -34,7 +26,7 @@
<?php endif; ?>
<ul id="noPreview">
<li class="error">
- <?php echo $l->t('No preview available for').' '.$_['filename']; ?><br />
+ <?php echo $l->t('No preview available for').' '.$_['fileTarget']; ?><br />
<a href="<?php echo $_['downloadURL']; ?>" id="download"><img class="svg" alt="Download" src="<?php echo OCP\image_path("core", "actions/download.svg"); ?>" /><?php echo $l->t('Download')?></a>
</li>
</ul>
diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php
new file mode 100644
index 00000000000..7a6bd1342ea
--- /dev/null
+++ b/apps/files_trashbin/ajax/delete.php
@@ -0,0 +1,24 @@
+<?php
+
+OCP\JSON::checkLoggedIn();
+OCP\JSON::callCheck();
+
+$file = $_REQUEST['file'];
+
+$path_parts = pathinfo($file);
+if ($path_parts['dirname'] == '.') {
+ $delimiter = strrpos($file, '.d');
+ $filename = substr($file, 0, $delimiter);
+ $timestamp = substr($file, $delimiter+2);
+} else {
+ $filename = $file;
+ $timestamp = null;
+}
+
+if (OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp)) {
+ OCP\JSON::success(array("data" => array("filename" => $file)));
+} else {
+ $l = OC_L10N::get('files_trashbin');
+ OCP\JSON::error(array("data" => array("message" => $l->t("Couldn't delete %s permanently", array($file)))));
+}
+
diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php
new file mode 100644
index 00000000000..cc010979c51
--- /dev/null
+++ b/apps/files_trashbin/ajax/undelete.php
@@ -0,0 +1,46 @@
+<?php
+
+OCP\JSON::checkLoggedIn();
+OCP\JSON::callCheck();
+
+$files = $_REQUEST['files'];
+$dirlisting = $_REQUEST['dirlisting'];
+$list = explode(';', $files);
+
+$error = array();
+$success = array();
+
+$i = 0;
+foreach ($list as $file) {
+ if ( $dirlisting=='0') {
+ $delimiter = strrpos($file, '.d');
+ $filename = substr($file, 0, $delimiter);
+ $timestamp = substr($file, $delimiter+2);
+ } else {
+ $path_parts = pathinfo($file);
+ $filename = $path_parts['basename'];
+ $timestamp = null;
+ }
+
+ if ( !OCA\Files_Trashbin\Trashbin::restore($file, $filename, $timestamp) ) {
+ $error[] = $filename;
+ } else {
+ $success[$i]['filename'] = $file;
+ $success[$i]['timestamp'] = $timestamp;
+ $i++;
+ }
+
+}
+
+if ( $error ) {
+ $filelist = '';
+ foreach ( $error as $e ) {
+ $filelist .= $e.', ';
+ }
+ $l = OC_L10N::get('files_trashbin');
+ $message = $l->t("Couldn't restore %s", array(rtrim($filelist,', ')));
+ OCP\JSON::error(array("data" => array("message" => $message,
+ "success" => $success, "error" => $error)));
+} else {
+ OCP\JSON::success(array("data" => array("success" => $success)));
+}
diff --git a/apps/files_trashbin/appinfo/app.php b/apps/files_trashbin/appinfo/app.php
new file mode 100644
index 00000000000..b1a15cd13d1
--- /dev/null
+++ b/apps/files_trashbin/appinfo/app.php
@@ -0,0 +1,7 @@
+<?php
+
+OC::$CLASSPATH['OCA\Files_Trashbin\Hooks'] = 'apps/files_trashbin/lib/hooks.php';
+OC::$CLASSPATH['OCA\Files_Trashbin\Trashbin'] = 'apps/files_trashbin/lib/trash.php';
+
+
+OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA\Files_Trashbin\Hooks", "remove_hook");
diff --git a/apps/files_trashbin/appinfo/database.xml b/apps/files_trashbin/appinfo/database.xml
new file mode 100644
index 00000000000..1144a1c9a97
--- /dev/null
+++ b/apps/files_trashbin/appinfo/database.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<database>
+
+ <name>*dbname*</name>
+ <create>true</create>
+ <overwrite>false</overwrite>
+
+ <charset>utf8</charset>
+
+ <table>
+
+ <name>*dbprefix*files_trash</name>
+
+ <declaration>
+
+ <field>
+ <name>id</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>50</length>
+ </field>
+
+ <field>
+ <name>user</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>50</length>
+ </field>
+
+ <field>
+ <name>timestamp</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>12</length>
+ </field>
+
+ <field>
+ <name>location</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>200</length>
+ </field>
+
+ <field>
+ <name>type</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>mime</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>30</length>
+ </field>
+
+ <index>
+ <name>id_index</name>
+ <field>
+ <name>id</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ <index>
+ <name>timestamp_index</name>
+ <field>
+ <name>timestamp</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ <index>
+ <name>user_index</name>
+ <field>
+ <name>user</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+</database>
diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml
new file mode 100644
index 00000000000..9b486126361
--- /dev/null
+++ b/apps/files_trashbin/appinfo/info.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<info>
+ <id>files_trashbin</id>
+ <name>Trash</name>
+ <description>Trash bin</description>
+ <licence>AGPL</licence>
+ <author>Bjoern Schiessle</author>
+ <shipped>true</shipped>
+ <require>4.9</require>
+ <default_enable/>
+ <types>
+ <filesystem/>
+ </types>
+</info>
diff --git a/apps/files_trashbin/appinfo/version b/apps/files_trashbin/appinfo/version
new file mode 100644
index 00000000000..49d59571fbf
--- /dev/null
+++ b/apps/files_trashbin/appinfo/version
@@ -0,0 +1 @@
+0.1
diff --git a/apps/files_trashbin/download.php b/apps/files_trashbin/download.php
new file mode 100644
index 00000000000..665697dca5f
--- /dev/null
+++ b/apps/files_trashbin/download.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+* ownCloud - trash bin
+*
+* @author Bjoern Schiessle
+* @copyright 2013 Bjoern Schiessle schiessle@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/>.
+*
+*/
+
+// Check if we are a user
+OCP\User::checkLoggedIn();
+
+$filename = $_GET["file"];
+
+$view = new OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin');
+
+if(!$view->file_exists($filename)) {
+ header("HTTP/1.0 404 Not Found");
+ $tmpl = new OCP\Template( '', '404', 'guest' );
+ $tmpl->assign('file', $filename);
+ $tmpl->printPage();
+ exit;
+}
+
+$ftype=$view->getMimeType( $filename );
+
+header('Content-Type:'.$ftype);if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
+ header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' );
+} else {
+ header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) )
+ . '; filename="' . rawurlencode( basename($filename) ) . '"' );
+}
+OCP\Response::disableCaching();
+header('Content-Length: '. $view->filesize($filename));
+
+OC_Util::obEnd();
+$view->readfile( $filename );
diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php
new file mode 100644
index 00000000000..1aceb8ffefd
--- /dev/null
+++ b/apps/files_trashbin/index.php
@@ -0,0 +1,100 @@
+<?php
+
+// Check if we are a user
+OCP\User::checkLoggedIn();
+
+OCP\Util::addScript('files_trashbin', 'trash');
+OCP\Util::addScript('files_trashbin', 'disableDefaultActions');
+OCP\Util::addScript('files', 'fileactions');
+$tmpl = new OCP\Template('files_trashbin', 'index', 'user');
+
+$user = \OCP\User::getUser();
+$view = new OC_Filesystemview('/'.$user.'/files_trashbin');
+
+OCP\Util::addStyle('files', 'files');
+OCP\Util::addScript('files', 'filelist');
+
+$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
+
+if ($dir) {
+ $dirlisting = true;
+ $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin');
+ $fullpath = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($dir);
+ $dirContent = opendir($fullpath);
+ $i = 0;
+ while($entryName = readdir($dirContent)) {
+ if ( $entryName != '.' && $entryName != '..' ) {
+ $pos = strpos($dir.'/', '/', 1);
+ $tmp = substr($dir, 0, $pos);
+ $pos = strrpos($tmp, '.d');
+ $timestamp = substr($tmp,$pos+2);
+ $result[] = array(
+ 'id' => $entryName,
+ 'timestamp' => $timestamp,
+ 'mime' => $view->getMimeType($dir.'/'.$entryName),
+ 'type' => $view->is_dir($dir.'/'.$entryName) ? 'dir' : 'file',
+ 'location' => $dir,
+ );
+ }
+ }
+ closedir($fullpath);
+
+} else {
+ $dirlisting = false;
+ $query = \OC_DB::prepare('SELECT id,location,timestamp,type,mime FROM *PREFIX*files_trash WHERE user=?');
+ $result = $query->execute(array($user))->fetchAll();
+}
+
+$files = array();
+foreach ($result as $r) {
+ $i = array();
+ $i['name'] = $r['id'];
+ $i['date'] = OCP\Util::formatDate($r['timestamp']);
+ $i['timestamp'] = $r['timestamp'];
+ $i['mimetype'] = $r['mime'];
+ $i['type'] = $r['type'];
+ if ($i['type'] == 'file') {
+ $fileinfo = pathinfo($r['id']);
+ $i['basename'] = $fileinfo['filename'];
+ $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
+ }
+ $i['directory'] = $r['location'];
+ if ($i['directory'] == '/') {
+ $i['directory'] = '';
+ }
+ $i['permissions'] = OCP\PERMISSION_READ;
+ $files[] = $i;
+}
+
+// Make breadcrumb
+$pathtohere = '';
+$breadcrumb = array();
+foreach (explode('/', $dir) as $i) {
+ if ($i != '') {
+ if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) {
+ $name = $match[1];
+ } else {
+ $name = $i;
+ }
+ $pathtohere .= '/' . $i;
+ $breadcrumb[] = array('dir' => $pathtohere, 'name' => $name);
+ }
+}
+
+$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
+$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
+$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir=', false);
+
+$list = new OCP\Template('files_trashbin', 'part.list', '');
+$list->assign('files', $files, false);
+$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$dir, false);
+$list->assign('downloadURL', OCP\Util::linkTo('files_trashbin', 'download.php') . '?file='.$dir, false);
+$list->assign('disableSharing', true);
+$list->assign('dirlisting', $dirlisting);
+$list->assign('disableDownloadActions', true);
+$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
+$tmpl->assign('fileList', $list->fetchPage(), false);
+$tmpl->assign('files', $files);
+$tmpl->assign('dir', OC_Filesystem::normalizePath($view->getAbsolutePath()));
+
+$tmpl->printPage();
diff --git a/apps/files_trashbin/js/disableDefaultActions.js b/apps/files_trashbin/js/disableDefaultActions.js
new file mode 100644
index 00000000000..27c3e13db4d
--- /dev/null
+++ b/apps/files_trashbin/js/disableDefaultActions.js
@@ -0,0 +1,4 @@
+/* disable download and sharing actions */
+var disableDownloadActions = true;
+var disableSharing = true;
+var trashBinApp = true; \ No newline at end of file
diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js
new file mode 100644
index 00000000000..6c810e4c2bd
--- /dev/null
+++ b/apps/files_trashbin/js/trash.js
@@ -0,0 +1,183 @@
+
+$(document).ready(function() {
+
+ if (typeof FileActions !== 'undefined') {
+ FileActions.register('all', 'Restore', OC.PERMISSION_READ, OC.imagePath('core', 'actions/undelete.png'), function(filename) {
+ var tr=$('tr').filterAttr('data-file', filename);
+ var spinner = '<img class="move2trash" title="'+t('files_trashbin', 'perform restore operation')+'" src="'+ OC.imagePath('core', 'loader.gif') +'"></a>';
+ var undeleteAction = $('tr').filterAttr('data-file',filename).children("td.date");
+ undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner;
+ $.post(OC.filePath('files_trashbin','ajax','undelete.php'),
+ {files:tr.attr('data-file'), dirlisting:tr.attr('data-dirlisting') },
+ function(result){
+ for (var i = 0; i < result.data.success.length; i++) {
+ var row = document.getElementById(result.data.success[i].filename);
+ row.parentNode.removeChild(row);
+ }
+ if (result.status != 'success') {
+ OC.dialogs.alert(result.data.message, 'Error');
+ }
+ });
+
+ });
+ };
+
+ FileActions.register('all', 'Delete', OC.PERMISSION_READ, function () {
+ return OC.imagePath('core', 'actions/delete');
+ }, function (filename) {
+ $('.tipsy').remove();
+
+ var tr=$('tr').filterAttr('data-file', filename);
+ var deleteAction = $('tr').filterAttr('data-file',filename).children("td.date").children(".action.delete");
+ var oldHTML = deleteAction[0].outerHTML;
+ var newHTML = '<img class="move2trash" data-action="Delete" title="'+t('files', 'delete file permanently')+'" src="'+ OC.imagePath('core', 'loading.gif') +'"></a>';
+ deleteAction[0].outerHTML = newHTML;
+
+ $.post(OC.filePath('files_trashbin','ajax','delete.php'),
+ {file:tr.attr('data-file') },
+ function(result){
+ if ( result.status == 'success' ) {
+ var row = document.getElementById(result.data.filename);
+ row.parentNode.removeChild(row);
+ } else {
+ deleteAction[0].outerHTML = oldHTML;
+ OC.dialogs.alert(result.data.message, 'Error');
+ }
+ });
+
+ });
+
+ // Sets the select_all checkbox behaviour :
+ $('#select_all').click(function() {
+ if($(this).attr('checked')){
+ // Check all
+ $('td.filename input:checkbox').attr('checked', true);
+ $('td.filename input:checkbox').parent().parent().addClass('selected');
+ }else{
+ // Uncheck all
+ $('td.filename input:checkbox').attr('checked', false);
+ $('td.filename input:checkbox').parent().parent().removeClass('selected');
+ }
+ processSelection();
+ });
+
+ $('td.filename input:checkbox').live('change',function(event) {
+ if (event.shiftKey) {
+ var last = $(lastChecked).parent().parent().prevAll().length;
+ var first = $(this).parent().parent().prevAll().length;
+ var start = Math.min(first, last);
+ var end = Math.max(first, last);
+ var rows = $(this).parent().parent().parent().children('tr');
+ for (var i = start; i < end; i++) {
+ $(rows).each(function(index) {
+ if (index == i) {
+ var checkbox = $(this).children().children('input:checkbox');
+ $(checkbox).attr('checked', 'checked');
+ $(checkbox).parent().parent().addClass('selected');
+ }
+ });
+ }
+ }
+ var selectedCount=$('td.filename input:checkbox:checked').length;
+ $(this).parent().parent().toggleClass('selected');
+ if(!$(this).attr('checked')){
+ $('#select_all').attr('checked',false);
+ }else{
+ if(selectedCount==$('td.filename input:checkbox').length){
+ $('#select_all').attr('checked',true);
+ }
+ }
+ processSelection();
+ });
+
+ $('.undelete').click('click',function(event) {
+ var spinner = '<img class="move2trash" title="'+t('files_trashbin', 'perform restore operation')+'" src="'+ OC.imagePath('core', 'loader.gif') +'"></a>';
+ var files=getSelectedFiles('file');
+ var fileslist=files.join(';');
+ var dirlisting=getSelectedFiles('dirlisting')[0];
+
+ for (var i in files) {
+ var undeleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date");
+ undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner;
+ }
+
+ $.post(OC.filePath('files_trashbin','ajax','undelete.php'),
+ {files:fileslist, dirlisting:dirlisting},
+ function(result){
+ for (var i = 0; i < result.data.success.length; i++) {
+ var row = document.getElementById(result.data.success[i].filename);
+ row.parentNode.removeChild(row);
+ }
+ if (result.status != 'success') {
+ OC.dialogs.alert(result.data.message, 'Error');
+ }
+ });
+ });
+
+
+});
+
+function processSelection(){
+ var selected=getSelectedFiles();
+ var selectedFiles=selected.filter(function(el){return el.type=='file'});
+ var selectedFolders=selected.filter(function(el){return el.type=='dir'});
+ if(selectedFiles.length==0 && selectedFolders.length==0) {
+ $('#headerName>span.name').text(t('files','Name'));
+ $('#modified').text(t('files','Deleted'));
+ $('table').removeClass('multiselect');
+ $('.selectedActions').hide();
+ }
+ else {
+ $('.selectedActions').show();
+ var selection='';
+ if(selectedFolders.length>0){
+ if(selectedFolders.length==1){
+ selection+=t('files','1 folder');
+ }else{
+ selection+=t('files','{count} folders',{count: selectedFolders.length});
+ }
+ if(selectedFiles.length>0){
+ selection+=' & ';
+ }
+ }
+ if(selectedFiles.length>0){
+ if(selectedFiles.length==1){
+ selection+=t('files','1 file');
+ }else{
+ selection+=t('files','{count} files',{count: selectedFiles.length});
+ }
+ }
+ $('#headerName>span.name').text(selection);
+ $('#modified').text('');
+ $('table').addClass('multiselect');
+ }
+}
+
+/**
+ * @brief get a list of selected files
+ * @param string property (option) the property of the file requested
+ * @return array
+ *
+ * possible values for property: name, mime, size and type
+ * if property is set, an array with that property for each file is returnd
+ * if it's ommited an array of objects with all properties is returned
+ */
+function getSelectedFiles(property){
+ var elements=$('td.filename input:checkbox:checked').parent().parent();
+ var files=[];
+ elements.each(function(i,element){
+ var file={
+ name:$(element).attr('data-filename'),
+ file:$(element).attr('data-file'),
+ timestamp:$(element).attr('data-timestamp'),
+ type:$(element).attr('data-type'),
+ dirlisting:$(element).attr('data-dirlisting')
+ };
+ if(property){
+ files.push(file[property]);
+ }else{
+ files.push(file);
+ }
+ });
+ return files;
+} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/.gitkeep b/apps/files_trashbin/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/files_trashbin/l10n/.gitkeep
diff --git a/apps/files_trashbin/l10n/ar.php b/apps/files_trashbin/l10n/ar.php
new file mode 100644
index 00000000000..e38130fe2d3
--- /dev/null
+++ b/apps/files_trashbin/l10n/ar.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "اسم"
+);
diff --git a/apps/files_trashbin/l10n/bg_BG.php b/apps/files_trashbin/l10n/bg_BG.php
new file mode 100644
index 00000000000..2e6309c22b5
--- /dev/null
+++ b/apps/files_trashbin/l10n/bg_BG.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Име",
+"Restore" => "ВъзтановÑване"
+);
diff --git a/apps/files_trashbin/l10n/bn_BD.php b/apps/files_trashbin/l10n/bn_BD.php
new file mode 100644
index 00000000000..c669eff7e1f
--- /dev/null
+++ b/apps/files_trashbin/l10n/bn_BD.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "রাম",
+"1 folder" => "১টি ফোলà§à¦¡à¦¾à¦°",
+"{count} folders" => "{count} টি ফোলà§à¦¡à¦¾à¦°",
+"1 file" => "১টি ফাইল",
+"{count} files" => "{count} টি ফাইল"
+);
diff --git a/apps/files_trashbin/l10n/ca.php b/apps/files_trashbin/l10n/ca.php
new file mode 100644
index 00000000000..803b0c81ef0
--- /dev/null
+++ b/apps/files_trashbin/l10n/ca.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "No s'ha pogut esborrar permanentment %s",
+"Couldn't restore %s" => "No s'ha pogut restaurar %s",
+"perform restore operation" => "executa l'operació de restauració",
+"delete file permanently" => "esborra el fitxer permanentment",
+"Name" => "Nom",
+"Deleted" => "Eliminat",
+"1 folder" => "1 carpeta",
+"{count} folders" => "{count} carpetes",
+"1 file" => "1 fitxer",
+"{count} files" => "{count} fitxers",
+"Nothing in here. Your trash bin is empty!" => "La paperera està buida!",
+"Restore" => "Recupera"
+);
diff --git a/apps/files_trashbin/l10n/cs_CZ.php b/apps/files_trashbin/l10n/cs_CZ.php
new file mode 100644
index 00000000000..eeb27784d3e
--- /dev/null
+++ b/apps/files_trashbin/l10n/cs_CZ.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Nelze trvale odstranit %s",
+"Couldn't restore %s" => "Nelze obnovit %s",
+"perform restore operation" => "provést obnovu",
+"delete file permanently" => "trvale odstranit soubor",
+"Name" => "Název",
+"Deleted" => "Smazáno",
+"1 folder" => "1 složka",
+"{count} folders" => "{count} složky",
+"1 file" => "1 soubor",
+"{count} files" => "{count} soubory",
+"Nothing in here. Your trash bin is empty!" => "Žádný obsah. Váš koš je prázdný.",
+"Restore" => "Obnovit"
+);
diff --git a/apps/files_trashbin/l10n/da.php b/apps/files_trashbin/l10n/da.php
new file mode 100644
index 00000000000..3343b6fc8f6
--- /dev/null
+++ b/apps/files_trashbin/l10n/da.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Navn",
+"1 folder" => "1 mappe",
+"{count} folders" => "{count} mapper",
+"1 file" => "1 fil",
+"{count} files" => "{count} filer",
+"Restore" => "Gendan"
+);
diff --git a/apps/files_trashbin/l10n/de.php b/apps/files_trashbin/l10n/de.php
new file mode 100644
index 00000000000..45dfb9d6057
--- /dev/null
+++ b/apps/files_trashbin/l10n/de.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"perform restore operation" => "Wiederherstellung ausführen",
+"Name" => "Name",
+"Deleted" => "gelöscht",
+"1 folder" => "1 Ordner",
+"{count} folders" => "{count} Ordner",
+"1 file" => "1 Datei",
+"{count} files" => "{count} Dateien",
+"Nothing in here. Your trash bin is empty!" => "Nichts zu löschen, der Papierkorb ist leer!",
+"Restore" => "Wiederherstellen"
+);
diff --git a/apps/files_trashbin/l10n/de_DE.php b/apps/files_trashbin/l10n/de_DE.php
new file mode 100644
index 00000000000..e293bf0b2eb
--- /dev/null
+++ b/apps/files_trashbin/l10n/de_DE.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"perform restore operation" => "Führe die Wiederherstellung aus",
+"delete file permanently" => "Datei entgültig löschen",
+"Name" => "Name",
+"Deleted" => "Gelöscht",
+"1 folder" => "1 Ordner",
+"{count} folders" => "{count} Ordner",
+"1 file" => "1 Datei",
+"{count} files" => "{count} Dateien",
+"Nothing in here. Your trash bin is empty!" => "Nichts zu löschen, Ihr Papierkorb ist leer!",
+"Restore" => "Wiederherstellen"
+);
diff --git a/apps/files_trashbin/l10n/el.php b/apps/files_trashbin/l10n/el.php
new file mode 100644
index 00000000000..bc3c2350da6
--- /dev/null
+++ b/apps/files_trashbin/l10n/el.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "ΑδÏνατη η μόνιμη διαγÏαφή του %s",
+"Couldn't restore %s" => "Αδυναμία επαναφοÏάς %s",
+"perform restore operation" => "εκτέλεση λειτουÏγία επαναφοÏάς",
+"delete file permanently" => "μόνιμη διαγÏαφή αÏχείου",
+"Name" => "Όνομα",
+"Deleted" => "ΔιαγÏάφηκε",
+"1 folder" => "1 φάκελος",
+"{count} folders" => "{count} φάκελοι",
+"1 file" => "1 αÏχείο",
+"{count} files" => "{count} αÏχεία",
+"Nothing in here. Your trash bin is empty!" => "Δεν υπάÏχει τίποτα εδώ. Ο κάδος σας είναι άδειος!",
+"Restore" => "ΕπαναφοÏά"
+);
diff --git a/apps/files_trashbin/l10n/eo.php b/apps/files_trashbin/l10n/eo.php
new file mode 100644
index 00000000000..f357e3c10c2
--- /dev/null
+++ b/apps/files_trashbin/l10n/eo.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nomo",
+"1 folder" => "1 dosierujo",
+"{count} folders" => "{count} dosierujoj",
+"1 file" => "1 dosiero",
+"{count} files" => "{count} dosierujoj",
+"Restore" => "RestaÅ­ri"
+);
diff --git a/apps/files_trashbin/l10n/es.php b/apps/files_trashbin/l10n/es.php
new file mode 100644
index 00000000000..c14b9776473
--- /dev/null
+++ b/apps/files_trashbin/l10n/es.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "No se puede eliminar %s permanentemente",
+"Couldn't restore %s" => "No se puede restaurar %s",
+"perform restore operation" => "Restaurar",
+"delete file permanently" => "Eliminar archivo permanentemente",
+"Name" => "Nombre",
+"Deleted" => "Eliminado",
+"1 folder" => "1 carpeta",
+"{count} folders" => "{count} carpetas",
+"1 file" => "1 archivo",
+"{count} files" => "{count} archivos",
+"Nothing in here. Your trash bin is empty!" => "Nada aqui. La papelera esta vacia!",
+"Restore" => "Recuperar"
+);
diff --git a/apps/files_trashbin/l10n/es_AR.php b/apps/files_trashbin/l10n/es_AR.php
new file mode 100644
index 00000000000..d2c5f304284
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_AR.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nombre",
+"1 folder" => "1 directorio",
+"{count} folders" => "{count} directorios",
+"1 file" => "1 archivo",
+"{count} files" => "{count} archivos",
+"Restore" => "Recuperar"
+);
diff --git a/apps/files_trashbin/l10n/et_EE.php b/apps/files_trashbin/l10n/et_EE.php
new file mode 100644
index 00000000000..4f46f388020
--- /dev/null
+++ b/apps/files_trashbin/l10n/et_EE.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nimi",
+"1 folder" => "1 kaust",
+"{count} folders" => "{count} kausta",
+"1 file" => "1 fail",
+"{count} files" => "{count} faili"
+);
diff --git a/apps/files_trashbin/l10n/eu.php b/apps/files_trashbin/l10n/eu.php
new file mode 100644
index 00000000000..a1e3ca53e61
--- /dev/null
+++ b/apps/files_trashbin/l10n/eu.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Izena",
+"1 folder" => "karpeta bat",
+"{count} folders" => "{count} karpeta",
+"1 file" => "fitxategi bat",
+"{count} files" => "{count} fitxategi",
+"Restore" => "Berrezarri"
+);
diff --git a/apps/files_trashbin/l10n/fa.php b/apps/files_trashbin/l10n/fa.php
new file mode 100644
index 00000000000..487d1657985
--- /dev/null
+++ b/apps/files_trashbin/l10n/fa.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Name" => "نام",
+"1 folder" => "1 پوشه",
+"{count} folders" => "{ شمار} پوشه ها",
+"1 file" => "1 پرونده",
+"{count} files" => "{ شمار } ÙØ§ÛŒÙ„ ها",
+"Restore" => "بازیابی"
+);
diff --git a/apps/files_trashbin/l10n/fi_FI.php b/apps/files_trashbin/l10n/fi_FI.php
new file mode 100644
index 00000000000..de25027f9a8
--- /dev/null
+++ b/apps/files_trashbin/l10n/fi_FI.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"perform restore operation" => "suorita palautustoiminto",
+"Name" => "Nimi",
+"Deleted" => "Poistettu",
+"1 folder" => "1 kansio",
+"{count} folders" => "{count} kansiota",
+"1 file" => "1 tiedosto",
+"{count} files" => "{count} tiedostoa",
+"Nothing in here. Your trash bin is empty!" => "Tyhjää täynnä! Roskakorissa ei ole mitään.",
+"Restore" => "Palauta"
+);
diff --git a/apps/files_trashbin/l10n/fr.php b/apps/files_trashbin/l10n/fr.php
new file mode 100644
index 00000000000..609b2fa9bd7
--- /dev/null
+++ b/apps/files_trashbin/l10n/fr.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Impossible d'effacer %s de façon permanente",
+"Couldn't restore %s" => "Impossible de restaurer %s",
+"perform restore operation" => "effectuer l'opération de restauration",
+"delete file permanently" => "effacer définitivement le fichier",
+"Name" => "Nom",
+"Deleted" => "Effacé",
+"1 folder" => "1 dossier",
+"{count} folders" => "{count} dossiers",
+"1 file" => "1 fichier",
+"{count} files" => "{count} fichiers",
+"Nothing in here. Your trash bin is empty!" => "Il n'y a rien ici. Votre corbeille est vide !",
+"Restore" => "Restaurer"
+);
diff --git a/apps/files_trashbin/l10n/gl.php b/apps/files_trashbin/l10n/gl.php
new file mode 100644
index 00000000000..ad9f6802e66
--- /dev/null
+++ b/apps/files_trashbin/l10n/gl.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Non foi posíbel eliminar %s permanente",
+"Couldn't restore %s" => "Non foi posíbel restaurar %s",
+"perform restore operation" => "realizar a operación de restauración",
+"delete file permanently" => "eliminar o ficheiro permanentemente",
+"Name" => "Nome",
+"Deleted" => "Eliminado",
+"1 folder" => "1 cartafol",
+"{count} folders" => "{count} cartafoles",
+"1 file" => "1 ficheiro",
+"{count} files" => "{count} ficheiros",
+"Nothing in here. Your trash bin is empty!" => "Aquí non hai nada. O cesto do lixo está baleiro!",
+"Restore" => "Restablecer"
+);
diff --git a/apps/files_trashbin/l10n/he.php b/apps/files_trashbin/l10n/he.php
new file mode 100644
index 00000000000..d026add5d75
--- /dev/null
+++ b/apps/files_trashbin/l10n/he.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "ש×",
+"1 folder" => "תיקייה ×חת",
+"{count} folders" => "{count} תיקיות",
+"1 file" => "קובץ ×חד",
+"{count} files" => "{count} קבצי×"
+);
diff --git a/apps/files_trashbin/l10n/hr.php b/apps/files_trashbin/l10n/hr.php
new file mode 100644
index 00000000000..52255c7429a
--- /dev/null
+++ b/apps/files_trashbin/l10n/hr.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Ime"
+);
diff --git a/apps/files_trashbin/l10n/hu_HU.php b/apps/files_trashbin/l10n/hu_HU.php
new file mode 100644
index 00000000000..c4e2b5e2125
--- /dev/null
+++ b/apps/files_trashbin/l10n/hu_HU.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Név",
+"1 folder" => "1 mappa",
+"{count} folders" => "{count} mappa",
+"1 file" => "1 fájl",
+"{count} files" => "{count} fájl",
+"Restore" => "Visszaállítás"
+);
diff --git a/apps/files_trashbin/l10n/ia.php b/apps/files_trashbin/l10n/ia.php
new file mode 100644
index 00000000000..c2581f3de17
--- /dev/null
+++ b/apps/files_trashbin/l10n/ia.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nomine"
+);
diff --git a/apps/files_trashbin/l10n/id.php b/apps/files_trashbin/l10n/id.php
new file mode 100644
index 00000000000..1a14d8b7c21
--- /dev/null
+++ b/apps/files_trashbin/l10n/id.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "nama"
+);
diff --git a/apps/files_trashbin/l10n/is.php b/apps/files_trashbin/l10n/is.php
new file mode 100644
index 00000000000..416f641a8ef
--- /dev/null
+++ b/apps/files_trashbin/l10n/is.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nafn",
+"1 folder" => "1 mappa",
+"{count} folders" => "{count} möppur",
+"1 file" => "1 skrá",
+"{count} files" => "{count} skrár"
+);
diff --git a/apps/files_trashbin/l10n/it.php b/apps/files_trashbin/l10n/it.php
new file mode 100644
index 00000000000..8627682d088
--- /dev/null
+++ b/apps/files_trashbin/l10n/it.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Impossibile eliminare %s definitivamente",
+"Couldn't restore %s" => "Impossibile ripristinare %s",
+"perform restore operation" => "esegui operazione di ripristino",
+"delete file permanently" => "elimina il file definitivamente",
+"Name" => "Nome",
+"Deleted" => "Eliminati",
+"1 folder" => "1 cartella",
+"{count} folders" => "{count} cartelle",
+"1 file" => "1 file",
+"{count} files" => "{count} file",
+"Nothing in here. Your trash bin is empty!" => "Qui non c'è niente. Il tuo cestino è vuoto.",
+"Restore" => "Ripristina"
+);
diff --git a/apps/files_trashbin/l10n/ja_JP.php b/apps/files_trashbin/l10n/ja_JP.php
new file mode 100644
index 00000000000..2bccf3f3bd5
--- /dev/null
+++ b/apps/files_trashbin/l10n/ja_JP.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "%s を完全ã«å‰Šé™¤å‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸ",
+"Couldn't restore %s" => "%s を復元出æ¥ã¾ã›ã‚“ã§ã—ãŸ",
+"perform restore operation" => "復元æ“作を実行ã™ã‚‹",
+"delete file permanently" => "ファイルを完全ã«å‰Šé™¤ã™ã‚‹",
+"Name" => "åå‰",
+"Deleted" => "削除済ã¿",
+"1 folder" => "1 フォルダ",
+"{count} folders" => "{count} フォルダ",
+"1 file" => "1 ファイル",
+"{count} files" => "{count} ファイル",
+"Nothing in here. Your trash bin is empty!" => "ã“ã“ã«ã¯ä½•ã‚‚ã‚りã¾ã›ã‚“。ゴミ箱ã¯ç©ºã§ã™ï¼",
+"Restore" => "復元"
+);
diff --git a/apps/files_trashbin/l10n/ka_GE.php b/apps/files_trashbin/l10n/ka_GE.php
new file mode 100644
index 00000000000..43dba38f5c7
--- /dev/null
+++ b/apps/files_trashbin/l10n/ka_GE.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "სáƒáƒ®áƒ”ლი",
+"1 folder" => "1 სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე",
+"{count} folders" => "{count} სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე",
+"1 file" => "1 ფáƒáƒ˜áƒšáƒ˜",
+"{count} files" => "{count} ფáƒáƒ˜áƒšáƒ˜"
+);
diff --git a/apps/files_trashbin/l10n/ko.php b/apps/files_trashbin/l10n/ko.php
new file mode 100644
index 00000000000..61acd1276a7
--- /dev/null
+++ b/apps/files_trashbin/l10n/ko.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Name" => "ì´ë¦„",
+"1 folder" => "í´ë” 1ê°œ",
+"{count} folders" => "í´ë” {count}ê°œ",
+"1 file" => "íŒŒì¼ 1ê°œ",
+"{count} files" => "íŒŒì¼ {count}ê°œ",
+"Restore" => "ë³µì›"
+);
diff --git a/apps/files_trashbin/l10n/ku_IQ.php b/apps/files_trashbin/l10n/ku_IQ.php
new file mode 100644
index 00000000000..cbdbe4644d1
--- /dev/null
+++ b/apps/files_trashbin/l10n/ku_IQ.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "ناو"
+);
diff --git a/apps/files_trashbin/l10n/lb.php b/apps/files_trashbin/l10n/lb.php
new file mode 100644
index 00000000000..d1bd7518663
--- /dev/null
+++ b/apps/files_trashbin/l10n/lb.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Numm"
+);
diff --git a/apps/files_trashbin/l10n/lt_LT.php b/apps/files_trashbin/l10n/lt_LT.php
new file mode 100644
index 00000000000..4933e97202f
--- /dev/null
+++ b/apps/files_trashbin/l10n/lt_LT.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Pavadinimas",
+"1 folder" => "1 aplankalas",
+"{count} folders" => "{count} aplankalai",
+"1 file" => "1 failas",
+"{count} files" => "{count} failai"
+);
diff --git a/apps/files_trashbin/l10n/lv.php b/apps/files_trashbin/l10n/lv.php
new file mode 100644
index 00000000000..5ecb99b9892
--- /dev/null
+++ b/apps/files_trashbin/l10n/lv.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "NevarÄ“ja pilnÄ«bÄ izdzÄ“st %s",
+"Couldn't restore %s" => "Nevarēja atjaunot %s",
+"perform restore operation" => "veikt atjaunošanu",
+"delete file permanently" => "dzēst datni pavisam",
+"Name" => "Nosaukums",
+"Deleted" => "Dzēsts",
+"1 folder" => "1 mape",
+"{count} folders" => "{count} mapes",
+"1 file" => "1 datne",
+"{count} files" => "{count} datnes",
+"Nothing in here. Your trash bin is empty!" => "Å eit nekÄ nav. JÅ«su miskaste ir tukÅ¡a!",
+"Restore" => "Atjaunot"
+);
diff --git a/apps/files_trashbin/l10n/mk.php b/apps/files_trashbin/l10n/mk.php
new file mode 100644
index 00000000000..b983c341e8c
--- /dev/null
+++ b/apps/files_trashbin/l10n/mk.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Име",
+"1 folder" => "1 папка",
+"{count} folders" => "{count} папки",
+"1 file" => "1 датотека",
+"{count} files" => "{count} датотеки"
+);
diff --git a/apps/files_trashbin/l10n/ms_MY.php b/apps/files_trashbin/l10n/ms_MY.php
new file mode 100644
index 00000000000..73e97b496e4
--- /dev/null
+++ b/apps/files_trashbin/l10n/ms_MY.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nama"
+);
diff --git a/apps/files_trashbin/l10n/nb_NO.php b/apps/files_trashbin/l10n/nb_NO.php
new file mode 100644
index 00000000000..49364753d13
--- /dev/null
+++ b/apps/files_trashbin/l10n/nb_NO.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Navn",
+"1 folder" => "1 mappe",
+"{count} folders" => "{count} mapper",
+"1 file" => "1 fil",
+"{count} files" => "{count} filer"
+);
diff --git a/apps/files_trashbin/l10n/nl.php b/apps/files_trashbin/l10n/nl.php
new file mode 100644
index 00000000000..a41a5c2fd9c
--- /dev/null
+++ b/apps/files_trashbin/l10n/nl.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"perform restore operation" => "uitvoeren restore operatie",
+"delete file permanently" => "verwijder bestanden definitief",
+"Name" => "Naam",
+"Deleted" => "Verwijderd",
+"1 folder" => "1 map",
+"{count} folders" => "{count} mappen",
+"1 file" => "1 bestand",
+"{count} files" => "{count} bestanden",
+"Nothing in here. Your trash bin is empty!" => "Niets te vinden. Uw prullenbak is leeg!",
+"Restore" => "Herstellen"
+);
diff --git a/apps/files_trashbin/l10n/nn_NO.php b/apps/files_trashbin/l10n/nn_NO.php
new file mode 100644
index 00000000000..be60dabdf01
--- /dev/null
+++ b/apps/files_trashbin/l10n/nn_NO.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Namn"
+);
diff --git a/apps/files_trashbin/l10n/oc.php b/apps/files_trashbin/l10n/oc.php
new file mode 100644
index 00000000000..2c705193c15
--- /dev/null
+++ b/apps/files_trashbin/l10n/oc.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nom"
+);
diff --git a/apps/files_trashbin/l10n/pl.php b/apps/files_trashbin/l10n/pl.php
new file mode 100644
index 00000000000..d2ada4c9466
--- /dev/null
+++ b/apps/files_trashbin/l10n/pl.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nazwa",
+"1 folder" => "1 folder",
+"{count} folders" => "{count} foldery",
+"1 file" => "1 plik",
+"{count} files" => "{count} pliki",
+"Restore" => "Przywróć"
+);
diff --git a/apps/files_trashbin/l10n/pt_BR.php b/apps/files_trashbin/l10n/pt_BR.php
new file mode 100644
index 00000000000..db5737d9238
--- /dev/null
+++ b/apps/files_trashbin/l10n/pt_BR.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"perform restore operation" => "realizar operação de restauração",
+"Name" => "Nome",
+"Deleted" => "Excluído",
+"1 folder" => "1 pasta",
+"{count} folders" => "{count} pastas",
+"1 file" => "1 arquivo",
+"{count} files" => "{count} arquivos",
+"Nothing in here. Your trash bin is empty!" => "Nada aqui. Sua lixeira está vazia!",
+"Restore" => "Restaurar"
+);
diff --git a/apps/files_trashbin/l10n/pt_PT.php b/apps/files_trashbin/l10n/pt_PT.php
new file mode 100644
index 00000000000..978ab452d6e
--- /dev/null
+++ b/apps/files_trashbin/l10n/pt_PT.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Não foi possível eliminar %s de forma permanente",
+"Couldn't restore %s" => "Não foi possível restaurar %s",
+"perform restore operation" => "Restaurar",
+"delete file permanently" => "Eliminar permanentemente o(s) ficheiro(s)",
+"Name" => "Nome",
+"Deleted" => "Apagado",
+"1 folder" => "1 pasta",
+"{count} folders" => "{count} pastas",
+"1 file" => "1 ficheiro",
+"{count} files" => "{count} ficheiros",
+"Nothing in here. Your trash bin is empty!" => "Não ha ficheiros. O lixo está vazio",
+"Restore" => "Restaurar"
+);
diff --git a/apps/files_trashbin/l10n/ro.php b/apps/files_trashbin/l10n/ro.php
new file mode 100644
index 00000000000..6ece51e02cf
--- /dev/null
+++ b/apps/files_trashbin/l10n/ro.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Nume",
+"1 folder" => "1 folder",
+"{count} folders" => "{count} foldare",
+"1 file" => "1 fisier",
+"{count} files" => "{count} fisiere"
+);
diff --git a/apps/files_trashbin/l10n/ru.php b/apps/files_trashbin/l10n/ru.php
new file mode 100644
index 00000000000..f6c85a6800e
--- /dev/null
+++ b/apps/files_trashbin/l10n/ru.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "%s не может быть удалён навÑегда",
+"Couldn't restore %s" => "%s не может быть воÑÑтановлен",
+"perform restore operation" => "выполнить операцию воÑÑтановлениÑ",
+"delete file permanently" => "удалить файл навÑегда",
+"Name" => "ИмÑ",
+"Deleted" => "Удалён",
+"1 folder" => "1 папка",
+"{count} folders" => "{count} папок",
+"1 file" => "1 файл",
+"{count} files" => "{count} файлов",
+"Nothing in here. Your trash bin is empty!" => "ЗдеÑÑŒ ничего нет. Ваша корзина пуÑта!",
+"Restore" => "ВоÑÑтановить"
+);
diff --git a/apps/files_trashbin/l10n/ru_RU.php b/apps/files_trashbin/l10n/ru_RU.php
new file mode 100644
index 00000000000..379ee37af83
--- /dev/null
+++ b/apps/files_trashbin/l10n/ru_RU.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "%s не может быть удалён навÑегда",
+"Couldn't restore %s" => "%s не может быть воÑÑтановлен",
+"perform restore operation" => "выполнить операцию воÑÑтановлениÑ",
+"delete file permanently" => "удалить файл навÑегда",
+"Name" => "ИмÑ",
+"Deleted" => "Удалён",
+"1 folder" => "1 папка",
+"{count} folders" => "{количеÑтво} папок",
+"1 file" => "1 файл",
+"{count} files" => "{количеÑтво} файлов",
+"Nothing in here. Your trash bin is empty!" => "ЗдеÑÑŒ ничего нет. Ваша корзина пуÑта!",
+"Restore" => "ВоÑÑтановить"
+);
diff --git a/apps/files_trashbin/l10n/si_LK.php b/apps/files_trashbin/l10n/si_LK.php
new file mode 100644
index 00000000000..cb351afaec9
--- /dev/null
+++ b/apps/files_trashbin/l10n/si_LK.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Name" => "නම",
+"1 folder" => "1 ෆොල්ඩරයක්",
+"1 file" => "1 ගොනුවක්"
+);
diff --git a/apps/files_trashbin/l10n/sk_SK.php b/apps/files_trashbin/l10n/sk_SK.php
new file mode 100644
index 00000000000..b86e5d86e44
--- /dev/null
+++ b/apps/files_trashbin/l10n/sk_SK.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Nemožno zmazať %s navždy",
+"Couldn't restore %s" => "Nemožno obnoviť %s",
+"perform restore operation" => "vykonať obnovu",
+"delete file permanently" => "trvalo zmazať súbor",
+"Name" => "Meno",
+"Deleted" => "Zmazané",
+"1 folder" => "1 prieÄinok",
+"{count} folders" => "{count} prieÄinkov",
+"1 file" => "1 súbor",
+"{count} files" => "{count} súborov",
+"Nothing in here. Your trash bin is empty!" => "Žiadny obsah. Kôš je prázdny!",
+"Restore" => "Obnoviť"
+);
diff --git a/apps/files_trashbin/l10n/sl.php b/apps/files_trashbin/l10n/sl.php
new file mode 100644
index 00000000000..2579f95c862
--- /dev/null
+++ b/apps/files_trashbin/l10n/sl.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Ime",
+"1 folder" => "1 mapa",
+"{count} folders" => "{count} map",
+"1 file" => "1 datoteka",
+"{count} files" => "{count} datotek"
+);
diff --git a/apps/files_trashbin/l10n/sr.php b/apps/files_trashbin/l10n/sr.php
new file mode 100644
index 00000000000..36659e70803
--- /dev/null
+++ b/apps/files_trashbin/l10n/sr.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"perform restore operation" => "врати у претходно Ñтање",
+"Name" => "Име",
+"Deleted" => "ОбриÑано",
+"1 folder" => "1 фаÑцикла",
+"{count} folders" => "{count} фаÑцикле/и",
+"1 file" => "1 датотека",
+"{count} files" => "{count} датотеке/а",
+"Nothing in here. Your trash bin is empty!" => "Овде нема ништа. Корпа за отпатке је празна.",
+"Restore" => "Врати"
+);
diff --git a/apps/files_trashbin/l10n/sr@latin.php b/apps/files_trashbin/l10n/sr@latin.php
new file mode 100644
index 00000000000..52255c7429a
--- /dev/null
+++ b/apps/files_trashbin/l10n/sr@latin.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Ime"
+);
diff --git a/apps/files_trashbin/l10n/sv.php b/apps/files_trashbin/l10n/sv.php
new file mode 100644
index 00000000000..53bb7a6ce0f
--- /dev/null
+++ b/apps/files_trashbin/l10n/sv.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Kunde inte radera %s permanent",
+"Couldn't restore %s" => "Kunde inte återställa %s",
+"perform restore operation" => "utför återställning",
+"delete file permanently" => "radera filen permanent",
+"Name" => "Namn",
+"Deleted" => "Raderad",
+"1 folder" => "1 mapp",
+"{count} folders" => "{count} mappar",
+"1 file" => "1 fil",
+"{count} files" => "{count} filer",
+"Nothing in here. Your trash bin is empty!" => "Ingenting här. Din papperskorg är tom!",
+"Restore" => "Ã…terskapa"
+);
diff --git a/apps/files_trashbin/l10n/ta_LK.php b/apps/files_trashbin/l10n/ta_LK.php
new file mode 100644
index 00000000000..a436e2344a4
--- /dev/null
+++ b/apps/files_trashbin/l10n/ta_LK.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "பெயரà¯",
+"1 folder" => "1 கோபà¯à®ªà¯à®±à¯ˆ",
+"{count} folders" => "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®±à¯ˆà®•ளà¯",
+"1 file" => "1 கோபà¯à®ªà¯",
+"{count} files" => "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®•ளà¯"
+);
diff --git a/apps/files_trashbin/l10n/th_TH.php b/apps/files_trashbin/l10n/th_TH.php
new file mode 100644
index 00000000000..8a031fb0d70
--- /dev/null
+++ b/apps/files_trashbin/l10n/th_TH.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"perform restore operation" => "ดำเนินà¸à¸²à¸£à¸„ืนค่า",
+"Name" => "ชื่อ",
+"Deleted" => "ลบà¹à¸¥à¹‰à¸§",
+"1 folder" => "1 โฟลเดอร์",
+"{count} folders" => "{count} โฟลเดอร์",
+"1 file" => "1 ไฟล์",
+"{count} files" => "{count} ไฟล์",
+"Nothing in here. Your trash bin is empty!" => "ไม่มีอะไรอยู่ในนี้ ถังขยะของคุณยังว่างอยู่",
+"Restore" => "คืนค่า"
+);
diff --git a/apps/files_trashbin/l10n/tr.php b/apps/files_trashbin/l10n/tr.php
new file mode 100644
index 00000000000..5b7064eceaf
--- /dev/null
+++ b/apps/files_trashbin/l10n/tr.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "İsim",
+"1 folder" => "1 dizin",
+"{count} folders" => "{count} dizin",
+"1 file" => "1 dosya",
+"{count} files" => "{count} dosya"
+);
diff --git a/apps/files_trashbin/l10n/uk.php b/apps/files_trashbin/l10n/uk.php
new file mode 100644
index 00000000000..14c6931255a
--- /dev/null
+++ b/apps/files_trashbin/l10n/uk.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "Ім'Ñ",
+"1 folder" => "1 папка",
+"{count} folders" => "{count} папок",
+"1 file" => "1 файл",
+"{count} files" => "{count} файлів"
+);
diff --git a/apps/files_trashbin/l10n/vi.php b/apps/files_trashbin/l10n/vi.php
new file mode 100644
index 00000000000..ac2a7be0291
--- /dev/null
+++ b/apps/files_trashbin/l10n/vi.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Không thể óa %s vĩnh viễn",
+"Couldn't restore %s" => "Không thể khôi phục %s",
+"perform restore operation" => "thực hiện phục hồi",
+"delete file permanently" => "xóa file vĩnh viễn",
+"Name" => "Tên",
+"Deleted" => "Äã xóa",
+"1 folder" => "1 thư mục",
+"{count} folders" => "{count} thư mục",
+"1 file" => "1 tập tin",
+"{count} files" => "{count} tập tin",
+"Nothing in here. Your trash bin is empty!" => "Không có gì ở đây. Thùng rác của bạn rỗng!",
+"Restore" => "Khôi phục"
+);
diff --git a/apps/files_trashbin/l10n/zh_CN.GB2312.php b/apps/files_trashbin/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..2c6a7891e98
--- /dev/null
+++ b/apps/files_trashbin/l10n/zh_CN.GB2312.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "åç§°",
+"1 folder" => "1 个文件夹",
+"{count} folders" => "{count} 个文件夹",
+"1 file" => "1 个文件",
+"{count} files" => "{count} 个文件"
+);
diff --git a/apps/files_trashbin/l10n/zh_CN.php b/apps/files_trashbin/l10n/zh_CN.php
new file mode 100644
index 00000000000..0060b1f31d6
--- /dev/null
+++ b/apps/files_trashbin/l10n/zh_CN.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "åç§°",
+"1 folder" => "1个文件夹",
+"{count} folders" => "{count} 个文件夹",
+"1 file" => "1 个文件",
+"{count} files" => "{count} 个文件"
+);
diff --git a/apps/files_trashbin/l10n/zh_TW.php b/apps/files_trashbin/l10n/zh_TW.php
new file mode 100644
index 00000000000..be61d9b0b6d
--- /dev/null
+++ b/apps/files_trashbin/l10n/zh_TW.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Name" => "å稱",
+"1 folder" => "1 個資料夾",
+"{count} folders" => "{count} 個資料夾",
+"1 file" => "1 個檔案",
+"{count} files" => "{count} 個檔案"
+);
diff --git a/apps/files_trashbin/lib/hooks.php b/apps/files_trashbin/lib/hooks.php
new file mode 100644
index 00000000000..d6a62d447b8
--- /dev/null
+++ b/apps/files_trashbin/lib/hooks.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * ownCloud - trash bin
+ *
+ * @author Bjoern Schiessle
+ * @copyright 2013 Bjoern Schiessle schiessle@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/>.
+ *
+ */
+
+/**
+ * This class contains all hooks.
+ */
+
+namespace OCA\Files_Trashbin;
+
+class Hooks {
+
+ /**
+ * @brief Copy files to trash bin
+ * @param array
+ *
+ * This function is connected to the delete signal of OC_Filesystem
+ * to copy the file to the trash bin
+ */
+ public static function remove_hook($params) {
+
+ if ( \OCP\App::isEnabled('files_trashbin') ) {
+ $path = $params['path'];
+ Trashbin::move2trash($path);
+ }
+ }
+}
diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php
new file mode 100644
index 00000000000..d88dc1ac252
--- /dev/null
+++ b/apps/files_trashbin/lib/trash.php
@@ -0,0 +1,411 @@
+<?php
+/**
+ * ownCloud - trash bin
+ *
+ * @author Bjoern Schiessle
+ * @copyright 2013 Bjoern Schiessle schiessle@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 OCA\Files_Trashbin;
+
+class Trashbin {
+
+ const DEFAULT_RETENTION_OBLIGATION=180; // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days)
+ const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota
+
+ /**
+ * move file to the trash bin
+ *
+ * @param $file_path path to the deleted file/directory relative to the files root directory
+ */
+ public static function move2trash($file_path) {
+ $user = \OCP\User::getUser();
+ $view = new \OC_FilesystemView('/'. $user);
+ if (!$view->is_dir('files_trashbin')) {
+ $view->mkdir('files_trashbin');
+ $view->mkdir("versions_trashbin");
+ }
+
+ $path_parts = pathinfo($file_path);
+
+ $deleted = $path_parts['basename'];
+ $location = $path_parts['dirname'];
+ $timestamp = time();
+ $mime = $view->getMimeType('files'.$file_path);
+
+ if ( $view->is_dir('files'.$file_path) ) {
+ $type = 'dir';
+ } else {
+ $type = 'file';
+ }
+
+ if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) {
+ $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin'));
+ $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin'));
+ }
+ $trashbinSize += self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view);
+
+ if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) {
+ $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)");
+ $result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user));
+ if ( !$result ) { // if file couldn't be added to the database than also don't store it in the trash bin.
+ $view->deleteAll('files_trashbin/'.$deleted.'.d'.$timestamp);
+ \OC_Log::write('files_trashbin', 'trash bin database couldn\'t be updated', \OC_log::ERROR);
+ return;
+ }
+
+ if ( \OCP\App::isEnabled('files_versions') ) {
+ if ( $view->is_dir('files_versions'.$file_path) ) {
+ $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_versions/'.$file_path));
+ $view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp);
+ } else if ( $versions = \OCA\Files_Versions\Storage::getVersions($file_path) ) {
+ foreach ($versions as $v) {
+ $trashbinSize += $view->filesize('files_versions'.$v['path'].'.v'.$v['version']);
+ $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp);
+ }
+ }
+ }
+ } else {
+ \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin' , \OC_log::ERROR);
+ }
+
+ // get available disk space for user
+ $quota = \OCP\Util::computerFileSize(\OC_Preferences::getValue($user, 'files', 'quota'));
+ if ( $quota == null ) {
+ $quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota'));
+ }
+ if ( $quota == null ) {
+ $quota = \OC\Files\Filesystem::free_space('/');
+ }
+
+ // calculate available space for trash bin
+ $rootInfo = $view->getFileInfo('/files');
+ $free = $quota-$rootInfo['size']; // remaining free space for user
+ if ( $free > 0 ) {
+ $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $trashbinSize; // how much space can be used for versions
+ } else {
+ $availableSpace = $free-$trashbinSize;
+ }
+
+ $trashbinSize -= self::expire($availableSpace);
+ \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize);
+ }
+
+
+ /**
+ * restore files from trash bin
+ * @param $file path to the deleted file
+ * @param $filename name of the file
+ * @param $timestamp time when the file was deleted
+ */
+ public static function restore($file, $filename, $timestamp) {
+ $user = \OCP\User::getUser();
+ $view = new \OC_FilesystemView('/'.$user);
+
+ if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) {
+ $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin'));
+ $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin'));
+ }
+ if ( $timestamp ) {
+ $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
+ $result = $query->execute(array($user,$filename,$timestamp))->fetchAll();
+ if ( count($result) != 1 ) {
+ \OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR);
+ return false;
+ }
+
+ // if location no longer exists, restore file in the root directory
+ $location = $result[0]['location'];
+ if ( $result[0]['location'] != '/' &&
+ (!$view->is_dir('files'.$result[0]['location']) ||
+ !$view->isUpdatable('files'.$result[0]['location'])) ) {
+ $location = '';
+ }
+ } else {
+ $path_parts = pathinfo($filename);
+ $result[] = array(
+ 'location' => $path_parts['dirname'],
+ 'type' => $view->is_dir('/files_trashbin/'.$file) ? 'dir' : 'files',
+ );
+ $location = '';
+ }
+
+ $source = \OC_Filesystem::normalizePath('files_trashbin/'.$file);
+ $target = \OC_Filesystem::normalizePath('files/'.$location.'/'.$filename);
+
+ // we need a extension in case a file/dir with the same name already exists
+ $ext = self::getUniqueExtension($location, $filename, $view);
+ $mtime = $view->filemtime($source);
+ if( $view->rename($source, $target.$ext) ) {
+ $view->touch($target.$ext, $mtime);
+ if ($view->is_dir($target.$ext)) {
+ $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$target.$ext));
+ } else {
+ $trashbinSize -= $view->filesize($target.$ext);
+ }
+ // if versioning app is enabled, copy versions from the trash bin back to the original location
+ if ( \OCP\App::isEnabled('files_versions') ) {
+ if ($timestamp ) {
+ $versionedFile = $filename;
+ } else {
+ $versionedFile = $file;
+ }
+ if ( $result[0]['type'] == 'dir' ) {
+ $trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.'versions_trashbin/'. $file));
+ $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext));
+ } else if ( $versions = self::getVersionsFromTrash($versionedFile, $timestamp) ) {
+ foreach ($versions as $v) {
+ if ($timestamp ) {
+ $trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp);
+ $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v);
+ } else {
+ $trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v);
+ $view->rename('versions_trashbin/'.$versionedFile.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v);
+ }
+ }
+ }
+ }
+
+ if ( $timestamp ) {
+ $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
+ $query->execute(array($user,$filename,$timestamp));
+ }
+
+ \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize);
+ return true;
+ } else {
+ \OC_Log::write('files_trashbin', 'Couldn\'t restore file from trash bin, '.$filename , \OC_log::ERROR);
+ }
+
+ return false;
+ }
+
+ /**
+ * delete file from trash bin permanently
+ * @param $filename path to the file
+ * @param $timestamp of deletion time
+ * @return size of deleted files
+ */
+ public static function delete($filename, $timestamp=null) {
+ $user = \OCP\User::getUser();
+ $view = new \OC_FilesystemView('/'.$user);
+ $size = 0;
+
+ if ( ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) {
+ $trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin'));
+ $trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin'));
+ }
+
+ if ( $timestamp ) {
+ $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
+ $query->execute(array($user,$filename,$timestamp));
+ $file = $filename.'.d'.$timestamp;
+ } else {
+ $file = $filename;
+ }
+
+ if ( \OCP\App::isEnabled('files_versions') ) {
+ if ($view->is_dir('versions_trashbin/'.$file)) {
+ $size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/versions_trashbin/'.$file));
+ $view->unlink('versions_trashbin/'.$file);
+ } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) {
+ foreach ($versions as $v) {
+ if ($timestamp ) {
+ $size += $view->filesize('/versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
+ $view->unlink('/versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
+ } else {
+ $size += $view->filesize('/versions_trashbin/'.$filename.'.v'.$v);
+ $view->unlink('/versions_trashbin/'.$filename.'.v'.$v);
+ }
+ }
+ }
+ }
+
+ if ($view->is_dir('/files_trashbin/'.$file)) {
+ $size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/files_trashbin/'.$file));
+ } else {
+ $size += $view->filesize('/files_trashbin/'.$file);
+ }
+ $view->unlink('/files_trashbin/'.$file);
+ $trashbinSize -= $size;
+ \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize);
+
+ return $size;
+ }
+
+
+ /**
+ * clean up the trash bin
+ * @param max. available disk space for trashbin
+ */
+ private static function expire($availableSpace) {
+
+ $user = \OCP\User::getUser();
+ $view = new \OC_FilesystemView('/'.$user);
+ $size = 0;
+
+ $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?');
+ $result = $query->execute(array($user))->fetchAll();
+
+ $retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', self::DEFAULT_RETENTION_OBLIGATION);
+
+ $limit = time() - ($retention_obligation * 86400);
+
+ foreach ( $result as $r ) {
+ $timestamp = $r['timestamp'];
+ $filename = $r['id'];
+ if ( $r['timestamp'] < $limit ) {
+ if ($view->is_dir('files_trashbin/'.$filename.'.d'.$timestamp)) {
+ $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/'.$filename.'.d'.$timestamp));
+ } else {
+ $size += $view->filesize('files_trashbin/'.$filename.'.d'.$timestamp);
+ }
+ $view->unlink('files_trashbin/'.$filename.'.d'.$timestamp);
+ if ($r['type'] == 'dir') {
+ $size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/versions_trashbin/'.$filename.'.d'.$timestamp));
+ $view->unlink('versions_trashbin/'.$filename.'.d'.$timestamp);
+ } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) {
+ foreach ($versions as $v) {
+ $size += $view->filesize('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
+ $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
+ }
+ }
+ }
+ }
+
+ $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestamp<?');
+ $query->execute(array($user,$limit));
+
+ $availableSpace = $availableSpace + $size;
+ // if size limit for trash bin reached, delete oldest files in trash bin
+ if ($availableSpace < 0) {
+ $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=? ORDER BY timestamp ASC');
+ $result = $query->execute(array($user))->fetchAll();
+ $length = count($result);
+ $i = 0;
+ while ( $i < $length && $availableSpace < 0 ) {
+ $tmp = self::delete($result[$i]['id'], $result[$i]['timestamp']);
+ $availableSpace += $tmp;
+ $size += $tmp;
+ $i++;
+ }
+
+ }
+
+ return $size;
+ }
+
+ /**
+ * recursive copy to copy a whole directory
+ *
+ * @param $source source path, relative to the users files directory
+ * @param $destination destination path relative to the users root directoy
+ * @param $view file view for the users root directory
+ */
+ private static function copy_recursive( $source, $destination, $view ) {
+ $size = 0;
+ if ( $view->is_dir( 'files'.$source ) ) {
+ $view->mkdir( $destination );
+ $view->touch($destination, $view->filemtime('files'.$source));
+ foreach ( \OC_Files::getDirectoryContent($source) as $i ) {
+ $pathDir = $source.'/'.$i['name'];
+ if ( $view->is_dir('files'.$pathDir) ) {
+ $size += self::copy_recursive($pathDir, $destination.'/'.$i['name'], $view);
+ } else {
+ $size += $view->filesize('files'.$pathDir);
+ $view->copy( 'files'.$pathDir, $destination . '/' . $i['name'] );
+ $view->touch($destination . '/' . $i['name'], $view->filemtime('files'.$pathDir));
+ }
+ }
+ } else {
+ $size += $view->filesize('files'.$source);
+ $view->copy( 'files'.$source, $destination );
+ $view->touch($destination, $view->filemtime('files'.$source));
+ }
+ return $size;
+ }
+
+ /**
+ * find all versions which belong to the file we want to restore
+ * @param $filename name of the file which should be restored
+ * @param $timestamp timestamp when the file was deleted
+ */
+ private static function getVersionsFromTrash($filename, $timestamp) {
+ $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/versions_trashbin');
+ $versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename);
+ $versions = array();
+ if ($timestamp ) {
+ // fetch for old versions
+ $matches = glob( $versionsName.'.v*.d'.$timestamp );
+ $offset = -strlen($timestamp)-2;
+ } else {
+ $matches = glob( $versionsName.'.v*' );
+ }
+
+ foreach( $matches as $ma ) {
+ if ( $timestamp ) {
+ $parts = explode( '.v', substr($ma, 0, $offset) );
+ $versions[] = ( end( $parts ) );
+ } else {
+ $parts = explode( '.v', $ma );
+ $versions[] = ( end( $parts ) );
+ }
+ }
+ return $versions;
+ }
+
+ /**
+ * find unique extension for restored file if a file with the same name already exists
+ * @param $location where the file should be restored
+ * @param $filename name of the file
+ * @param $view filesystem view relative to users root directory
+ * @return string with unique extension
+ */
+ private static function getUniqueExtension($location, $filename, $view) {
+ $ext = '';
+ if ( $view->file_exists('files'.$location.'/'.$filename) ) {
+ $tmpext = '.restored';
+ $ext = $tmpext;
+ $i = 1;
+ while ( $view->file_exists('files'.$location.'/'.$filename.$ext) ) {
+ $ext = $tmpext.$i;
+ $i++;
+ }
+ }
+ return $ext;
+ }
+
+ /**
+ * @brief get the size from a given root folder
+ * @param $view file view on the root folder
+ * @return size of the folder
+ */
+ private static function calculateSize($view) {
+ $root = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath('');
+ $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($root), \RecursiveIteratorIterator::CHILD_FIRST);
+ $size = 0;
+
+ foreach ($iterator as $path) {
+ $relpath = substr($path, strlen($root)-1);
+ if ( !$view->is_dir($relpath) ) {
+ $size += $view->filesize($relpath);
+ }
+ }
+ return $size;
+ }
+
+}
diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php
new file mode 100644
index 00000000000..c3e51b4becd
--- /dev/null
+++ b/apps/files_trashbin/templates/index.php
@@ -0,0 +1,34 @@
+<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}table td{position:static !important;}</style><![endif]-->
+<div id="controls">
+ <?php echo($_['breadcrumb']); ?>
+ <div id="file_action_panel"></div>
+</div>
+<div id='notification'></div>
+
+<?php if (isset($_['files']) && count($_['files'])==0):?>
+ <div id="emptyfolder"><?php echo $l->t('Nothing in here. Your trash bin is empty!')?></div>
+<?php endif; ?>
+
+<table>
+ <thead>
+ <tr>
+ <th id='headerName'>
+ <input type="checkbox" id="select_all" />
+ <span class='name'><?php echo $l->t( 'Name' ); ?></span>
+ <span class='selectedActions'>
+ <a href="" class="undelete">
+ <img class="svg" alt="<?php echo $l->t( 'Restore' ); ?>"
+ src="<?php echo OCP\image_path("core", "actions/undelete.png"); ?>" />
+ <?php echo $l->t('Restore')?>
+ </a>
+ </span>
+ </th>
+ <th id="headerDate">
+ <span id="modified"><?php echo $l->t( 'Deleted' ); ?></span>
+ </th>
+ </tr>
+ </thead>
+ <tbody id="fileList">
+ <?php echo($_['fileList']); ?>
+ </tbody>
+</table>
diff --git a/apps/files_trashbin/templates/part.list.php b/apps/files_trashbin/templates/part.list.php
new file mode 100644
index 00000000000..fe8a71f44e6
--- /dev/null
+++ b/apps/files_trashbin/templates/part.list.php
@@ -0,0 +1,76 @@
+<input type="hidden" id="disableSharing" data-status="<?php echo $_['disableSharing']; ?>">
+<?php foreach($_['files'] as $file):
+ $simple_file_size = OCP\simple_file_size($file['size']);
+ // the bigger the file, the darker the shade of grey; megabytes*2
+ $simple_size_color = intval(200-$file['size']/(1024*1024)*2);
+ if($simple_size_color<0) $simple_size_color = 0;
+ $relative_deleted_date = OCP\relative_modified_date($file['timestamp']);
+ // the older the file, the brighter the shade of grey; days*14
+ $relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
+ if($relative_date_color>200) $relative_date_color = 200;
+ $name = str_replace('+', '%20', urlencode($file['name']));
+ $name = str_replace('%2F', '/', $name);
+ $directory = str_replace('+', '%20', urlencode($file['directory']));
+ $directory = str_replace('%2F', '/', $directory); ?>
+ <tr data-filename="<?php echo $file['name'];?>"
+ data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>"
+ data-mime="<?php echo $file['mimetype']?>"
+ data-permissions='<?php echo $file['permissions']; ?>'
+ <?php if ( $_['dirlisting'] ): ?>
+ id="<?php echo $file['directory'].'/'.$file['name'];?>"
+ data-file="<?php echo $file['directory'].'/'.$file['name'];?>"
+ data-timestamp=''
+ data-dirlisting=1
+ <?php else: ?>
+ id="<?php echo $file['name'].'.d'.$file['timestamp'];?>"
+ data-file="<?php echo $file['name'].'.d'.$file['timestamp'];?>"
+ data-timestamp='<?php echo $file['timestamp'];?>'
+ data-dirlisting=0
+ <?php endif; ?>>
+ <td class="filename svg"
+ <?php if($file['type'] == 'dir'): ?>
+ style="background-image:url(<?php echo OCP\mimetype_icon('dir'); ?>)"
+ <?php else: ?>
+ style="background-image:url(<?php echo OCP\mimetype_icon($file['mimetype']); ?>)"
+ <?php endif; ?>
+ >
+ <?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
+ <?php if($file['type'] == 'dir'): ?>
+ <?php if( $_['dirlisting'] ): ?>
+ <a class="name" href="<?php echo $_['baseURL'].'/'.$name; ?>" title="">
+ <?php else: ?>
+ <a class="name" href="<?php echo $_['baseURL'].'/'.$name.'.d'.$file['timestamp']; ?>" title="">
+ <?php endif; ?>
+ <?php else: ?>
+ <?php if( $_['dirlisting'] ): ?>
+ <a class="name" href="<?php echo $_['downloadURL'].'/'.$name; ?>" title="">
+ <?php else: ?>
+ <a class="name" href="<?php echo $_['downloadURL'].'/'.$name.'.d'.$file['timestamp'];?>" title="">
+ <?php endif; ?>
+ <?php endif; ?>
+ <span class="nametext">
+ <?php if($file['type'] == 'dir'):?>
+ <?php echo htmlspecialchars($file['name']);?>
+ <?php else:?>
+ <?php echo htmlspecialchars($file['basename']);?><span
+ class='extension'><?php echo $file['extension'];?></span>
+ <?php endif;?>
+ </span>
+ <?php if($file['type'] == 'dir'):?>
+ <span class="uploadtext" currentUploads="0">
+ </span>
+ <?php endif;?>
+ </a>
+ </td>
+ <td class="date">
+ <span class="modified"
+ title="<?php echo $file['date']; ?>"
+ style="color:rgb(<?php echo $relative_date_color.','
+ .$relative_date_color.','
+ .$relative_date_color ?>)">
+ <?php echo $relative_deleted_date; ?>
+ </span>
+ </td>
+ </tr>
+<?php endforeach;
+ \ No newline at end of file
diff --git a/apps/files_versions/ajax/getVersions.php b/apps/files_versions/ajax/getVersions.php
index 8476e5e8a51..53fc04625c6 100644
--- a/apps/files_versions/ajax/getVersions.php
+++ b/apps/files_versions/ajax/getVersions.php
@@ -4,10 +4,9 @@ OCP\JSON::checkAppEnabled('files_versions');
$userDirectory = "/".OCP\USER::getUser()."/files";
$source = $_GET['source'];
-if( OCA_Versions\Storage::isversioned( $source ) ) {
+$count = 5; //show the newest revisions
+if( ($versions = OCA\Files_Versions\Storage::getVersions( $source, $count)) ) {
- $count=5; //show the newest revisions
- $versions = OCA_Versions\Storage::getVersions( $source, $count);
$versionsFormatted = array();
foreach ( $versions AS $version ) {
diff --git a/apps/files_versions/ajax/rollbackVersion.php b/apps/files_versions/ajax/rollbackVersion.php
index f1b02eb4b92..2970915ac63 100644
--- a/apps/files_versions/ajax/rollbackVersion.php
+++ b/apps/files_versions/ajax/rollbackVersion.php
@@ -8,10 +8,10 @@ $userDirectory = "/".OCP\USER::getUser()."/files";
$file = $_GET['file'];
$revision=(int)$_GET['revision'];
-if( OCA_Versions\Storage::isversioned( $file ) ) {
- if(OCA_Versions\Storage::rollback( $file, $revision )) {
- OCP\JSON::success(array("data" => array( "revision" => $revision, "file" => $file )));
- }else{
- OCP\JSON::error(array("data" => array( "message" => "Could not revert:" . $file )));
- }
+if(OCA\Files_Versions\Storage::rollback( $file, $revision )) {
+ OCP\JSON::success(array("data" => array( "revision" => $revision, "file" => $file )));
+}else{
+ $l = OC_L10N::get('files_versions');
+ OCP\JSON::error(array("data" => array( "message" => $l->t("Could not revert: %s", array($file) ))));
}
+
diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php
index afc0a67edba..f7c6989ce2d 100644
--- a/apps/files_versions/appinfo/app.php
+++ b/apps/files_versions/appinfo/app.php
@@ -1,8 +1,8 @@
<?php
//require_once 'files_versions/versions.php';
-OC::$CLASSPATH['OCA_Versions\Storage'] = 'apps/files_versions/lib/versions.php';
-OC::$CLASSPATH['OCA_Versions\Hooks'] = 'apps/files_versions/lib/hooks.php';
+OC::$CLASSPATH['OCA\Files_Versions\Storage'] = 'apps/files_versions/lib/versions.php';
+OC::$CLASSPATH['OCA\Files_Versions\Hooks'] = 'apps/files_versions/lib/hooks.php';
OCP\App::registerAdmin('files_versions', 'settings');
OCP\App::registerPersonal('files_versions', 'settings-personal');
@@ -10,7 +10,7 @@ OCP\App::registerPersonal('files_versions', 'settings-personal');
OCP\Util::addscript('files_versions', 'versions');
// Listen to write signals
-OCP\Util::connectHook('OC_Filesystem', 'write', "OCA_Versions\Hooks", "write_hook");
+OCP\Util::connectHook('OC_Filesystem', 'write', "OCA\Files_Versions\Hooks", "write_hook");
// Listen to delete and rename signals
-OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA_Versions\Hooks", "remove_hook");
-OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA_Versions\Hooks", "rename_hook"); \ No newline at end of file
+OCP\Util::connectHook('OC_Filesystem', 'post-delete', "OCA\Files_Versions\Hooks", "remove_hook");
+OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA\Files_Versions\Hooks", "rename_hook");
diff --git a/apps/files_versions/appinfo/info.xml b/apps/files_versions/appinfo/info.xml
index e4e5a365d51..0155f8e830f 100644
--- a/apps/files_versions/appinfo/info.xml
+++ b/apps/files_versions/appinfo/info.xml
@@ -4,7 +4,7 @@
<name>Versions</name>
<licence>AGPL</licence>
<author>Frank Karlitschek</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<description>Versioning of files</description>
<types>
diff --git a/apps/files_versions/history.php b/apps/files_versions/history.php
index d4c278ebd85..437a3fec065 100644
--- a/apps/files_versions/history.php
+++ b/apps/files_versions/history.php
@@ -24,49 +24,53 @@
OCP\User::checkLoggedIn( );
OCP\Util::addStyle('files_versions', 'versions');
$tmpl = new OCP\Template( 'files_versions', 'history', 'user' );
+$l = OC_L10N::get('files_versions');
if ( isset( $_GET['path'] ) ) {
$path = $_GET['path'];
- $path = $path;
$tmpl->assign( 'path', $path );
- $versions = new OCA_Versions\Storage();
+ $versions = new OCA\Files_Versions\Storage();
// roll back to old version if button clicked
if( isset( $_GET['revert'] ) ) {
if( $versions->rollback( $path, $_GET['revert'] ) ) {
- $tmpl->assign( 'outcome_stat', 'success' );
+ $tmpl->assign( 'outcome_stat', $l->t('success') );
- $tmpl->assign( 'outcome_msg', "File {$_GET['path']} was reverted to version ".OCP\Util::formatDate( doubleval($_GET['revert']) ) );
+ $message = $l->t('File %s was reverted to version %s',
+ array($_GET['path'], OCP\Util::formatDate( doubleval($_GET['revert']) ) ) );
+
+ $tmpl->assign( 'outcome_msg', $message);
} else {
- $tmpl->assign( 'outcome_stat', 'failure' );
+ $tmpl->assign( 'outcome_stat', $l->t('failure') );
+
+ $message = $l->t('File %s could not be reverted to version %s',
+ array($_GET['path'], OCP\Util::formatDate( doubleval($_GET['revert']) ) ) );
- $tmpl->assign( 'outcome_msg', "File {$_GET['path']} could not be reverted to version ".OCP\Util::formatDate( doubleval($_GET['revert']) ) );
+ $tmpl->assign( 'outcome_msg', $message);
}
}
// show the history only if there is something to show
- if( OCA_Versions\Storage::isversioned( $path ) ) {
-
- $count = 999; //show the newest revisions
- $versions = OCA_Versions\Storage::getVersions( $path, $count);
+ $count = 999; //show the newest revisions
+ if( ($versions = OCA\Files_Versions\Storage::getVersions( $path, $count)) ) {
$tmpl->assign( 'versions', array_reverse( $versions ) );
}else{
- $tmpl->assign( 'message', 'No old versions available' );
+ $tmpl->assign( 'message', $l->t('No old versions available') );
}
}else{
- $tmpl->assign( 'message', 'No path specified' );
+ $tmpl->assign( 'message', $l->t('No path specified') );
}
diff --git a/apps/files_versions/js/settings-personal.js b/apps/files_versions/js/settings-personal.js
deleted file mode 100644
index 1e6b036fdab..00000000000
--- a/apps/files_versions/js/settings-personal.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// TODO: allow the button to be clicked only once
-
-$( document ).ready(function(){
- //
- $( '#expireAllBtn' ).click(
-
- function( event ) {
-
- // Prevent page from reloading
- event.preventDefault();
-
- // Show loading gif
- $('.expireAllLoading').show();
-
- $.getJSON(
- OC.filePath('files_versions','ajax','expireAll.php'),
- function(result){
- if (result.status == 'success') {
- $('.expireAllLoading').hide();
- $('#expireAllBtn').html('Expiration successful');
- } else {
-
- // Cancel loading
- $('#expireAllBtn').html('Expiration failed');
-
- // Show Dialog
- OC.dialogs.alert(
- 'Something went wrong, your files may not have been expired',
- 'An error has occurred',
- function(){
- $('#expireAllBtn').html(t('files_versions', 'Expire all versions')+'<img style="display: none;" class="loading" src="'+OC.filePath('core','img','loading.gif')+'" />');
- }
- );
- }
- }
- );
- }
- );
-}); \ No newline at end of file
diff --git a/apps/files_versions/l10n/ar.php b/apps/files_versions/l10n/ar.php
index fea7f1c7562..1f1f3100405 100644
--- a/apps/files_versions/l10n/ar.php
+++ b/apps/files_versions/l10n/ar.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "إنهاء تاريخ الإنتهاء لجميع الإصدارات",
"History" => "السجل الزمني",
-"Versions" => "الإصدارات",
-"This will delete all existing backup versions of your files" => "هذه العملية ستقوم بإلغاء جميع إصدارات النسخ الاحتياطي Ù„Ù„Ù…Ù„ÙØ§Øª",
"Files Versioning" => "أصدرة Ø§Ù„Ù…Ù„ÙØ§Øª",
"Enable" => "ØªÙØ¹ÙŠÙ„"
);
diff --git a/apps/files_versions/l10n/bg_BG.php b/apps/files_versions/l10n/bg_BG.php
index 98b5f4113ae..6ecf12d0b00 100644
--- a/apps/files_versions/l10n/bg_BG.php
+++ b/apps/files_versions/l10n/bg_BG.php
@@ -1,6 +1,4 @@
<?php $TRANSLATIONS = array(
"History" => "ИÑториÑ",
-"Versions" => "ВерÑии",
-"This will delete all existing backup versions of your files" => "Това дейÑтвие ще изтрие вÑички налични архивни верÑии на Вашите файлове",
"Enable" => "Включено"
);
diff --git a/apps/files_versions/l10n/bn_BD.php b/apps/files_versions/l10n/bn_BD.php
index d44ea131313..dffa4d79a06 100644
--- a/apps/files_versions/l10n/bn_BD.php
+++ b/apps/files_versions/l10n/bn_BD.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"Enable" => "সকà§à¦°à¦¿à§Ÿ"
+"History" => "ইতিহাস",
+"Files Versioning" => "ফাইল ভারà§à¦¸à¦¨ করা",
+"Enable" => "সকà§à¦°à¦¿à§Ÿ "
);
diff --git a/apps/files_versions/l10n/ca.php b/apps/files_versions/l10n/ca.php
index 0076d02992f..fc900c47dc7 100644
--- a/apps/files_versions/l10n/ca.php
+++ b/apps/files_versions/l10n/ca.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Expira totes les versions",
+"Could not revert: %s" => "No s'ha pogut revertir: %s",
+"success" => "èxit",
+"File %s was reverted to version %s" => "El fitxer %s s'ha revertit a la versió %s",
+"failure" => "fallada",
+"File %s could not be reverted to version %s" => "El fitxer %s no s'ha pogut revertir a la versió %s",
+"No old versions available" => "No hi ha versións antigues disponibles",
+"No path specified" => "No heu especificat el camí",
"History" => "Historial",
-"Versions" => "Versions",
-"This will delete all existing backup versions of your files" => "Això eliminarà totes les versions de còpia de seguretat dels vostres fitxers",
+"Revert a file to a previous version by clicking on its revert button" => "Reverteix un fitxer a una versió anterior fent clic en el seu botó de reverteix",
"Files Versioning" => "Fitxers de Versions",
"Enable" => "Habilita"
);
diff --git a/apps/files_versions/l10n/cs_CZ.php b/apps/files_versions/l10n/cs_CZ.php
index 3995334d9ee..22d4a2ad827 100644
--- a/apps/files_versions/l10n/cs_CZ.php
+++ b/apps/files_versions/l10n/cs_CZ.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Vypršet všechny verze",
+"Could not revert: %s" => "Nelze navrátit: %s",
+"success" => "úspěch",
+"File %s was reverted to version %s" => "Soubor %s byl navrácen na verzi %s",
+"failure" => "sehlhání",
+"File %s could not be reverted to version %s" => "Soubor %s nemohl být navrácen na verzi %s",
+"No old versions available" => "Nejsou dostupné žádné starší verze",
+"No path specified" => "Nezadána cesta",
"History" => "Historie",
-"Versions" => "Verze",
-"This will delete all existing backup versions of your files" => "Odstraní všechny existující zálohované verze Vašich souborů",
+"Revert a file to a previous version by clicking on its revert button" => "NavraÅ¥te soubor do pÅ™edchozí verze kliknutím na tlaÄítko navrátit",
"Files Versioning" => "Verzování souborů",
"Enable" => "Povolit"
);
diff --git a/apps/files_versions/l10n/da.php b/apps/files_versions/l10n/da.php
index bc02b47f2ad..98579747643 100644
--- a/apps/files_versions/l10n/da.php
+++ b/apps/files_versions/l10n/da.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Lad alle versioner udløbe",
"History" => "Historik",
-"Versions" => "Versioner",
-"This will delete all existing backup versions of your files" => "Dette vil slette alle eksisterende backupversioner af dine filer",
"Files Versioning" => "Versionering af filer",
"Enable" => "Aktiver"
);
diff --git a/apps/files_versions/l10n/de.php b/apps/files_versions/l10n/de.php
index 092bbfbff70..2fcb996de7b 100644
--- a/apps/files_versions/l10n/de.php
+++ b/apps/files_versions/l10n/de.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Alle Versionen löschen",
"History" => "Historie",
-"Versions" => "Versionen",
-"This will delete all existing backup versions of your files" => "Dies löscht alle vorhandenen Sicherungsversionen Deiner Dateien.",
"Files Versioning" => "Dateiversionierung",
"Enable" => "Aktivieren"
);
diff --git a/apps/files_versions/l10n/de_DE.php b/apps/files_versions/l10n/de_DE.php
index a568112d02d..cf33bb071e6 100644
--- a/apps/files_versions/l10n/de_DE.php
+++ b/apps/files_versions/l10n/de_DE.php
@@ -1,8 +1,9 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Alle Versionen löschen",
+"success" => "Erfolgreich",
+"failure" => "Fehlgeschlagen",
+"No old versions available" => "keine älteren Versionen verfügbar",
+"No path specified" => "Kein Pfad angegeben",
"History" => "Historie",
-"Versions" => "Versionen",
-"This will delete all existing backup versions of your files" => "Dies löscht alle vorhandenen Sicherungsversionen Ihrer Dateien.",
"Files Versioning" => "Dateiversionierung",
"Enable" => "Aktivieren"
);
diff --git a/apps/files_versions/l10n/el.php b/apps/files_versions/l10n/el.php
index f6b9a5b2998..8b7ecf085fb 100644
--- a/apps/files_versions/l10n/el.php
+++ b/apps/files_versions/l10n/el.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Λήξη όλων των εκδόσεων",
+"Could not revert: %s" => "Αδυναμία επαναφοÏάς του: %s",
+"success" => "επιτυχία",
+"File %s was reverted to version %s" => "Το αÏχείο %s επαναφέÏθηκε στην έκδοση %s",
+"failure" => "αποτυχία",
+"File %s could not be reverted to version %s" => "Το αÏχείο %s δεν είναι δυνατό να επαναφεÏθεί στην έκδοση %s",
+"No old versions available" => "Μη διαθέσιμες παλιές εκδόσεις",
+"No path specified" => "Δεν καθοÏίστηκε διαδÏομή",
"History" => "ΙστοÏικό",
-"Versions" => "Εκδόσεις",
-"This will delete all existing backup versions of your files" => "Αυτό θα διαγÏάψει όλες τις υπάÏχουσες εκδόσεις των αντιγÏάφων ασφαλείας των αÏχείων σας",
+"Revert a file to a previous version by clicking on its revert button" => "ΕπαναφοÏά ενός αÏχείου σε Ï€ÏοηγοÏμενη έκδοση πατώντας στο κουμπί επαναφοÏάς",
"Files Versioning" => "Εκδόσεις ΑÏχείων",
"Enable" => "ΕνεÏγοποίηση"
);
diff --git a/apps/files_versions/l10n/eo.php b/apps/files_versions/l10n/eo.php
index 0c3835373ef..87b314655c0 100644
--- a/apps/files_versions/l10n/eo.php
+++ b/apps/files_versions/l10n/eo.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Eksvalidigi ĉiujn eldonojn",
"History" => "Historio",
-"Versions" => "Eldonoj",
-"This will delete all existing backup versions of your files" => "Ĉi tio forigos ĉiujn estantajn sekurkopiajn eldonojn de viaj dosieroj",
"Files Versioning" => "Dosiereldonigo",
"Enable" => "Kapabligi"
);
diff --git a/apps/files_versions/l10n/es.php b/apps/files_versions/l10n/es.php
index f6b63df7c2b..608e171a4b1 100644
--- a/apps/files_versions/l10n/es.php
+++ b/apps/files_versions/l10n/es.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Expirar todas las versiones",
+"Could not revert: %s" => "No se puede revertir: %s",
+"success" => "exitoso",
+"File %s was reverted to version %s" => "El archivo %s fue revertido a la version %s",
+"failure" => "fallo",
+"File %s could not be reverted to version %s" => "El archivo %s no puede ser revertido a la version %s",
+"No old versions available" => "No hay versiones antiguas disponibles",
+"No path specified" => "Ruta no especificada",
"History" => "Historial",
-"Versions" => "Versiones",
-"This will delete all existing backup versions of your files" => "Esto eliminará todas las versiones guardadas como copia de seguridad de tus archivos",
+"Revert a file to a previous version by clicking on its revert button" => "Revertir un archivo a una versión anterior haciendo clic en el boton de revertir",
"Files Versioning" => "Versionado de archivos",
"Enable" => "Habilitar"
);
diff --git a/apps/files_versions/l10n/es_AR.php b/apps/files_versions/l10n/es_AR.php
index a78264de03f..74d8907fc35 100644
--- a/apps/files_versions/l10n/es_AR.php
+++ b/apps/files_versions/l10n/es_AR.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Expirar todas las versiones",
"History" => "Historia",
-"Versions" => "Versiones",
-"This will delete all existing backup versions of your files" => "Hacer estom borrará todas las versiones guardadas como copia de seguridad de tus archivos",
"Files Versioning" => "Versionado de archivos",
"Enable" => "Activar"
);
diff --git a/apps/files_versions/l10n/et_EE.php b/apps/files_versions/l10n/et_EE.php
index f1296f23fcd..ff119d5374e 100644
--- a/apps/files_versions/l10n/et_EE.php
+++ b/apps/files_versions/l10n/et_EE.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Kõikide versioonide aegumine",
"History" => "Ajalugu",
-"Versions" => "Versioonid",
-"This will delete all existing backup versions of your files" => "See kustutab kõik sinu failidest tehtud varuversiooni",
"Files Versioning" => "Failide versioonihaldus",
"Enable" => "Luba"
);
diff --git a/apps/files_versions/l10n/eu.php b/apps/files_versions/l10n/eu.php
index d84d9011707..c6b4cd7692d 100644
--- a/apps/files_versions/l10n/eu.php
+++ b/apps/files_versions/l10n/eu.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Iraungi bertsio guztiak",
"History" => "Historia",
-"Versions" => "Bertsioak",
-"This will delete all existing backup versions of your files" => "Honek zure fitxategien bertsio guztiak ezabatuko ditu",
"Files Versioning" => "Fitxategien Bertsioak",
"Enable" => "Gaitu"
);
diff --git a/apps/files_versions/l10n/fa.php b/apps/files_versions/l10n/fa.php
index 98dd415969a..9b618fdd320 100644
--- a/apps/files_versions/l10n/fa.php
+++ b/apps/files_versions/l10n/fa.php
@@ -1,3 +1,4 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "انقضای تمامی نسخه‌ها"
+"History" => "تاریخچه",
+"Enable" => "ÙØ¹Ø§Ù„"
);
diff --git a/apps/files_versions/l10n/fi_FI.php b/apps/files_versions/l10n/fi_FI.php
index 3cec4c04bfe..bdce8e9fe52 100644
--- a/apps/files_versions/l10n/fi_FI.php
+++ b/apps/files_versions/l10n/fi_FI.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Vanhenna kaikki versiot",
"History" => "Historia",
-"Versions" => "Versiot",
-"This will delete all existing backup versions of your files" => "Tämä poistaa kaikki tiedostojesi olemassa olevat varmuuskopioversiot",
"Files Versioning" => "Tiedostojen versiointi",
"Enable" => "Käytä"
);
diff --git a/apps/files_versions/l10n/fr.php b/apps/files_versions/l10n/fr.php
index e6dbc274456..6b2cf9ba6b5 100644
--- a/apps/files_versions/l10n/fr.php
+++ b/apps/files_versions/l10n/fr.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Supprimer les versions intermédiaires",
+"Could not revert: %s" => "Impossible de restaurer %s",
+"success" => "succès",
+"File %s was reverted to version %s" => "Le fichier %s a été restauré dans sa version %s",
+"failure" => "échec",
+"File %s could not be reverted to version %s" => "Le fichier %s ne peut être restauré dans sa version %s",
+"No old versions available" => "Aucune ancienne version n'est disponible",
+"No path specified" => "Aucun chemin spécifié",
"History" => "Historique",
-"Versions" => "Versions",
-"This will delete all existing backup versions of your files" => "Cette opération va effacer toutes les versions intermédiaires de vos fichiers (et ne garder que la dernière version en date).",
+"Revert a file to a previous version by clicking on its revert button" => "Restaurez un fichier dans une version antérieure en cliquant sur son bouton de restauration",
"Files Versioning" => "Versionnage des fichiers",
"Enable" => "Activer"
);
diff --git a/apps/files_versions/l10n/gl.php b/apps/files_versions/l10n/gl.php
index f10c1e16263..7e44b8898bf 100644
--- a/apps/files_versions/l10n/gl.php
+++ b/apps/files_versions/l10n/gl.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Caducan todas as versións",
"History" => "Historial",
-"Versions" => "Versións",
-"This will delete all existing backup versions of your files" => "Isto eliminará todas as copias de seguranza que haxa dos seus ficheiros",
"Files Versioning" => "Sistema de versión de ficheiros",
"Enable" => "Activar"
);
diff --git a/apps/files_versions/l10n/he.php b/apps/files_versions/l10n/he.php
index 061e88b0dbf..9eb4df64857 100644
--- a/apps/files_versions/l10n/he.php
+++ b/apps/files_versions/l10n/he.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "הפגת תוקף כל הגרס×ות",
"History" => "היסטוריה",
-"Versions" => "גרס×ות",
-"This will delete all existing backup versions of your files" => "פעולה זו תמחק ×ת כל גיבויי הגרס×ות ×”×§×™×™×ž×™× ×©×œ ×”×§×‘×¦×™× ×©×œ×š",
"Files Versioning" => "שמירת הבדלי גרס×ות של קבצי×",
"Enable" => "הפעלה"
);
diff --git a/apps/files_versions/l10n/hu_HU.php b/apps/files_versions/l10n/hu_HU.php
index 1575eda3f35..95d37ad06ed 100644
--- a/apps/files_versions/l10n/hu_HU.php
+++ b/apps/files_versions/l10n/hu_HU.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Az összes korábbi változat törlése",
"History" => "Korábbi változatok",
-"Versions" => "Az állományok korábbi változatai",
-"This will delete all existing backup versions of your files" => "Itt törölni tudja állományainak összes korábbi verzióját",
"Files Versioning" => "Az állományok verzionálása",
"Enable" => "engedélyezve"
);
diff --git a/apps/files_versions/l10n/id.php b/apps/files_versions/l10n/id.php
index d8ac66c9763..6c553327c42 100644
--- a/apps/files_versions/l10n/id.php
+++ b/apps/files_versions/l10n/id.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "kadaluarsakan semua versi",
"History" => "riwayat",
-"Versions" => "versi",
-"This will delete all existing backup versions of your files" => "ini akan menghapus semua versi backup yang ada dari file anda",
"Files Versioning" => "pembuatan versi file",
"Enable" => "aktifkan"
);
diff --git a/apps/files_versions/l10n/is.php b/apps/files_versions/l10n/is.php
index f63939d3af9..ccb8287b71e 100644
--- a/apps/files_versions/l10n/is.php
+++ b/apps/files_versions/l10n/is.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Úrelda allar útgáfur",
"History" => "Saga",
-"Versions" => "Útgáfur",
-"This will delete all existing backup versions of your files" => "Þetta mun eyða öllum afritum af skránum þínum",
"Files Versioning" => "Útgáfur af skrám",
"Enable" => "Virkja"
);
diff --git a/apps/files_versions/l10n/it.php b/apps/files_versions/l10n/it.php
index 0b1e70823d5..3289f7f68d1 100644
--- a/apps/files_versions/l10n/it.php
+++ b/apps/files_versions/l10n/it.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Scadenza di tutte le versioni",
+"Could not revert: %s" => "Impossibild ripristinare: %s",
+"success" => "completata",
+"File %s was reverted to version %s" => "Il file %s è stato ripristinato alla versione %s",
+"failure" => "non riuscita",
+"File %s could not be reverted to version %s" => "Il file %s non può essere ripristinato alla versione %s",
+"No old versions available" => "Non sono disponibili versioni precedenti",
+"No path specified" => "Nessun percorso specificato",
"History" => "Cronologia",
-"Versions" => "Versioni",
-"This will delete all existing backup versions of your files" => "Ciò eliminerà tutte le versioni esistenti dei tuoi file",
+"Revert a file to a previous version by clicking on its revert button" => "Ripristina un file a una versione precedente facendo clic sul rispettivo pulsante di ripristino",
"Files Versioning" => "Controllo di versione dei file",
"Enable" => "Abilita"
);
diff --git a/apps/files_versions/l10n/ja_JP.php b/apps/files_versions/l10n/ja_JP.php
index 367152c0743..16018765708 100644
--- a/apps/files_versions/l10n/ja_JP.php
+++ b/apps/files_versions/l10n/ja_JP.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã™ã‚‹",
+"Could not revert: %s" => "å…ƒã«æˆ»ã›ã¾ã›ã‚“ã§ã—ãŸ: %s",
+"success" => "æˆåŠŸ",
+"File %s was reverted to version %s" => "ファイル %s ã‚’ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã«æˆ»ã—ã¾ã—ãŸ",
+"failure" => "失敗",
+"File %s could not be reverted to version %s" => "ファイル %s ã‚’ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã«æˆ»ã›ã¾ã›ã‚“ã§ã—ãŸ",
+"No old versions available" => "利用å¯èƒ½ãªå¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã‚りã¾ã›ã‚“",
+"No path specified" => "ãƒ‘ã‚¹ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“",
"History" => "履歴",
-"Versions" => "ãƒãƒ¼ã‚¸ãƒ§ãƒ³",
-"This will delete all existing backup versions of your files" => "ã“れã¯ã€ã‚ãªãŸã®ãƒ•ァイルã®ã™ã¹ã¦ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã—ã¾ã™",
+"Revert a file to a previous version by clicking on its revert button" => "ã‚‚ã¨ã«æˆ»ã™ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨ã€ãƒ•ァイルをéŽåŽ»ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æˆ»ã—ã¾ã™",
"Files Versioning" => "ファイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†",
"Enable" => "有効化"
);
diff --git a/apps/files_versions/l10n/ko.php b/apps/files_versions/l10n/ko.php
index 688babb1121..f40925e1be2 100644
--- a/apps/files_versions/l10n/ko.php
+++ b/apps/files_versions/l10n/ko.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "모든 버전 삭제",
"History" => "역사",
-"Versions" => "버전",
-"This will delete all existing backup versions of your files" => "ì´ íŒŒì¼ì˜ 모든 백업 ë²„ì „ì„ ì‚­ì œí•©ë‹ˆë‹¤",
"Files Versioning" => "íŒŒì¼ ë²„ì „ 관리",
"Enable" => "사용함"
);
diff --git a/apps/files_versions/l10n/ku_IQ.php b/apps/files_versions/l10n/ku_IQ.php
index 5fa3b9080d7..db5dbad49fc 100644
--- a/apps/files_versions/l10n/ku_IQ.php
+++ b/apps/files_versions/l10n/ku_IQ.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "وه‌شانه‌کان گشتیان به‌سه‌رده‌چن",
"History" => "مێژوو",
-"Versions" => "وه‌شان",
-"This will delete all existing backup versions of your files" => "ئه‌مه‌ سه‌رجه‌م پاڵپشتی وه‌شانه‌ هه‌بووه‌کانی په‌ڕگه‌کانت ده‌سڕینته‌وه",
"Files Versioning" => "وه‌شانی په‌ڕگه",
"Enable" => "چالاککردن"
);
diff --git a/apps/files_versions/l10n/lb.php b/apps/files_versions/l10n/lb.php
new file mode 100644
index 00000000000..3aa625ffc97
--- /dev/null
+++ b/apps/files_versions/l10n/lb.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"History" => "Historique",
+"Files Versioning" => "Fichier's Versionéierung ",
+"Enable" => "Aschalten"
+);
diff --git a/apps/files_versions/l10n/lt_LT.php b/apps/files_versions/l10n/lt_LT.php
index 3250ddc7c3c..adf4893020e 100644
--- a/apps/files_versions/l10n/lt_LT.php
+++ b/apps/files_versions/l10n/lt_LT.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Panaikinti visų versijų galiojimą",
"History" => "Istorija",
-"Versions" => "Versijos",
-"This will delete all existing backup versions of your files" => "Tai ištrins visas esamas failo versijas",
"Files Versioning" => "Failų versijos",
"Enable" => "Įjungti"
);
diff --git a/apps/files_versions/l10n/lv.php b/apps/files_versions/l10n/lv.php
new file mode 100644
index 00000000000..2203dc706b8
--- /dev/null
+++ b/apps/files_versions/l10n/lv.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Could not revert: %s" => "Nevarēja atgriezt — %s",
+"success" => "veiksme",
+"File %s was reverted to version %s" => "Datne %s tika atgriezt uz versiju %s",
+"failure" => "neveiksme",
+"File %s could not be reverted to version %s" => "Datni %s nevarēja atgriezt uz versiju %s",
+"No old versions available" => "Nav pieejamu vecÄku versiju",
+"No path specified" => "Nav norÄdÄ«ts ceļš",
+"History" => "Vēsture",
+"Revert a file to a previous version by clicking on its revert button" => "Atgriez datni uz iepriekšēju versiju, spiežot uz tÄs atgrieÅ¡anas pogu",
+"Files Versioning" => "Datņu versiju izskošana",
+"Enable" => "Aktivēt"
+);
diff --git a/apps/files_versions/l10n/mk.php b/apps/files_versions/l10n/mk.php
index 60a06ad3384..d3ec233fe41 100644
--- a/apps/files_versions/l10n/mk.php
+++ b/apps/files_versions/l10n/mk.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "ИÑтечи ги Ñите верзии",
"History" => "ИÑторија",
-"Versions" => "ВерÑии",
-"This will delete all existing backup versions of your files" => "Ова ќе ги избрише Ñите поÑтоечки резервни копии од вашите датотеки",
"Files Versioning" => "Верзии на датотеки",
"Enable" => "Овозможи"
);
diff --git a/apps/files_versions/l10n/nb_NO.php b/apps/files_versions/l10n/nb_NO.php
index b441008db01..18c72506102 100644
--- a/apps/files_versions/l10n/nb_NO.php
+++ b/apps/files_versions/l10n/nb_NO.php
@@ -1,7 +1,5 @@
<?php $TRANSLATIONS = array(
"History" => "Historie",
-"Versions" => "Versjoner",
-"This will delete all existing backup versions of your files" => "Dette vil slette alle tidligere versjoner av alle filene dine",
"Files Versioning" => "Fil versjonering",
"Enable" => "Aktiver"
);
diff --git a/apps/files_versions/l10n/nl.php b/apps/files_versions/l10n/nl.php
index f9b5507621d..cd147ca693f 100644
--- a/apps/files_versions/l10n/nl.php
+++ b/apps/files_versions/l10n/nl.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Alle versies laten verlopen",
"History" => "Geschiedenis",
-"Versions" => "Versies",
-"This will delete all existing backup versions of your files" => "Dit zal alle bestaande backup versies van uw bestanden verwijderen",
"Files Versioning" => "Bestand versies",
"Enable" => "Activeer"
);
diff --git a/apps/files_versions/l10n/pl.php b/apps/files_versions/l10n/pl.php
index 46c28d4590a..a0247b8abc6 100644
--- a/apps/files_versions/l10n/pl.php
+++ b/apps/files_versions/l10n/pl.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "WygasajÄ… wszystkie wersje",
"History" => "Historia",
-"Versions" => "Wersje",
-"This will delete all existing backup versions of your files" => "Spowoduje to usunięcie wszystkich istniejących wersji kopii zapasowych plików",
"Files Versioning" => "Wersjonowanie plików",
"Enable" => "Włącz"
);
diff --git a/apps/files_versions/l10n/pt_BR.php b/apps/files_versions/l10n/pt_BR.php
index 3d39a533d65..854a30e6bee 100644
--- a/apps/files_versions/l10n/pt_BR.php
+++ b/apps/files_versions/l10n/pt_BR.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Expirar todas as versões",
"History" => "Histórico",
-"Versions" => "Versões",
-"This will delete all existing backup versions of your files" => "Isso removerá todas as versões de backup existentes dos seus arquivos",
"Files Versioning" => "Versionamento de Arquivos",
"Enable" => "Habilitar"
);
diff --git a/apps/files_versions/l10n/pt_PT.php b/apps/files_versions/l10n/pt_PT.php
index 2ddf70cc6c5..629809f9556 100644
--- a/apps/files_versions/l10n/pt_PT.php
+++ b/apps/files_versions/l10n/pt_PT.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Expirar todas as versões",
+"Could not revert: %s" => "Não foi possível reverter: %s",
+"success" => "Sucesso",
+"File %s was reverted to version %s" => "O ficheiro %s foi revertido para a versão %s",
+"failure" => "Falha",
+"File %s could not be reverted to version %s" => "Não foi possível reverter o ficheiro %s para a versão %s",
+"No old versions available" => "Não existem versões mais antigas",
+"No path specified" => "Nenhum caminho especificado",
"History" => "Histórico",
-"Versions" => "Versões",
-"This will delete all existing backup versions of your files" => "Isto irá apagar todas as versões de backup do seus ficheiros",
+"Revert a file to a previous version by clicking on its revert button" => "Reverter um ficheiro para uma versão anterior clicando no seu botão reverter.",
"Files Versioning" => "Versionamento de Ficheiros",
"Enable" => "Activar"
);
diff --git a/apps/files_versions/l10n/ro.php b/apps/files_versions/l10n/ro.php
index e23e771e392..7dfaee3672b 100644
--- a/apps/files_versions/l10n/ro.php
+++ b/apps/files_versions/l10n/ro.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Expiră toate versiunile",
"History" => "Istoric",
-"Versions" => "Versiuni",
-"This will delete all existing backup versions of your files" => "Această acțiune va șterge toate versiunile salvate ale fișierelor tale",
"Files Versioning" => "Versionare fișiere",
"Enable" => "Activare"
);
diff --git a/apps/files_versions/l10n/ru.php b/apps/files_versions/l10n/ru.php
index d698e90b8b8..221d24ce8d1 100644
--- a/apps/files_versions/l10n/ru.php
+++ b/apps/files_versions/l10n/ru.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "ПроÑрочить вÑе верÑии",
+"Could not revert: %s" => "Ðе может быть возвращён: %s",
+"success" => "уÑпех",
+"File %s was reverted to version %s" => "Файл %s был возвращён к верÑии %s",
+"failure" => "провал",
+"File %s could not be reverted to version %s" => "Файл %s не может быть возвращён к верÑии %s",
+"No old versions available" => "Ðет доÑтупных Ñтарых верÑий",
+"No path specified" => "Путь не указан",
"History" => "ИÑториÑ",
-"Versions" => "ВерÑии",
-"This will delete all existing backup versions of your files" => "ОчиÑтить ÑпиÑок верÑий ваших файлов",
+"Revert a file to a previous version by clicking on its revert button" => "Вернуть файл к предыдущей верÑии нажатием на кнопку возврата",
"Files Versioning" => "ВерÑии файлов",
"Enable" => "Включить"
);
diff --git a/apps/files_versions/l10n/ru_RU.php b/apps/files_versions/l10n/ru_RU.php
index 557c2f8e6d1..8656e346eb6 100644
--- a/apps/files_versions/l10n/ru_RU.php
+++ b/apps/files_versions/l10n/ru_RU.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Срок дейÑÑ‚Ð²Ð¸Ñ Ð²Ñех верÑий иÑтекает",
"History" => "ИÑториÑ",
-"Versions" => "ВерÑии",
-"This will delete all existing backup versions of your files" => "Это приведет к удалению вÑех ÑущеÑтвующих верÑий резервной копии Ваших файлов",
"Files Versioning" => "Файлы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми",
"Enable" => "Включить"
);
diff --git a/apps/files_versions/l10n/si_LK.php b/apps/files_versions/l10n/si_LK.php
index dbddf6dc2e9..37debf869bc 100644
--- a/apps/files_versions/l10n/si_LK.php
+++ b/apps/files_versions/l10n/si_LK.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "සියලු අනුවà·à¶¯ අවලංගු කරන්න",
"History" => "ඉතිහà·à·ƒà¶º",
-"Versions" => "අනුවà·à¶¯",
-"This will delete all existing backup versions of your files" => "මෙයින් ඔබගේ ගොනුවේ රක්à·à·’à¶­ කරනු à¶½à·à¶¶à·” අනුවà·à¶¯ සියල්ල මක෠දමනු à¶½à·à¶¶à·š",
"Files Versioning" => "ගොනු අනුවà·à¶¯à¶ºà¶±à·Š",
"Enable" => "සක්â€à¶»à·’ය කරන්න"
);
diff --git a/apps/files_versions/l10n/sk_SK.php b/apps/files_versions/l10n/sk_SK.php
index 132c6c09682..8b46e93bb97 100644
--- a/apps/files_versions/l10n/sk_SK.php
+++ b/apps/files_versions/l10n/sk_SK.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Expirovať všetky verzie",
+"Could not revert: %s" => "Nemožno obnoviť: %s",
+"success" => "úspech",
+"File %s was reverted to version %s" => "Súbor %s bol obnovený na verziu %s",
+"failure" => "chyba",
+"File %s could not be reverted to version %s" => "Súbor %s nemohol byť obnovený na verziu %s",
+"No old versions available" => "Nie sú dostupné žiadne staršie verzie",
+"No path specified" => "Nevybrali ste cestu",
"History" => "História",
-"Versions" => "Verzie",
-"This will delete all existing backup versions of your files" => "Budú zmazané všetky zálohované verzie vašich súborov",
+"Revert a file to a previous version by clicking on its revert button" => "Obnovte súbor do predoÅ¡lej verzie kliknutím na tlaÄítko obnoviÅ¥",
"Files Versioning" => "Vytváranie verzií súborov",
"Enable" => "Zapnúť"
);
diff --git a/apps/files_versions/l10n/sl.php b/apps/files_versions/l10n/sl.php
index 22b890a042d..7f386c9edaa 100644
--- a/apps/files_versions/l10n/sl.php
+++ b/apps/files_versions/l10n/sl.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Zastaraj vse razliÄice",
"History" => "Zgodovina",
-"Versions" => "RazliÄice",
-"This will delete all existing backup versions of your files" => "S tem bodo izbrisane vse obstojeÄe razliÄice varnostnih kopij vaÅ¡ih datotek",
"Files Versioning" => "Sledenje razliÄicam",
"Enable" => "OmogoÄi"
);
diff --git a/apps/files_versions/l10n/sr.php b/apps/files_versions/l10n/sr.php
new file mode 100644
index 00000000000..0195f84567f
--- /dev/null
+++ b/apps/files_versions/l10n/sr.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"History" => "ИÑторија",
+"Files Versioning" => "Прављење верзија датотека",
+"Enable" => "Омогући"
+);
diff --git a/apps/files_versions/l10n/sv.php b/apps/files_versions/l10n/sv.php
index e36164e30ab..853644848f4 100644
--- a/apps/files_versions/l10n/sv.php
+++ b/apps/files_versions/l10n/sv.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Upphör alla versioner",
+"Could not revert: %s" => "Kunde inte återställa: %s",
+"success" => "lyckades",
+"File %s was reverted to version %s" => "Filen %s återställdes till version %s",
+"failure" => "misslyckades",
+"File %s could not be reverted to version %s" => "Filen %s kunde inte återställas till version %s",
+"No old versions available" => "Inga gamla versioner finns tillgängliga",
+"No path specified" => "Ingen sökväg angiven",
"History" => "Historik",
-"Versions" => "Versioner",
-"This will delete all existing backup versions of your files" => "Detta kommer att radera alla befintliga säkerhetskopior av dina filer",
+"Revert a file to a previous version by clicking on its revert button" => "Återställ en fil till en tidigare version genom att klicka på knappen",
"Files Versioning" => "Versionshantering av filer",
"Enable" => "Aktivera"
);
diff --git a/apps/files_versions/l10n/ta_LK.php b/apps/files_versions/l10n/ta_LK.php
index f1215b3ecc1..aca76dcc262 100644
--- a/apps/files_versions/l10n/ta_LK.php
+++ b/apps/files_versions/l10n/ta_LK.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "எலà¯à®²à®¾ பதிபà¯à®ªà¯à®•ளà¯à®®à¯ காலாவதியாகிவிடà¯à®Ÿà®¤à¯",
"History" => "வரலாறà¯",
-"Versions" => "பதிபà¯à®ªà¯à®•ளà¯",
-"This will delete all existing backup versions of your files" => "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கோபà¯à®ªà¯à®•à¯à®•ளில௠à®à®±à¯à®•னவே உளà¯à®³ ஆதாரநகலà¯à®•ளின௠பதிபà¯à®ªà¯à®•à¯à®•ளை இவை அழிதà¯à®¤à¯à®µà®¿à®Ÿà¯à®®à¯",
"Files Versioning" => "கோபà¯à®ªà¯ பதிபà¯à®ªà¯à®•ளà¯",
"Enable" => "இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•"
);
diff --git a/apps/files_versions/l10n/th_TH.php b/apps/files_versions/l10n/th_TH.php
index 89b9f626911..e1e996903ae 100644
--- a/apps/files_versions/l10n/th_TH.php
+++ b/apps/files_versions/l10n/th_TH.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "หมดอายุทุà¸à¸£à¸¸à¹ˆà¸™",
"History" => "ประวัติ",
-"Versions" => "รุ่น",
-"This will delete all existing backup versions of your files" => "นี่จะเป็นลบทิ้งไฟล์รุ่นที่ทำà¸à¸²à¸£à¸ªà¸³à¸£à¸­à¸‡à¸‚้อมูลทั้งหมดที่มีอยู่ของคุณทิ้งไป",
"Files Versioning" => "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”เวอร์ชั่นของไฟล์",
"Enable" => "เปิดใช้งาน"
);
diff --git a/apps/files_versions/l10n/tr.php b/apps/files_versions/l10n/tr.php
index 73f207d5024..e9a4c4702e1 100644
--- a/apps/files_versions/l10n/tr.php
+++ b/apps/files_versions/l10n/tr.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Tüm sürümleri sona erdir",
"History" => "Geçmiş",
-"Versions" => "Sürümler",
-"This will delete all existing backup versions of your files" => "Bu dosyalarınızın tüm yedek sürümlerini silecektir",
"Files Versioning" => "Dosya Sürümleri",
"Enable" => "EtkinleÅŸtir"
);
diff --git a/apps/files_versions/l10n/uk.php b/apps/files_versions/l10n/uk.php
index 7532f755c88..49acda81079 100644
--- a/apps/files_versions/l10n/uk.php
+++ b/apps/files_versions/l10n/uk.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Термін дії вÑÑ–Ñ… верÑій",
"History" => "ІÑторіÑ",
-"Versions" => "ВерÑÑ–Ñ—",
-"This will delete all existing backup versions of your files" => "Це призведе до Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… Ñ–Ñнуючих збережених верÑій Ваших файлів",
"Files Versioning" => "ВерÑÑ–Ñ— файлів",
"Enable" => "Включити"
);
diff --git a/apps/files_versions/l10n/vi.php b/apps/files_versions/l10n/vi.php
index 260c3b6b39c..675cb841c78 100644
--- a/apps/files_versions/l10n/vi.php
+++ b/apps/files_versions/l10n/vi.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "Hết hạn tất cả các phiên bản",
+"Could not revert: %s" => "Không thể khôi phục: %s",
+"success" => "thành công",
+"File %s was reverted to version %s" => "File %s đã được khôi phục vỠphiên bản %s",
+"failure" => "Thất bại",
+"File %s could not be reverted to version %s" => "File %s không thể khôi phục vỠphiên bản %s",
+"No old versions available" => "Không có phiên bản cũ nào",
+"No path specified" => "Không chỉ ra đưá»ng dẫn rõ ràng",
"History" => "Lịch sử",
-"Versions" => "Phiên bản",
-"This will delete all existing backup versions of your files" => "Khi bạn thực hiện thao tác này sẽ xóa tất cả các phiên bản sao lưu hiện có ",
+"Revert a file to a previous version by clicking on its revert button" => "Khôi phục một file vỠphiên bản trước đó bằng cách click vào nút Khôi phục tương ứng",
"Files Versioning" => "Phiên bản tập tin",
"Enable" => "Bật "
);
diff --git a/apps/files_versions/l10n/zh_CN.GB2312.php b/apps/files_versions/l10n/zh_CN.GB2312.php
index 107805221b8..d9e788033aa 100644
--- a/apps/files_versions/l10n/zh_CN.GB2312.php
+++ b/apps/files_versions/l10n/zh_CN.GB2312.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "作废所有版本",
"History" => "历å²",
-"Versions" => "版本",
-"This will delete all existing backup versions of your files" => "这将删除所有您现有文件的备份版本",
"Files Versioning" => "文件版本",
"Enable" => "å¯ç”¨"
);
diff --git a/apps/files_versions/l10n/zh_CN.php b/apps/files_versions/l10n/zh_CN.php
index 48e7157c98f..14301ff0c04 100644
--- a/apps/files_versions/l10n/zh_CN.php
+++ b/apps/files_versions/l10n/zh_CN.php
@@ -1,8 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "过期所有版本",
"History" => "历å²",
-"Versions" => "版本",
-"This will delete all existing backup versions of your files" => "将会删除您的文件的所有备份版本",
"Files Versioning" => "文件版本",
"Enable" => "å¼€å¯"
);
diff --git a/apps/files_versions/l10n/zh_TW.php b/apps/files_versions/l10n/zh_TW.php
index a21fdc85f8d..a7b496b37db 100644
--- a/apps/files_versions/l10n/zh_TW.php
+++ b/apps/files_versions/l10n/zh_TW.php
@@ -1,7 +1,5 @@
<?php $TRANSLATIONS = array(
-"Expire all versions" => "所有逾期的版本",
"History" => "æ­·å²",
-"Versions" => "版本",
"Files Versioning" => "檔案版本化中...",
"Enable" => "啟用"
);
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index e897a81f7af..dc02c605c44 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -10,7 +10,7 @@
* This class contains all hooks.
*/
-namespace OCA_Versions;
+namespace OCA\Files_Versions;
class Hooks {
@@ -21,9 +21,9 @@ class Hooks {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $versions = new Storage( new \OC_FilesystemView('') );
+ $versions = new Storage( new \OC\Files\View('') );
- $path = $params[\OC_Filesystem::signal_param_path];
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
if($path<>'') $versions->store( $path );
@@ -39,14 +39,14 @@ class Hooks {
* cleanup the versions directory if the actual file gets deleted
*/
public static function remove_hook($params) {
- $versions_fileview = \OCP\Files::getStorage('files_versions');
- $rel_path = $params['path'];
- $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_path.'.v';
- if(Storage::isversioned($rel_path)) {
- $versions = Storage::getVersions($rel_path);
- foreach ($versions as $v) {
- unlink($abs_path . $v['version']);
- }
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ $versions = new Storage( new \OC_FilesystemView('') );
+
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
+
+ if($path<>'') $versions->delete( $path );
+
}
}
@@ -58,18 +58,16 @@ class Hooks {
* of the stored versions along the actual file
*/
public static function rename_hook($params) {
- $versions_fileview = \OCP\Files::getStorage('files_versions');
- $rel_oldpath = $params['oldpath'];
- $abs_oldpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_oldpath.'.v';
- $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$params['newpath'].'.v';
- if(Storage::isversioned($rel_oldpath)) {
- $info=pathinfo($abs_newpath);
- if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
- $versions = Storage::getVersions($rel_oldpath);
- foreach ($versions as $v) {
- rename($abs_oldpath.$v['version'], $abs_newpath.$v['version']);
- }
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ $versions = new Storage( new \OC_FilesystemView('') );
+
+ $oldpath = $params['oldpath'];
+ $newpath = $params['newpath'];
+
+ if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath );
+
}
}
-
+
}
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index 0ccaaf1095d..b54bc4a4422 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -1,6 +1,7 @@
<?php
/**
* Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org>
+ * 2013 Bjoern Schiessle <schiessle@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -12,28 +13,27 @@
* A class to handle the versioning of files.
*/
-namespace OCA_Versions;
+namespace OCA\Files_Versions;
class Storage {
-
- // config.php configuration:
- // - files_versions
- // - files_versionsfolder
- // - files_versionsblacklist
- // - files_versionsmaxfilesize
- // - files_versionsinterval
- // - files_versionmaxversions
- //
- // todo:
- // - finish porting to OC_FilesystemView to enable network transparency
- // - add transparent compression. first test if it´s worth it.
-
const DEFAULTENABLED=true;
- const DEFAULTBLACKLIST='avi mp3 mpg mp4 ctmp';
- const DEFAULTMAXFILESIZE=1048576; // 10MB
- const DEFAULTMININTERVAL=60; // 1 min
- const DEFAULTMAXVERSIONS=50;
+ const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota
+
+ private static $max_versions_per_interval = array(
+ 1 => array('intervalEndsAfter' => 10, //first 10sec, one version every 2sec
+ 'step' => 2),
+ 2 => array('intervalEndsAfter' => 60, //next minute, one version every 10sec
+ 'step' => 10),
+ 3 => array('intervalEndsAfter' => 3600, //next hour, one version every minute
+ 'step' => 60),
+ 4 => array('intervalEndsAfter' => 86400, //next 24h, one version every hour
+ 'step' => 3600),
+ 5 => array('intervalEndsAfter' => 2592000, //next 30days, one version per day
+ 'step' => 86400),
+ 6 => array('intervalEndsAfter' => -1, //until the end one version per week
+ 'step' => 604800),
+ );
private static function getUidAndFilename($filename)
{
@@ -58,8 +58,8 @@ class Storage {
public function store($filename) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
- $files_view = new \OC_FilesystemView('/'.$uid .'/files');
- $users_view = new \OC_FilesystemView('/'.$uid);
+ $files_view = new \OC\Files\View('/'.\OCP\User::getUser() .'/files');
+ $users_view = new \OC\Files\View('/'.\OCP\User::getUser());
//check if source file already exist as version to avoid recursions.
// todo does this check work?
@@ -72,102 +72,108 @@ class Storage {
return false;
}
- // check filetype blacklist
- $blacklist=explode(' ', \OCP\Config::getSystemValue('files_versionsblacklist', Storage::DEFAULTBLACKLIST));
- foreach($blacklist as $bl) {
- $parts=explode('.', $filename);
- $ext=end($parts);
- if(strtolower($ext)==$bl) {
- return false;
- }
- }
// we should have a source file to work with
if (!$files_view->file_exists($filename)) {
return false;
}
- // check filesize
- if($files_view->filesize($filename)>\OCP\Config::getSystemValue('files_versionsmaxfilesize', Storage::DEFAULTMAXFILESIZE)) {
- return false;
- }
-
-
- // check mininterval if the file is being modified by the owner (all shared files should be versioned despite mininterval)
- if ($uid == \OCP\User::getUser()) {
- $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
- $versionsName=\OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
- $versionsFolderName=\OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
- $matches=glob($versionsName.'.v*');
- sort($matches);
- $parts=explode('.v', end($matches));
- if((end($parts)+Storage::DEFAULTMININTERVAL)>time()) {
- return false;
- }
- }
-
-
// create all parent folders
$info=pathinfo($filename);
+ $versionsFolderName=\OCP\Config::getSystemValue('datadirectory').$users_view->getAbsolutePath('files_versions/');
if(!file_exists($versionsFolderName.'/'.$info['dirname'])) {
mkdir($versionsFolderName.'/'.$info['dirname'], 0750, true);
}
// store a new version of a file
- $users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.time());
-
+ $result = $users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename));
+ if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
+ $versionsSize = self::calculateSize($uid);
+ }
+ $versionsSize += $users_view->filesize('files'.$filename);
+
// expire old revisions if necessary
- Storage::expire($filename);
+ $newSize = self::expire($filename, $versionsSize);
+
+ if ( $newSize != $versionsSize ) {
+ \OCP\Config::setAppValue('files_versions', 'size', $versionsSize);
+ }
}
}
/**
+ * Delete versions of a file
+ */
+ public static function delete($filename) {
+ list($uid, $filename) = self::getUidAndFilename($filename);
+ $versions_fileview = new \OC_FilesystemView('/'.$uid .'/files_versions');
+
+ $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v';
+ if( ($versions = self::getVersions($filename)) ) {
+ if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
+ $versionsSize = self::calculateSize($uid);
+ }
+ foreach ($versions as $v) {
+ unlink($abs_path . $v['version']);
+ $versionsSize -= $v['size'];
+ }
+ \OCP\Config::setAppValue('files_versions', 'size', $versionsSize);
+ }
+ }
+
+ /**
+ * rename versions of a file
+ */
+ public static function rename($oldpath, $newpath) {
+ list($uid, $oldpath) = self::getUidAndFilename($oldpath);
+ list($uidn, $newpath) = self::getUidAndFilename($newpath);
+ $versions_view = new \OC_FilesystemView('/'.$uid .'/files_versions');
+ $files_view = new \OC_FilesystemView('/'.$uid .'/files');
+ $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_view->getAbsolutePath('').$newpath;
+
+ if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) {
+ $versions_view->rename($oldpath, $newpath);
+ } else if ( ($versions = Storage::getVersions($oldpath)) ) {
+ $info=pathinfo($abs_newpath);
+ if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
+ $versions = Storage::getVersions($oldpath);
+ foreach ($versions as $v) {
+ $versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']);
+ }
+ }
+ }
+
+ /**
* rollback to an old version of a file.
*/
public static function rollback($filename, $revision) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
- $users_view = new \OC_FilesystemView('/'.$uid);
-
+ $users_view = new \OC\Files\View('/'.$uid);
+ $versionCreated = false;
+
+ //first create a new version
+ $version = 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename);
+ if ( !$users_view->file_exists($version)) {
+ $users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename));
+ $versionCreated = true;
+ }
+
// rollback
if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {
-
+ $users_view->touch('files'.$filename, $revision);
+ Storage::expire($filename);
return true;
- }else{
-
- return false;
-
+ }else if ( $versionCreated ) {
+ $users_view->unlink($version);
}
-
}
+ return false;
}
- /**
- * check if old versions of a file exist.
- */
- public static function isversioned($filename) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- list($uid, $filename) = self::getUidAndFilename($filename);
- $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
-
- $versionsName=\OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
-
- // check for old versions
- $matches=glob($versionsName.'.v*');
- if(count($matches)>0) {
- return true;
- }else{
- return false;
- }
- }else{
- return(false);
- }
- }
-
-
/**
* @brief get a list of all available versions of a file in descending chronological order
@@ -178,7 +184,7 @@ class Storage {
public static function getVersions( $filename, $count = 0 ) {
if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
list($uid, $filename) = self::getUidAndFilename($filename);
- $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+ $versions_fileview = new \OC\Files\View('/' . \OCP\User::getUser() . '/files_versions');
$versionsName = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
$versions = array();
@@ -187,92 +193,234 @@ class Storage {
sort( $matches );
- $i = 0;
-
- $files_view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files');
+ $files_view = new \OC_FilesystemView('/'.$uid.'/files');
$local_file = $files_view->getLocalFile($filename);
- foreach( $matches as $ma ) {
+ $local_file_md5 = \md5_file( $local_file );
- $i++;
- $versions[$i]['cur'] = 0;
+ foreach( $matches as $ma ) {
$parts = explode( '.v', $ma );
- $versions[$i]['version'] = ( end( $parts ) );
+ $version = ( end( $parts ) );
+ $key = $version.'#'.$filename;
+ $versions[$key]['cur'] = 0;
+ $versions[$key]['version'] = $version;
+ $versions[$key]['path'] = $filename;
+ $versions[$key]['size'] = $versions_fileview->filesize($filename.'.v'.$version);
// if file with modified date exists, flag it in array as currently enabled version
- ( \md5_file( $ma ) == \md5_file( $local_file ) ? $versions[$i]['fileMatch'] = 1 : $versions[$i]['fileMatch'] = 0 );
+ ( \md5_file( $ma ) == $local_file_md5 ? $versions[$key]['fileMatch'] = 1 : $versions[$key]['fileMatch'] = 0 );
}
$versions = array_reverse( $versions );
foreach( $versions as $key => $value ) {
-
// flag the first matched file in array (which will have latest modification date) as current version
if ( $value['fileMatch'] ) {
-
$value['cur'] = 1;
break;
-
}
-
}
$versions = array_reverse( $versions );
// only show the newest commits
if( $count != 0 and ( count( $versions )>$count ) ) {
-
$versions = array_slice( $versions, count( $versions ) - $count );
-
}
return( $versions );
-
} else {
-
// if versioning isn't enabled then return an empty array
return( array() );
-
}
}
/**
- * @brief Erase a file's versions which exceed the set quota
+ * @brief get the size of all stored versions from a given user
+ * @param $uid id from the user
+ * @return size of vesions
*/
- public static function expire($filename) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- list($uid, $filename) = self::getUidAndFilename($filename);
+ private static function calculateSize($uid) {
+ if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
-
- $versionsName=\OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
-
- // check for old versions
- $matches = glob( $versionsName.'.v*' );
-
- if( count( $matches ) > \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) ) {
-
- $numberToDelete = count($matches) - \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS );
-
- // delete old versions of a file
- $deleteItems = array_slice( $matches, 0, $numberToDelete );
-
- foreach( $deleteItems as $de ) {
-
- unlink( $versionsName.'.v'.$de );
-
+ $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
+
+ $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
+
+ $size = 0;
+
+ foreach ($iterator as $path) {
+ if ( preg_match('/^.+\.v(\d+)$/', $path, $match) ) {
+ $relpath = substr($path, strlen($versionsRoot)-1);
+ $size += $versions_fileview->filesize($relpath);
}
}
+
+ return $size;
+ }
+ }
+
+ /**
+ * @brief returns all stored file versions from a given user
+ * @param $uid id to the user
+ * @return array with contains two arrays 'all' which contains all versions sorted by age and 'by_file' which contains all versions sorted by filename
+ */
+ private static function getAllVersions($uid) {
+ if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
+ $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+ $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
+
+ $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
+
+ $versions = array();
+
+ foreach ($iterator as $path) {
+ if ( preg_match('/^.+\.v(\d+)$/', $path, $match) ) {
+ $relpath = substr($path, strlen($versionsRoot)-1);
+ $versions[$match[1].'#'.$relpath] = array('path' => $relpath, 'timestamp' => $match[1]);
+ }
+ }
+
+ ksort($versions);
+
+ $i = 0;
+
+ $result = array();
+
+ foreach( $versions as $key => $value ) {
+ $i++;
+ $size = $versions_fileview->filesize($value['path']);
+ $filename = substr($value['path'], 0, -strlen($value['timestamp'])-2);
+
+ $result['all'][$key]['version'] = $value['timestamp'];
+ $result['all'][$key]['path'] = $filename;
+ $result['all'][$key]['size'] = $size;
+
+ $filename = substr($value['path'], 0, -strlen($value['timestamp'])-2);
+ $result['by_file'][$filename][$key]['version'] = $value['timestamp'];
+ $result['by_file'][$filename][$key]['path'] = $filename;
+ $result['by_file'][$filename][$key]['size'] = $size;
+
+ }
+
+ return $result;
}
}
/**
- * @brief Erase all old versions of all user files
- * @return true/false
+ * @brief Erase a file's versions which exceed the set quota
*/
- public function expireAll() {
- $view = \OCP\Files::getStorage('files_versions');
- return $view->deleteAll('', true);
+ private static function expire($filename, $versionsSize = null) {
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+ list($uid, $filename) = self::getUidAndFilename($filename);
+ $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+
+ // get available disk space for user
+ $quota = \OCP\Util::computerFileSize(\OC_Preferences::getValue($uid, 'files', 'quota'));
+ if ( $quota == null ) {
+ $quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota'));
+ }
+ if ( $quota == null ) {
+ $quota = \OC\Files\Filesystem::free_space('/');
+ }
+
+ // make sure that we have the current size of the version history
+ if ( $versionsSize === null ) {
+ if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
+ $versionsSize = self::calculateSize($uid);
+ }
+ }
+
+ // calculate available space for version history
+ $files_view = new \OC_FilesystemView('/'.$uid.'/files');
+ $rootInfo = $files_view->getFileInfo('/');
+ $free = $quota-$rootInfo['size']; // remaining free space for user
+ if ( $free > 0 ) {
+ $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $versionsSize; // how much space can be used for versions
+ } else {
+ $availableSpace = $free-$versionsSize;
+ }
+
+ // after every 1000s run reduce the number of all versions not only for the current file
+ $random = rand(0, 1000);
+ if ($random == 0) {
+ $result = Storage::getAllVersions($uid);
+ $versions_by_file = $result['by_file'];
+ $all_versions = $result['all'];
+ } else {
+ $all_versions = Storage::getVersions($filename);
+ $versions_by_file[$filename] = $all_versions;
+ }
+
+ $time = time();
+
+ // it is possible to expire versions from more than one file
+ // iterate through all given files
+ foreach ($versions_by_file as $filename => $versions) {
+ $versions = array_reverse($versions); // newest version first
+
+ $interval = 1;
+ $step = Storage::$max_versions_per_interval[$interval]['step'];
+ if (Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'] == -1) {
+ $nextInterval = -1;
+ } else {
+ $nextInterval = $time - Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'];
+ }
+
+ $firstVersion = reset($versions);
+ $firstKey = key($versions);
+ $prevTimestamp = $firstVersion['version'];
+ $nextVersion = $firstVersion['version'] - $step;
+ $remaining_versions[$firstKey] = $firstVersion;
+ unset($versions[$firstKey]);
+
+ foreach ($versions as $key => $version) {
+ $newInterval = true;
+ while ( $newInterval ) {
+ if ( $nextInterval == -1 || $version['version'] >= $nextInterval ) {
+ if ( $version['version'] > $nextVersion ) {
+ //distance between two version too small, delete version
+ $versions_fileview->unlink($version['path'].'.v'.$version['version']);
+ $availableSpace += $version['size'];
+ $versionsSize -= $version['size'];
+ unset($all_versions[$key]); // update array with all versions
+ } else {
+ $nextVersion = $version['version'] - $step;
+ }
+ $newInterval = false; // version checked so we can move to the next one
+ } else { // time to move on to the next interval
+ $interval++;
+ $step = Storage::$max_versions_per_interval[$interval]['step'];
+ $nextVersion = $prevTimestamp - $step;
+ if ( Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'] == -1 ) {
+ $nextInterval = -1;
+ } else {
+ $nextInterval = $time - Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'];
+ }
+ $newInterval = true; // we changed the interval -> check same version with new interval
+ }
+ }
+ $prevTimestamp = $version['version'];
+ }
+ }
+
+ // check if enough space is available after versions are rearranged.
+ // if not we delete the oldest versions until we meet the size limit for versions
+ $numOfVersions = count($all_versions);
+ $i = 0;
+ while ($availableSpace < 0) {
+ if ($i = $numOfVersions-2) break; // keep at least the last version
+ $versions_fileview->unlink($all_versions[$i]['path'].'.v'.$all_versions[$i]['version']);
+ $versionsSize -= $all_versions[$i]['size'];
+ $availableSpace += $all_versions[$i]['size'];
+ $i++;
+ }
+
+ return $versionsSize; // finally return the new size of the version history
+ }
+
+ return false;
}
}
diff --git a/apps/files_versions/settings-personal.php b/apps/files_versions/settings-personal.php
deleted file mode 100644
index 6555bc99c3e..00000000000
--- a/apps/files_versions/settings-personal.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-$tmpl = new OCP\Template( 'files_versions', 'settings-personal');
-
-OCP\Util::addscript('files_versions', 'settings-personal');
-
-return $tmpl->fetchPage();
diff --git a/apps/files_versions/templates/history.php b/apps/files_versions/templates/history.php
index cc5a494f19e..850ece89c98 100644
--- a/apps/files_versions/templates/history.php
+++ b/apps/files_versions/templates/history.php
@@ -17,7 +17,7 @@ if( isset( $_['message'] ) ) {
}
echo( '<strong>Versions of '.$_['path'] ).'</strong><br>';
- echo('<p><em>Revert a file to a previous version by clicking on its revert button</em></p><br />');
+ echo('<p><em>'.$l->t('Revert a file to a previous version by clicking on its revert button').'</em></p><br />');
foreach ( $_['versions'] as $v ) {
echo ' ';
diff --git a/apps/files_versions/templates/settings-personal.php b/apps/files_versions/templates/settings-personal.php
deleted file mode 100644
index 2b313a07c88..00000000000
--- a/apps/files_versions/templates/settings-personal.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<form id="versions">
- <fieldset class="personalblock">
- <legend>
- <strong><?php echo $l->t('Versions'); ?></strong>
- </legend>
- <button id="expireAllBtn">
- <?php echo $l->t('Expire all versions'); ?>
- <img style="display: none;" class="expireAllLoading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" />
- </button>
- <br /><em><?php echo $l->t('This will delete all existing backup versions of your files'); ?></em>
- </fieldset>
-</form>
diff --git a/apps/files_versions/templates/settings.php b/apps/files_versions/templates/settings.php
index 88063cb075b..bfca8366f5d 100644
--- a/apps/files_versions/templates/settings.php
+++ b/apps/files_versions/templates/settings.php
@@ -1,6 +1,6 @@
<form id="versionssettings">
- <fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Files Versioning');?></strong></legend>
- <input type="checkbox" name="versions" id="versions" value="1" <?php if (OCP\Config::getSystemValue('versions', 'true')=='true') echo ' checked="checked"'; ?> /> <label for="versions"><?php echo $l->t('Enable'); ?></label> <br/>
- </fieldset>
+ <fieldset class="personalblock">
+ <legend><strong><?php echo $l->t('Files Versioning');?></strong></legend>
+ <input type="checkbox" name="versions" id="versions" value="1" <?php if (OCP\Config::getSystemValue('versions', 'true')=='true') echo ' checked="checked"'; ?> /> <label for="versions"><?php echo $l->t('Enable'); ?></label> <br/>
+ </fieldset>
</form>
diff --git a/apps/files_versions/ajax/expireAll.php b/apps/user_ldap/ajax/deleteConfiguration.php
index 5c95885ffbd..b7d633a049d 100644
--- a/apps/files_versions/ajax/expireAll.php
+++ b/apps/user_ldap/ajax/deleteConfiguration.php
@@ -1,10 +1,10 @@
<?php
/**
- * ownCloud - user_migrate
+ * ownCloud - user_ldap
*
- * @author Sam Tuke
- * @copyright 2012 Sam Tuke samtuke@owncloud.com
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@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
@@ -21,24 +21,15 @@
*
*/
-// TODO: Allow admins to expire versions of any user
-// TODO: Provide feedback as to how many versions were deleted
-
// Check user and app status
-OCP\JSON::checkLoggedIn();
-OCP\App::checkAppEnabled('files_versions');
+OCP\JSON::checkAdminUser();
+OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
-$versions = new OCA_Versions\Storage();
-
-if( $versions->expireAll() ) {
-
+$prefix = $_POST['ldap_serverconfig_chooser'];
+if(\OCA\user_ldap\lib\Helper::deleteServerConfiguration($prefix)){
OCP\JSON::success();
- die();
-
} else {
-
- OCP\JSON::error();
- die();
-
+ $l=OC_L10N::get('user_ldap');
+ OCP\JSON::error(array('message' => $l->t('Failed to delete the server configuration')));
} \ No newline at end of file
diff --git a/apps/user_ldap/ajax/getConfiguration.php b/apps/user_ldap/ajax/getConfiguration.php
new file mode 100644
index 00000000000..dfae68d2dc9
--- /dev/null
+++ b/apps/user_ldap/ajax/getConfiguration.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@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/>.
+ *
+ */
+
+// Check user and app status
+OCP\JSON::checkAdminUser();
+OCP\JSON::checkAppEnabled('user_ldap');
+OCP\JSON::callCheck();
+
+$prefix = $_POST['ldap_serverconfig_chooser'];
+$connection = new \OCA\user_ldap\lib\Connection($prefix);
+OCP\JSON::success(array('configuration' => $connection->getConfiguration())); \ No newline at end of file
diff --git a/apps/user_ldap/ajax/getNewServerConfigPrefix.php b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
new file mode 100644
index 00000000000..17e78f87072
--- /dev/null
+++ b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@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/>.
+ *
+ */
+
+// Check user and app status
+OCP\JSON::checkAdminUser();
+OCP\JSON::checkAppEnabled('user_ldap');
+OCP\JSON::callCheck();
+
+$serverConnections = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
+sort($serverConnections);
+$lk = array_pop($serverConnections);
+$ln = intval(str_replace('s', '', $lk));
+$nk = 's'.str_pad($ln+1, 2, '0', STR_PAD_LEFT);
+OCP\JSON::success(array('configPrefix' => $nk)); \ No newline at end of file
diff --git a/apps/user_ldap/ajax/setConfiguration.php b/apps/user_ldap/ajax/setConfiguration.php
new file mode 100644
index 00000000000..206487c7e0a
--- /dev/null
+++ b/apps/user_ldap/ajax/setConfiguration.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@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/>.
+ *
+ */
+
+// Check user and app status
+OCP\JSON::checkAdminUser();
+OCP\JSON::checkAppEnabled('user_ldap');
+OCP\JSON::callCheck();
+
+$prefix = $_POST['ldap_serverconfig_chooser'];
+$connection = new \OCA\user_ldap\lib\Connection($prefix);
+$connection->setConfiguration($_POST);
+$connection->saveConfiguration();
+OCP\JSON::success(); \ No newline at end of file
diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php
index a82f7e4c17b..f8038e31469 100644
--- a/apps/user_ldap/ajax/testConfiguration.php
+++ b/apps/user_ldap/ajax/testConfiguration.php
@@ -4,7 +4,7 @@
* ownCloud - user_ldap
*
* @author Arthur Schiwon
- * @copyright 2012 Arthur Schiwon blizzz@owncloud.com
+ * @copyright 2012, 2013 Arthur Schiwon blizzz@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
@@ -26,14 +26,16 @@ OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
-$connection = new \OCA\user_ldap\lib\Connection(null);
+$l=OC_L10N::get('user_ldap');
+
+$connection = new \OCA\user_ldap\lib\Connection('', null);
if($connection->setConfiguration($_POST)) {
//Configuration is okay
if($connection->bind()) {
- OCP\JSON::success(array('message' => 'The configuration is valid and the connection could be established!'));
+ OCP\JSON::success(array('message' => $l->t('The configuration is valid and the connection could be established!')));
} else {
- OCP\JSON::error(array('message' => 'The configuration is valid, but the Bind failed. Please check the server settings and credentials.'));
+ OCP\JSON::error(array('message' => $l->t('The configuration is valid, but the Bind failed. Please check the server settings and credentials.')));
}
} else {
- OCP\JSON::error(array('message' => 'The configuration is invalid. Please look in the ownCloud log for further details.'));
+ OCP\JSON::error(array('message' => $l->t('The configuration is invalid. Please look in the ownCloud log for further details.')));
}
diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php
index ce3079da0ba..dec87684c9e 100644
--- a/apps/user_ldap/appinfo/app.php
+++ b/apps/user_ldap/appinfo/app.php
@@ -23,15 +23,23 @@
OCP\App::registerAdmin('user_ldap', 'settings');
-$connector = new OCA\user_ldap\lib\Connection('user_ldap');
-$userBackend = new OCA\user_ldap\USER_LDAP();
-$userBackend->setConnector($connector);
-$groupBackend = new OCA\user_ldap\GROUP_LDAP();
-$groupBackend->setConnector($connector);
+$configPrefixes = OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes(true);
+if(count($configPrefixes) == 1) {
+ $connector = new OCA\user_ldap\lib\Connection($configPrefixes[0]);
+ $userBackend = new OCA\user_ldap\USER_LDAP();
+ $userBackend->setConnector($connector);
+ $groupBackend = new OCA\user_ldap\GROUP_LDAP();
+ $groupBackend->setConnector($connector);
+} else {
+ $userBackend = new OCA\user_ldap\User_Proxy($configPrefixes);
+ $groupBackend = new OCA\user_ldap\Group_Proxy($configPrefixes);
+}
-// register user backend
-OC_User::useBackend($userBackend);
-OC_Group::useBackend($groupBackend);
+if(count($configPrefixes) > 0) {
+ // register user backend
+ OC_User::useBackend($userBackend);
+ OC_Group::useBackend($groupBackend);
+}
// add settings page to navigation
$entry = array(
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index a7605775274..53269edfb34 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -7,7 +7,7 @@
This app is not compatible to the WebDAV user backend.</description>
<licence>AGPL</licence>
<author>Dominik Schmidt and Arthur Schiwon</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<types>
<authentication/>
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index 9b54ba18b6c..bc32d4ef4cc 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -5,7 +5,7 @@
//ATTENTION
//Upgrade from ownCloud 3 (LDAP backend 0.1) to ownCloud 4.5 (LDAP backend 0.3) is not supported!!
//You must do upgrade to ownCloud 4.0 first!
-//The upgrade stuff in the section from 0.1 to 0.2 is just to minimize the bad efffects.
+//The upgrade stuff in the section from 0.1 to 0.2 is just to minimize the bad effects.
//settings
$pw = OCP\Config::getAppValue('user_ldap', 'ldap_password');
@@ -22,12 +22,10 @@ if($state == 'unset') {
OCP\Config::setSystemValue('ldapIgnoreNamingRules', false);
}
-// ### SUPPORTED upgrade path starts here ###
-
//from version 0.2 to 0.3 (0.2.0.x dev version)
$objects = array('user', 'group');
-$connector = new \OCA\user_ldap\lib\Connection('user_ldap');
+$connector = new \OCA\user_ldap\lib\Connection();
$userBE = new \OCA\user_ldap\USER_LDAP();
$userBE->setConnector($connector);
$groupBE = new \OCA\user_ldap\GROUP_LDAP();
@@ -80,3 +78,17 @@ function escapeDN($dn) {
return $dn;
}
+
+
+// SUPPORTED UPGRADE FROM Version 0.3 (ownCloud 4.5) to 0.4 (ownCloud 5)
+
+if(!isset($connector)) {
+ $connector = new \OCA\user_ldap\lib\Connection();
+}
+//it is required, that connections do have ldap_configuration_active setting stored in the database
+$connector->getConfiguration();
+$connector->saveConfiguration();
+
+// we don't save it anymore, was a well-meant bad idea. Clean up database.
+$query = OC_DB::prepare('DELETE FROM `*PREFIX*preferences` WHERE `appid` = ? AND `configkey` = ?');
+$query->execute(array('user_ldap' , 'homedir'));
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
index b1a5f4781d1..e4d93c8d610 100644
--- a/apps/user_ldap/appinfo/version
+++ b/apps/user_ldap/appinfo/version
@@ -1 +1 @@
-0.3.0.1 \ No newline at end of file
+0.3.9.4 \ No newline at end of file
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
index f3f41fb2d8b..84ada0832ab 100644
--- a/apps/user_ldap/css/settings.css
+++ b/apps/user_ldap/css/settings.css
@@ -2,9 +2,11 @@
width: 20%;
max-width: 200px;
display: inline-block;
+ vertical-align: top;
+ padding-top: 9px;
}
-#ldap fieldset input {
+#ldap fieldset input, #ldap fieldset textarea {
width: 70%;
display: inline-block;
}
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
index 63437310088..02ceecaea0b 100644
--- a/apps/user_ldap/group_ldap.php
+++ b/apps/user_ldap/group_ldap.php
@@ -171,7 +171,6 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
return array();
}
- $search = empty($search) ? '*' : '*'.$search.'*';
$groupUsers = array();
$isMemberUid = (strtolower($this->connection->ldapGroupMemberAssocAttr) == 'memberuid');
foreach($members as $member) {
@@ -179,7 +178,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
//we got uids, need to get their DNs to 'tranlsate' them to usernames
$filter = $this->combineFilterWithAnd(array(
\OCP\Util::mb_str_replace('%uid', $member, $this->connection>ldapLoginFilter, 'UTF-8'),
- $this->connection->ldapUserDisplayName.'='.$search
+ $this->getFilterPartForUserSearch($search)
));
$ldap_users = $this->fetchListOfUsers($filter, 'dn');
if(count($ldap_users) < 1) {
@@ -188,8 +187,8 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
$groupUsers[] = $this->dn2username($ldap_users[0]);
} else {
//we got DNs, check if we need to filter by search or we can give back all of them
- if($search != '*') {
- if(!$this->readAttribute($member, $this->connection->ldapUserDisplayName, $this->connection->ldapUserDisplayName.'='.$search)) {
+ if(!empty($search)) {
+ if(!$this->readAttribute($member, $this->connection->ldapUserDisplayName, $this->getFilterPartForUserSearch($search))) {
continue;
}
}
@@ -230,10 +229,9 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if($limit <= 0) {
$limit = null;
}
- $search = empty($search) ? '*' : '*'.$search.'*';
$filter = $this->combineFilterWithAnd(array(
$this->connection->ldapGroupFilter,
- $this->connection->ldapGroupDisplayName.'='.$search
+ $this->getFilterPartForGroupSearch($search)
));
\OCP\Util::writeLog('user_ldap', 'getGroups Filter '.$filter, \OCP\Util::DEBUG);
$ldap_groups = $this->fetchListOfGroups($filter, array($this->connection->ldapGroupDisplayName, 'dn'), $limit, $offset);
diff --git a/apps/user_ldap/group_proxy.php b/apps/user_ldap/group_proxy.php
new file mode 100644
index 00000000000..5aa1aef0e0e
--- /dev/null
+++ b/apps/user_ldap/group_proxy.php
@@ -0,0 +1,178 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Artuhr Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@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 OCA\user_ldap;
+
+class Group_Proxy extends lib\Proxy implements \OCP\GroupInterface {
+ private $backends = array();
+ private $refBackend = null;
+
+ /**
+ * @brief Constructor
+ * @param $serverConfigPrefixes array containing the config Prefixes
+ */
+ public function __construct($serverConfigPrefixes) {
+ parent::__construct();
+ foreach($serverConfigPrefixes as $configPrefix) {
+ $this->backends[$configPrefix] = new \OCA\user_ldap\GROUP_LDAP();
+ $connector = $this->getConnector($configPrefix);
+ $this->backends[$configPrefix]->setConnector($connector);
+ if(is_null($this->refBackend)) {
+ $this->refBackend = &$this->backends[$configPrefix];
+ }
+ }
+ }
+
+ /**
+ * @brief Tries the backends one after the other until a positive result is returned from the specified method
+ * @param $gid string, the gid connected to the request
+ * @param $method string, the method of the group backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the method or false
+ */
+ protected function walkBackends($gid, $method, $parameters) {
+ $cacheKey = $this->getGroupCacheKey($gid);
+ foreach($this->backends as $configPrefix => $backend) {
+ if($result = call_user_func_array(array($backend, $method), $parameters)) {
+ $this->writeToCache($cacheKey, $configPrefix);
+ return $result;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief Asks the backend connected to the server that supposely takes care of the gid from the request.
+ * @param $gid string, the gid connected to the request
+ * @param $method string, the method of the group backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the method or false
+ */
+ protected function callOnLastSeenOn($gid, $method, $parameters) {
+ $cacheKey = $this->getGroupCacheKey($gid);;
+ $prefix = $this->getFromCache($cacheKey);
+ //in case the uid has been found in the past, try this stored connection first
+ if(!is_null($prefix)) {
+ if(isset($this->backends[$prefix])) {
+ $result = call_user_func_array(array($this->backends[$prefix], $method), $parameters);
+ if(!$result) {
+ //not found here, reset cache to null
+ $this->writeToCache($cacheKey, null);
+ }
+ return $result;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief is user in group?
+ * @param $uid uid of the user
+ * @param $gid gid of the group
+ * @returns true/false
+ *
+ * Checks whether the user is member of a group or not.
+ */
+ public function inGroup($uid, $gid) {
+ return $this->handleRequest($gid, 'inGroup', array($uid, $gid));
+ }
+
+ /**
+ * @brief Get all groups a user belongs to
+ * @param $uid Name of the user
+ * @returns array with group names
+ *
+ * This function fetches all groups a user belongs to. It does not check
+ * if the user exists at all.
+ */
+ public function getUserGroups($uid) {
+ $groups = array();
+
+ foreach($this->backends as $backend) {
+ $backendGroups = $backend->getUserGroups($uid);
+ if (is_array($backendGroups)) {
+ $groups = array_merge($groups, $backendGroups);
+ }
+ }
+
+ return $groups;
+ }
+
+ /**
+ * @brief get a list of all users in a group
+ * @returns array with user ids
+ */
+ public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+ $users = array();
+
+ foreach($this->backends as $backend) {
+ $backendUsers = $backend->usersInGroup($gid, $search, $limit, $offset);
+ if (is_array($backendUsers)) {
+ $users = array_merge($users, $backendUsers);
+ }
+ }
+
+ return $users;
+ }
+
+ /**
+ * @brief get a list of all groups
+ * @returns array with group names
+ *
+ * Returns a list with all groups
+ */
+ public function getGroups($search = '', $limit = -1, $offset = 0) {
+ $groups = array();
+
+ foreach($this->backends as $backend) {
+ $backendGroups = $backend->getGroups($search, $limit, $offset);
+ if (is_array($backendGroups)) {
+ $groups = array_merge($groups, $backendGroups);
+ }
+ }
+
+ return $groups;
+ }
+
+ /**
+ * check if a group exists
+ * @param string $gid
+ * @return bool
+ */
+ public function groupExists($gid) {
+ return $this->handleRequest($gid, 'groupExists', array($gid));
+ }
+
+ /**
+ * @brief Check if backend implements actions
+ * @param $actions bitwise-or'ed actions
+ * @returns boolean
+ *
+ * Returns the supported actions as int to be
+ * compared with OC_USER_BACKEND_CREATE_USER etc.
+ */
+ public function implementsActions($actions) {
+ //it's the same across all our user backends obviously
+ return $this->refBackend->implementsActions($actions);
+ }
+} \ No newline at end of file
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 7063eead96a..e34849ec887 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -1,6 +1,114 @@
+var LdapConfiguration = {
+ refreshConfig: function() {
+ if($('#ldap_serverconfig_chooser option').length < 2) {
+ LdapConfiguration.addConfiguration(true);
+ return;
+ }
+ $.post(
+ OC.filePath('user_ldap','ajax','getConfiguration.php'),
+ $('#ldap_serverconfig_chooser').serialize(),
+ function (result) {
+ if(result.status == 'success') {
+ $.each(result.configuration, function(configkey, configvalue) {
+ elementID = '#'+configkey;
+
+ //deal with Checkboxes
+ if($(elementID).is('input[type=checkbox]')) {
+ if(configvalue == 1) {
+ $(elementID).attr('checked', 'checked');
+ } else {
+ $(elementID).removeAttr('checked');
+ }
+ return;
+ }
+
+ //On Textareas, Multi-Line Settings come as array
+ if($(elementID).is('textarea') && $.isArray(configvalue)) {
+ configvalue = configvalue.join("\n");
+ }
+
+ // assign the value
+ $('#'+configkey).val(configvalue);
+ });
+ }
+ }
+ );
+ },
+
+ resetDefaults: function() {
+ $('#ldap').find('input[type=text], input[type=number], input[type=password], textarea, select').each(function() {
+ if($(this).attr('id') == 'ldap_serverconfig_chooser') {
+ return;
+ }
+ $(this).val($(this).attr('data-default'));
+ });
+ $('#ldap').find('input[type=checkbox]').each(function() {
+ if($(this).attr('data-default') == 1) {
+ $(this).attr('checked', 'checked');
+ } else {
+ $(this).removeAttr('checked');
+ }
+ });
+ },
+
+ deleteConfiguration: function() {
+ $.post(
+ OC.filePath('user_ldap','ajax','deleteConfiguration.php'),
+ $('#ldap_serverconfig_chooser').serialize(),
+ function (result) {
+ if(result.status == 'success') {
+ $('#ldap_serverconfig_chooser option:selected').remove();
+ $('#ldap_serverconfig_chooser option:first').select();
+ LdapConfiguration.refreshConfig();
+ } else {
+ OC.dialogs.alert(
+ result.message,
+ t('user_ldap', 'Deletion failed')
+ );
+ }
+ }
+ );
+ },
+
+ addConfiguration: function(doNotAsk) {
+ $.post(
+ OC.filePath('user_ldap','ajax','getNewServerConfigPrefix.php'),
+ function (result) {
+ if(result.status == 'success') {
+ if(doNotAsk) {
+ LdapConfiguration.resetDefaults();
+ } else {
+ OC.dialogs.confirm(
+ t('user_ldap', 'Take over settings from recent server configuration?'),
+ t('user_ldap', 'Keep settings?'),
+ function(keep) {
+ if(!keep) {
+ LdapConfiguration.resetDefaults();
+ }
+ }
+ );
+ }
+ $('#ldap_serverconfig_chooser option:selected').removeAttr('selected');
+ var html = '<option value="'+result.configPrefix+'" selected="selected">'+$('#ldap_serverconfig_chooser option').length+'. Server</option>';
+ $('#ldap_serverconfig_chooser option:last').before(html);
+ } else {
+ OC.dialogs.alert(
+ result.message,
+ t('user_ldap', 'Cannot add server configuration')
+ );
+ }
+ }
+ );
+ }
+}
+
$(document).ready(function() {
+ $('#ldapAdvancedAccordion').accordion({ heightStyle: 'content', animate: 'easeInOutCirc'});
$('#ldapSettings').tabs();
+ $('#ldap_submit').button();
$('#ldap_action_test_connection').button();
+ $('#ldap_action_delete_configuration').button();
+ LdapConfiguration.refreshConfig();
$('#ldap_action_test_connection').click(function(event){
event.preventDefault();
$.post(
@@ -10,15 +118,60 @@ $(document).ready(function() {
if (result.status == 'success') {
OC.dialogs.alert(
result.message,
- 'Connection test succeeded'
+ t('user_ldap', 'Connection test succeeded')
);
} else {
OC.dialogs.alert(
result.message,
- 'Connection test failed'
+ t('user_ldap', 'Connection test failed')
);
}
}
);
});
+
+ $('#ldap_action_delete_configuration').click(function(event) {
+ event.preventDefault();
+ OC.dialogs.confirm(
+ t('user_ldap', 'Do you really want to delete the current Server Configuration?'),
+ t('user_ldap', 'Confirm Deletion'),
+ function(deleteConfiguration) {
+ if(deleteConfiguration) {
+ LdapConfiguration.deleteConfiguration();
+ }
+ }
+ );
+ });
+
+ $('#ldap_submit').click(function(event) {
+ event.preventDefault();
+ $.post(
+ OC.filePath('user_ldap','ajax','setConfiguration.php'),
+ $('#ldap').serialize(),
+ function (result) {
+ bgcolor = $('#ldap_submit').css('background');
+ if (result.status == 'success') {
+ //the dealing with colors is a but ugly, but the jQuery version in use has issues with rgba colors
+ $('#ldap_submit').css('background', '#fff');
+ $('#ldap_submit').effect('highlight', {'color':'#A8FA87'}, 5000, function() {
+ $('#ldap_submit').css('background', bgcolor);
+ });
+ } else {
+ $('#ldap_submit').css('background', '#fff');
+ $('#ldap_submit').effect('highlight', {'color':'#E97'}, 5000, function() {
+ $('#ldap_submit').css('background', bgcolor);
+ });
+ }
+ }
+ );
+ });
+
+ $('#ldap_serverconfig_chooser').change(function(event) {
+ value = $('#ldap_serverconfig_chooser option:selected:first').attr('value');
+ if(value == 'NEW') {
+ LdapConfiguration.addConfiguration(false);
+ } else {
+ LdapConfiguration.refreshConfig();
+ }
+ });
}); \ No newline at end of file
diff --git a/apps/user_ldap/l10n/af_ZA.php b/apps/user_ldap/l10n/af_ZA.php
new file mode 100644
index 00000000000..944495f3869
--- /dev/null
+++ b/apps/user_ldap/l10n/af_ZA.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Wagwoord",
+"Help" => "Hulp"
+);
diff --git a/apps/user_ldap/l10n/ar.php b/apps/user_ldap/l10n/ar.php
index ced0b4293b7..4d7b7ac4ade 100644
--- a/apps/user_ldap/l10n/ar.php
+++ b/apps/user_ldap/l10n/ar.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"Password" => "كلمة المرور"
+"Deletion failed" => "ÙØ´Ù„ الحذÙ",
+"Password" => "كلمة المرور",
+"Help" => "المساعدة"
);
diff --git a/apps/user_ldap/l10n/bn_BD.php b/apps/user_ldap/l10n/bn_BD.php
index eca40c171f8..69dfc896179 100644
--- a/apps/user_ldap/l10n/bn_BD.php
+++ b/apps/user_ldap/l10n/bn_BD.php
@@ -1,4 +1,36 @@
<?php $TRANSLATIONS = array(
+"Host" => "হোসà§à¦Ÿ",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL আবশà§à¦¯à¦• না হলে আপনি à¦à¦‡ পà§à¦°à¦Ÿà§‹à¦•লটি মà§à¦›à§‡ ফেলতে পারেন । à¦à¦°à¦ªà¦° শà§à¦°à§ করà§à¦¨ à¦à¦Ÿà¦¾ দিয়ে ldaps://",
+"Base DN" => "ভিতà§à¦¤à¦¿ DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "সà§à¦šà¦¾à¦°à§ টà§à¦¯à¦…বে গিয়ে আপনি বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি à¦à¦¬à¦‚ গোষà§à¦ à§€à¦¸à¦®à§‚হের জনà§à¦¯ ভিতà§à¦¤à¦¿ DN নিরà§à¦§à¦¾à¦°à¦£ করতে পারেন।",
+"User DN" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি DN",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. পরিচয় গোপন রেখে অধিগমনের জনà§à¦¯ DN à¦à¦¬à¦‚ কূটশবà§à¦¦à¦Ÿà¦¿ ফাà¦à¦•া রাখà§à¦¨à¥¤",
"Password" => "কূটশবà§à¦¦",
+"For anonymous access, leave DN and Password empty." => "অজà§à¦žà¦¾à¦¤à¦•à§à¦²à¦¶à§€à¦² অধিগমনের জনà§à¦¯ DN à¦à¦¬à¦‚ কূটশবà§à¦¦à¦Ÿà¦¿ ফাà¦à¦•া রাখà§à¦¨à¥¤",
+"User Login Filter" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারির পà§à¦°à¦¬à§‡à¦¶ ছাà¦à¦•নী",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "পà§à¦°à¦¬à§‡à¦¶à§‡à¦° চেষà§à¦Ÿà¦¾ করার সময় পà§à¦°à¦¯à§‹à¦œà§à¦¯ ছাà¦à¦•নীটি নিরà§à¦§à¦¾à¦°à¦£ করবে। পà§à¦°à¦¬à§‡à¦¶à§‡à¦° সময় বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী নামটি %%uid দিয়ে পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হবে।",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "%%uid সà§à¦¥à¦¾à¦¨à¦§à¦¾à¦°à¦• বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨, উদাহরণঃ \"uid=%%uid\"",
+"User List Filter" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী তালিকা ছাà¦à¦•নী",
+"Defines the filter to apply, when retrieving users." => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী উদà§à¦§à¦¾à¦° করার সময় পà§à¦°à§Ÿà§‹à¦—ের জনà§à¦¯ ছাà¦à¦•নী নিরà§à¦§à¦¾à¦°à¦£ করবে।",
+"without any placeholder, e.g. \"objectClass=person\"." => "কোন সà§à¦¥à¦¾à¦¨à¦§à¦¾à¦°à¦• বà§à¦¯à¦¤à§€à¦¤, যেমনঃ \"objectClass=person\"।",
+"Group Filter" => "গোষà§à¦ à§€ ছাà¦à¦•নী",
+"Defines the filter to apply, when retrieving groups." => "গোষà§à¦ à§€à¦¸à¦®à§‚হ উদà§à¦§à¦¾à¦° করার সময় পà§à¦°à§Ÿà§‹à¦—ের জনà§à¦¯ ছাà¦à¦•নী নিরà§à¦§à¦¾à¦°à¦£ করবে।",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "কোন সà§à¦¥à¦¾à¦¨ ধারক বà§à¦¯à¦¤à§€à¦¤, উদাহরণঃ\"objectClass=posixGroup\"।",
+"Port" => "পোরà§à¦Ÿ",
+"Use TLS" => "TLS বà§à¦¯à¦¬à¦¹à¦¾à¦° কর",
+"Case insensitve LDAP server (Windows)" => "বরà§à¦£ অসংবেদী LDAP সারà§à¦­à¦¾à¦° (উইনà§à¦¡à§‹à¦œ)",
+"Turn off SSL certificate validation." => "SSL সনদপতà§à¦° যাচাইকরণ বনà§à¦§ রাক।",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° যদি à¦à¦‡ বিকলà§à¦ªà¦Ÿà¦¿ বà§à¦¯à¦¬à¦¹à¦¾à¦° করেই সংযোগ কারà§à¦¯à¦•রী হয় তবে আপনার ownCloud সারà§à¦­à¦¾à¦°à§‡ LDAP সারà§à¦­à¦¾à¦°à§‡à¦° SSL সনদপতà§à¦°à¦Ÿà¦¿ আমদানি করà§à¦¨à¥¤",
+"Not recommended, use for testing only." => "অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়, শà§à¦§à§à¦®à¦¾à¦¤à§à¦° পরীকà§à¦·à¦¾à¦®à§‚লক বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° জনà§à¦¯à¥¤",
+"in seconds. A change empties the cache." => "সেকেনà§à¦¡à§‡à¥¤ কোন পরিবরà§à¦¤à¦¨ কà§à¦¯à¦¾à¦¸à§‡ খালি করবে।",
+"User Display Name Field" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর পà§à¦°à¦¦à¦°à§à¦¶à¦¿à¦¤à¦¬à§à¦¯ নামের কà§à¦·à§‡à¦¤à§à¦°",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর ownCloud নাম তৈরি করার জনà§à¦¯ বà§à¦¯à¦­à¦¹à§ƒà¦¤ LDAP বৈশিষà§à¦Ÿà§à¦¯à¥¤",
+"Base User Tree" => "ভিতà§à¦¤à¦¿ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি বৃকà§à¦·à¦¾à¦•ারে",
+"Group Display Name Field" => "গোষà§à¦ à§€à¦° পà§à¦°à¦¦à¦°à§à¦¶à¦¿à¦¤à¦¬à§à¦¯ নামের কà§à¦·à§‡à¦¤à§à¦°",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "গোষà§à¦ à§€à¦° ownCloud নাম তৈরি করার জনà§à¦¯ বà§à¦¯à¦­à¦¹à§ƒà¦¤ LDAP বৈশিষà§à¦Ÿà§à¦¯à¥¤",
+"Base Group Tree" => "ভিতà§à¦¤à¦¿ গোষà§à¦ à§€ বৃকà§à¦·à¦¾à¦•ারে",
+"Group-Member association" => "গোষà§à¦ à§€-সদসà§à¦¯ সংসà§à¦¥à¦¾à¦ªà¦¨",
+"in bytes" => "বাইটে",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী নামের জনà§à¦¯ ফাà¦à¦•া রাখà§à¦¨ (পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤)। অনà§à¦¯à¦¥à¦¾à§Ÿ, LDAP/AD বৈশিষà§à¦Ÿà§à¦¯ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨à¥¤",
"Help" => "সহায়িকা"
);
diff --git a/apps/user_ldap/l10n/ca.php b/apps/user_ldap/l10n/ca.php
index d801ddff631..e4f27e25a7f 100644
--- a/apps/user_ldap/l10n/ca.php
+++ b/apps/user_ldap/l10n/ca.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Ha fallat en eliminar la configuració del servidor",
+"The configuration is valid and the connection could be established!" => "La configuració és vàlida i s'ha pogut establir la comunicació!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "La configuració és vàlida, però ha fallat el Bind. Comproveu les credencials i l'arranjament del servidor.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "La configuració no és vàlida. Per més detalls mireu al registre d'ownCloud.",
+"Deletion failed" => "Eliminació fallida",
+"Take over settings from recent server configuration?" => "Voleu prendre l'arranjament de la configuració actual del servidor?",
+"Keep settings?" => "Voleu mantenir la configuració?",
+"Cannot add server configuration" => "No es pot afegir la configuració del servidor",
+"Connection test succeeded" => "La prova de connexió ha reeixit",
+"Connection test failed" => "La prova de connexió ha fallat",
+"Do you really want to delete the current Server Configuration?" => "Voleu eliminar la configuració actual del servidor?",
+"Confirm Deletion" => "Confirma l'eliminació",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Avís:</b> Les aplicacions user_ldap i user_webdavauth són incompatibles. Podeu experimentar comportaments no desitjats. Demaneu a l'administrador del sistema que en desactivi una.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Avís:</b> El mòdul PHP LDAP necessari no està instal·lat, el dorsal no funcionarà. Demaneu a l'administrador del sistema que l'instal·li.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Avís:</b> El mòdul PHP LDAP no està instal·lat, el dorsal no funcionarà. Demaneu a l'administrador del sistema que l'instal·li.",
+"Server configuration" => "Configuració del servidor",
+"Add Server Configuration" => "Afegeix la configuració del servidor",
"Host" => "Màquina",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Podeu ometre el protocol, excepte si requeriu SSL. Llavors comenceu amb ldaps://",
"Base DN" => "DN Base",
+"One Base DN per line" => "Una DN Base per línia",
"You can specify Base DN for users and groups in the Advanced tab" => "Podeu especificar DN Base per usuaris i grups a la pestanya Avançat",
"User DN" => "DN Usuari",
"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." => "La DN de l'usuari client amb la que s'haurà de fer, per exemple uid=agent,dc=exemple,dc=com. Per un accés anònim, deixeu la DN i la contrasenya en blanc.",
@@ -18,22 +33,37 @@
"Group Filter" => "Filtre de grup",
"Defines the filter to apply, when retrieving groups." => "Defineix el filtre a aplicar quan es mostren grups.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sense cap paràmetre de substitució, per exemple \"objectClass=grupPosix\".",
+"Connection Settings" => "Arranjaments de connexió",
+"Configuration Active" => "Configuració activa",
+"When unchecked, this configuration will be skipped." => "Si està desmarcat, aquesta configuració s'ometrà.",
"Port" => "Port",
-"Base User Tree" => "Arbre base d'usuaris",
-"Base Group Tree" => "Arbre base de grups",
-"Group-Member association" => "Associació membres-grup",
+"Backup (Replica) Host" => "Màquina de còpia de serguretat (rèplica)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Afegiu una màquina de còpia de seguretat opcional. Ha de ser una rèplica del servidor LDAP/AD principal.",
+"Backup (Replica) Port" => "Port de la còpia de seguretat (rèplica)",
+"Disable Main Server" => "Desactiva el servidor principal",
+"When switched on, ownCloud will only connect to the replica server." => "Quan està connectat, ownCloud només es connecta al servidor de la rèplica.",
"Use TLS" => "Usa TLS",
-"Do not use it for SSL connections, it will fail." => "No ho useu en connexions SSL, fallarà.",
+"Do not use it additionally for LDAPS connections, it will fail." => "No ho useu adicionalment per a conexions LDAPS, fallarà.",
"Case insensitve LDAP server (Windows)" => "Servidor LDAP sense distinció entre majúscules i minúscules (Windows)",
"Turn off SSL certificate validation." => "Desactiva la validació de certificat SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Si la connexió només funciona amb aquesta opció, importeu el certificat SSL del servidor LDAP en el vostre servidor ownCloud.",
"Not recommended, use for testing only." => "No recomanat, ús només per proves.",
+"in seconds. A change empties the cache." => "en segons. Un canvi buidarà la memòria de cau.",
+"Directory Settings" => "Arranjaments de carpetes",
"User Display Name Field" => "Camp per mostrar el nom d'usuari",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Atribut LDAP a usar per generar el nom d'usuari ownCloud.",
+"Base User Tree" => "Arbre base d'usuaris",
+"One User Base DN per line" => "Una DN Base d'Usuari per línia",
+"User Search Attributes" => "Atributs de cerca d'usuari",
+"Optional; one attribute per line" => "Opcional; Un atribut per línia",
"Group Display Name Field" => "Camp per mostrar el nom del grup",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribut LDAP a usar per generar el nom de grup ownCloud.",
+"Base Group Tree" => "Arbre base de grups",
+"One Group Base DN per line" => "Una DN Base de Grup per línia",
+"Group Search Attributes" => "Atributs de cerca de grup",
+"Group-Member association" => "Associació membres-grup",
+"Special Attributes" => "Atributs especials",
"in bytes" => "en bytes",
-"in seconds. A change empties the cache." => "en segons. Un canvi buidarà la memòria de cau.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixeu-ho buit pel nom d'usuari (per defecte). Altrament, especifiqueu un atribut LDAP/AD.",
"Help" => "Ajuda"
);
diff --git a/apps/user_ldap/l10n/cs_CZ.php b/apps/user_ldap/l10n/cs_CZ.php
index 0c14ebb9d1e..4c74f195cf4 100644
--- a/apps/user_ldap/l10n/cs_CZ.php
+++ b/apps/user_ldap/l10n/cs_CZ.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Selhalo smazání konfigurace serveru",
+"The configuration is valid and the connection could be established!" => "Nastavení je v pořádku a spojení bylo navázáno.",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Konfigurace je v pořádku, ale spojení selhalo. Zkontrolujte, prosím, nastavení serveru a přihlašovací údaje.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "Nastavení je neplatné. Zkontrolujte, prosím, záznam ownCloud pro další podrobnosti.",
+"Deletion failed" => "Mazání selhalo.",
+"Take over settings from recent server configuration?" => "Převzít nastavení z nedávného nastavení serveru?",
+"Keep settings?" => "Ponechat nastavení?",
+"Cannot add server configuration" => "Nelze přidat nastavení serveru",
+"Connection test succeeded" => "Test spojení byl úspěšný",
+"Connection test failed" => "Test spojení selhal",
+"Do you really want to delete the current Server Configuration?" => "Opravdu si pÅ™ejete smazat souÄasné nastavení serveru?",
+"Confirm Deletion" => "Potvrdit smazání",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Varování:</b> Aplikace user_ldap a user_webdavauth nejsou kompatibilní. Může nastávat neoÄekávané chování. Požádejte, prosím, správce systému aby jednu z nich zakázal.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému aby jej nainstaloval.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému aby jej nainstaloval.",
+"Server configuration" => "Nastavení serveru",
+"Add Server Configuration" => "Přidat nastavení serveru",
"Host" => "PoÄítaÄ",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Můžete vynechat protokol, vyjma pokud požadujete SSL. Tehdy zaÄnÄ›te s ldaps://",
"Base DN" => "Základní DN",
+"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",
"User DN" => "Uživatelské DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN klentského uživatele ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte údaje DN and Heslo prázdné.",
@@ -18,22 +33,37 @@
"Group Filter" => "Filtr skupin",
"Defines the filter to apply, when retrieving groups." => "UrÄuje použitý filtr, pro získávaní skupin.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez zástupných znaků, např. \"objectClass=posixGroup\".",
+"Connection Settings" => "Nastavení spojení",
+"Configuration Active" => "Nastavení aktivní",
+"When unchecked, this configuration will be skipped." => "Pokud není zaÅ¡krtnuto, bude nastavení pÅ™eskoÄeno.",
"Port" => "Port",
-"Base User Tree" => "Základní uživatelský strom",
-"Base Group Tree" => "Základní skupinový strom",
-"Group-Member association" => "Asociace Älena skupiny",
+"Backup (Replica) Host" => "Záložní (kopie) hostitel",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Zadejte volitelného záložního hostitele. Musí to být kopie hlavního serveru LDAP/AD.",
+"Backup (Replica) Port" => "Záložní (kopie) port",
+"Disable Main Server" => "Zakázat hlavní serveru",
+"When switched on, ownCloud will only connect to the replica server." => "Při zapnutí se ownCloud připojí pouze k záložnímu serveru",
"Use TLS" => "Použít TLS",
-"Do not use it for SSL connections, it will fail." => "Nepoužívejte pro připojení pomocí SSL, připojení selže.",
+"Do not use it additionally for LDAPS connections, it will fail." => "Nepoužívejte pro spojení LDAP, selže.",
"Case insensitve LDAP server (Windows)" => "LDAP server nerozlišující velikost znaků (Windows)",
"Turn off SSL certificate validation." => "Vypnout ověřování SSL certifikátu.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Pokud připojení pracuje pouze s touto možností, tak importujte SSL certifikát SSL serveru do Vašeho serveru ownCloud",
"Not recommended, use for testing only." => "Není doporuÄeno, pouze pro testovací úÄely.",
+"in seconds. A change empties the cache." => "ve vteřinách. Změna vyprázdní vyrovnávací paměť.",
+"Directory Settings" => "Nastavení adresáře",
"User Display Name Field" => "Pole pro zobrazované jméno uživatele",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Atribut LDAP použitý k vytvoření jména uživatele ownCloud",
+"Base User Tree" => "Základní uživatelský strom",
+"One User Base DN per line" => "Jedna uživatelská základní DN na řádku",
+"User Search Attributes" => "Atributy vyhledávání uživatelů",
+"Optional; one attribute per line" => "Volitelné, atribut na řádku",
"Group Display Name Field" => "Pole pro zobrazení jména skupiny",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribut LDAP použitý k vytvoření jména skupiny ownCloud",
+"Base Group Tree" => "Základní skupinový strom",
+"One Group Base DN per line" => "Jedna skupinová základní DN na řádku",
+"Group Search Attributes" => "Atributy vyhledávání skupin",
+"Group-Member association" => "Asociace Älena skupiny",
+"Special Attributes" => "Speciální atributy",
"in bytes" => "v bajtech",
-"in seconds. A change empties the cache." => "ve vteřinách. Změna vyprázdní vyrovnávací paměť.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ponechte prázdné pro uživatelské jméno (výchozí). Jinak uveÄte LDAP/AD parametr.",
"Help" => "Nápověda"
);
diff --git a/apps/user_ldap/l10n/da.php b/apps/user_ldap/l10n/da.php
index b11b56f9b65..9329c4e8a24 100644
--- a/apps/user_ldap/l10n/da.php
+++ b/apps/user_ldap/l10n/da.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Fejl ved sletning",
"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Du kan udelade protokollen, medmindre du skal bruge SSL. Start i så fald med ldaps://",
"Base DN" => "Base DN",
@@ -12,14 +13,13 @@
"Group Filter" => "Gruppe Filter",
"Defines the filter to apply, when retrieving groups." => "Definere filteret der bruges når der indlæses grupper.",
"Port" => "Port",
-"Base User Tree" => "Base Bruger Træ",
-"Base Group Tree" => "Base Group Tree",
-"Group-Member association" => "Group-Member association",
"Use TLS" => "Brug TLS",
-"Do not use it for SSL connections, it will fail." => "Brug ikke til SSL forbindelser, da den vil fejle.",
"Turn off SSL certificate validation." => "Deaktiver SSL certifikat validering",
"Not recommended, use for testing only." => "Anbefales ikke, brug kun for at teste.",
"User Display Name Field" => "User Display Name Field",
+"Base User Tree" => "Base Bruger Træ",
+"Base Group Tree" => "Base Group Tree",
+"Group-Member association" => "Group-Member association",
"in bytes" => "i bytes",
"Help" => "Hjælp"
);
diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php
index 87579cb2431..618e7a32457 100644
--- a/apps/user_ldap/l10n/de.php
+++ b/apps/user_ldap/l10n/de.php
@@ -1,9 +1,12 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Löschen fehlgeschlagen",
+"Keep settings?" => "Einstellungen beibehalten?",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitte Deinen Systemadministator eine der beiden Anwendungen zu deaktivieren.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Warnung:</b> Das PHP-Modul, das LDAP benöntigt, ist nicht installiert. Das Backend wird nicht funktionieren. Bitte deinen Systemadministrator das Modul zu installieren.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren.",
"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Du kannst das Protokoll auslassen, außer wenn Du SSL benötigst. Beginne dann mit ldaps://",
"Base DN" => "Basis-DN",
+"One Base DN per line" => "Ein Base 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",
"User DN" => "Benutzer-DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lasse DN und Passwort leer.",
@@ -19,21 +22,22 @@
"Defines the filter to apply, when retrieving groups." => "Definiert den Filter für die Anfrage der Gruppen.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"",
"Port" => "Port",
-"Base User Tree" => "Basis-Benutzerbaum",
-"Base Group Tree" => "Basis-Gruppenbaum",
-"Group-Member association" => "Assoziation zwischen Gruppe und Benutzer",
"Use TLS" => "Nutze TLS",
-"Do not use it for SSL connections, it will fail." => "Verwende dies nicht für SSL-Verbindungen, es wird fehlschlagen.",
"Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)",
"Turn off SSL certificate validation." => "Schalte die SSL-Zertifikatsprüfung aus.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden.",
"Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.",
+"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
"User Display Name Field" => "Feld für den Anzeigenamen des Benutzers",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. ",
+"Base User Tree" => "Basis-Benutzerbaum",
+"One User Base DN per line" => "Ein Benutzer Base DN pro Zeile",
"Group Display Name Field" => "Feld für den Anzeigenamen der Gruppe",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. ",
+"Base Group Tree" => "Basis-Gruppenbaum",
+"One Group Base DN per line" => "Ein Gruppen Base DN pro Zeile",
+"Group-Member association" => "Assoziation zwischen Gruppe und Benutzer",
"in bytes" => "in Bytes",
-"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein.",
"Help" => "Hilfe"
);
diff --git a/apps/user_ldap/l10n/de_DE.php b/apps/user_ldap/l10n/de_DE.php
index f986ae83e87..7d3847f8a89 100644
--- a/apps/user_ldap/l10n/de_DE.php
+++ b/apps/user_ldap/l10n/de_DE.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Das Löschen der Server-Konfiguration schlug fehl",
+"The configuration is valid and the connection could be established!" => "Die Konfiguration ist valide und eine Verbindung konnte hergestellt werden!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Die Konfiguration ist valide, aber das Herstellen einer Verbindung schlug fehl. Bitte überprüfen Sie die Server-Einstellungen und Zertifikate.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "Die Konfiguration ist nicht valide. Weitere Details können Sie im ownCloud-Log nachlesen.",
+"Deletion failed" => "Löschen fehlgeschlagen",
+"Take over settings from recent server configuration?" => "Sollen die Einstellungen der letzten Server-Konfiguration übernommen werden?",
+"Keep settings?" => "Einstellungen behalten?",
+"Cannot add server configuration" => "Das Hinzufügen der Server-Konfiguration schlug fehl",
+"Connection test succeeded" => "Verbindungs-Test erfolgreich",
+"Connection test failed" => "Verbindungs-Test fehlgeschlagen",
+"Do you really want to delete the current Server Configuration?" => "Möchten Sie wirklich die Server-Konfiguration löschen?",
+"Confirm Deletion" => "Löschung bestätigen",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitten Sie Ihren Systemadministator eine der beiden Anwendungen zu deaktivieren.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Warnung:</b> Das PHP-Modul, das LDAP benöntigt, ist nicht installiert. Das Backend wird nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Warnung:</b> Da das PHP-Modul für LDAP ist nicht installiert, das Backend wird nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren.",
+"Server configuration" => "Server-Konfiguration",
+"Add Server Configuration" => "Server-Konfiguration hinzufügen",
"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Sie können das Protokoll auslassen, außer wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://",
"Base DN" => "Basis-DN",
+"One Base DN per line" => "Ein Base 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",
"User DN" => "Benutzer-DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lassen Sie DN und Passwort leer.",
@@ -18,22 +33,36 @@
"Group Filter" => "Gruppen-Filter",
"Defines the filter to apply, when retrieving groups." => "Definiert den Filter für die Anfrage der Gruppen.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"",
+"Connection Settings" => "Verbindungs-Einstellungen",
+"Configuration Active" => "Konfiguration aktiv",
+"When unchecked, this configuration will be skipped." => "Wenn nicht angehakt, wird diese Konfiguration übersprungen.",
"Port" => "Port",
-"Base User Tree" => "Basis-Benutzerbaum",
-"Base Group Tree" => "Basis-Gruppenbaum",
-"Group-Member association" => "Assoziation zwischen Gruppe und Benutzer",
+"Backup (Replica) Host" => "Back-Up (Replikation) Host",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Optionaler Backup Host. Es muss ein Replikat des eigentlichen LDAP/AD Servers sein.",
+"Backup (Replica) Port" => "Back-Up (Replikation) Port",
+"Disable Main Server" => "Hauptserver deaktivieren",
+"When switched on, ownCloud will only connect to the replica server." => "Wenn eingeschaltet wird sich ownCloud nur mit dem Replilat-Server verbinden.",
"Use TLS" => "Nutze TLS",
-"Do not use it for SSL connections, it will fail." => "Verwenden Sie dies nicht für SSL-Verbindungen, es wird fehlschlagen.",
"Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)",
"Turn off SSL certificate validation." => "Schalten Sie die SSL-Zertifikatsprüfung aus.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden.",
"Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.",
+"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
+"Directory Settings" => "Verzeichnis-Einstellungen",
"User Display Name Field" => "Feld für den Anzeigenamen des Benutzers",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. ",
+"Base User Tree" => "Basis-Benutzerbaum",
+"One User Base DN per line" => "Ein Benutzer Base DN pro Zeile",
+"User Search Attributes" => "Benutzer-Suche Eigenschaften",
+"Optional; one attribute per line" => "Optional; Ein Attribut pro Zeile",
"Group Display Name Field" => "Feld für den Anzeigenamen der Gruppe",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. ",
+"Base Group Tree" => "Basis-Gruppenbaum",
+"One Group Base DN per line" => "Ein Gruppen Base DN pro Zeile",
+"Group Search Attributes" => "Gruppen-Suche Eigenschaften",
+"Group-Member association" => "Assoziation zwischen Gruppe und Benutzer",
+"Special Attributes" => "besondere Eigenschaften",
"in bytes" => "in Bytes",
-"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein.",
"Help" => "Hilfe"
);
diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php
index 8c421cf162b..7c0940dc09c 100644
--- a/apps/user_ldap/l10n/el.php
+++ b/apps/user_ldap/l10n/el.php
@@ -1,6 +1,6 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Η διαγÏαφή απέτυχε",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>ΠÏοσοχή:</b> Οι εφαÏμογές user_ldap και user_webdavauth είναι ασÏμβατες. ΜποÏεί να αντιμετωπίσετε απÏόβλεπτη συμπεÏιφοÏά. ΠαÏακαλώ ζητήστε από τον διαχειÏιστή συστήματος να απενεÏγοποιήσει μία από αυτές.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>ΠÏοσοχή:</b> Το PHP LDAP module που απαιτείται δεν είναι εγκατεστημένο και ο μηχανισμός δεν θα λειτουÏγήσει. ΠαÏακαλώ ζητήστε από τον διαχειÏιστή του συστήματος να το εγκαταστήσει.",
"Host" => "Διακομιστής",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "ΜποÏείτε να παÏαλείψετε το Ï€Ïωτόκολλο, εκτός αν απαιτείται SSL. Σε αυτή την πεÏίπτωση ξεκινήστε με ldaps://",
"Base DN" => "Base DN",
@@ -19,21 +19,20 @@
"Defines the filter to apply, when retrieving groups." => "ΚαθοÏίζει το φίλτÏο που θα ισχÏει κατά την ανάκτηση ομάδων.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "χωÏίς κάποια μεταβλητή, Ï€.χ. \"objectClass=ΟμάδαPosix\".",
"Port" => "ΘÏÏα",
-"Base User Tree" => "Base User Tree",
-"Base Group Tree" => "Base Group Tree",
-"Group-Member association" => "Group-Member association",
"Use TLS" => "ΧÏήση TLS",
-"Do not use it for SSL connections, it will fail." => "Μην χÏησιμοποιείτε για συνδέσεις SSL, θα αποτÏχει.",
"Case insensitve LDAP server (Windows)" => "LDAP server (Windows) με διάκÏιση πεζών-ΚΕΦΑΛΑΙΩÎ",
"Turn off SSL certificate validation." => "ΑπενεÏγοποίηση επικÏÏωσης Ï€Î¹ÏƒÏ„Î¿Ï€Î¿Î¹Î·Ï„Î¹ÎºÎ¿Ï SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Εάν η σÏνδεση δουλεÏει μόνο με αυτή την επιλογή, εισάγετε το LDAP SSL πιστοποιητικό του διακομιστή στον ownCloud server σας.",
"Not recommended, use for testing only." => "Δεν Ï€Ïοτείνεται, χÏήση μόνο για δοκιμές.",
+"in seconds. A change empties the cache." => "σε δευτεÏόλεπτα. Μια αλλαγή αδειάζει την μνήμη cache.",
"User Display Name Field" => "Πεδίο Ονόματος ΧÏήστη",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Η ιδιότητα LDAP που θα χÏησιμοποιείται για τη δημιουÏγία του ονόματος χÏήστη του ownCloud.",
+"Base User Tree" => "Base User Tree",
"Group Display Name Field" => "Group Display Name Field",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Η ιδιότητα LDAP που θα χÏησιμοποιείται για τη δημιουÏγία του ονόματος ομάδας του ownCloud.",
+"Base Group Tree" => "Base Group Tree",
+"Group-Member association" => "Group-Member association",
"in bytes" => "σε bytes",
-"in seconds. A change empties the cache." => "σε δευτεÏόλεπτα. Μια αλλαγή αδειάζει την μνήμη cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Αφήστε το κενό για το όνομα χÏήστη (Ï€Ïοεπιλογή). ΔιαφοÏετικά, συμπληÏώστε μία ιδιότητα LDAP/AD.",
"Help" => "Βοήθεια"
);
diff --git a/apps/user_ldap/l10n/eo.php b/apps/user_ldap/l10n/eo.php
index ef8aff8a390..3ffcbddb3e3 100644
--- a/apps/user_ldap/l10n/eo.php
+++ b/apps/user_ldap/l10n/eo.php
@@ -1,7 +1,8 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Forigo malsukcesis",
"Host" => "Gastigo",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Vi povas neglekti la protokolon, escepte se vi bezonas SSL-on. Tiuokaze, komencu per ldaps://",
-"Base DN" => "Baz-DN",
+"Base DN" => "Bazo-DN",
"User DN" => "Uzanto-DN",
"Password" => "Pasvorto",
"For anonymous access, leave DN and Password empty." => "Por sennoman aliron, lasu DN-on kaj Pasvorton malplenaj.",
@@ -15,21 +16,20 @@
"Defines the filter to apply, when retrieving groups." => "Äœi difinas la filtrilon aplikotan, kiam veniÄas grupoj.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sen ajna referencilo, ekz.: \"objectClass=posixGroup\".",
"Port" => "Pordo",
-"Base User Tree" => "Baza uzantarbo",
-"Base Group Tree" => "Baza gruparbo",
-"Group-Member association" => "Asocio de grupo kaj membro",
"Use TLS" => "Uzi TLS-on",
-"Do not use it for SSL connections, it will fail." => "Ne uzu Äin por SSL-konektoj, Äi malsukcesos.",
"Case insensitve LDAP server (Windows)" => "LDAP-servilo blinda je litergrandeco (Vindozo)",
"Turn off SSL certificate validation." => "Malkapabligi validkontrolon de SSL-atestiloj.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se la konekto nur funkcias kun ĉi tiu malnepro, enportu la SSL-atestilo de la LDAP-servilo en via ownCloud-servilo.",
"Not recommended, use for testing only." => "Ne rekomendata, uzu Äin nur por testoj.",
+"in seconds. A change empties the cache." => "sekunde. Ajna ÅanÄo malplenigas la kaÅmemoron.",
"User Display Name Field" => "Kampo de vidignomo de uzanto",
"The LDAP attribute to use to generate the user`s ownCloud name." => "La atributo de LDAP uzota por generi la ownCloud-an nomon de la uzanto.",
+"Base User Tree" => "Baza uzantarbo",
"Group Display Name Field" => "Kampo de vidignomo de grupo",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "La atributo de LDAP uzota por generi la ownCloud-an nomon de la grupo.",
+"Base Group Tree" => "Baza gruparbo",
+"Group-Member association" => "Asocio de grupo kaj membro",
"in bytes" => "duumoke",
-"in seconds. A change empties the cache." => "sekunde. Ajna ÅanÄo malplenigas la kaÅmemoron.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Lasu malplena por uzantonomo (defaÅ­lto). Alie, specifu LDAP/AD-atributon.",
"Help" => "Helpo"
);
diff --git a/apps/user_ldap/l10n/es.php b/apps/user_ldap/l10n/es.php
index 4931af79eaf..c0a444c0c7d 100644
--- a/apps/user_ldap/l10n/es.php
+++ b/apps/user_ldap/l10n/es.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "No se pudo borrar la configuración del servidor",
+"The configuration is valid and the connection could be established!" => "La configuración es válida y la conexión puede establecerse!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "La configuración es válida, pero falló el Enlace. Por favor, compruebe la configuración del servidor y las credenciales.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "La configuración no es válida. Por favor, busque en el log de ownCloud para más detalles.",
+"Deletion failed" => "Falló el borrado",
+"Take over settings from recent server configuration?" => "Hacerse cargo de los ajustes de configuración del servidor reciente?",
+"Keep settings?" => "Mantener la configuración?",
+"Cannot add server configuration" => "No se puede añadir la configuración del servidor",
+"Connection test succeeded" => "La prueba de conexión fue exitosa",
+"Connection test failed" => "La prueba de conexión falló",
+"Do you really want to delete the current Server Configuration?" => "¿Realmente desea eliminar la configuración actual del servidor?",
+"Confirm Deletion" => "Confirmar eliminación",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Advertencia:</b> Los Apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al administrador del sistema para desactivar uno de ellos.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Advertencia:</b> El módulo PHP LDAP necesario no está instalado, el sistema no funcionará. Pregunte al administrador del sistema para instalarlo.",
-"Host" => "Servidor",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Por favor consulte al administrador del sistema para instalarlo.",
+"Server configuration" => "Configuración del Servidor",
+"Add Server Configuration" => "Agregar configuracion del servidor",
+"Host" => "Máquina",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Puede omitir el protocolo, excepto si requiere SSL. En ese caso, empiece con ldaps://",
"Base DN" => "DN base",
+"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",
"User DN" => "DN usuario",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, deje DN y contraseña vacíos.",
@@ -18,22 +33,37 @@
"Group Filter" => "Filtro de grupo",
"Defines the filter to apply, when retrieving groups." => "Define el filtro a aplicar, cuando se obtienen grupos.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Con cualquier placeholder, ej: \"objectClass=posixGroup\".",
+"Connection Settings" => "Configuracion de coneccion",
+"Configuration Active" => "Configuracion activa",
+"When unchecked, this configuration will be skipped." => "Cuando deseleccione, esta configuracion sera omitida.",
"Port" => "Puerto",
-"Base User Tree" => "Ãrbol base de usuario",
-"Base Group Tree" => "Ãrbol base de grupo",
-"Group-Member association" => "Asociación Grupo-Miembro",
+"Backup (Replica) Host" => "Host para backup (Replica)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Dar un host de copia de seguridad opcional. Debe ser una réplica del servidor principal LDAP / AD.",
+"Backup (Replica) Port" => "Puerto para backup (Replica)",
+"Disable Main Server" => "Deshabilitar servidor principal",
+"When switched on, ownCloud will only connect to the replica server." => "Cuando se inicie, ownCloud unicamente estara conectado al servidor replica",
"Use TLS" => "Usar TLS",
-"Do not use it for SSL connections, it will fail." => "No usarlo para SSL, habrá error.",
+"Do not use it additionally for LDAPS connections, it will fail." => "No usar adicionalmente para conecciones LDAPS, estas fallaran",
"Case insensitve LDAP server (Windows)" => "Servidor de LDAP sensible a mayúsculas/minúsculas (Windows)",
"Turn off SSL certificate validation." => "Apagar la validación por certificado SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Si la conexión sólo funciona con esta opción, importe el certificado SSL del servidor LDAP en su servidor ownCloud.",
"Not recommended, use for testing only." => "No recomendado, sólo para pruebas.",
+"in seconds. A change empties the cache." => "en segundos. Un cambio vacía la cache.",
+"Directory Settings" => "Configuracion de directorio",
"User Display Name Field" => "Campo de nombre de usuario a mostrar",
"The LDAP attribute to use to generate the user`s ownCloud name." => "El atributo LDAP a usar para generar el nombre de usuario de ownCloud.",
+"Base User Tree" => "Ãrbol base de usuario",
+"One User Base DN per line" => "Un DN Base de Usuario por línea",
+"User Search Attributes" => "Atributos de la busqueda de usuario",
+"Optional; one attribute per line" => "Opcional; un atributo por linea",
"Group Display Name Field" => "Campo de nombre de grupo a mostrar",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "El atributo LDAP a usar para generar el nombre de los grupos de ownCloud.",
+"Base Group Tree" => "Ãrbol base de grupo",
+"One Group Base DN per line" => "Un DN Base de Grupo por línea",
+"Group Search Attributes" => "Atributos de busqueda de grupo",
+"Group-Member association" => "Asociación Grupo-Miembro",
+"Special Attributes" => "Atributos especiales",
"in bytes" => "en bytes",
-"in seconds. A change empties the cache." => "en segundos. Un cambio vacía la cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Vacío para el nombre de usuario (por defecto). En otro caso, especifique un atributo LDAP/AD.",
"Help" => "Ayuda"
);
diff --git a/apps/user_ldap/l10n/es_AR.php b/apps/user_ldap/l10n/es_AR.php
index 0b1340d4397..a87444a270c 100644
--- a/apps/user_ldap/l10n/es_AR.php
+++ b/apps/user_ldap/l10n/es_AR.php
@@ -1,9 +1,21 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Fallo al borrar la configuración del servidor",
+"The configuration is valid and the connection could be established!" => "La configuración es valida y la conexión pudo ser establecida.",
+"Deletion failed" => "Error al borrar",
+"Keep settings?" => "¿Mantener preferencias?",
+"Cannot add server configuration" => "No se pudo añadir la configuración del servidor",
+"Connection test succeeded" => "El este de conexión ha sido completado satisfactoriamente",
+"Connection test failed" => "Falló es test de conexión",
+"Do you really want to delete the current Server Configuration?" => "¿Realmente desea borrar la configuración actual del servidor?",
+"Confirm Deletion" => "Confirmar borrado",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Advertencia:</b> Los Apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al administrador del sistema para desactivar uno de ellos.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Advertencia:</b> El módulo PHP LDAP necesario no está instalado, el sistema no funcionará. Pregunte al administrador del sistema para instalarlo.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Atención:</b> El módulo PHP LDAP no está instalado, este elemento no va a funcionar. Por favor, pedile al administrador que lo instale.",
+"Server configuration" => "Configuración del Servidor",
+"Add Server Configuration" => "Añadir Configuración del Servidor",
"Host" => "Servidor",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Podés omitir el protocolo, excepto si SSL es requerido. En ese caso, empezá con ldaps://",
"Base DN" => "DN base",
+"One Base DN per line" => "Una DN base por línea",
"You can specify Base DN for users and groups in the Advanced tab" => "Podés especificar el DN base para usuarios y grupos en la pestaña \"Avanzado\"",
"User DN" => "DN usuario",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, dejá DN y contraseña vacíos.",
@@ -18,22 +30,28 @@
"Group Filter" => "Filtro de grupo",
"Defines the filter to apply, when retrieving groups." => "Define el filtro a aplicar cuando se obtienen grupos.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Sin ninguna plantilla, p. ej.: \"objectClass=posixGroup\".",
+"Connection Settings" => "Configuración de Conección",
+"Configuration Active" => "Configuración activa",
"Port" => "Puerto",
-"Base User Tree" => "Ãrbol base de usuario",
-"Base Group Tree" => "Ãrbol base de grupo",
-"Group-Member association" => "Asociación Grupo-Miembro",
+"Disable Main Server" => "Deshabilitar el Servidor Principal",
"Use TLS" => "Usar TLS",
-"Do not use it for SSL connections, it will fail." => "No usarlo para SSL, dará error.",
"Case insensitve LDAP server (Windows)" => "Servidor de LDAP sensible a mayúsculas/minúsculas (Windows)",
"Turn off SSL certificate validation." => "Desactivar la validación por certificado SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Si la conexión sólo funciona con esta opción, importá el certificado SSL del servidor LDAP en tu servidor ownCloud.",
"Not recommended, use for testing only." => "No recomendado, sólo para pruebas.",
+"in seconds. A change empties the cache." => "en segundos. Cambiarlo vacía la cache.",
+"Directory Settings" => "Configuración de Directorio",
"User Display Name Field" => "Campo de nombre de usuario a mostrar",
"The LDAP attribute to use to generate the user`s ownCloud name." => "El atributo LDAP a usar para generar el nombre de usuario de ownCloud.",
+"Base User Tree" => "Ãrbol base de usuario",
+"One User Base DN per line" => "Una DN base de usuario por línea",
"Group Display Name Field" => "Campo de nombre de grupo a mostrar",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "El atributo LDAP a usar para generar el nombre de los grupos de ownCloud.",
+"Base Group Tree" => "Ãrbol base de grupo",
+"One Group Base DN per line" => "Una DN base de grupo por línea",
+"Group-Member association" => "Asociación Grupo-Miembro",
+"Special Attributes" => "Atributos Especiales",
"in bytes" => "en bytes",
-"in seconds. A change empties the cache." => "en segundos. Cambiarlo vacía la cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Vacío para el nombre de usuario (por defecto). En otro caso, especificá un atributo LDAP/AD.",
"Help" => "Ayuda"
);
diff --git a/apps/user_ldap/l10n/et_EE.php b/apps/user_ldap/l10n/et_EE.php
index 9752d73c1c0..91eb38c7c5f 100644
--- a/apps/user_ldap/l10n/et_EE.php
+++ b/apps/user_ldap/l10n/et_EE.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Kustutamine ebaõnnestus",
"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Sa ei saa protokolli ära jätta, välja arvatud siis, kui sa nõuad SSL-ühendust. Sel juhul alusta eesliitega ldaps://",
"Base DN" => "Baas DN",
@@ -17,21 +18,20 @@
"Defines the filter to apply, when retrieving groups." => "Määrab gruppe hankides filtri, mida rakendatakse.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ilma ühegi kohatäitjata, nt. \"objectClass=posixGroup\".",
"Port" => "Port",
-"Base User Tree" => "Baaskasutaja puu",
-"Base Group Tree" => "Baasgrupi puu",
-"Group-Member association" => "Grupiliikme seotus",
"Use TLS" => "Kasutaja TLS",
-"Do not use it for SSL connections, it will fail." => "Ära kasuta seda SSL ühenduse jaoks, see ei toimi.",
"Case insensitve LDAP server (Windows)" => "Mittetõstutundlik LDAP server (Windows)",
"Turn off SSL certificate validation." => "Lülita SSL sertifikaadi kontrollimine välja.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Kui ühendus toimib ainult selle valikuga, siis impordi LDAP serveri SSL sertifikaat oma ownCloud serverisse.",
"Not recommended, use for testing only." => "Pole soovitatav, kasuta ainult testimiseks.",
+"in seconds. A change empties the cache." => "sekundites. Muudatus tühjendab vahemälu.",
"User Display Name Field" => "Kasutaja näidatava nime väli",
"The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP omadus, mida kasutatakse kasutaja ownCloudi nime loomiseks.",
+"Base User Tree" => "Baaskasutaja puu",
"Group Display Name Field" => "Grupi näidatava nime väli",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP omadus, mida kasutatakse ownCloudi grupi nime loomiseks.",
+"Base Group Tree" => "Baasgrupi puu",
+"Group-Member association" => "Grupiliikme seotus",
"in bytes" => "baitides",
-"in seconds. A change empties the cache." => "sekundites. Muudatus tühjendab vahemälu.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Kasutajanime (vaikeväärtus) kasutamiseks jäta tühjaks. Vastasel juhul määra LDAP/AD omadus.",
"Help" => "Abiinfo"
);
diff --git a/apps/user_ldap/l10n/eu.php b/apps/user_ldap/l10n/eu.php
index 06ca9cb294e..97c23f86480 100644
--- a/apps/user_ldap/l10n/eu.php
+++ b/apps/user_ldap/l10n/eu.php
@@ -1,9 +1,11 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Ezabaketak huts egin du",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Abisua:</b> user_ldap eta user_webdavauth aplikazioak bateraezinak dira. Portaera berezia izan dezakezu. Mesedez eskatu zure sistema kudeatzaileari bietako bat desgaitzeko.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Abisua:</b> PHPk behar duen LDAP modulua ez dago instalaturik, motorrak ez du funtzionatuko. Mesedez eskatu zure sistema kudeatzaileari instala dezan.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Abisua:</b> PHPk behar duen LDAP modulua ez dago instalaturik, motorrak ez du funtzionatuko. Mesedez eskatu zure sistema kudeatzaileari instala dezan.",
"Host" => "Hostalaria",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Protokoloa ez da beharrezkoa, SSL behar baldin ez baduzu. Honela bada hasi ldaps://",
"Base DN" => "Oinarrizko DN",
+"One Base DN per line" => "DN Oinarri bat lerroko",
"You can specify Base DN for users and groups in the Advanced tab" => "Erabiltzaile eta taldeentzako Oinarrizko DN zehaztu dezakezu Aurreratu fitxan",
"User DN" => "Erabiltzaile 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." => "Lotura egingo den bezero erabiltzailearen DNa, adb. uid=agent,dc=example,dc=com. Sarrera anonimoak gaitzeko utzi DN eta Pasahitza hutsik.",
@@ -19,21 +21,22 @@
"Defines the filter to apply, when retrieving groups." => "Taldeak jasotzen direnean ezarriko den iragazkia zehazten du.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "txantiloirik gabe, adb. \"objectClass=posixGroup\".",
"Port" => "Portua",
-"Base User Tree" => "Oinarrizko Erabiltzaile Zuhaitza",
-"Base Group Tree" => "Oinarrizko Talde Zuhaitza",
-"Group-Member association" => "Talde-Kide elkarketak",
"Use TLS" => "Erabili TLS",
-"Do not use it for SSL connections, it will fail." => "Ez erabili SSL konexioetan, huts egingo du.",
"Case insensitve LDAP server (Windows)" => "Maiuskulak eta minuskulak ezberditzen ez dituen LDAP zerbitzaria (windows)",
"Turn off SSL certificate validation." => "Ezgaitu SSL ziurtagirien egiaztapena.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Konexioa aukera hau ezinbestekoa badu, inportatu LDAP zerbitzariaren SSL ziurtagiria zure ownCloud zerbitzarian.",
"Not recommended, use for testing only." => "Ez da aholkatzen, erabili bakarrik frogak egiteko.",
+"in seconds. A change empties the cache." => "segundutan. Aldaketak katxea husten du.",
"User Display Name Field" => "Erabiltzaileen bistaratzeko izena duen eremua",
"The LDAP attribute to use to generate the user`s ownCloud name." => "ownCloud erabiltzailearen izena sortzeko erabiliko den LDAP atributua",
+"Base User Tree" => "Oinarrizko Erabiltzaile Zuhaitza",
+"One User Base DN per line" => "Erabiltzaile DN Oinarri bat lerroko",
"Group Display Name Field" => "Taldeen bistaratzeko izena duen eremua",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "ownCloud taldearen izena sortzeko erabiliko den LDAP atributua",
+"Base Group Tree" => "Oinarrizko Talde Zuhaitza",
+"One Group Base DN per line" => "Talde DN Oinarri bat lerroko",
+"Group-Member association" => "Talde-Kide elkarketak",
"in bytes" => "bytetan",
-"in seconds. A change empties the cache." => "segundutan. Aldaketak katxea husten du.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Utzi hutsik erabiltzaile izenarako (lehentsia). Bestela zehaztu LDAP/AD atributua.",
"Help" => "Laguntza"
);
diff --git a/apps/user_ldap/l10n/fa.php b/apps/user_ldap/l10n/fa.php
index 44324221168..7ddd7dad5c3 100644
--- a/apps/user_ldap/l10n/fa.php
+++ b/apps/user_ldap/l10n/fa.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "حذ٠کردن انجام نشد",
+"Keep settings?" => "آیا تنظیمات ذخیره شود ؟",
"Host" => "میزبانی",
"Password" => "رمز عبور",
+"Port" => "درگاه",
"Help" => "راه‌نما"
);
diff --git a/apps/user_ldap/l10n/fi_FI.php b/apps/user_ldap/l10n/fi_FI.php
index 24195649a64..1c2a92f844a 100644
--- a/apps/user_ldap/l10n/fi_FI.php
+++ b/apps/user_ldap/l10n/fi_FI.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Poisto epäonnistui",
"Host" => "Isäntä",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Voit jättää protokollan määrittämättä, paitsi kun vaadit SSL:ää. Aloita silloin ldaps://",
"Base DN" => "Oletus DN",
@@ -17,21 +18,20 @@
"Defines the filter to apply, when retrieving groups." => "Määrittelee käytettävän suodattimen, kun ryhmiä haetaan. ",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ilman paikanvaraustermiä, ts. \"objectClass=posixGroup\".",
"Port" => "Portti",
-"Base User Tree" => "Oletuskäyttäjäpuu",
-"Base Group Tree" => "Ryhmien juuri",
-"Group-Member association" => "Ryhmän ja jäsenen assosiaatio (yhteys)",
"Use TLS" => "Käytä TLS:ää",
-"Do not use it for SSL connections, it will fail." => "Älä käytä SSL-yhteyttä varten, se epäonnistuu. ",
"Case insensitve LDAP server (Windows)" => "Kirjainkoosta piittamaton LDAP-palvelin (Windows)",
"Turn off SSL certificate validation." => "Poista käytöstä SSL-varmenteen vahvistus",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Jos yhteys toimii vain tällä valinnalla, siirrä LDAP-palvelimen SSL-varmenne ownCloud-palvelimellesi.",
"Not recommended, use for testing only." => "Ei suositella, käytä vain testausta varten.",
+"in seconds. A change empties the cache." => "sekunneissa. Muutos tyhjentää välimuistin.",
"User Display Name Field" => "Käyttäjän näytettävän nimen kenttä",
"The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP-attribuutti, jota käytetään käyttäjän ownCloud-käyttäjänimenä ",
+"Base User Tree" => "Oletuskäyttäjäpuu",
"Group Display Name Field" => "Ryhmän \"näytettävä nimi\"-kenttä",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP-attribuutti, jota käytetään luomaan ryhmän ownCloud-nimi",
+"Base Group Tree" => "Ryhmien juuri",
+"Group-Member association" => "Ryhmän ja jäsenen assosiaatio (yhteys)",
"in bytes" => "tavuissa",
-"in seconds. A change empties the cache." => "sekunneissa. Muutos tyhjentää välimuistin.",
"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.",
"Help" => "Ohje"
);
diff --git a/apps/user_ldap/l10n/fr.php b/apps/user_ldap/l10n/fr.php
index 9750d1352a8..abe13635698 100644
--- a/apps/user_ldap/l10n/fr.php
+++ b/apps/user_ldap/l10n/fr.php
@@ -1,12 +1,27 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Échec de la suppression de la configuration du serveur",
+"The configuration is valid and the connection could be established!" => "La configuration est valide est la connexion peut être établie !",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "La configuration est valide, mais le lien ne peut être établi. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "La configuration est invalide. Veuillez vous référer aux fichiers de journaux ownCloud pour plus d'information.",
+"Deletion failed" => "La suppression a échoué",
+"Take over settings from recent server configuration?" => "Récupérer les paramètres depuis une configuration récente du serveur ?",
+"Keep settings?" => "Garder ces paramètres ?",
+"Cannot add server configuration" => "Impossible d'ajouter la configuration du serveur.",
+"Connection test succeeded" => "Test de connexion réussi",
+"Connection test failed" => "Le test de connexion a échoué",
+"Do you really want to delete the current Server Configuration?" => "Êtes-vous vraiment sûr de vouloir effacer la configuration actuelle du serveur ?",
+"Confirm Deletion" => "Confirmer la suppression",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Avertissement:</b> Les applications user_ldap et user_webdavauth sont incompatibles. Des disfonctionnements peuvent survenir. Contactez votre administrateur système pour qu'il désactive l'une d'elles.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Avertissement:</b> Le module PHP LDAP requis n'est pas installé, l'application ne marchera pas. Contactez votre administrateur système pour qu'il l'installe.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Attention :</b> Le module php LDAP n'est pas installé, par conséquent cette extension ne pourra fonctionner. Veuillez contacter votre administrateur système afin qu'il l'installe.",
+"Server configuration" => "Configuration du serveur",
+"Add Server Configuration" => "Ajouter une configuration du serveur",
"Host" => "Hôte",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Vous pouvez omettre le protocole, sauf si vous avez besoin de SSL. Dans ce cas préfixez avec ldaps://",
"Base DN" => "DN Racine",
-"You can specify Base DN for users and groups in the Advanced tab" => "Vous pouvez détailler les DN Racines de vos utilisateurs et groupes dans l'onglet Avancé",
+"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é",
"User DN" => "DN Utilisateur (Autorisé à consulter l'annuaire)",
-"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." => "Le DN de l'utilisateur client avec lequel la liaison doit se faire, par exemple uid=agent,dc=example,dc=com. Pour l'accès anonyme, laisser le DN et le mot de passe vides.",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN de l'utilisateur client pour lequel la liaison doit se faire, par exemple uid=agent,dc=example,dc=com. Pour un accès anonyme, laisser le DN et le mot de passe vides.",
"Password" => "Mot de passe",
"For anonymous access, leave DN and Password empty." => "Pour un accès anonyme, laisser le DN Utilisateur et le mot de passe vides.",
"User Login Filter" => "Modèle d'authentification utilisateurs",
@@ -18,22 +33,37 @@
"Group Filter" => "Filtre de groupes",
"Defines the filter to apply, when retrieving groups." => "Définit le filtre à appliquer lors de la récupération des groupes.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sans élément de substitution, par exemple \"objectClass=posixGroup\".",
+"Connection Settings" => "Paramètres de connexion",
+"Configuration Active" => "Configuration active",
+"When unchecked, this configuration will be skipped." => "Lorsque non cochée, la configuration sera ignorée.",
"Port" => "Port",
-"Base User Tree" => "DN racine de l'arbre utilisateurs",
-"Base Group Tree" => "DN racine de l'arbre groupes",
-"Group-Member association" => "Association groupe-membre",
+"Backup (Replica) Host" => "Serveur de backup (réplique)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Fournir un serveur de backup optionnel. Il doit s'agir d'une réplique du serveur LDAP/AD principal.",
+"Backup (Replica) Port" => "Port du serveur de backup (réplique)",
+"Disable Main Server" => "Désactiver le serveur principal",
+"When switched on, ownCloud will only connect to the replica server." => "Lorsqu'activé, ownCloud ne se connectera qu'au serveur répliqué.",
"Use TLS" => "Utiliser TLS",
-"Do not use it for SSL connections, it will fail." => "Ne pas utiliser pour les connexions SSL, car cela échouera.",
+"Do not use it additionally for LDAPS connections, it will fail." => "À ne pas utiliser pour les connexions LDAPS (cela échouera).",
"Case insensitve LDAP server (Windows)" => "Serveur LDAP insensible à la casse (Windows)",
"Turn off SSL certificate validation." => "Désactiver la validation du certificat SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur ownCloud.",
"Not recommended, use for testing only." => "Non recommandé, utilisation pour tests uniquement.",
+"in seconds. A change empties the cache." => "en secondes. Tout changement vide le cache.",
+"Directory Settings" => "Paramètres du répertoire",
"User Display Name Field" => "Champ \"nom d'affichage\" de l'utilisateur",
"The LDAP attribute to use to generate the user`s ownCloud name." => "L'attribut LDAP utilisé pour générer les noms d'utilisateurs d'ownCloud.",
+"Base User Tree" => "DN racine de l'arbre utilisateurs",
+"One User Base DN per line" => "Un DN racine utilisateur par ligne",
+"User Search Attributes" => "Recherche des attributs utilisateur",
+"Optional; one attribute per line" => "Optionnel, un attribut par ligne",
"Group Display Name Field" => "Champ \"nom d'affichage\" du groupe",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "L'attribut LDAP utilisé pour générer les noms de groupes d'ownCloud.",
+"Base Group Tree" => "DN racine de l'arbre groupes",
+"One Group Base DN per line" => "Un DN racine groupe par ligne",
+"Group Search Attributes" => "Recherche des attributs du groupe",
+"Group-Member association" => "Association groupe-membre",
+"Special Attributes" => "Attributs spéciaux",
"in bytes" => "en octets",
-"in seconds. A change empties the cache." => "en secondes. Tout changement vide le cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Laisser vide ",
"Help" => "Aide"
);
diff --git a/apps/user_ldap/l10n/gl.php b/apps/user_ldap/l10n/gl.php
index ae05efcd27f..36c1f7af114 100644
--- a/apps/user_ldap/l10n/gl.php
+++ b/apps/user_ldap/l10n/gl.php
@@ -1,6 +1,6 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Fallou o borrado",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Aviso:</b> Os aplicativos user_ldap e user_webdavauth son incompatíbeis. Pode acontecer un comportamento estraño. Consulte co administrador do sistema para desactivar un deles.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Aviso:</b> O módulo PHP LDAP é necesario e non está instalado, a infraestrutura non funcionará. Consulte co administrador do sistema para instalalo.",
"Host" => "Servidor",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Pode omitir o protocolo agás que precise de SSL. Nese caso comece con ldaps://",
"Base DN" => "DN base",
@@ -19,21 +19,20 @@
"Defines the filter to apply, when retrieving groups." => "Define o filtro a aplicar cando se recompilan os grupos.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sen ningunha marca de posición, como p.ex «objectClass=grupoPosix».",
"Port" => "Porto",
-"Base User Tree" => "Base da árbore de usuarios",
-"Base Group Tree" => "Base da árbore de grupo",
-"Group-Member association" => "Asociación de grupos e membros",
"Use TLS" => "Usar TLS",
-"Do not use it for SSL connections, it will fail." => "Non empregalo para conexións SSL: fallará.",
"Case insensitve LDAP server (Windows)" => "Servidor LDAP que non distingue entre maiúsculas e minúsculas (Windows)",
"Turn off SSL certificate validation." => "Desactiva a validación do certificado SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a conexión só funciona con esta opción importa o certificado SSL do servidor LDAP no seu servidor ownCloud.",
"Not recommended, use for testing only." => "Non se recomenda. Só para probas.",
+"in seconds. A change empties the cache." => "en segundos. Calquera cambio baleira a caché.",
"User Display Name Field" => "Campo de mostra do nome de usuario",
"The LDAP attribute to use to generate the user`s ownCloud name." => "O atributo LDAP a empregar para xerar o nome de usuario de ownCloud.",
+"Base User Tree" => "Base da árbore de usuarios",
"Group Display Name Field" => "Campo de mostra do nome de grupo",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "O atributo LDAP úsase para xerar os nomes dos grupos de ownCloud.",
+"Base Group Tree" => "Base da árbore de grupo",
+"Group-Member association" => "Asociación de grupos e membros",
"in bytes" => "en bytes",
-"in seconds. A change empties the cache." => "en segundos. Calquera cambio baleira a caché.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD.",
"Help" => "Axuda"
);
diff --git a/apps/user_ldap/l10n/he.php b/apps/user_ldap/l10n/he.php
new file mode 100644
index 00000000000..5c563b7b6f3
--- /dev/null
+++ b/apps/user_ldap/l10n/he.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Deletion failed" => "מחיקה נכשלה",
+"Host" => "מ×רח",
+"User DN" => "DN משתמש",
+"Password" => "סיסמ×",
+"For anonymous access, leave DN and Password empty." => "לגישה ×נונימית, הש×ר ×ת ×”DM ×•×”×¡×™×¡×ž× ×¨×™×§×™×.",
+"User Login Filter" => "סנן כניסת משתמש",
+"User List Filter" => "סנן רשימת משתמשי×",
+"Group Filter" => "סנן קבוצה",
+"in seconds. A change empties the cache." => "בשניות. שינוי מרוקן ×ת המטמון.",
+"in bytes" => "בבתי×",
+"Help" => "עזרה"
+);
diff --git a/apps/user_ldap/l10n/hr.php b/apps/user_ldap/l10n/hr.php
new file mode 100644
index 00000000000..91503315066
--- /dev/null
+++ b/apps/user_ldap/l10n/hr.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Pomoć"
+);
diff --git a/apps/user_ldap/l10n/hu_HU.php b/apps/user_ldap/l10n/hu_HU.php
index 577afcef1c9..48a0823a583 100644
--- a/apps/user_ldap/l10n/hu_HU.php
+++ b/apps/user_ldap/l10n/hu_HU.php
@@ -1,11 +1,14 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "A törlés nem sikerült",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Figyelem:</b> a user_ldap és user_webdavauth alkalmazások nem kompatibilisek. Együttes használatuk váratlan eredményekhez vezethet. Kérje meg a rendszergazdát, hogy a kettő közül kapcsolja ki az egyiket.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Figyelem:</b> a szükséges PHP LDAP modul nincs telepítve. Enélkül az LDAP azonosítás nem fog működni. Kérje meg a rendszergazdát, hogy telepítse a szükséges modult!",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse!",
"Host" => "Kiszolgáló",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "A protokoll előtag elhagyható, kivéve, ha SSL-t kíván használni. Ebben az esetben kezdje így: ldaps://",
"Base DN" => "DN-gyökér",
+"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",
"User DN" => "A kapcsolódó felhasználó DN-je",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Annak a felhasználónak a DN-je, akinek a nevében bejelentkezve kapcsolódunk a kiszolgálóhoz, pl. uid=agent,dc=example,dc=com. Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!",
"Password" => "Jelszó",
"For anonymous access, leave DN and Password empty." => "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!",
"User Login Filter" => "Szűrő a bejelentkezéshez",
@@ -18,21 +21,22 @@
"Defines the filter to apply, when retrieving groups." => "Ez a szűrő érvényes a csoportok listázásakor.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "itt ne használjunk változót, pl. \"objectClass=posixGroup\".",
"Port" => "Port",
-"Base User Tree" => "A felhasználói fa gyökere",
-"Base Group Tree" => "A csoportfa gyökere",
-"Group-Member association" => "A csoporttagság attribútuma",
"Use TLS" => "Használjunk TLS-t",
-"Do not use it for SSL connections, it will fail." => "Ne használjuk SSL-kapcsolat esetén, mert nem fog működni!",
"Case insensitve LDAP server (Windows)" => "Az LDAP-kiszolgáló nem tesz különbséget a kis- és nagybetűk között (Windows)",
"Turn off SSL certificate validation." => "Ne ellenőrizzük az SSL-tanúsítvány érvényességét",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-kiszolgáló SSL tanúsítványát az ownCloud kiszolgálóra!",
"Not recommended, use for testing only." => "Nem javasolt, csak tesztelésre érdemes használni.",
+"in seconds. A change empties the cache." => "másodpercben. A változtatás törli a cache tartalmát.",
"User Display Name Field" => "A felhasználónév mezője",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Ebből az LDAP attribútumból képződik a felhasználó elnevezése, ami megjelenik az ownCloudban.",
+"Base User Tree" => "A felhasználói fa gyökere",
+"One User Base DN per line" => "Soronként egy felhasználói fa gyökerét adhatjuk meg",
"Group Display Name Field" => "A csoport nevének mezője",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Ebből az LDAP attribútumból képződik a csoport elnevezése, ami megjelenik az ownCloudban.",
+"Base Group Tree" => "A csoportfa gyökere",
+"One Group Base DN per line" => "Soronként egy csoportfa gyökerét adhatjuk meg",
+"Group-Member association" => "A csoporttagság attribútuma",
"in bytes" => "bájtban",
-"in seconds. A change empties the cache." => "másodpercben. A változtatás törli a cache tartalmát.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Hagyja üresen, ha a felhasználónevet kívánja használni. Ellenkező esetben adjon meg egy LDAP/AD attribútumot!",
"Help" => "Súgó"
);
diff --git a/apps/user_ldap/l10n/ia.php b/apps/user_ldap/l10n/ia.php
new file mode 100644
index 00000000000..3586bf5a2e7
--- /dev/null
+++ b/apps/user_ldap/l10n/ia.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Adjuta"
+);
diff --git a/apps/user_ldap/l10n/id.php b/apps/user_ldap/l10n/id.php
index 56619634bab..c07892386d6 100644
--- a/apps/user_ldap/l10n/id.php
+++ b/apps/user_ldap/l10n/id.php
@@ -1,14 +1,14 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "penghapusan gagal",
"Host" => "host",
"Password" => "kata kunci",
"User Login Filter" => "gunakan saringan login",
"Group Filter" => "saringan grup",
"Port" => "port",
"Use TLS" => "gunakan TLS",
-"Do not use it for SSL connections, it will fail." => "jangan gunakan untuk koneksi SSL, itu akan gagal.",
"Turn off SSL certificate validation." => "matikan validasi sertivikat SSL",
"Not recommended, use for testing only." => "tidak disarankan, gunakan hanya untuk pengujian.",
-"in bytes" => "dalam bytes",
"in seconds. A change empties the cache." => "dalam detik. perubahan mengosongkan cache",
+"in bytes" => "dalam bytes",
"Help" => "bantuan"
);
diff --git a/apps/user_ldap/l10n/it.php b/apps/user_ldap/l10n/it.php
index 915ce3af5b8..594529190d9 100644
--- a/apps/user_ldap/l10n/it.php
+++ b/apps/user_ldap/l10n/it.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Eliminazione della configurazione del server non riuscita",
+"The configuration is valid and the connection could be established!" => "La configurazione è valida e la connessione può essere stabilita.",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "La configurazione è valida, ma il Bind non è riuscito. Controlla le impostazioni del server e le credenziali.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "La configurazione non è valida. Controlla il log di ownCloud per ulteriori dettagli.",
+"Deletion failed" => "Eliminazione non riuscita",
+"Take over settings from recent server configuration?" => "Vuoi recuperare le impostazioni dalla configurazione recente del server?",
+"Keep settings?" => "Vuoi mantenere le impostazioni?",
+"Cannot add server configuration" => "Impossibile aggiungere la configurazione del server",
+"Connection test succeeded" => "Prova di connessione riuscita",
+"Connection test failed" => "Prova di connessione non riuscita",
+"Do you really want to delete the current Server Configuration?" => "Vuoi davvero eliminare la configurazione attuale del server?",
+"Confirm Deletion" => "Conferma l'eliminazione",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Avviso:</b> le applicazioni user_ldap e user_webdavauth sono incompatibili. Potresti riscontrare un comportamento inatteso. Chiedi al tuo amministratore di sistema di disabilitarne uno.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Avviso:</b> il modulo PHP LDAP richiesto non è installato, il motore non funzionerà. Chiedi al tuo amministratore di sistema di installarlo.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Avviso:</b> il modulo PHP LDAP non è installato, il motore non funzionerà. Chiedi al tuo amministratore di sistema di installarlo.",
+"Server configuration" => "Configurazione del server",
+"Add Server Configuration" => "Aggiungi configurazione del server",
"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "È possibile omettere il protocollo, ad eccezione se è necessario SSL. Quindi inizia con ldaps://",
"Base DN" => "DN base",
+"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",
"User DN" => "DN utente",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agent,dc=example,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
@@ -18,22 +33,37 @@
"Group Filter" => "Filtro per il gruppo",
"Defines the filter to apply, when retrieving groups." => "Specifica quale filtro utilizzare durante il recupero dei gruppi.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "senza nessun segnaposto, per esempio \"objectClass=posixGroup\".",
+"Connection Settings" => "Impostazioni di connessione",
+"Configuration Active" => "Configurazione attiva",
+"When unchecked, this configuration will be skipped." => "Se deselezionata, questa configurazione sarà saltata.",
"Port" => "Porta",
-"Base User Tree" => "Struttura base dell'utente",
-"Base Group Tree" => "Struttura base del gruppo",
-"Group-Member association" => "Associazione gruppo-utente ",
+"Backup (Replica) Host" => "Host di backup (Replica)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Fornisci un host di backup opzionale. Deve essere una replica del server AD/LDAP principale.",
+"Backup (Replica) Port" => "Porta di backup (Replica)",
+"Disable Main Server" => "Disabilita server principale",
+"When switched on, ownCloud will only connect to the replica server." => "Se abilitata, ownCloud si collegherà solo al server di replica.",
"Use TLS" => "Usa TLS",
-"Do not use it for SSL connections, it will fail." => "Non utilizzare per le connessioni SSL, fallirà.",
+"Do not use it additionally for LDAPS connections, it will fail." => "Da non utilizzare per le connessioni LDAPS, non funzionerà.",
"Case insensitve LDAP server (Windows)" => "Case insensitve LDAP server (Windows)",
"Turn off SSL certificate validation." => "Disattiva il controllo del certificato SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se la connessione funziona esclusivamente con questa opzione, importa il certificato SSL del server LDAP nel tuo server ownCloud.",
"Not recommended, use for testing only." => "Non consigliato, utilizzare solo per test.",
+"in seconds. A change empties the cache." => "in secondi. Il cambio svuota la cache.",
+"Directory Settings" => "Impostazioni delle cartelle",
"User Display Name Field" => "Campo per la visualizzazione del nome utente",
"The LDAP attribute to use to generate the user`s ownCloud name." => "L'attributo LDAP da usare per generare il nome dell'utente ownCloud.",
+"Base User Tree" => "Struttura base dell'utente",
+"One User Base DN per line" => "Un DN base utente per riga",
+"User Search Attributes" => "Attributi di ricerca utente",
+"Optional; one attribute per line" => "Opzionale; un attributo per riga",
"Group Display Name Field" => "Campo per la visualizzazione del nome del gruppo",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "L'attributo LDAP da usare per generare il nome del gruppo ownCloud.",
+"Base Group Tree" => "Struttura base del gruppo",
+"One Group Base DN per line" => "Un DN base gruppo per riga",
+"Group Search Attributes" => "Attributi di ricerca gruppo",
+"Group-Member association" => "Associazione gruppo-utente ",
+"Special Attributes" => "Attributi speciali",
"in bytes" => "in byte",
-"in seconds. A change empties the cache." => "in secondi. Il cambio svuota la cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Lascia vuoto per il nome utente (predefinito). Altrimenti, specifica un attributo LDAP/AD.",
"Help" => "Aiuto"
);
diff --git a/apps/user_ldap/l10n/ja_JP.php b/apps/user_ldap/l10n/ja_JP.php
index c7b2a0f91b8..11ad6cc7a37 100644
--- a/apps/user_ldap/l10n/ja_JP.php
+++ b/apps/user_ldap/l10n/ja_JP.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"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 look in the ownCloud log for further details." => "設定ã¯ç„¡åйã§ã™ã€‚詳細㯠ownCloud ã®ãƒ­ã‚°ã‚’見ã¦ä¸‹ã•ã„。",
+"Deletion failed" => "削除ã«å¤±æ•—ã—ã¾ã—ãŸ",
+"Take over settings from recent server configuration?" => "最近ã®ã‚µãƒ¼ãƒè¨­å®šã‹ã‚‰è¨­å®šã‚’引ãç¶™ãŽã¾ã™ã‹ï¼Ÿ",
+"Keep settings?" => "è¨­å®šã‚’ä¿æŒã—ã¾ã™ã‹ï¼Ÿ",
+"Cannot add server configuration" => "サーãƒè¨­å®šã‚’追加ã§ãã¾ã›ã‚“",
+"Connection test succeeded" => "æŽ¥ç¶šãƒ†ã‚¹ãƒˆã«æˆåŠŸã—ã¾ã—ãŸ",
+"Connection test failed" => "接続テストã«å¤±æ•—ã—ã¾ã—ãŸ",
+"Do you really want to delete the current Server Configuration?" => "ç¾åœ¨ã®ã‚µãƒ¼ãƒè¨­å®šã‚’本当ã«å‰Šé™¤ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ",
+"Confirm Deletion" => "削除ã®ç¢ºèª",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>警告:</b> user_ldap 㨠user_webdavauth ã®ã‚¢ãƒ—リã«ã¯äº’æ›æ€§ãŒã‚りã¾ã›ã‚“。予期ã›ã¬å‹•作をã™ã‚‹å¯èƒ½å§“ãŒã‚りã¾ã™ã€‚システム管ç†è€…ã«ã©ã¡ã‚‰ã‹ã‚’無効ã«ã™ã‚‹ã‚ˆã†å•ã„åˆã‚ã›ã¦ãã ã•ã„。",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>警告:</b> PHP LDAP モジュールãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒæ­£ã—ãã©ã†ã•ã—ã¾ã›ã‚“。システム管ç†è€…ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚ˆã†å•ã„åˆã‚ã›ã¦ãã ã•ã„。",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>警告:</b> PHP LDAP モジュールãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒæ­£ã—ã動作ã—ã¾ã›ã‚“。システム管ç†è€…ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚ˆã†å•ã„åˆã‚ã›ã¦ãã ã•ã„。",
+"Server configuration" => "サーãƒè¨­å®š",
+"Add Server Configuration" => "サーãƒè¨­å®šã‚’追加",
"Host" => "ホスト",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL通信ã—ãªã„å ´åˆã«ã¯ã€ãƒ—ロトコルåã‚’çœç•¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã«ã¯ã€ldaps:// ã‹ã‚‰å§‹ã‚ã¦ãã ã•ã„。",
"Base DN" => "ベースDN",
+"One Base DN per line" => "1行ã«1ã¤ã®ãƒ™ãƒ¼ã‚¹DN",
"You can specify Base DN for users and groups in the Advanced tab" => "拡張タブã§ãƒ¦ãƒ¼ã‚¶ã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ™ãƒ¼ã‚¹DNを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚",
"User DN" => "ユーザDN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "クライアントユーザーã®DNã¯ã€ç‰¹å®šã®ã‚‚ã®ã«çµã³ã¤ã‘ã‚‹ã“ã¨ã¯ã—ã¾ã›ã‚“。 例ãˆã° uid=agent,dc=example,dc=com. ã ã¨åŒ¿åアクセスã®å ´åˆã€DNã¨ãƒ‘スワードã¯ç©ºã®ã¾ã¾ã§ã™ã€‚",
@@ -18,22 +33,37 @@
"Group Filter" => "グループフィルタ",
"Defines the filter to apply, when retrieving groups." => "グループをå–å¾—ã™ã‚‹ã¨ãã«é©ç”¨ã™ã‚‹ãƒ•ィルターを定義ã™ã‚‹ã€‚",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "プレースホルダーを利用ã—ãªã„ã§ãã ã•ã„。例 \"objectClass=posixGroup\"",
+"Connection Settings" => "接続設定",
+"Configuration Active" => "設定ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã™",
+"When unchecked, this configuration will be skipped." => "ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ã€ã“ã®è¨­å®šã¯ã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚",
"Port" => "ãƒãƒ¼ãƒˆ",
-"Base User Tree" => "ベースユーザツリー",
-"Base Group Tree" => "ベースグループツリー",
-"Group-Member association" => "グループã¨ãƒ¡ãƒ³ãƒãƒ¼ã®é–¢é€£ä»˜ã‘",
+"Backup (Replica) Host" => "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—(レプリカ)ホスト",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãƒ›ã‚¹ãƒˆã‚’ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚メインã®LDAP/ADサーãƒã®ãƒ¬ãƒ—リカã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚",
+"Backup (Replica) Port" => "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—(レプリカ)ãƒãƒ¼ãƒˆ",
+"Disable Main Server" => "メインサーãƒã‚’無効ã«ã™ã‚‹",
+"When switched on, ownCloud will only connect to the replica server." => "有効ã«ã™ã‚‹ã¨ã€ownCloudã¯ãƒ¬ãƒ—リカサーãƒã«ã®ã¿æŽ¥ç¶šã—ã¾ã™ã€‚",
"Use TLS" => "TLSを利用",
-"Do not use it for SSL connections, it will fail." => "SSL接続ã«åˆ©ç”¨ã—ãªã„ã§ãã ã•ã„ã€å¤±æ•—ã—ã¾ã™ã€‚",
+"Do not use it additionally for LDAPS connections, it will fail." => "LDAPS接続ã®ãŸã‚ã«è¿½åŠ ã§ãれを利用ã—ãªã„ã§ä¸‹ã•ã„。失敗ã—ã¾ã™ã€‚",
"Case insensitve LDAP server (Windows)" => "大文字ï¼å°æ–‡å­—を区別ã—ãªã„LDAPサーãƒï¼ˆWindows)",
"Turn off SSL certificate validation." => "SSL証明書ã®ç¢ºèªã‚’無効ã«ã™ã‚‹ã€‚",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "接続ãŒã“ã®ã‚ªãƒ—ションã§ã®ã¿å‹•作ã™ã‚‹å ´åˆã¯ã€LDAPサーãƒã®SSL証明書をownCloudサーãƒã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ãã ã•ã„。",
"Not recommended, use for testing only." => "推奨ã—ã¾ã›ã‚“ã€ãƒ†ã‚¹ãƒˆç›®çš„ã§ã®ã¿åˆ©ç”¨ã—ã¦ãã ã•ã„。",
+"in seconds. A change empties the cache." => "秒。変更後ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚",
+"Directory Settings" => "ディレクトリ設定",
"User Display Name Field" => "ユーザ表示åã®ãƒ•ィールド",
"The LDAP attribute to use to generate the user`s ownCloud name." => "ユーザã®ownCloudåã®ç”Ÿæˆã«åˆ©ç”¨ã™ã‚‹LDAP属性。",
+"Base User Tree" => "ベースユーザツリー",
+"One User Base DN per line" => "1行ã«1ã¤ã®ãƒ¦ãƒ¼ã‚¶ãƒ™ãƒ¼ã‚¹DN",
+"User Search Attributes" => "ユーザ検索属性",
+"Optional; one attribute per line" => "オプション:1行ã«1属性",
"Group Display Name Field" => "グループ表示åã®ãƒ•ィールド",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "グループã®ownCloudåã®ç”Ÿæˆã«åˆ©ç”¨ã™ã‚‹LDAP属性。",
+"Base Group Tree" => "ベースグループツリー",
+"One Group Base DN per line" => "1行ã«1ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ベースDN",
+"Group Search Attributes" => "グループ検索属性",
+"Group-Member association" => "グループã¨ãƒ¡ãƒ³ãƒãƒ¼ã®é–¢é€£ä»˜ã‘",
+"Special Attributes" => "特殊属性",
"in bytes" => "ãƒã‚¤ãƒˆ",
-"in seconds. A change empties the cache." => "秒。変更後ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "ユーザåを空ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„(デフォルト)。ãã†ã§ãªã„å ´åˆã¯ã€LDAPã‚‚ã—ãã¯ADã®å±žæ€§ã‚’指定ã—ã¦ãã ã•ã„。",
"Help" => "ヘルプ"
);
diff --git a/apps/user_ldap/l10n/ka_GE.php b/apps/user_ldap/l10n/ka_GE.php
new file mode 100644
index 00000000000..b31767fe935
--- /dev/null
+++ b/apps/user_ldap/l10n/ka_GE.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Deletion failed" => "წáƒáƒ¨áƒšáƒ˜áƒ¡ ველი",
+"Help" => "დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ"
+);
diff --git a/apps/user_ldap/l10n/ko.php b/apps/user_ldap/l10n/ko.php
index 37ac3d1bda5..419e2d0a690 100644
--- a/apps/user_ldap/l10n/ko.php
+++ b/apps/user_ldap/l10n/ko.php
@@ -1,9 +1,11 @@
<?php $TRANSLATIONS = array(
-"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>경고</b>user_ldap 앱과 user_webdavauth ì•±ì€ í˜¸í™˜ë˜ì§€ 않습니다. 오ë™ìž‘ì„ ì¼ìœ¼í‚¬ 수 있으므로, 시스템 관리ìžì—게 요청하여, 둘 중 하나를 비활성화 하시기 ë°”ëžë‹ˆë‹¤.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>경고</b>PHP LDAP ëª¨ë“ˆì´ ì„¤ì¹˜ë˜ì§€ 않았습니다. 백엔드가 ë™ìž‘하지 ì•Šì„ ê²ƒ 입니다. 시스템관리ìžì—게 요청하여 해당 ëª¨ë“ˆì„ ì„¤ì¹˜í•˜ì‹œê¸° ë°”ëžë‹ˆë‹¤.",
+"Deletion failed" => "삭제 실패",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. 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 ëª¨ë“ˆì´ ë¹„í™œì„±í™”ë˜ì–´ 있거나 설치ë˜ì–´ 있지 않습니다. 백엔드를 사용할 수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오.",
"Host" => "호스트",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSLì„ ì‚¬ìš©í•˜ëŠ” 경우가 아니ë¼ë©´ í”„ë¡œí† ì½œì„ ìž…ë ¥í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. SSLì„ ì‚¬ìš©í•˜ë ¤ë©´ ldaps://를 입력하십시오.",
"Base DN" => "기본 DN",
+"One Base DN per line" => "기본 DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오",
"You can specify Base DN for users and groups in the Advanced tab" => "고급 탭ì—서 ì‚¬ìš©ìž ë° ê·¸ë£¹ì— ëŒ€í•œ 기본 DNì„ ì§€ì •í•  수 있습니다.",
"User DN" => "ì‚¬ìš©ìž DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "ë°”ì¸ë”© ìž‘ì—…ì„ ìˆ˜í–‰í•  í´ë¼ì´ì–¸íЏ ì‚¬ìš©ìž DN입니다. 예를 들어서 uid=agent,dc=example,dc=com입니다. ìµëª… ì ‘ê·¼ì„ í—ˆìš©í•˜ë ¤ë©´ DNê³¼ 암호를 비워 ë‘십시오.",
@@ -19,21 +21,22 @@
"Defines the filter to apply, when retrieving groups." => "ê·¸ë£¹ì„ ê²€ìƒ‰í•  때 ì ìš©í•  필터를 ì •ì˜í•©ë‹ˆë‹¤.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ìžë¦¬ 비움ìžë¥¼ 사용할 수 없습니다. 예제: \"objectClass=posixGroup\"",
"Port" => "í¬íЏ",
-"Base User Tree" => "기본 ì‚¬ìš©ìž íŠ¸ë¦¬",
-"Base Group Tree" => "기본 그룹 트리",
-"Group-Member association" => "그룹-íšŒì› ì—°ê²°",
"Use TLS" => "TLS 사용",
-"Do not use it for SSL connections, it will fail." => "SSL ì—°ê²° 시 사용하는 경우 ì—°ê²°ë˜ì§€ 않습니다.",
"Case insensitve LDAP server (Windows)" => "서버ì—서 대소문ìžë¥¼ 구분하지 ì•ŠìŒ (Windows)",
"Turn off SSL certificate validation." => "SSL ì¸ì¦ì„œ 유효성 검사를 해제합니다.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "ì´ ì˜µì…˜ì„ ì‚¬ìš©í•´ì•¼ ì—°ê²°í•  수 있는 경우ì—는 LDAP ì„œë²„ì˜ SSL ì¸ì¦ì„œë¥¼ ownCloud로 가져올 수 있습니다.",
"Not recommended, use for testing only." => "추천하지 않ìŒ, 테스트로만 사용하십시오.",
+"in seconds. A change empties the cache." => "ì´ˆ. 항목 변경 시 ìºì‹œê°€ 갱신ë©ë‹ˆë‹¤.",
"User Display Name Field" => "사용ìžì˜ 표시 ì´ë¦„ 필드",
"The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP ì†ì„±ì€ 사용ìžì˜ ownCloud ì´ë¦„ì„ ìƒì„±í•˜ê¸° 위해 사용합니다.",
+"Base User Tree" => "기본 ì‚¬ìš©ìž íŠ¸ë¦¬",
+"One User Base DN per line" => "ì‚¬ìš©ìž DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오",
"Group Display Name Field" => "ê·¸ë£¹ì˜ í‘œì‹œ ì´ë¦„ 필드",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP ì†ì„±ì€ ê·¸ë£¹ì˜ ownCloud ì´ë¦„ì„ ìƒì„±í•˜ê¸° 위해 사용합니다.",
+"Base Group Tree" => "기본 그룹 트리",
+"One Group Base DN per line" => "그룹 기본 DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오",
+"Group-Member association" => "그룹-íšŒì› ì—°ê²°",
"in bytes" => "ë°”ì´íЏ",
-"in seconds. A change empties the cache." => "ì´ˆ. 항목 변경 시 ìºì‹œê°€ 갱신ë©ë‹ˆë‹¤.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "ì‚¬ìš©ìž ì´ë¦„ì„ ì‚¬ìš©í•˜ë ¤ë©´ 비워 ë‘십시오(기본값). 기타 경우 LDAP/AD ì†ì„±ì„ 지정하십시오.",
"Help" => "ë„움ë§"
);
diff --git a/apps/user_ldap/l10n/ku_IQ.php b/apps/user_ldap/l10n/ku_IQ.php
new file mode 100644
index 00000000000..1ae808ddd91
--- /dev/null
+++ b/apps/user_ldap/l10n/ku_IQ.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Help" => "یارمەتی"
+);
diff --git a/apps/user_ldap/l10n/lb.php b/apps/user_ldap/l10n/lb.php
new file mode 100644
index 00000000000..39ed627ce2c
--- /dev/null
+++ b/apps/user_ldap/l10n/lb.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Deletion failed" => "Konnt net läschen",
+"Password" => "Passwuert",
+"Help" => "Hëllef"
+);
diff --git a/apps/user_ldap/l10n/lt_LT.php b/apps/user_ldap/l10n/lt_LT.php
index 809ed571bd0..aa21dd2d3c1 100644
--- a/apps/user_ldap/l10n/lt_LT.php
+++ b/apps/user_ldap/l10n/lt_LT.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Ištrinti nepavyko",
"Password" => "Slaptažodis",
"Group Filter" => "GrupÄ—s filtras",
"Port" => "Prievadas",
diff --git a/apps/user_ldap/l10n/lv.php b/apps/user_ldap/l10n/lv.php
new file mode 100644
index 00000000000..34e9196b8d9
--- /dev/null
+++ b/apps/user_ldap/l10n/lv.php
@@ -0,0 +1,69 @@
+<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "NeizdevÄs izdzÄ“st servera konfigurÄciju",
+"The configuration is valid and the connection could be established!" => "KonfigurÄcija ir derÄ«ga un varÄ“ja izveidot savienojumu!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "KonfigurÄcija ir derÄ«ga, bet sasaiste neizdevÄs. LÅ«dzu, pÄrbaudiet servera iestatÄ«jumus un akreditÄcijas datus.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "KonfigurÄcija ir nederÄ«ga. LÅ«dzu, apskatiet ownCloud žurnÄlu, lai uzzinÄtu vairÄk.",
+"Deletion failed" => "NeizdevÄs izdzÄ“st",
+"Take over settings from recent server configuration?" => "Paņemt iestatÄ«jumus no nesenas servera konfigurÄcijas?",
+"Keep settings?" => "Paturēt iestatījumus?",
+"Cannot add server configuration" => "Nevar pievienot servera konfigurÄciju",
+"Connection test succeeded" => "Savienojuma tests ir veiksmīgs",
+"Connection test failed" => "Savienojuma tests cieta neveiksmi",
+"Do you really want to delete the current Server Configuration?" => "Vai tieÅ¡Äm vÄ“laties dzÄ“st paÅ¡reizÄ“jo servera konfigurÄciju?",
+"Confirm Deletion" => "ApstiprinÄt dzēšanu",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>BrÄ«dinÄjums:</b> lietotnes user_ldap un user_webdavauth ir nesavietojamas. TÄs var izraisÄ«t negaidÄ«tu uzvedÄ«bu. LÅ«dzu, prasiet savam sistÄ“mas administratoram kÄdu no tÄm deaktivÄ“t.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>BrÄ«dinÄjums:</b> PHP LDAP modulis nav uzinstalÄ“ts, aizmugure nedarbosies. LÅ«dzu, prasiet savam sistÄ“mas administratoram kÄdu no tÄm deaktivÄ“t.",
+"Server configuration" => "Servera konfigurÄcija",
+"Add Server Configuration" => "Pievienot servera konfigurÄciju",
+"Host" => "Resursdators",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Var neiekļaut protokolu, izņemot, ja vajag SSL. Tad sÄkums ir ldaps://",
+"Base DN" => "BÄzes DN",
+"One Base DN per line" => "Viena bÄzes DN rindÄ",
+"You can specify Base DN for users and groups in the Advanced tab" => "LietotÄjiem un grupÄm bÄzes DN var norÄdÄ«t cilnÄ“ “PaplaÅ¡inÄtiâ€",
+"User DN" => "LietotÄja DN",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "Klienta lietotÄja DN, ar ko veiks sasaisti, piemÄ“ram, uid=agent,dc=example,dc=com. Lai piekļūtu anonÄ«mi, atstÄjiet DN un paroli tukÅ¡u.",
+"Password" => "Parole",
+"For anonymous access, leave DN and Password empty." => "Lai piekļūtu anonÄ«mi, atstÄjiet DN un paroli tukÅ¡u.",
+"User Login Filter" => "LietotÄja ierakstīšanÄs filtrs",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "DefinÄ“ filtru, ko izmantot, kad mēģina ierakstÄ«ties. %%uid ierakstīšanÄs darbÄ«bÄ aizstÄj lietotÄjvÄrdu.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "lieto %%uid vietturi, piemēram, \"uid=%%uid\"",
+"User List Filter" => "LietotÄju saraksta filtrs",
+"Defines the filter to apply, when retrieving users." => "DefinÄ“ filtru, ko izmantot, kad saņem lietotÄju sarakstu.",
+"without any placeholder, e.g. \"objectClass=person\"." => "bez jebkÄdiem vietturiem, piemÄ“ram, \"objectClass=person\".",
+"Group Filter" => "Grupu filtrs",
+"Defines the filter to apply, when retrieving groups." => "Definē filtru, ko izmantot, kad saņem grupu sarakstu.",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez jebkÄdiem vietturiem, piemÄ“ram, \"objectClass=posixGroup\".",
+"Connection Settings" => "Savienojuma iestatījumi",
+"Configuration Active" => "KonfigurÄcija ir aktÄ«va",
+"When unchecked, this configuration will be skipped." => "Ja nav atzÄ«mÄ“ts, šī konfigurÄcija tiks izlaista.",
+"Port" => "Ports",
+"Backup (Replica) Host" => "Rezerves (kopija) serveris",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "NorÄdi rezerves serveri (nav obligÄti). Tam ir jÄbÅ«t galvenÄ LDAP/AD servera kopijai.",
+"Backup (Replica) Port" => "Rezerves (kopijas) ports",
+"Disable Main Server" => "Deaktivēt galveno serveri",
+"When switched on, ownCloud will only connect to the replica server." => "Kad ieslēgts, ownCloud savienosies tikai ar kopijas serveri.",
+"Use TLS" => "Lietot TLS",
+"Do not use it additionally for LDAPS connections, it will fail." => "Neizmanto papildu LDAPS savienojumus! Tas nestrÄdÄs.",
+"Case insensitve LDAP server (Windows)" => "Reģistrnejutīgs LDAP serveris (Windows)",
+"Turn off SSL certificate validation." => "IzslÄ“gt SSL sertifikÄtu validēšanu.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Ja savienojums darbojas ar Å¡o opciju, importÄ“ LDAP serveru SSL sertifikÄtu savÄ ownCloud serverÄ«.",
+"Not recommended, use for testing only." => "Nav ieteicams, izmanto tikai testēšanai!",
+"in seconds. A change empties the cache." => "sekundēs. Izmaiņas iztukšos kešatmiņu.",
+"Directory Settings" => "Direktorijas iestatījumi",
+"User Display Name Field" => "LietotÄja redzamÄ vÄrda lauks",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP atribÅ«ts, ko izmantot lietotÄja ownCloud vÄrda veidoÅ¡anai.",
+"Base User Tree" => "BÄzes lietotÄju koks",
+"One User Base DN per line" => "Viena lietotÄju bÄzes DN rindÄ",
+"User Search Attributes" => "LietotÄju meklēšanas atribÅ«ts",
+"Optional; one attribute per line" => "NeobligÄti; viens atribÅ«ts rindÄ",
+"Group Display Name Field" => "Grupas redzamÄ nosaukuma lauks",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP atribūts, ko izmantot grupas ownCloud nosaukuma veidošanai.",
+"Base Group Tree" => "BÄzes grupu koks",
+"One Group Base DN per line" => "Viena grupu bÄzes DN rindÄ",
+"Group Search Attributes" => "Grupu meklēšanas atribūts",
+"Group-Member association" => "Grupu piederÄ«bas asociÄcija",
+"Special Attributes" => "Īpašie atribūti",
+"in bytes" => "baitos",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "AtstÄt tukÅ¡u lietotÄja vÄrdam (noklusÄ“juma). CitÄdi, norÄdi LDAP/AD atribÅ«tu.",
+"Help" => "Palīdzība"
+);
diff --git a/apps/user_ldap/l10n/mk.php b/apps/user_ldap/l10n/mk.php
index 70a62e71765..7d34ff49492 100644
--- a/apps/user_ldap/l10n/mk.php
+++ b/apps/user_ldap/l10n/mk.php
@@ -1,5 +1,7 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Бришењето е неуÑпешно",
"Host" => "Домаќин",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Може да го Ñкокнете протколот оÑвен ако не ви треба SSL. Тогаш Ñтавете ldaps://",
-"Password" => "Лозинка"
+"Password" => "Лозинка",
+"Help" => "Помош"
);
diff --git a/apps/user_ldap/l10n/ms_MY.php b/apps/user_ldap/l10n/ms_MY.php
new file mode 100644
index 00000000000..17a6cbe2cb6
--- /dev/null
+++ b/apps/user_ldap/l10n/ms_MY.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Deletion failed" => "Pemadaman gagal",
+"Help" => "Bantuan"
+);
diff --git a/apps/user_ldap/l10n/nb_NO.php b/apps/user_ldap/l10n/nb_NO.php
index a5f4657d045..8aab71354b0 100644
--- a/apps/user_ldap/l10n/nb_NO.php
+++ b/apps/user_ldap/l10n/nb_NO.php
@@ -1,11 +1,11 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Sletting feilet",
"Password" => "Passord",
"Group Filter" => "Gruppefilter",
"Port" => "Port",
"Use TLS" => "Bruk TLS",
-"Do not use it for SSL connections, it will fail." => "Ikke bruk for SSL tilkoblinger, dette vil ikke fungere.",
"Not recommended, use for testing only." => "Ikke anbefalt, bruk kun for testing",
-"in bytes" => "i bytes",
"in seconds. A change empties the cache." => "i sekunder. En endring tømmer bufferen.",
+"in bytes" => "i bytes",
"Help" => "Hjelp"
);
diff --git a/apps/user_ldap/l10n/nl.php b/apps/user_ldap/l10n/nl.php
index 23e9a15c010..6879a4c4b94 100644
--- a/apps/user_ldap/l10n/nl.php
+++ b/apps/user_ldap/l10n/nl.php
@@ -1,11 +1,26 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Verwijderen serverconfiguratie mislukt",
+"The configuration is valid and the connection could be established!" => "De configuratie is geldig en de verbinding is geslaagd!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "De configuratie is geldig, maar Bind mislukte. Controleer de serverinstellingen en inloggegevens.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "De configuratie is ongeldig. Controleer de ownCloud log voor meer details.",
+"Deletion failed" => "Verwijderen mislukt",
+"Take over settings from recent server configuration?" => "Overnemen instellingen van de recente serverconfiguratie?",
+"Keep settings?" => "Instellingen bewaren?",
+"Cannot add server configuration" => "Kon de serverconfiguratie niet toevoegen",
+"Connection test succeeded" => "Verbindingstest geslaagd",
+"Connection test failed" => "Verbindingstest mislukt",
+"Do you really want to delete the current Server Configuration?" => "Wilt u werkelijk de huidige Serverconfiguratie verwijderen?",
+"Confirm Deletion" => "Bevestig verwijderen",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Waarschuwing:</b> De Apps user_ldap en user_webdavauth zijn incompatible. U kunt onverwacht gedrag ervaren. Vraag uw beheerder om een van beide apps de deactiveren.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Waarschuwing:</b> De PHP LDAP module is niet geïnstalleerd, de backend zal dus niet werken. Vraag uw beheerder de module te installeren.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Waarschuwing:</b> De PHP LDAP module is niet geïnstalleerd, het backend zal niet werken. Vraag uw systeembeheerder om de module te installeren.",
+"Server configuration" => "Serverconfiguratie",
+"Add Server Configuration" => "Toevoegen serverconfiguratie",
"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Je kunt het protocol weglaten, tenzij je SSL vereist. Start in dat geval met ldaps://",
-"Base DN" => "Basis DN",
-"You can specify Base DN for users and groups in the Advanced tab" => "Je kunt het standaard DN voor gebruikers en groepen specificeren in het tab Geavanceerd.",
-"User DN" => "Gebruikers DN",
+"Base DN" => "Base DN",
+"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.",
+"User DN" => "User DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "De DN van de client gebruiker waarmee de verbinding zal worden gemaakt, bijv. uid=agent,dc=example,dc=com. Voor anonieme toegang laat je het DN en het wachtwoord leeg.",
"Password" => "Wachtwoord",
"For anonymous access, leave DN and Password empty." => "Voor anonieme toegang, laat de DN en het wachtwoord leeg.",
@@ -18,22 +33,36 @@
"Group Filter" => "Groep Filter",
"Defines the filter to apply, when retrieving groups." => "Definiëerd de toe te passen filter voor het ophalen van groepen.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "zonder een placeholder, bijv. \"objectClass=posixGroup\"",
+"Connection Settings" => "Verbindingsinstellingen",
+"Configuration Active" => "Configuratie actief",
+"When unchecked, this configuration will be skipped." => "Als dit niet is ingeschakeld wordt deze configuratie overgeslagen.",
"Port" => "Poort",
-"Base User Tree" => "Basis Gebruikers Structuur",
-"Base Group Tree" => "Basis Groupen Structuur",
-"Group-Member association" => "Groepslid associatie",
+"Backup (Replica) Host" => "Backup (Replica) Host",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Opgeven optionele backup host. Het moet een replica van de hoofd LDAP/AD server.",
+"Backup (Replica) Port" => "Backup (Replica) Poort",
+"Disable Main Server" => "Deactiveren hoofdserver",
+"When switched on, ownCloud will only connect to the replica server." => "Wanneer ingeschakeld, zal ownCloud allen verbinden met de replicaserver.",
"Use TLS" => "Gebruik TLS",
-"Do not use it for SSL connections, it will fail." => "Gebruik niet voor SSL connecties, deze mislukken.",
"Case insensitve LDAP server (Windows)" => "Niet-hoofdlettergevoelige LDAP server (Windows)",
"Turn off SSL certificate validation." => "Schakel SSL certificaat validatie uit.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Als de connectie alleen werkt met deze optie, importeer dan het LDAP server SSL certificaat naar je ownCloud server.",
"Not recommended, use for testing only." => "Niet aangeraden, gebruik alleen voor test doeleinden.",
+"in seconds. A change empties the cache." => "in seconden. Een verandering maakt de cache leeg.",
+"Directory Settings" => "Mapinstellingen",
"User Display Name Field" => "Gebruikers Schermnaam Veld",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Het te gebruiken LDAP attribuut voor het genereren van de ownCloud naam voor de gebruikers.",
+"Base User Tree" => "Basis Gebruikers Structuur",
+"One User Base DN per line" => "Een User Base DN per regel",
+"User Search Attributes" => "Attributen voor gebruikerszoekopdrachten",
+"Optional; one attribute per line" => "Optioneel; één attribuut per regel",
"Group Display Name Field" => "Groep Schermnaam Veld",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Het te gebruiken LDAP attribuut voor het genereren van de ownCloud naam voor de groepen.",
+"Base Group Tree" => "Basis Groupen Structuur",
+"One Group Base DN per line" => "Een Group Base DN per regel",
+"Group Search Attributes" => "Attributen voor groepszoekopdrachten",
+"Group-Member association" => "Groepslid associatie",
+"Special Attributes" => "Speciale attributen",
"in bytes" => "in bytes",
-"in seconds. A change empties the cache." => "in seconden. Een verandering maakt de cache leeg.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Laat leeg voor de gebruikersnaam (standaard). Of, specificeer een LDAP/AD attribuut.",
"Help" => "Help"
);
diff --git a/apps/user_ldap/l10n/nn_NO.php b/apps/user_ldap/l10n/nn_NO.php
new file mode 100644
index 00000000000..54d1f158f65
--- /dev/null
+++ b/apps/user_ldap/l10n/nn_NO.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Hjelp"
+);
diff --git a/apps/user_ldap/l10n/oc.php b/apps/user_ldap/l10n/oc.php
new file mode 100644
index 00000000000..a128638172a
--- /dev/null
+++ b/apps/user_ldap/l10n/oc.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Deletion failed" => "Fracàs d'escafatge",
+"Help" => "Ajuda"
+);
diff --git a/apps/user_ldap/l10n/pl.php b/apps/user_ldap/l10n/pl.php
index 0a3dea14c94..ef3f9140ef7 100644
--- a/apps/user_ldap/l10n/pl.php
+++ b/apps/user_ldap/l10n/pl.php
@@ -1,6 +1,6 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Skasowanie nie powiodło się",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Ostrzeżenie:</b> Aplikacje user_ldap i user_webdavauth nie są kompatybilne. Mogą powodować nieoczekiwane zachowanie. Poproś administratora o wyłączenie jednej z nich.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Ostrzeżenie:</b> Moduł PHP LDAP nie jest zainstalowany i nie będzie działał. Poproś administratora o włączenie go.",
"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Można pominąć protokół, z wyjątkiem wymaganego protokołu SSL. Następnie uruchom z ldaps://",
"Base DN" => "Baza DN",
@@ -19,21 +19,20 @@
"Defines the filter to apply, when retrieving groups." => "Definiuje filtry do zastosowania, podczas pobierania grup.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez żadnych symboli zastępczych np. \"objectClass=posixGroup\".",
"Port" => "Port",
-"Base User Tree" => "Drzewo bazy użytkowników",
-"Base Group Tree" => "Drzewo bazy grup",
-"Group-Member association" => "Członek grupy stowarzyszenia",
"Use TLS" => "Użyj TLS",
-"Do not use it for SSL connections, it will fail." => "Nie używaj SSL dla połączeń, jeśli się nie powiedzie.",
"Case insensitve LDAP server (Windows)" => "Wielkość liter serwera LDAP (Windows)",
"Turn off SSL certificate validation." => "Wyłączyć sprawdzanie poprawności certyfikatu SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Jeśli połączenie działa tylko z tą opcją, zaimportuj certyfikat SSL serwera LDAP w serwerze ownCloud.",
"Not recommended, use for testing only." => "Niezalecane, użyj tylko testowo.",
+"in seconds. A change empties the cache." => "w sekundach. Zmiana opróżnia pamięć podręczną.",
"User Display Name Field" => "Pole wyświetlanej nazwy użytkownika",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Atrybut LDAP służy do generowania nazwy użytkownika ownCloud.",
+"Base User Tree" => "Drzewo bazy użytkowników",
"Group Display Name Field" => "Pole wyświetlanej nazwy grupy",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atrybut LDAP służy do generowania nazwy grup ownCloud.",
+"Base Group Tree" => "Drzewo bazy grup",
+"Group-Member association" => "Członek grupy stowarzyszenia",
"in bytes" => "w bajtach",
-"in seconds. A change empties the cache." => "w sekundach. Zmiana opróżnia pamięć podręczną.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Pozostaw puste dla user name (domyślnie). W przeciwnym razie podaj atrybut LDAP/AD.",
"Help" => "Pomoc"
);
diff --git a/apps/user_ldap/l10n/pt_BR.php b/apps/user_ldap/l10n/pt_BR.php
index 18eed6d0142..514ceb7027e 100644
--- a/apps/user_ldap/l10n/pt_BR.php
+++ b/apps/user_ldap/l10n/pt_BR.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Remoção falhou",
"Host" => "Host",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Você pode omitir o protocolo, exceto quando requerer SSL. Então inicie com ldaps://",
"Base DN" => "DN Base",
@@ -17,21 +18,20 @@
"Defines the filter to apply, when retrieving groups." => "Define o filtro a aplicar ao obter grupos.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sem nenhum espaço reservado, ex. \"objectClass=posixGroup\"",
"Port" => "Porta",
-"Base User Tree" => "Ãrvore de Usuário Base",
-"Base Group Tree" => "Ãrvore de Grupo Base",
-"Group-Member association" => "Associação Grupo-Membro",
"Use TLS" => "Usar TLS",
-"Do not use it for SSL connections, it will fail." => "Não use-o para conexões SSL, pois falhará.",
"Case insensitve LDAP server (Windows)" => "Servidor LDAP sensível à caixa alta (Windows)",
"Turn off SSL certificate validation." => "Desligar validação de certificado SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a conexão só funciona com essa opção, importe o certificado SSL do servidor LDAP no seu servidor ownCloud.",
"Not recommended, use for testing only." => "Não recomendado, use somente para testes.",
+"in seconds. A change empties the cache." => "em segundos. Uma mudança esvaziará o cache.",
"User Display Name Field" => "Campo Nome de Exibição de Usuário",
"The LDAP attribute to use to generate the user`s ownCloud name." => "O atributo LDAP para usar para gerar nome ownCloud do usuário.",
+"Base User Tree" => "Ãrvore de Usuário Base",
"Group Display Name Field" => "Campo Nome de Exibição de Grupo",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "O atributo LDAP para usar para gerar nome ownCloud do grupo.",
+"Base Group Tree" => "Ãrvore de Grupo Base",
+"Group-Member association" => "Associação Grupo-Membro",
"in bytes" => "em bytes",
-"in seconds. A change empties the cache." => "em segundos. Uma mudança esvaziará o cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixe vazio para nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD.",
"Help" => "Ajuda"
);
diff --git a/apps/user_ldap/l10n/pt_PT.php b/apps/user_ldap/l10n/pt_PT.php
index 1b21b899a2e..bfe6656b3b6 100644
--- a/apps/user_ldap/l10n/pt_PT.php
+++ b/apps/user_ldap/l10n/pt_PT.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Erro ao eliminar as configurações do servidor",
+"The configuration is valid and the connection could be established!" => "A configuração está correcta e foi possível estabelecer a ligação!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "A configuração está correcta, mas não foi possível estabelecer o \"laço\", por favor, verifique as configurações do servidor e as credenciais.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "A configuração é inválida. Por favor, veja o log do ownCloud para mais detalhes.",
+"Deletion failed" => "Erro ao apagar",
+"Take over settings from recent server configuration?" => "Assumir as configurações da configuração do servidor mais recente?",
+"Keep settings?" => "Manter as definições?",
+"Cannot add server configuration" => "Não foi possível adicionar as configurações do servidor.",
+"Connection test succeeded" => "Teste de conecção passado com sucesso.",
+"Connection test failed" => "Erro no teste de conecção.",
+"Do you really want to delete the current Server Configuration?" => "Deseja realmente apagar as configurações de servidor actuais?",
+"Confirm Deletion" => "Confirmar a operação de apagar",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Aviso:</b> A aplicação user_ldap e user_webdavauth são incompativeis. A aplicação pode tornar-se instável. Por favor, peça ao seu administrador para desactivar uma das aplicações.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Aviso:</b> O módulo PHP LDAP necessário não está instalado, o backend não irá funcionar. Peça ao seu administrador para o instalar.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Aviso:</b> O módulo PHP LDAP não está instalado, logo não irá funcionar. Por favor peça ao administrador para o instalar.",
+"Server configuration" => "Configurações do servidor",
+"Add Server Configuration" => "Adicionar configurações do servidor",
"Host" => "Anfitrião",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Pode omitir o protocolo, excepto se necessitar de SSL. Neste caso, comece com ldaps://",
"Base DN" => "DN base",
+"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",
"User DN" => "DN do utilizador",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "O DN to cliente ",
@@ -18,22 +33,37 @@
"Group Filter" => "Filtrar por grupo",
"Defines the filter to apply, when retrieving groups." => "Defina o filtro a aplicar, ao recuperar grupos.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Sem nenhuma variável. Exemplo: \"objectClass=posixGroup\".",
+"Connection Settings" => "Definições de ligação",
+"Configuration Active" => "Configuração activa",
+"When unchecked, this configuration will be skipped." => "Se não estiver marcada, esta definição não será tida em conta.",
"Port" => "Porto",
-"Base User Tree" => "Base da árvore de utilizadores.",
-"Base Group Tree" => "Base da árvore de grupos.",
-"Group-Member association" => "Associar utilizador ao grupo.",
+"Backup (Replica) Host" => "Servidor de Backup (Réplica)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Forneça um servidor (anfitrião) de backup. Deve ser uma réplica do servidor principal de LDAP/AD ",
+"Backup (Replica) Port" => "Porta do servidor de backup (Replica)",
+"Disable Main Server" => "Desactivar servidor principal",
+"When switched on, ownCloud will only connect to the replica server." => "Se estiver ligado, o ownCloud vai somente ligar-se a este servidor de réplicas.",
"Use TLS" => "Usar TLS",
-"Do not use it for SSL connections, it will fail." => "Não use para ligações SSL, irá falhar.",
+"Do not use it additionally for LDAPS connections, it will fail." => "Não utilize para adicionar ligações LDAP, irá falhar!",
"Case insensitve LDAP server (Windows)" => "Servidor LDAP (Windows) não sensível a maiúsculas.",
"Turn off SSL certificate validation." => "Desligar a validação de certificado SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a ligação apenas funcionar com está opção, importe o certificado SSL do servidor LDAP para o seu servidor do ownCloud.",
"Not recommended, use for testing only." => "Não recomendado, utilizado apenas para testes!",
+"in seconds. A change empties the cache." => "em segundos. Uma alteração esvazia a cache.",
+"Directory Settings" => "Definições de directorias",
"User Display Name Field" => "Mostrador do nome de utilizador.",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Atributo LDAP para gerar o nome de utilizador do ownCloud.",
+"Base User Tree" => "Base da árvore de utilizadores.",
+"One User Base DN per line" => "Uma base de utilizador DN por linha",
+"User Search Attributes" => "Utilizar atributos de pesquisa",
+"Optional; one attribute per line" => "Opcional; Um atributo por linha",
"Group Display Name Field" => "Mostrador do nome do grupo.",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atributo LDAP para gerar o nome do grupo do ownCloud.",
+"Base Group Tree" => "Base da árvore de grupos.",
+"One Group Base DN per line" => "Uma base de grupo DN por linha",
+"Group Search Attributes" => "Atributos de pesquisa de grupo",
+"Group-Member association" => "Associar utilizador ao grupo.",
+"Special Attributes" => "Atributos especiais",
"in bytes" => "em bytes",
-"in seconds. A change empties the cache." => "em segundos. Uma alteração esvazia a cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Deixe vazio para nome de utilizador (padrão). De outro modo, especifique um atributo LDAP/AD.",
"Help" => "Ajuda"
);
diff --git a/apps/user_ldap/l10n/ro.php b/apps/user_ldap/l10n/ro.php
index b4d7d4902fe..8f55a35b491 100644
--- a/apps/user_ldap/l10n/ro.php
+++ b/apps/user_ldap/l10n/ro.php
@@ -1,9 +1,11 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Ștergerea a eșuat",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Atentie:</b> Apps user_ldap si user_webdavauth sunt incompatibile. Este posibil sa experimentati un comportament neasteptat. Vă rugăm să întrebați administratorul de sistem pentru a dezactiva una dintre ele.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Atentie:</b Modulul PHP LDAP care este necesar nu este instalat. Va rugam intrebati administratorul de sistem instalarea acestuia",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Atenție</b> Modulul PHP LDAP nu este instalat, infrastructura nu va funcționa. Contactează administratorul sistemului pentru al instala.",
"Host" => "Gazdă",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Puteți omite protocolul, decât dacă folosiți SSL. Atunci se începe cu ldaps://",
"Base DN" => "DN de bază",
+"One Base DN per line" => "Un Base DN pe linie",
"You can specify Base DN for users and groups in the Advanced tab" => "Puteți să specificați DN de bază pentru utilizatori și grupuri în fila Avansat",
"User DN" => "DN al utilizatorului",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN-ul clientului utilizator cu care se va efectua conectarea, d.e. uid=agent,dc=example,dc=com. Pentru acces anonim, lăsăți DN și Parolă libere.",
@@ -19,21 +21,22 @@
"Defines the filter to apply, when retrieving groups." => "Definește filtrele care se aplică, când se preiau grupurile.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "fără substituenți, d.e. \"objectClass=posixGroup\"",
"Port" => "Portul",
-"Base User Tree" => "Arborele de bază al Utilizatorilor",
-"Base Group Tree" => "Arborele de bază al Grupurilor",
-"Group-Member association" => "Asocierea Grup-Membru",
"Use TLS" => "Utilizează TLS",
-"Do not use it for SSL connections, it will fail." => "A nu se utiliza pentru conexiuni SSL, va eșua.",
"Case insensitve LDAP server (Windows)" => "Server LDAP insensibil la majuscule (Windows)",
"Turn off SSL certificate validation." => "Oprește validarea certificatelor SSL ",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Dacă conexiunea lucrează doar cu această opțiune, importează certificatul SSL al serverului LDAP în serverul ownCloud.",
"Not recommended, use for testing only." => "Nu este recomandat, a se utiliza doar pentru testare.",
+"in seconds. A change empties the cache." => "în secunde. O schimbare curăță memoria tampon.",
"User Display Name Field" => "Câmpul cu numele vizibil al utilizatorului",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Atributul LDAP folosit pentru a genera numele de utilizator din ownCloud.",
+"Base User Tree" => "Arborele de bază al Utilizatorilor",
+"One User Base DN per line" => "Un User Base DN pe linie",
"Group Display Name Field" => "Câmpul cu numele grupului",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atributul LDAP folosit pentru a genera numele grupurilor din ownCloud",
+"Base Group Tree" => "Arborele de bază al Grupurilor",
+"One Group Base DN per line" => "Un Group Base DN pe linie",
+"Group-Member association" => "Asocierea Grup-Membru",
"in bytes" => "în octeți",
-"in seconds. A change empties the cache." => "în secunde. O schimbare curăță memoria tampon.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Lăsați gol pentru numele de utilizator (implicit). În caz contrar, specificați un atribut LDAP / AD.",
"Help" => "Ajutor"
);
diff --git a/apps/user_ldap/l10n/ru.php b/apps/user_ldap/l10n/ru.php
index f41a0b05838..4c4b9708667 100644
--- a/apps/user_ldap/l10n/ru.php
+++ b/apps/user_ldap/l10n/ru.php
@@ -1,6 +1,18 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Ðе удалоÑÑŒ удалить конфигурацию Ñервера",
+"The configuration is valid and the connection could be established!" => "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¸ подключение может быть уÑтановлено!",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ верна. ПожалуйÑта, поÑмотрите в журнале ownCloud детали.",
+"Deletion failed" => "Удаление не удалоÑÑŒ",
+"Take over settings from recent server configuration?" => "ПринÑть наÑтройки из поÑледней конфигурации Ñервера?",
+"Keep settings?" => "Сохранить наÑтройки?",
+"Cannot add server configuration" => "Ðе получилоÑÑŒ добавить конфигурацию Ñервера",
+"Connection test succeeded" => "Проверка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»Ð°ÑÑŒ",
+"Connection test failed" => "Проверка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ удалаÑÑŒ",
+"Do you really want to delete the current Server Configuration?" => "Ð’Ñ‹ дейÑтвительно хотите удалить ÑущеÑтвующую конфигурацию Ñервера?",
+"Confirm Deletion" => "Подтверждение удалениÑ",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Внимание:</b>ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ user_ldap и user_webdavauth неÑовмеÑтимы. Ð’Ñ‹ можете ÑтолкнутьÑÑ Ñ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¼ поведением. ПожалуйÑта, обратитеÑÑŒ к ÑиÑтемному админиÑтратору, чтобы отключить одно из них.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Внимание:</b> Ðеобходимый PHP LDAP модуль не уÑтановлен, внутренний Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð½Ðµ будет работать. ПожалуйÑта, обратитеÑÑŒ к ÑиÑтемному админиÑтратору, чтобы уÑтановить его.",
+"Server configuration" => "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñервера",
+"Add Server Configuration" => "Добавить конфигурацию Ñервера",
"Host" => "Сервер",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Можно опуÑтить протокол, за иÑключением того, когда вам требуетÑÑ SSL. Тогда начните Ñ ldaps :/ /",
"Base DN" => "Базовый DN",
@@ -18,22 +30,28 @@
"Group Filter" => "Фильтр группы",
"Defines the filter to apply, when retrieving groups." => "ОпределÑет фильтр Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ получении группы.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "без заполнениÑ, например \"objectClass=posixGroup\".",
+"Connection Settings" => "ÐаÑтройки подключениÑ",
+"Configuration Active" => "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°",
"Port" => "Порт",
-"Base User Tree" => "База пользовательÑкого дерева",
-"Base Group Tree" => "База группового дерева",
-"Group-Member association" => "ÐÑÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ð“Ñ€ÑƒÐ¿Ð¿Ð°-УчаÑтник",
+"Disable Main Server" => "Отключение главного Ñервера",
"Use TLS" => "ИÑпользовать TLS",
-"Do not use it for SSL connections, it will fail." => "Ðе иÑпользуйте Ð´Ð»Ñ Ñоединений SSL",
"Case insensitve LDAP server (Windows)" => "ÐечувÑтвительный к региÑтру Ñервер LDAP (Windows)",
"Turn off SSL certificate validation." => "Отключить проверку Ñертификата SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "ЕÑли Ñоединение работает только Ñ Ñтой опцией, импортируйте на ваш Ñервер ownCloud Ñертификат SSL Ñервера LDAP.",
"Not recommended, use for testing only." => "Ðе рекомендуетÑÑ, иÑпользуйте только Ð´Ð»Ñ Ñ‚ÐµÑтированиÑ.",
+"in seconds. A change empties the cache." => "в Ñекундах. Изменение очиÑтит кÑш.",
+"Directory Settings" => "ÐаÑтройки каталога",
"User Display Name Field" => "Поле отображаемого имени пользователÑ",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Ðтрибут LDAP Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ownCloud.",
+"Base User Tree" => "База пользовательÑкого дерева",
+"User Search Attributes" => "ПоиÑковые атрибуты пользователÑ",
+"Optional; one attribute per line" => "Опционально; один атрибут на линию",
"Group Display Name Field" => "Поле отображаемого имени группы",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Ðтрибут LDAP Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ имени группы ownCloud.",
+"Base Group Tree" => "База группового дерева",
+"Group-Member association" => "ÐÑÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ð“Ñ€ÑƒÐ¿Ð¿Ð°-УчаÑтник",
+"Special Attributes" => "Специальные атрибуты",
"in bytes" => "в байтах",
-"in seconds. A change empties the cache." => "в Ñекундах. Изменение очиÑтит кÑш.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "ОÑтавьте Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿ÑƒÑтым (по умолчанию). Иначе укажите атрибут LDAP/AD.",
"Help" => "Помощь"
);
diff --git a/apps/user_ldap/l10n/ru_RU.php b/apps/user_ldap/l10n/ru_RU.php
index 09d7899249a..a4ed503b1d1 100644
--- a/apps/user_ldap/l10n/ru_RU.php
+++ b/apps/user_ldap/l10n/ru_RU.php
@@ -1,9 +1,11 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Удаление не удалоÑÑŒ",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Предупреждение:</b> ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ user_ldap и user_webdavauth неÑовмеÑтимы. Ð’Ñ‹ можете ÑтолкнутьÑÑ Ñ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¼ поведением ÑиÑтемы. ПожалуйÑта, обратитеÑÑŒ к ÑиÑтемному админиÑтратору Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из них.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Предупреждение:</b> Ðеобходимый PHP LDAP-модуль не уÑтановлен, backend не будет работать. ПожалуйÑта, обратитеÑÑŒ к ÑиÑтемному админиÑтратору, чтобы уÑтановить его.",
+"<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 не уÑтановлен, бÑкÑнд не будет работать. ПожалуйÑта, обратитеÑÑŒ к Вашему ÑиÑтемному админиÑтратору, чтобы уÑтановить его.",
"Host" => "ХоÑÑ‚",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Ð’Ñ‹ можете пропуÑтить протокол, еÑли Вам не требуетÑÑ SSL. Затем начните Ñ ldaps://",
"Base DN" => "База DN",
+"One Base DN per line" => "Одно базовое DN на линию",
"You can specify Base DN for users and groups in the Advanced tab" => "Ð’Ñ‹ можете задать Base DN Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ и групп во вкладке «Дополнительно»",
"User DN" => "DN пользователÑ",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN клиентÑкого пользователÑ, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ должна оÑущеÑтвлÑтьÑÑ Ð¿Ñ€Ð¸Ð²Ñзка, например, uid=agent,dc=example,dc=com. Ð”Ð»Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾Ð³Ð¾ доÑтупа оÑтавьте Ð¿Ð¾Ð»Ñ DN и Пароль пуÑтыми.",
@@ -19,21 +21,22 @@
"Defines the filter to apply, when retrieving groups." => "Задает фильтр, применÑемый при получении групп.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "без каких-либо заполнителей, например, \"objectClass=posixGroup\".",
"Port" => "Порт",
-"Base User Tree" => "Базовое дерево пользователей",
-"Base Group Tree" => "Базовое дерево групп",
-"Group-Member association" => "СвÑзь член-группа",
"Use TLS" => "ИÑпользовать TLS",
-"Do not use it for SSL connections, it will fail." => "Ðе иÑпользуйте Ñто SSL-Ñоединений, Ñто не будет выполнено.",
"Case insensitve LDAP server (Windows)" => "ÐечувÑтвительный к региÑтру LDAP-Ñервер (Windows)",
"Turn off SSL certificate validation." => "Выключить проверку Ñертификата SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "ЕÑли Ñоединение работает только Ñ Ñтой опцией, импортируйте SSL-Ñертификат LDAP Ñервера в ваш ownCloud Ñервер.",
"Not recommended, use for testing only." => "Ðе рекомендовано, иÑпользуйте только Ð´Ð»Ñ Ñ‚ÐµÑтированиÑ.",
+"in seconds. A change empties the cache." => "в Ñекундах. Изменение очищает кÑш.",
"User Display Name Field" => "Поле, отображаемое как Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Ðтрибут LDAP, иÑпользуемый Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² ownCloud.",
+"Base User Tree" => "Базовое дерево пользователей",
+"One User Base DN per line" => "Одно пользовательÑкое базовое DN на линию",
"Group Display Name Field" => "Поле, отображаемое как Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Ðтрибут LDAP, иÑпользуемый Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð³Ð¾ имени в ownCloud.",
+"Base Group Tree" => "Базовое дерево групп",
+"One Group Base DN per line" => "Одно групповое базовое DN на линию",
+"Group-Member association" => "СвÑзь член-группа",
"in bytes" => "в байтах",
-"in seconds. A change empties the cache." => "в Ñекундах. Изменение очищает кÑш.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "ОÑтавьте пуÑтым под Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (по умолчанию). Ð’ противном Ñлучае задайте LDAP/AD атрибут.",
"Help" => "Помощь"
);
diff --git a/apps/user_ldap/l10n/si_LK.php b/apps/user_ldap/l10n/si_LK.php
index fc8099e25e5..50124e4d54f 100644
--- a/apps/user_ldap/l10n/si_LK.php
+++ b/apps/user_ldap/l10n/si_LK.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "මකà·à¶¯à·à¶¸à·“ම à¶…à·ƒà·à¶»à·Šà¶®à¶šà¶ºà·’",
"Host" => "සත්කà·à¶»à¶šà¶º",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL à¶…à·€à·à·Šâ€à¶ºà¶º වන විට පමණක් à·„à·à¶», අන් අවස්ථà·à·€à¶±à·Šà·„ිදී à¶´à·Šâ€à¶»à·œà¶§à·œà¶šà·à¶½à¶º à¶…à¶­à·Š à·„à·à¶»à·’ය à·„à·à¶š. à¶·à·à·€à·’ත෠කරන විට ldaps:// ලෙස ආරම්භ කරන්න",
"Password" => "මුර පදය",
diff --git a/apps/user_ldap/l10n/sk_SK.php b/apps/user_ldap/l10n/sk_SK.php
index 2b340c8573d..727765a1507 100644
--- a/apps/user_ldap/l10n/sk_SK.php
+++ b/apps/user_ldap/l10n/sk_SK.php
@@ -1,7 +1,24 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Zlyhalo zmazanie nastavenia servera.",
+"The configuration is valid and the connection could be established!" => "Nastavenie je v poriadku a pripojenie je stabilné.",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Nastavenie je v poriadku, ale pripojenie zlyhalo. Skontrolujte nastavenia servera a prihlasovacie údaje.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "Nastavenia sú neplatné. Podrobnosti hľadajte v logu ownCloud.",
+"Deletion failed" => "Odstránenie zlyhalo",
+"Take over settings from recent server configuration?" => "Prebrať nastavenia z nedávneho nastavenia servera?",
+"Keep settings?" => "Ponechať nastavenia?",
+"Cannot add server configuration" => "Nemožno pridať nastavenie servera",
+"Connection test succeeded" => "Test pripojenia bol úspešný",
+"Connection test failed" => "Test pripojenia zlyhal",
+"Do you really want to delete the current Server Configuration?" => "Naozaj chcete zmazaÅ¥ súÄasné nastavenie servera?",
+"Confirm Deletion" => "Potvrdiť vymazanie",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Upozornenie:</b> Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávaÅ¥ neoÄakávané správanie. Požiadajte administrátora systému aby jednu z nich zakázal.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Upozornenie:</b> nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte administrátora systému aby ho nainštaloval.",
+"Server configuration" => "Nastavenia servera",
+"Add Server Configuration" => "Pridať nastavenia servera.",
"Host" => "Hostiteľ",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Môžete vynechaÅ¥ protokol, s výnimkou požadovania SSL. Vtedy zaÄnite s ldaps://",
"Base DN" => "Základné DN",
+"One Base DN per line" => "Jedno základné DN na riadok",
"You can specify Base DN for users and groups in the Advanced tab" => "V rozšírenom nastavení môžete zadať základné DN pre používateľov a skupiny",
"User DN" => "Používateľské DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN klientského používateľa, ku ktorému tvoríte väzbu, napr. uid=agent,dc=example,dc=com. Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.",
@@ -16,22 +33,37 @@
"Group Filter" => "Filter skupiny",
"Defines the filter to apply, when retrieving groups." => "Definuje použitý filter, pre získanie skupín.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez zástupných znakov, napr. \"objectClass=posixGroup\"",
+"Connection Settings" => "Nastavenie pripojenia",
+"Configuration Active" => "Nastavenia sú aktívne ",
+"When unchecked, this configuration will be skipped." => "Ak nie je zaÅ¡krtnuté, nastavenie bude preskoÄené.",
"Port" => "Port",
-"Base User Tree" => "Základný používateľský strom",
-"Base Group Tree" => "Základný skupinový strom",
-"Group-Member association" => "Asociácia Älena skupiny",
+"Backup (Replica) Host" => "Záložný server (kópia) hosť",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Zadajte záložný LDAP/AD. Musí to byť kópia hlavného LDAP/AD servera.",
+"Backup (Replica) Port" => "Záložný server (kópia) port",
+"Disable Main Server" => "Zakázať hlavný server",
+"When switched on, ownCloud will only connect to the replica server." => "Pri zapnutí sa ownCloud pripojí len k záložnému serveru.",
"Use TLS" => "Použi TLS",
-"Do not use it for SSL connections, it will fail." => "Nepoužívajte pre pripojenie SSL, pripojenie zlyhá.",
+"Do not use it additionally for LDAPS connections, it will fail." => "Nepoužívajte pre pripojenie LDAPS, zlyhá.",
"Case insensitve LDAP server (Windows)" => "LDAP server nerozlišuje veľkosť znakov (Windows)",
"Turn off SSL certificate validation." => "Vypnúť overovanie SSL certifikátu.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Ak pripojenie pracuje len s touto možnosťou, tak importujte SSL certifikát LDAP serveru do vášho servera ownCloud.",
"Not recommended, use for testing only." => "Nie je doporuÄované, len pre testovacie úÄely.",
+"in seconds. A change empties the cache." => "v sekundách. Zmena vyprázdni vyrovnávaciu pamäť.",
+"Directory Settings" => "Nastavenie prieÄinka",
"User Display Name Field" => "Pole pre zobrazenia mena používateľa",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Atribút LDAP použitý na vygenerovanie mena používateľa ownCloud ",
+"Base User Tree" => "Základný používateľský strom",
+"One User Base DN per line" => "Jedna používateľská základná DN na riadok",
+"User Search Attributes" => "Atribúty vyhľadávania používateľov",
+"Optional; one attribute per line" => "Voliteľné, jeden atribút na jeden riadok",
"Group Display Name Field" => "Pole pre zobrazenie mena skupiny",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribút LDAP použitý na vygenerovanie mena skupiny ownCloud ",
+"Base Group Tree" => "Základný skupinový strom",
+"One Group Base DN per line" => "Jedna skupinová základná DN na riadok",
+"Group Search Attributes" => "Atribúty vyhľadávania skupín",
+"Group-Member association" => "Priradenie Älena skupiny",
+"Special Attributes" => "Špeciálne atribúty",
"in bytes" => "v bajtoch",
-"in seconds. A change empties the cache." => "v sekundách. Zmena vyprázdni vyrovnávaciu pamäť.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Nechajte prázdne pre používateľské meno (predvolené). Inak uveÄte atribút LDAP/AD.",
"Help" => "Pomoc"
);
diff --git a/apps/user_ldap/l10n/sl.php b/apps/user_ldap/l10n/sl.php
index 1d1fc33a83b..e1734a90780 100644
--- a/apps/user_ldap/l10n/sl.php
+++ b/apps/user_ldap/l10n/sl.php
@@ -1,6 +1,6 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Brisanje je spodletelo.",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Opozorilo:</b> Aplikaciji user_ldap in user_webdavauth nista združljivi. Morda boste opazili nepriÄakovano obnaÅ¡anje sistema. Prosimo, prosite vaÅ¡ega skrbnika, da eno od aplikacij onemogoÄi.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Opozorilo:</b> PHP LDAP modul mora biti nameÅ¡Äen, sicer ta vmesnik ne bo deloval. Prosimo, prosite vaÅ¡ega skrbnika, Äe ga namesti.",
"Host" => "Gostitelj",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Protokol je lahko izpuÅ¡Äen, Äe ni posebej zahtevan SSL. V tem primeru se mora naslov zaÄeti z ldaps://",
"Base DN" => "Osnovni DN",
@@ -19,21 +19,20 @@
"Defines the filter to apply, when retrieving groups." => "DoloÄi filter za uporabo med pridobivanjem skupin.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Brez katerekoli vsebnika, npr. \"objectClass=posixGroup\".",
"Port" => "Vrata",
-"Base User Tree" => "Osnovno uporabniško drevo",
-"Base Group Tree" => "Osnovno drevo skupine",
-"Group-Member association" => "Povezava Älana skupine",
"Use TLS" => "Uporabi TLS",
-"Do not use it for SSL connections, it will fail." => "Uporaba SSL za povezave bo spodletela.",
"Case insensitve LDAP server (Windows)" => "Strežnik LDAP ne upoÅ¡teva velikosti Ärk (Windows)",
"Turn off SSL certificate validation." => "OnemogoÄi potrditev veljavnosti potrdila SSL.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "V primeru, da povezava deluje le s to možnostjo, uvozite potrdilo SSL iz strežnika LDAP na vaš strežnik ownCloud.",
"Not recommended, use for testing only." => "Dejanje ni priporoÄeno; uporabljeno naj bo le za preizkuÅ¡anje delovanja.",
+"in seconds. A change empties the cache." => "v sekundah. Sprememba izprazni predpomnilnik.",
"User Display Name Field" => "Polje za uporabnikovo prikazano ime",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Atribut LDAP, uporabljen pri ustvarjanju uporabniških imen ownCloud.",
+"Base User Tree" => "Osnovno uporabniško drevo",
"Group Display Name Field" => "Polje za prikazano ime skupine",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Atribut LDAP, uporabljen pri ustvarjanju imen skupin ownCloud.",
+"Base Group Tree" => "Osnovno drevo skupine",
+"Group-Member association" => "Povezava Älana skupine",
"in bytes" => "v bajtih",
-"in seconds. A change empties the cache." => "v sekundah. Sprememba izprazni predpomnilnik.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Pustite prazno za uporabniško ime (privzeto). V nasprotnem primeru navedite atribut LDAP/AD.",
"Help" => "PomoÄ"
);
diff --git a/apps/user_ldap/l10n/sr.php b/apps/user_ldap/l10n/sr.php
new file mode 100644
index 00000000000..52569a08ef8
--- /dev/null
+++ b/apps/user_ldap/l10n/sr.php
@@ -0,0 +1,35 @@
+<?php $TRANSLATIONS = array(
+"Deletion failed" => "БриÑање није уÑпело",
+"Host" => "Домаћин",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Можете да изоÑтавите протокол, оÑим ако захтевате SSL. У том Ñлучају почните Ñа ldaps://.",
+"Base DN" => "База DN",
+"User DN" => "КориÑник DN",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN кориÑника клијента Ñа којим треба да Ñе уÑпоÑтави веза, нпр. uid=agent,dc=example,dc=com. За анониман приÑтуп, оÑтавите поља DN и лозинка празним.",
+"Password" => "Лозинка",
+"For anonymous access, leave DN and Password empty." => "За анониман приÑтуп, оÑтавите поља DN и лозинка празним.",
+"User Login Filter" => "Филтер за пријаву кориÑника",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Одређује филтер за примењивање при покушају пријаве. %%uid замењује кориÑничко име.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "кориÑтите чувар меÑта %%uid, нпр. „uid=%%uid\"",
+"User List Filter" => "Филтер за ÑпиÑак кориÑника",
+"Defines the filter to apply, when retrieving users." => "Одређује филтер за примењивање при прибављању кориÑника.",
+"without any placeholder, e.g. \"objectClass=person\"." => "без икаквог чувара меÑта, нпр. „objectClass=person“.",
+"Group Filter" => "Филтер групе",
+"Defines the filter to apply, when retrieving groups." => "Одређује филтер за примењивање при прибављању група.",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "без икаквог чувара меÑта, нпр. „objectClass=posixGroup“.",
+"Port" => "Порт",
+"Use TLS" => "КориÑти TLS",
+"Case insensitve LDAP server (Windows)" => "LDAP Ñервер оÑетљив на велика и мала Ñлова (Windows)",
+"Turn off SSL certificate validation." => "ИÑкључите потврду SSL Ñертификата.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Увезите SSL Ñертификат LDAP Ñервера у Ñвој ownCloud ако веза ради Ñамо Ñа овом опцијом.",
+"Not recommended, use for testing only." => "Ðе препоручује Ñе; кориÑтите Ñамо за теÑтирање.",
+"in seconds. A change empties the cache." => "у Ñекундама. Промена иÑпражњава кеш меморију.",
+"User Display Name Field" => "Име приказа кориÑника",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP атрибут за Ñтварање имена ownCloud-а кориÑника.",
+"Base User Tree" => "ОÑновно Ñтабло кориÑника",
+"Group Display Name Field" => "Име приказа групе",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP атрибут за Ñтварање имена ownCloud-а групе.",
+"Base Group Tree" => "ОÑновна Ñтабло група",
+"Group-Member association" => "Придруживање чланова у групу",
+"in bytes" => "у бајтовима",
+"Help" => "Помоћ"
+);
diff --git a/apps/user_ldap/l10n/sr@latin.php b/apps/user_ldap/l10n/sr@latin.php
new file mode 100644
index 00000000000..91503315066
--- /dev/null
+++ b/apps/user_ldap/l10n/sr@latin.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Pomoć"
+);
diff --git a/apps/user_ldap/l10n/sv.php b/apps/user_ldap/l10n/sv.php
index e8e14af7aca..702912f9c68 100644
--- a/apps/user_ldap/l10n/sv.php
+++ b/apps/user_ldap/l10n/sv.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"Failed to delete the server configuration" => "Misslyckades med att radera serverinställningen",
+"The configuration is valid and the connection could be established!" => "Inställningen är giltig och anslutningen kunde upprättas!",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Konfigurationen är riktig, men Bind felade. Var vänlig och kontrollera serverinställningar och logininformation.",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "Inställningen är ogiltig. Vänligen se ownCloud-loggen för fler detaljer.",
+"Deletion failed" => "Raderingen misslyckades",
+"Take over settings from recent server configuration?" => "Ta över inställningar från tidigare serverkonfiguration?",
+"Keep settings?" => "Behåll inställningarna?",
+"Cannot add server configuration" => "Kunde inte lägga till serverinställning",
+"Connection test succeeded" => "Anslutningstestet lyckades",
+"Connection test failed" => "Anslutningstestet misslyckades",
+"Do you really want to delete the current Server Configuration?" => "Vill du verkligen radera den nuvarande serverinställningen?",
+"Confirm Deletion" => "Bekräfta radering",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Varning:</b> Apps user_ldap och user_webdavauth är inkompatibla. Oväntade problem kan uppstå. Be din systemadministratör att inaktivera en av dom.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Varning:</b> PHP LDAP-modulen måste vara installerad, serversidan kommer inte att fungera. Be din systemadministratör att installera den.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Varning:</b> PHP LDAP - modulen är inte installerad, serversidan kommer inte att fungera. Kontakta din systemadministratör för installation.",
+"Server configuration" => "Serverinställning",
+"Add Server Configuration" => "Lägg till serverinställning",
"Host" => "Server",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Du behöver inte ange protokoll förutom om du använder SSL. Starta då med ldaps://",
"Base DN" => "Start DN",
+"One Base DN per line" => "Ett Start DN per rad",
"You can specify Base DN for users and groups in the Advanced tab" => "Du kan ange start DN för användare och grupper under fliken Avancerat",
"User DN" => "Användare 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 för användaren som skall användas, t.ex. uid=agent, dc=example, dc=com. För anonym åtkomst, lämna DN och lösenord tomt.",
@@ -18,22 +33,37 @@
"Group Filter" => "Gruppfilter",
"Defines the filter to apply, when retrieving groups." => "Definierar filter att tillämpa vid listning av grupper.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "utan platshållare, t.ex. \"objectClass=posixGroup\".",
+"Connection Settings" => "Uppkopplingsinställningar",
+"Configuration Active" => "Konfiguration aktiv",
+"When unchecked, this configuration will be skipped." => "Ifall denna är avbockad så kommer konfigurationen att skippas.",
"Port" => "Port",
-"Base User Tree" => "Bas för användare i katalogtjänst",
-"Base Group Tree" => "Bas för grupper i katalogtjänst",
-"Group-Member association" => "Attribut för gruppmedlemmar",
+"Backup (Replica) Host" => "Säkerhetskopierings-värd (Replika)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Ange en valfri värd för säkerhetskopiering. Den måste vara en replika av den huvudsakliga LDAP/AD-servern",
+"Backup (Replica) Port" => "Säkerhetskopierins-port (Replika)",
+"Disable Main Server" => "Inaktivera huvudserver",
+"When switched on, ownCloud will only connect to the replica server." => "När denna är påkopplad kommer ownCloud att koppla upp till replika-servern, endast.",
"Use TLS" => "Använd TLS",
-"Do not use it for SSL connections, it will fail." => "Använd inte för SSL-anslutningar, det kommer inte att fungera.",
+"Do not use it additionally for LDAPS connections, it will fail." => "Använd inte för LDAPS-anslutningar, det kommer inte att fungera.",
"Case insensitve LDAP server (Windows)" => "LDAP-servern är okänslig för gemener och versaler (Windows)",
"Turn off SSL certificate validation." => "Stäng av verifiering av SSL-certifikat.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Om anslutningen bara fungerar med det här alternativet, importera LDAP-serverns SSL-certifikat i din ownCloud-server.",
"Not recommended, use for testing only." => "Rekommenderas inte, använd bara för test. ",
+"in seconds. A change empties the cache." => "i sekunder. En förändring tömmer cache.",
+"Directory Settings" => "Mappinställningar",
"User Display Name Field" => "Attribut för användarnamn",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Attribut som används för att generera användarnamn i ownCloud.",
+"Base User Tree" => "Bas för användare i katalogtjänst",
+"One User Base DN per line" => "En Användare start DN per rad",
+"User Search Attributes" => "Användarsökningsattribut",
+"Optional; one attribute per line" => "Valfritt; ett attribut per rad",
"Group Display Name Field" => "Attribut för gruppnamn",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Attribut som används för att generera gruppnamn i ownCloud.",
+"Base Group Tree" => "Bas för grupper i katalogtjänst",
+"One Group Base DN per line" => "En Grupp start DN per rad",
+"Group Search Attributes" => "Gruppsökningsattribut",
+"Group-Member association" => "Attribut för gruppmedlemmar",
+"Special Attributes" => "Specialattribut",
"in bytes" => "i bytes",
-"in seconds. A change empties the cache." => "i sekunder. En förändring tömmer cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP/AD-attribut.",
"Help" => "Hjälp"
);
diff --git a/apps/user_ldap/l10n/ta_LK.php b/apps/user_ldap/l10n/ta_LK.php
index 2028becaf98..f6beb3c4863 100644
--- a/apps/user_ldap/l10n/ta_LK.php
+++ b/apps/user_ldap/l10n/ta_LK.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "நீகà¯à®•ம௠தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯",
"Host" => "ஓமà¯à®ªà¯à®©à®°à¯",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "நீஙà¯à®•ள௠SSL சேவையை தவிர உடனà¯à®ªà®Ÿà¯ வரைமà¯à®±à¯ˆà®¯à¯ˆ தவிரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à¯. பிறக௠ldaps:.// உடன௠ஆரமà¯à®ªà®¿à®•à¯à®•வà¯à®®à¯",
"Base DN" => "தள DN",
@@ -7,21 +8,20 @@
"Password" => "கடவà¯à®šà¯à®šà¯Šà®²à¯",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "எநà¯à®¤ ஒதà¯à®•à¯à®•ீடà¯à®®à¯ இலà¯à®²à®¾à®®à®²à¯, உதாரணமà¯. \"objectClass=posixGroup\".",
"Port" => "தà¯à®±à¯ˆ ",
-"Base User Tree" => "தள பயனாளர௠மரமà¯",
-"Base Group Tree" => "தள கà¯à®´à¯ மரமà¯",
-"Group-Member association" => "கà¯à®´à¯ உறà¯à®ªà¯à®ªà®¿à®©à®°à¯ சஙà¯à®•à®®à¯",
"Use TLS" => "TLS ஠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯",
-"Do not use it for SSL connections, it will fail." => "SSL இணைபà¯à®ªà®¿à®±à¯à®•௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯‡à®£à¯à®Ÿà®¾à®®à¯, அத௠தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¯à¯à®®à¯.",
"Case insensitve LDAP server (Windows)" => "உணரà¯à®šà¯à®šà®¿à®¯à®¾à®© LDAP சேவையகம௠(சாளரஙà¯à®•ளà¯)",
"Turn off SSL certificate validation." => "SSL சானà¯à®±à®¿à®¤à®´à®¿à®©à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à¯ˆ நிறà¯à®¤à¯à®¤à®¿à®µà®¿à®Ÿà®µà¯à®®à¯",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "இநà¯à®¤ தெரிவà¯à®•ளில௠மடà¯à®Ÿà¯à®®à¯ இணைபà¯à®ªà¯ வேலைசெயà¯à®¤à®¾à®²à¯, உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ owncloud சேவையகதà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ LDAP சேவையகதà¯à®¤à®¿à®©à¯ SSL சானà¯à®±à®¿à®¤à®´à¯ˆ இறகà¯à®•à¯à®®à®¤à®¿ செயà¯à®¯à®µà¯à®®à¯",
"Not recommended, use for testing only." => "பரிநà¯à®¤à¯à®°à¯ˆà®•à¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ, சோதனைகà¯à®•ாக மடà¯à®Ÿà¯à®®à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.",
+"in seconds. A change empties the cache." => "செகà¯à®•னà¯à®•ளிலà¯. ஒர௠மாறà¯à®±à®®à¯ இடைமாறà¯à®±à¯à®¨à®¿à®©à¯ˆà®µà®•தà¯à®¤à¯ˆ வெறà¯à®±à®¿à®Ÿà®®à®¾à®•à¯à®•à¯à®®à¯.",
"User Display Name Field" => "பயனாளர௠காடà¯à®šà®¿à®ªà¯à®ªà¯†à®¯à®°à¯ பà¯à®²à®®à¯",
"The LDAP attribute to use to generate the user`s ownCloud name." => "பயனாளரின௠ownCloud பெயரை உரà¯à®µà®¾à®•à¯à®• LDAP பணà¯à®ªà¯à®•à¯à®•ூறை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.",
+"Base User Tree" => "தள பயனாளர௠மரமà¯",
"Group Display Name Field" => "கà¯à®´à¯à®µà®¿à®©à¯ காடà¯à®šà®¿ பெயர௠பà¯à®²à®®à¯ ",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "ownCloud கà¯à®´à¯à®•à¯à®•ளின௠பெயரà¯à®•ளை உரà¯à®µà®¾à®•à¯à®• LDAP பணà¯à®ªà¯à®•à¯à®•ூறை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.",
+"Base Group Tree" => "தள கà¯à®´à¯ மரமà¯",
+"Group-Member association" => "கà¯à®´à¯ உறà¯à®ªà¯à®ªà®¿à®©à®°à¯ சஙà¯à®•à®®à¯",
"in bytes" => "bytes களில௠",
-"in seconds. A change empties the cache." => "செகà¯à®•னà¯à®•ளிலà¯. ஒர௠மாறà¯à®±à®®à¯ இடைமாறà¯à®±à¯à®¨à®¿à®©à¯ˆà®µà®•தà¯à®¤à¯ˆ வெறà¯à®±à®¿à®Ÿà®®à®¾à®•à¯à®•à¯à®®à¯.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "பயனாளர௠பெயரிறà¯à®•௠வெறà¯à®±à®¿à®Ÿà®®à®¾à®• விடவà¯à®®à¯ (பொத௠இரà¯à®ªà¯à®ªà¯). இலà¯à®²à®¾à®µà®¿à®Ÿà®¿à®©à¯ LDAP/AD பணà¯à®ªà¯à®•à¯à®•ூறை கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà¯à®®à¯.",
"Help" => "உதவி"
);
diff --git a/apps/user_ldap/l10n/th_TH.php b/apps/user_ldap/l10n/th_TH.php
index acc7a4936bc..802badb2f03 100644
--- a/apps/user_ldap/l10n/th_TH.php
+++ b/apps/user_ldap/l10n/th_TH.php
@@ -1,7 +1,23 @@
<?php $TRANSLATIONS = array(
+"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 look in the ownCloud log for further details." => "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าไม่ถูà¸à¸•้อง à¸à¸£à¸¸à¸“าดูรายละเอียดจาà¸à¸šà¸±à¸™à¸—ึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚อง ownCloud สำหรับรายละเอียดเพิ่มเติม",
+"Deletion failed" => "à¸à¸²à¸£à¸¥à¸šà¸—ิ้งล้มเหลว",
+"Keep settings?" => "รัà¸à¸©à¸²à¸à¸²à¸£à¸•ั้งค่าไว้?",
+"Cannot add server configuration" => "ไม่สามารถเพิ่มค่าà¸à¸³à¸«à¸™à¸”เซิร์ฟเวอร์ได้",
+"Connection test succeeded" => "ทดสอบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อสำเร็จ",
+"Connection test failed" => "ทดสอบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อล้มเหลว",
+"Do you really want to delete the current Server Configuration?" => "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹à¸¥à¹‰à¸§à¸«à¸£à¸·à¸­à¸§à¹ˆà¸²à¸•้องà¸à¸²à¸£à¸¥à¸šà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าเซิร์ฟเวอร์ปัจจุบันทิ้งไป?",
+"Confirm Deletion" => "ยืนยันà¸à¸²à¸£à¸¥à¸šà¸—ิ้ง",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. 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 ยังไม่ได้ถูà¸à¸•ิดตั้ง, ระบบด้านหลังจะไม่สามารถทำงานได้ à¸à¸£à¸¸à¸“าติดต่อผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸‚องคุณเพื่อทำà¸à¸²à¸£à¸•ิดตั้งโมดูลดังà¸à¸¥à¹ˆà¸²à¸§",
+"Server configuration" => "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าเซิร์ฟเวอร์",
+"Add Server Configuration" => "เพิ่มà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าเซิร์ฟเวอร์",
"Host" => "โฮสต์",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "คุณสามารถปล่อยช่องโปรโตคอลเว้นไว้ได้, ยà¸à¹€à¸§à¹‰à¸™à¸à¸£à¸“ีที่คุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰ SSL จาà¸à¸™à¸±à¹‰à¸™à¹€à¸£à¸´à¹ˆà¸¡à¸•้นด้วย ldaps://",
"Base DN" => "DN à¸à¸²à¸™",
+"One Base DN per line" => "หนึ่ง Base DN ต่อบรรทัด",
"You can specify Base DN for users and groups in the Advanced tab" => "คุณสามารถระบุ DN หลัà¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¸°à¸à¸¥à¸¸à¹ˆà¸¡à¸•่างๆในà¹à¸—็บขั้นสูงได้",
"User DN" => "DN ของผู้ใช้งาน",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN ของผู้ใช้งานที่เป็นลูà¸à¸„้าอะไรà¸à¹‡à¸•ามที่ผูà¸à¸­à¸¢à¸¹à¹ˆà¸”้วย เช่น uid=agent, dc=example, dc=com, สำหรับà¸à¸²à¸£à¹€à¸‚้าถึงโดยบุคคลนิรนาม, ให้เว้นว่าง DN à¹à¸¥à¸° รหัสผ่านเอาไว้",
@@ -16,22 +32,30 @@
"Group Filter" => "ตัวà¸à¸£à¸­à¸‡à¸‚้อมูลà¸à¸¥à¸¸à¹ˆà¸¡",
"Defines the filter to apply, when retrieving groups." => "ระบุตัวà¸à¸£à¸­à¸‡à¸‚้อมูลที่ต้องà¸à¸²à¸£à¸™à¸³à¹„ปใช้งาน, เมื่อดึงข้อมูลà¸à¸¥à¸¸à¹ˆà¸¡",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "โดยไม่ต้องมีตัวยึดใดๆ, เช่น \"objectClass=posixGroup\",",
+"Connection Settings" => "ตั้งค่าà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ",
"Port" => "พอร์ต",
-"Base User Tree" => "รายà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree",
-"Base Group Tree" => "รายà¸à¸²à¸£à¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree",
-"Group-Member association" => "ความสัมพันธ์ของสมาชิà¸à¹ƒà¸™à¸à¸¥à¸¸à¹ˆà¸¡",
+"Disable Main Server" => "ปิดใช้งานเซิร์ฟเวอร์หลัà¸",
"Use TLS" => "ใช้ TLS",
-"Do not use it for SSL connections, it will fail." => "à¸à¸£à¸¸à¸“าอย่าใช้à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อà¹à¸šà¸š SSL à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อจะเà¸à¸´à¸”à¸à¸²à¸£à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§",
"Case insensitve LDAP server (Windows)" => "เซิร์ฟเวอร์ LDAP ประเภท Case insensitive (วินโดวส์)",
"Turn off SSL certificate validation." => "ปิดใช้งานà¸à¸²à¸£à¸•รวจสอบความถูà¸à¸•้องของใบรับรองความปลอดภัย SSL",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "หาà¸à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อสามารถทำงานได้เฉพาะà¸à¸±à¸šà¸•ัวเลือà¸à¸™à¸µà¹‰à¹€à¸—่านั้น, ให้นำเข้าข้อมูลใบรับรองความปลอดภัยà¹à¸šà¸š SSL ของเซิร์ฟเวอร์ LDAP ดังà¸à¸¥à¹ˆà¸²à¸§à¹€à¸‚้าไปไว้ในเซิร์ฟเวอร์ ownCloud",
"Not recommended, use for testing only." => "ไม่à¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™, ใช้สำหรับà¸à¸²à¸£à¸—ดสอบเท่านั้น",
+"in seconds. A change empties the cache." => "ในอีà¸à¹„ม่à¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—ี ระบบจะเปลี่ยนà¹à¸›à¸¥à¸‡à¸‚้อมูลในà¹à¸„ชให้ว่างเปล่า",
+"Directory Settings" => "ตั้งค่าไดเร็à¸à¸—อรี่",
"User Display Name Field" => "ช่องà¹à¸ªà¸”งชื่อผู้ใช้งานที่ต้องà¸à¸²à¸£",
"The LDAP attribute to use to generate the user`s ownCloud name." => "คุณลัà¸à¸©à¸“ะ LDAP ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸ªà¸³à¸«à¸£à¸±à¸šà¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸·à¹ˆà¸­à¸‚องผู้ใช้งาน ownCloud",
+"Base User Tree" => "รายà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree",
+"One User Base DN per line" => "หนึ่ง User Base DN ต่อบรรทัด",
+"User Search Attributes" => "คุณลัà¸à¸©à¸“ะà¸à¸²à¸£à¸„้นหาชื่อผู้ใช้",
+"Optional; one attribute per line" => "ตัวเลือà¸à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•ิม; หนึ่งคุณลัà¸à¸©à¸“ะต่อบรรทัด",
"Group Display Name Field" => "ช่องà¹à¸ªà¸”งชื่อà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่ต้องà¸à¸²à¸£",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "คุณลัà¸à¸©à¸“ะ LDAP ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸·à¹ˆà¸­à¸à¸¥à¸¸à¹ˆà¸¡à¸‚อง ownCloud",
+"Base Group Tree" => "รายà¸à¸²à¸£à¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree",
+"One Group Base DN per line" => "หนึ่ง Group Base DN ต่อบรรทัด",
+"Group Search Attributes" => "คุณลัà¸à¸©à¸“ะà¸à¸²à¸£à¸„้นหาà¹à¸šà¸šà¸à¸¥à¸¸à¹ˆà¸¡",
+"Group-Member association" => "ความสัมพันธ์ของสมาชิà¸à¹ƒà¸™à¸à¸¥à¸¸à¹ˆà¸¡",
+"Special Attributes" => "คุณลัà¸à¸©à¸“ะพิเศษ",
"in bytes" => "ในหน่วยไบต์",
-"in seconds. A change empties the cache." => "ในอีà¸à¹„ม่à¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—ี ระบบจะเปลี่ยนà¹à¸›à¸¥à¸‡à¸‚้อมูลในà¹à¸„ชให้ว่างเปล่า",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "เว้นว่างไว้สำหรับ ชื่อผู้ใช้ (ค่าเริ่มต้น) หรือไม่à¸à¸£à¸¸à¸“าระบุคุณลัà¸à¸©à¸“ะของ LDAP/AD",
"Help" => "ช่วยเหลือ"
);
diff --git a/apps/user_ldap/l10n/tr.php b/apps/user_ldap/l10n/tr.php
index 6da65d9832b..1bed9e246c9 100644
--- a/apps/user_ldap/l10n/tr.php
+++ b/apps/user_ldap/l10n/tr.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Silme başarısız oldu",
"Host" => "Konak",
"Base DN" => "Base DN",
"User DN" => "User DN",
@@ -10,15 +11,14 @@
"without any placeholder, e.g. \"objectClass=person\"." => "bir yer tutucusu olmadan, örneğin \"objectClass=person\"",
"Group Filter" => "Grup Süzgeci",
"Port" => "Port",
-"Base User Tree" => "Temel Kullanıcı Ağacı",
-"Base Group Tree" => "Temel Grup Ağacı",
-"Group-Member association" => "Grup-Üye işbirliği",
"Use TLS" => "TLS kullan",
-"Do not use it for SSL connections, it will fail." => "SSL bağlantıları ile kullanmayın, başarısız olacaktır.",
"Turn off SSL certificate validation." => "SSL sertifika doğrulamasını kapat.",
"Not recommended, use for testing only." => "Önerilmez, sadece test için kullanın.",
-"in bytes" => "byte cinsinden",
"in seconds. A change empties the cache." => "saniye cinsinden. Bir değişiklik önbelleği temizleyecektir.",
+"Base User Tree" => "Temel Kullanıcı Ağacı",
+"Base Group Tree" => "Temel Grup Ağacı",
+"Group-Member association" => "Grup-Üye işbirliği",
+"in bytes" => "byte cinsinden",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Kullanıcı adı bölümünü boş bırakın (varsayılan). ",
"Help" => "Yardım"
);
diff --git a/apps/user_ldap/l10n/uk.php b/apps/user_ldap/l10n/uk.php
index f82e9f2a420..643a7495890 100644
--- a/apps/user_ldap/l10n/uk.php
+++ b/apps/user_ldap/l10n/uk.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
+"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 look in the ownCloud log for further details." => "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð½ÐµÐ²Ñ–Ñ€Ð½Ð°. Подробиці подивітьÑÑ, будь лаÑка, в журналі ownCloud.",
+"Deletion failed" => "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½Ðµ було виконано",
+"Take over settings from recent server configuration?" => "ЗаÑтоÑувати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· оÑтанньої конфігурації Ñервера ?",
+"Keep settings?" => "Зберегти Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ?",
+"Cannot add server configuration" => "Ðеможливо додати конфігурацію Ñервера",
+"Connection test succeeded" => "Перевірка з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð¹ÑˆÐ»Ð° уÑпішно",
+"Connection test failed" => "Перевірка з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð°ÑÑŒ неуÑпішно",
+"Do you really want to delete the current Server Configuration?" => "Ви дійÑно бажаєте видалити поточну конфігурацію Ñервера ?",
+"Confirm Deletion" => "Підтвердіть ВидаленнÑ",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Увага:</b> ЗаÑтоÑунки user_ldap та user_webdavauth не ÑуміÑні. Ви можете зіткнутиÑÑ Ð· неÑподіваною поведінкою. Будь лаÑка, звернітьÑÑ Ð´Ð¾ ÑиÑтемного адмініÑтратора, щоб відключити одну з них.",
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Увага:</ b> Потрібний модуль PHP LDAP не вÑтановлено, базова програма працювати не буде. Будь лаÑка, звернітьÑÑ Ð´Ð¾ ÑиÑтемного адмініÑтратора, щоб вÑтановити його.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Увага:</ b> Потрібний модуль PHP LDAP не вÑтановлено, базова програма працювати не буде. Будь лаÑка, звернітьÑÑ Ð´Ð¾ ÑиÑтемного адмініÑтратора, щоб вÑтановити його.",
+"Server configuration" => "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¡ÐµÑ€Ð²ÐµÑ€Ð°",
+"Add Server Configuration" => "Додати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¡ÐµÑ€Ð²ÐµÑ€Ð°",
"Host" => "ХоÑÑ‚",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Можна не вказувати протокол, Ñкщо вам не потрібен SSL. Тоді почніть з ldaps://",
"Base DN" => "Базовий DN",
+"One Base DN per line" => "Один Base DN на одній Ñтрочці",
"You can specify Base DN for users and groups in the Advanced tab" => "Ви можете задати Базовий DN Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів Ñ– груп на вкладинці Додатково",
"User DN" => "DN КориÑтувача",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN клієнтÑького кориÑтувача Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²'Ñзки, наприклад: uid=agent,dc=example,dc=com. Ð”Ð»Ñ Ð°Ð½Ð¾Ð½Ñ–Ð¼Ð½Ð¾Ð³Ð¾ доÑтупу, залиште DN Ñ– Пароль порожніми.",
@@ -18,22 +33,25 @@
"Group Filter" => "Фільтр Груп",
"Defines the filter to apply, when retrieving groups." => "Визначає фільтр, Ñкий заÑтоÑовуєтьÑÑ Ð¿Ñ€Ð¸ отриманні груп.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "без будь-Ñкого заповнювача, наприклад: \"objectClass=posixGroup\".",
+"Configuration Active" => "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ðктивне",
+"When unchecked, this configuration will be skipped." => "Якщо \"галочка\" знÑта, Ñ†Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð±ÑƒÐ´Ðµ пропущена.",
"Port" => "Порт",
-"Base User Tree" => "ОÑновне Дерево КориÑтувачів",
-"Base Group Tree" => "ОÑновне Дерево Груп",
-"Group-Member association" => "ÐÑÐ¾Ñ†Ñ–Ð°Ñ†Ñ–Ñ Ð“Ñ€ÑƒÐ¿Ð°-Член",
"Use TLS" => "ВикориÑтовуйте TLS",
-"Do not use it for SSL connections, it will fail." => "Ðе викориÑтовуйте його Ð´Ð»Ñ SSL з'єднань, це не буде виконано.",
"Case insensitve LDAP server (Windows)" => "Ðечутливий до регіÑтру LDAP Ñервер (Windows)",
"Turn off SSL certificate validation." => "Вимкнути перевірку SSL Ñертифіката.",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Якщо з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ñ†ÑŽÑ” лише з цією опцією, імпортуйте SSL Ñертифікат LDAP Ñервера у ваший ownCloud Ñервер.",
"Not recommended, use for testing only." => "Ðе рекомендуєтьÑÑ, викориÑтовуйте лише Ð´Ð»Ñ Ñ‚ÐµÑтів.",
+"in seconds. A change empties the cache." => "в Ñекундах. Зміна очищує кеш.",
"User Display Name Field" => "Поле, Ñке відображає Ім'Ñ ÐšÐ¾Ñ€Ð¸Ñтувача",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Ðтрибут LDAP, Ñкий викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ— імен кориÑтувачів ownCloud.",
+"Base User Tree" => "ОÑновне Дерево КориÑтувачів",
+"One User Base DN per line" => "Один КориÑтувач Base DN на одній Ñтрочці",
"Group Display Name Field" => "Поле, Ñке відображає Ім'Ñ Ð“Ñ€ÑƒÐ¿Ð¸",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Ðтрибут LDAP, Ñкий викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ— імен груп ownCloud.",
+"Base Group Tree" => "ОÑновне Дерево Груп",
+"One Group Base DN per line" => "Одна Група Base DN на одній Ñтрочці",
+"Group-Member association" => "ÐÑÐ¾Ñ†Ñ–Ð°Ñ†Ñ–Ñ Ð“Ñ€ÑƒÐ¿Ð°-Член",
"in bytes" => "в байтах",
-"in seconds. A change empties the cache." => "в Ñекундах. Зміна очищує кеш.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Залиште порожнім Ð´Ð»Ñ Ñ–Ð¼ÐµÐ½Ñ– кориÑтувача (за замовчаннÑм). Інакше, вкажіть атрибут LDAP/AD.",
"Help" => "Допомога"
);
diff --git a/apps/user_ldap/l10n/vi.php b/apps/user_ldap/l10n/vi.php
index 3d32c8125b8..4bbb977f363 100644
--- a/apps/user_ldap/l10n/vi.php
+++ b/apps/user_ldap/l10n/vi.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "Xóa thất bại",
"Host" => "Máy chủ",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Bạn có thể bỠqua các giao thức, ngoại trừ SSL. Sau đó bắt đầu với ldaps://",
"Base DN" => "DN cơ bản",
@@ -16,22 +17,31 @@
"Group Filter" => "Bá»™ lá»c nhóm",
"Defines the filter to apply, when retrieving groups." => "Xác định các bá»™ lá»c để áp dụng, khi nhóm sá»­ dụng.",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "mà không giữ chỗ nào, ví dụ như \"objectClass = osixGroup\".",
+"Connection Settings" => "Connection Settings",
"Port" => "Cổng",
-"Base User Tree" => "Cây ngưá»i dùng cÆ¡ bản",
-"Base Group Tree" => "Cây nhóm cơ bản",
-"Group-Member association" => "Nhóm thành viên Cộng đồng",
+"Backup (Replica) Port" => "Cổng sao lưu (Replica)",
+"Disable Main Server" => "Tắt máy chủ chính",
+"When switched on, ownCloud will only connect to the replica server." => "When switched on, ownCloud will only connect to the replica server.",
"Use TLS" => "Sử dụng TLS",
-"Do not use it for SSL connections, it will fail." => "Kết nối SSL bị lỗi. ",
+"Do not use it additionally for LDAPS connections, it will fail." => "Do not use it additionally for LDAPS connections, it will fail.",
"Case insensitve LDAP server (Windows)" => "Trưá»ng hợp insensitve LDAP máy chá»§ (Windows)",
"Turn off SSL certificate validation." => "Tắt xác thực chứng nhận SSL",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Nếu kết nối chỉ hoạt động vá»›i tùy chá»n này, vui lòng import LDAP certificate SSL trong máy chá»§ ownCloud cá»§a bạn.",
"Not recommended, use for testing only." => "Không khuyến khích, Chỉ sử dụng để thử nghiệm.",
+"in seconds. A change empties the cache." => "trong vài giây. Một sự thay đổi bộ nhớ cache.",
+"Directory Settings" => "Directory Settings",
"User Display Name Field" => "Hiển thị tên ngưá»i sá»­ dụng",
"The LDAP attribute to use to generate the user`s ownCloud name." => "Các thuá»™c tính LDAP sá»­ dụng để tạo tên ngưá»i dùng ownCloud.",
+"Base User Tree" => "Cây ngưá»i dùng cÆ¡ bản",
+"User Search Attributes" => "User Search Attributes",
+"Optional; one attribute per line" => "Optional; one attribute per line",
"Group Display Name Field" => "Hiển thị tên nhóm",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "Các thuộc tính LDAP sử dụng để tạo các nhóm ownCloud.",
+"Base Group Tree" => "Cây nhóm cơ bản",
+"Group Search Attributes" => "Group Search Attributes",
+"Group-Member association" => "Nhóm thành viên Cộng đồng",
+"Special Attributes" => "Special Attributes",
"in bytes" => "Theo Byte",
-"in seconds. A change empties the cache." => "trong vài giây. Một sự thay đổi bộ nhớ cache.",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Äể trống tên ngưá»i dùng (mặc định). Nếu không chỉ định thuá»™c tính LDAP/AD",
"Help" => "Giúp đỡ"
);
diff --git a/apps/user_ldap/l10n/zh_CN.GB2312.php b/apps/user_ldap/l10n/zh_CN.GB2312.php
index 8b906aea5ce..f5bc41fd46b 100644
--- a/apps/user_ldap/l10n/zh_CN.GB2312.php
+++ b/apps/user_ldap/l10n/zh_CN.GB2312.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "删除失败",
"Host" => "主机",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "您å¯ä»¥å¿½ç•¥åè®®ï¼Œé™¤éžæ‚¨éœ€è¦ SSL。然åŽç”¨ ldaps:// 开头",
"Base DN" => "基本判别å",
@@ -17,21 +18,20 @@
"Defines the filter to apply, when retrieving groups." => "定义撷å–群组时è¦åº”用的过滤器",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ä¸èƒ½ä½¿ç”¨å ä½ç¬¦ï¼Œä¾‹å¦‚ \"objectClass=posixGroup\"。",
"Port" => "端å£",
-"Base User Tree" => "基本用户树",
-"Base Group Tree" => "基本群组树",
-"Group-Member association" => "群组-æˆå‘˜ç»„åˆ",
"Use TLS" => "使用 TLS",
-"Do not use it for SSL connections, it will fail." => "ä¸è¦ä½¿ç”¨å®ƒè¿›è¡Œ SSL 连接,会失败的。",
"Case insensitve LDAP server (Windows)" => "大å°å†™ä¸æ•感的 LDAP æœåС噍 (Windows)",
"Turn off SSL certificate validation." => "关闭 SSL è¯ä¹¦æ ¡éªŒã€‚",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "å¦‚æžœåªæœ‰ä½¿ç”¨æ­¤é€‰é¡¹æ‰èƒ½è¿žæŽ¥ï¼Œè¯·å¯¼å…¥ LDAP æœåŠ¡å™¨çš„ SSL è¯ä¹¦åˆ°æ‚¨çš„ ownCloud æœåŠ¡å™¨ã€‚",
"Not recommended, use for testing only." => "䏿ލè,仅供测试",
+"in seconds. A change empties the cache." => "以秒计。修改会清空缓存。",
"User Display Name Field" => "用户显示å称字段",
"The LDAP attribute to use to generate the user`s ownCloud name." => "用于生æˆç”¨æˆ·çš„ ownCloud åç§°çš„ LDAP 属性。",
+"Base User Tree" => "基本用户树",
"Group Display Name Field" => "群组显示å称字段",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "用于生æˆç¾¤ç»„çš„ ownCloud åç§°çš„ LDAP 属性。",
+"Base Group Tree" => "基本群组树",
+"Group-Member association" => "群组-æˆå‘˜ç»„åˆ",
"in bytes" => "以字节计",
-"in seconds. A change empties the cache." => "以秒计。修改会清空缓存。",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "用户å请留空 (默认)。å¦åˆ™ï¼Œè¯·æŒ‡å®šä¸€ä¸ª LDAP/AD 属性。",
"Help" => "帮助"
);
diff --git a/apps/user_ldap/l10n/zh_CN.php b/apps/user_ldap/l10n/zh_CN.php
index bb961d534b7..d494945e2e4 100644
--- a/apps/user_ldap/l10n/zh_CN.php
+++ b/apps/user_ldap/l10n/zh_CN.php
@@ -1,4 +1,6 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "删除失败",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>警告:</b>应用 user_ldap å’Œ user_webdavauth ä¸å…¼å®¹ã€‚您å¯èƒ½é­é‡æœªé¢„料的行为。请垂询您的系统管ç†å‘˜ç¦ç”¨å…¶ä¸­ä¸€ä¸ªã€‚",
"Host" => "主机",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "å¯ä»¥å¿½ç•¥å议,但如è¦ä½¿ç”¨SSL,则需以ldaps://开头",
"Base DN" => "Base DN",
@@ -17,19 +19,19 @@
"Defines the filter to apply, when retrieving groups." => "定义拉å–ç»„ä¿¡æ¯æ—¶çš„过滤器",
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "无需å ä½ç¬¦ï¼Œä¾‹å¦‚\"objectClass=posixGroup\"",
"Port" => "端å£",
-"Base User Tree" => "基础用户树",
-"Base Group Tree" => "基础组树",
-"Group-Member association" => "组æˆå‘˜å…³è”",
"Use TLS" => "使用TLS",
-"Do not use it for SSL connections, it will fail." => "ä¸è¦åœ¨SSL链接中使用此选项,会导致失败。",
"Case insensitve LDAP server (Windows)" => "大å°å†™æ•感LDAPæœåС噍(Windows)",
"Turn off SSL certificate validation." => "关闭SSLè¯ä¹¦éªŒè¯",
"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "如果链接仅在此选项时å¯ç”¨ï¼Œåœ¨æ‚¨çš„ownCloudæœåС噍䏭坼入LDAPæœåŠ¡å™¨çš„SSLè¯ä¹¦ã€‚",
"Not recommended, use for testing only." => "æš‚ä¸æŽ¨è,仅供测试",
+"in seconds. A change empties the cache." => "以秒计。修改将清空缓存。",
"User Display Name Field" => "用户显示å称字段",
"The LDAP attribute to use to generate the user`s ownCloud name." => "用æ¥ç”Ÿæˆç”¨æˆ·çš„ownCloudåç§°çš„ LDAP属性",
+"Base User Tree" => "基础用户树",
"Group Display Name Field" => "组显示å称字段",
"The LDAP attribute to use to generate the groups`s ownCloud name." => "用æ¥ç”Ÿæˆç»„çš„ownCloudåç§°çš„LDAP属性",
+"Base Group Tree" => "基础组树",
+"Group-Member association" => "组æˆå‘˜å…³è”",
"in bytes" => "字节数",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "将用户å称留空(默认)。å¦åˆ™æŒ‡å®šä¸€ä¸ªLDAP/AD属性",
"Help" => "帮助"
diff --git a/apps/user_ldap/l10n/zh_TW.php b/apps/user_ldap/l10n/zh_TW.php
index abc1b03d49d..9a12bad0747 100644
--- a/apps/user_ldap/l10n/zh_TW.php
+++ b/apps/user_ldap/l10n/zh_TW.php
@@ -1,5 +1,8 @@
<?php $TRANSLATIONS = array(
+"Deletion failed" => "移除失敗",
+"Host" => "主機",
"Password" => "密碼",
+"Port" => "連接阜",
"Use TLS" => "使用TLS",
"Turn off SSL certificate validation." => "關閉 SSL 憑證驗證",
"Help" => "說明"
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index f888577aedb..68cbe4a5e75 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -114,6 +114,15 @@ abstract class Access {
* @return the sanitized DN
*/
private function sanitizeDN($dn) {
+ //treating multiple base DNs
+ if(is_array($dn)) {
+ $result = array();
+ foreach($dn as $singleDN) {
+ $result[] = $this->sanitizeDN($singleDN);
+ }
+ return $result;
+ }
+
//OID sometimes gives back DNs with whitespace after the comma a la "uid=foo, cn=bar, dn=..." We need to tackle this!
$dn = preg_replace('/([^\\\]),(\s+)/u', '\1,', $dn);
@@ -212,9 +221,13 @@ abstract class Access {
* returns the internal ownCloud name for the given LDAP DN of the group, false on DN outside of search DN or failure
*/
public function dn2groupname($dn, $ldapname = null) {
- if(mb_strripos($dn, $this->sanitizeDN($this->connection->ldapBaseGroups), 0, 'UTF-8') !== (mb_strlen($dn, 'UTF-8')-mb_strlen($this->sanitizeDN($this->connection->ldapBaseGroups), 'UTF-8'))) {
+ //To avoid bypassing the base DN settings under certain circumstances
+ //with the group support, check whether the provided DN matches one of
+ //the given Bases
+ if(!$this->isDNPartOfBase($dn, $this->connection->ldapBaseGroups)) {
return false;
}
+
return $this->dn2ocname($dn, $ldapname, false);
}
@@ -227,9 +240,13 @@ abstract class Access {
* returns the internal ownCloud name for the given LDAP DN of the user, false on DN outside of search DN or failure
*/
public function dn2username($dn, $ldapname = null) {
- if(mb_strripos($dn, $this->sanitizeDN($this->connection->ldapBaseUsers), 0, 'UTF-8') !== (mb_strlen($dn, 'UTF-8')-mb_strlen($this->sanitizeDN($this->connection->ldapBaseUsers), 'UTF-8'))) {
+ //To avoid bypassing the base DN settings under certain circumstances
+ //with the group support, check whether the provided DN matches one of
+ //the given Bases
+ if(!$this->isDNPartOfBase($dn, $this->connection->ldapBaseUsers)) {
return false;
}
+
return $this->dn2ocname($dn, $ldapname, true);
}
@@ -521,7 +538,7 @@ abstract class Access {
/**
* @brief executes an LDAP search
* @param $filter the LDAP filter for the search
- * @param $base the LDAP subtree that shall be searched
+ * @param $base an array containing the LDAP subtree(s) that shall be searched
* @param $attr optional, when a certain attribute shall be filtered out
* @returns array with the search result
*
@@ -544,18 +561,28 @@ abstract class Access {
//check wether paged search should be attempted
$pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, $limit, $offset);
- $sr = ldap_search($link_resource, $base, $filter, $attr);
- if(!$sr) {
+ $linkResources = array_pad(array(), count($base), $link_resource);
+ $sr = ldap_search($linkResources, $base, $filter, $attr);
+ $error = ldap_errno($link_resource);
+ if(!is_array($sr) || $error > 0) {
\OCP\Util::writeLog('user_ldap', 'Error when searching: '.ldap_error($link_resource).' code '.ldap_errno($link_resource), \OCP\Util::ERROR);
\OCP\Util::writeLog('user_ldap', 'Attempt for Paging? '.print_r($pagedSearchOK, true), \OCP\Util::ERROR);
return array();
}
- $findings = ldap_get_entries($link_resource, $sr );
+ $findings = array();
+ foreach($sr as $key => $res) {
+ $findings = array_merge($findings, ldap_get_entries($link_resource, $res ));
+ }
if($pagedSearchOK) {
\OCP\Util::writeLog('user_ldap', 'Paged search successful', \OCP\Util::INFO);
- ldap_control_paged_result_response($link_resource, $sr, $cookie);
- \OCP\Util::writeLog('user_ldap', 'Set paged search cookie '.$cookie, \OCP\Util::INFO);
- $this->setPagedResultCookie($filter, $limit, $offset, $cookie);
+ foreach($sr as $key => $res) {
+ $cookie = null;
+ if(ldap_control_paged_result_response($link_resource, $res, $cookie)) {
+ \OCP\Util::writeLog('user_ldap', 'Set paged search cookie', \OCP\Util::INFO);
+ $this->setPagedResultCookie($base[$key], $filter, $limit, $offset, $cookie);
+ }
+ }
+
//browsing through prior pages to get the cookie for the new one
if($skipHandling) {
return;
@@ -565,7 +592,9 @@ abstract class Access {
$this->pagedSearchedSuccessful = true;
}
} else {
- \OCP\Util::writeLog('user_ldap', 'Paged search failed :(', \OCP\Util::INFO);
+ if(!is_null($limit)) {
+ \OCP\Util::writeLog('user_ldap', 'Paged search failed :(', \OCP\Util::INFO);
+ }
}
// if we're here, probably no connection resource is returned.
@@ -690,6 +719,50 @@ abstract class Access {
return $combinedFilter;
}
+ /**
+ * @brief creates a filter part for to perfrom search for users
+ * @param string $search the search term
+ * @return string the final filter part to use in LDAP searches
+ */
+ public function getFilterPartForUserSearch($search) {
+ return $this->getFilterPartForSearch($search, $this->connection->ldapAttributesForUserSearch, $this->connection->ldapUserDisplayName);
+ }
+
+ /**
+ * @brief creates a filter part for to perfrom search for groups
+ * @param string $search the search term
+ * @return string the final filter part to use in LDAP searches
+ */
+ public function getFilterPartForGroupSearch($search) {
+ return $this->getFilterPartForSearch($search, $this->connection->ldapAttributesForGroupSearch, $this->connection->ldapGroupDisplayName);
+ }
+
+ /**
+ * @brief creates a filter part for searches
+ * @param string $search the search term
+ * @param string $fallbackAttribute a fallback attribute in case the user
+ * did not define search attributes. Typically the display name attribute.
+ * @returns string the final filter part to use in LDAP searches
+ */
+ private function getFilterPartForSearch($search, $searchAttributes, $fallbackAttribute) {
+ $filter = array();
+ $search = empty($search) ? '*' : '*'.$search.'*';
+ if(!is_array($searchAttributes) || count($searchAttributes) == 0) {
+ if(empty($fallbackAttribute)) {
+ return '';
+ }
+ $filter[] = $fallbackAttribute . '=' . $search;
+ } else {
+ foreach($searchAttributes as $attribute) {
+ $filter[] = $attribute . '=' . $search;
+ }
+ }
+ if(count($filter) == 1) {
+ return '('.$filter[0].')';
+ }
+ return $this->combineFilterWithOr($filter);
+ }
+
public function areCredentialsValid($name, $password) {
$name = $this->DNasBaseParameter($name);
$testConnection = clone $this->connection;
@@ -792,19 +865,40 @@ abstract class Access {
}
/**
+ * @brief checks if the given DN is part of the given base DN(s)
+ * @param $dn the DN
+ * @param $bases array containing the allowed base DN or DNs
+ * @returns Boolean
+ */
+ private function isDNPartOfBase($dn, $bases) {
+ $bases = $this->sanitizeDN($bases);
+ foreach($bases as $base) {
+ $belongsToBase = true;
+ if(mb_strripos($dn, $base, 0, 'UTF-8') !== (mb_strlen($dn, 'UTF-8')-mb_strlen($base))) {
+ $belongsToBase = false;
+ }
+ if($belongsToBase) {
+ break;
+ }
+ }
+ return $belongsToBase;
+ }
+
+ /**
* @brief get a cookie for the next LDAP paged search
+ * @param $base a string with the base DN for the search
* @param $filter the search filter to identify the correct search
* @param $limit the limit (or 'pageSize'), to identify the correct search well
* @param $offset the offset for the new search to identify the correct search really good
* @returns string containing the key or empty if none is cached
*/
- private function getPagedResultCookie($filter, $limit, $offset) {
+ private function getPagedResultCookie($base, $filter, $limit, $offset) {
if($offset == 0) {
return '';
}
$offset -= $limit;
//we work with cache here
- $cachekey = 'lc' . dechex(crc32($filter)) . '-' . $limit . '-' . $offset;
+ $cachekey = 'lc' . crc32($base) . '-' . crc32($filter) . '-' . $limit . '-' . $offset;
$cookie = $this->connection->getFromCache($cachekey);
if(is_null($cookie)) {
$cookie = '';
@@ -814,15 +908,16 @@ abstract class Access {
/**
* @brief set a cookie for LDAP paged search run
+ * @param $base a string with the base DN for the search
* @param $filter the search filter to identify the correct search
* @param $limit the limit (or 'pageSize'), to identify the correct search well
* @param $offset the offset for the run search to identify the correct search really good
* @param $cookie string containing the cookie returned by ldap_control_paged_result_response
* @return void
*/
- private function setPagedResultCookie($filter, $limit, $offset) {
+ private function setPagedResultCookie($base, $filter, $limit, $offset, $cookie) {
if(!empty($cookie)) {
- $cachekey = 'lc' . dechex(crc32($filter)) . '-' . $limit . '-' . $offset;
+ $cachekey = 'lc' . dechex(crc32($base)) . '-' . dechex(crc32($filter)) . '-' .$limit . '-' . $offset;
$cookie = $this->connection->writeToCache($cachekey, $cookie);
}
}
@@ -841,40 +936,47 @@ abstract class Access {
/**
* @brief prepares a paged search, if possible
* @param $filter the LDAP filter for the search
- * @param $base the LDAP subtree that shall be searched
+ * @param $bases an array containing the LDAP subtree(s) that shall be searched
* @param $attr optional, when a certain attribute shall be filtered outside
* @param $limit
* @param $offset
*
*/
- private function initPagedSearch($filter, $base, $attr, $limit, $offset) {
+ private function initPagedSearch($filter, $bases, $attr, $limit, $offset) {
$pagedSearchOK = false;
if($this->connection->hasPagedResultSupport && !is_null($limit)) {
$offset = intval($offset); //can be null
- \OCP\Util::writeLog('user_ldap', 'initializing paged search for Filter'.$filter.' base '.$base.' attr '.print_r($attr, true). ' limit ' .$limit.' offset '.$offset, \OCP\Util::DEBUG);
+ \OCP\Util::writeLog('user_ldap', 'initializing paged search for Filter'.$filter.' base '.print_r($bases, true).' attr '.print_r($attr, true). ' limit ' .$limit.' offset '.$offset, \OCP\Util::INFO);
//get the cookie from the search for the previous search, required by LDAP
- $cookie = $this->getPagedResultCookie($filter, $limit, $offset);
- if(empty($cookie) && ($offset > 0)) {
- //no cookie known, although the offset is not 0. Maybe cache run out. We need to start all over *sigh* (btw, Dear Reader, did you need LDAP paged searching was designed by MSFT?)
- $reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit;
- //a bit recursive, $offset of 0 is the exit
- \OCP\Util::writeLog('user_ldap', 'Looking for cookie L/O '.$limit.'/'.$reOffset, \OCP\Util::INFO);
- $this->search($filter, $base, $attr, $limit, $reOffset, true);
- $cookie = $this->getPagedResultCookie($filter, $limit, $offset);
- //still no cookie? obviously, the server does not like us. Let's skip paging efforts.
- //TODO: remember this, probably does not change in the next request...
- if(empty($cookie)) {
- $cookie = null;
+ foreach($bases as $base) {
+
+ $cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset);
+ if(empty($cookie) && ($offset > 0)) {
+ //no cookie known, although the offset is not 0. Maybe cache run out. We need to start all over *sigh* (btw, Dear Reader, did you need LDAP paged searching was designed by MSFT?)
+ $reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit;
+ //a bit recursive, $offset of 0 is the exit
+ \OCP\Util::writeLog('user_ldap', 'Looking for cookie L/O '.$limit.'/'.$reOffset, \OCP\Util::INFO);
+ $this->search($filter, array($base), $attr, $limit, $reOffset, true);
+ $cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset);
+ //still no cookie? obviously, the server does not like us. Let's skip paging efforts.
+ //TODO: remember this, probably does not change in the next request...
+ if(empty($cookie)) {
+ $cookie = null;
+ }
}
- }
- if(!is_null($cookie)) {
- if($offset > 0) {
- \OCP\Util::writeLog('user_ldap', 'Cookie '.$cookie, \OCP\Util::INFO);
+ if(!is_null($cookie)) {
+ if($offset > 0) {
+ \OCP\Util::writeLog('user_ldap', 'Cookie '.$cookie, \OCP\Util::INFO);
+ }
+ $pagedSearchOK = ldap_control_paged_result($this->connection->getConnectionResource(), $limit, false, $cookie);
+ if(!$pagedSearchOK) {
+ return false;
+ }
+ \OCP\Util::writeLog('user_ldap', 'Ready for a paged search', \OCP\Util::INFO);
+ } else {
+ \OCP\Util::writeLog('user_ldap', 'No paged search for us, Cpt., Limit '.$limit.' Offset '.$offset, \OCP\Util::INFO);
}
- $pagedSearchOK = ldap_control_paged_result($this->connection->getConnectionResource(), $limit, false, $cookie);
- \OCP\Util::writeLog('user_ldap', 'Ready for a paged search', \OCP\Util::INFO);
- } else {
- \OCP\Util::writeLog('user_ldap', 'No paged search for us, Cpt., Limit '.$limit.' Offset '.$offset, \OCP\Util::INFO);
+
}
}
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
index b14cdafff89..933f2f42074 100644
--- a/apps/user_ldap/lib/connection.php
+++ b/apps/user_ldap/lib/connection.php
@@ -4,7 +4,7 @@
* ownCloud – LDAP Access
*
* @author Arthur Schiwon
- * @copyright 2012 Arthur Schiwon blizzz@owncloud.com
+ * @copyright 2012, 2013 Arthur Schiwon blizzz@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
@@ -25,6 +25,7 @@ namespace OCA\user_ldap\lib;
class Connection {
private $ldapConnectionRes = null;
+ private $configPrefix;
private $configID;
private $configured = false;
@@ -35,6 +36,8 @@ class Connection {
protected $config = array(
'ldapHost' => null,
'ldapPort' => null,
+ 'ldapBackupHost' => null,
+ 'ldapBackupPort' => null,
'ldapBase' => null,
'ldapBaseUsers' => null,
'ldapBaseGroups' => null,
@@ -48,6 +51,7 @@ class Connection {
'ldapUserFilter' => null,
'ldapGroupFilter' => null,
'ldapGroupDisplayName' => null,
+ 'ldapGroupMemberAssocAttr' => null,
'ldapLoginFilter' => null,
'ldapQuotaAttribute' => null,
'ldapQuotaDefault' => null,
@@ -55,15 +59,24 @@ class Connection {
'ldapCacheTTL' => null,
'ldapUuidAttribute' => null,
'ldapOverrideUuidAttribute' => null,
+ 'ldapOverrideMainServer' => false,
+ 'ldapConfigurationActive' => false,
+ 'ldapAttributesForUserSearch' => null,
+ 'ldapAttributesForGroupSearch' => null,
'homeFolderNamingRule' => null,
'hasPagedResultSupport' => false,
);
- public function __construct($configID = 'user_ldap') {
+ /**
+ * @brief Constructor
+ * @param $configPrefix a string with the prefix for the configkey column (appconfig table)
+ * @param $configID a string with the value for the appid column (appconfig table) or null for on-the-fly connections
+ */
+ public function __construct($configPrefix = '', $configID = 'user_ldap') {
+ $this->configPrefix = $configPrefix;
$this->configID = $configID;
$this->cache = \OC_Cache::getGlobalCache();
$this->config['hasPagedResultSupport'] = (function_exists('ldap_control_paged_result') && function_exists('ldap_control_paged_result_response'));
- \OCP\Util::writeLog('user_ldap', 'PHP supports paged results? '.print_r($this->config['hasPagedResultSupport'], true), \OCP\Util::INFO);
}
public function __destruct() {
@@ -84,12 +97,12 @@ class Connection {
public function __set($name, $value) {
$changed = false;
- //omly few options are writable
+ //only few options are writable
if($name == 'ldapUuidAttribute') {
\OCP\Util::writeLog('user_ldap', 'Set config ldapUuidAttribute to '.$value, \OCP\Util::DEBUG);
$this->config[$name] = $value;
if(!empty($this->configID)) {
- \OCP\Config::setAppValue($this->configID, 'ldap_uuid_attribute', $value);
+ \OCP\Config::setAppValue($this->configID, $this->configPrefix.'ldap_uuid_attribute', $value);
}
$changed = true;
}
@@ -126,7 +139,7 @@ class Connection {
}
private function getCacheKey($key) {
- $prefix = 'LDAP-'.$this->configID.'-';
+ $prefix = 'LDAP-'.$this->configID.'-'.$this->configPrefix.'-';
if(is_null($key)) {
return $prefix;
}
@@ -164,7 +177,8 @@ class Connection {
if(!$this->configured) {
$this->readConfiguration();
}
- if(!$this->config['ldapCacheTTL']) {
+ if(!$this->config['ldapCacheTTL']
+ || !$this->config['ldapConfigurationActive']) {
return null;
}
$key = $this->getCacheKey($key);
@@ -176,43 +190,97 @@ class Connection {
$this->cache->clear($this->getCacheKey(null));
}
+ private function getValue($varname) {
+ static $defaults;
+ if(is_null($defaults)){
+ $defaults = $this->getDefaults();
+ }
+ return \OCP\Config::getAppValue($this->configID,
+ $this->configPrefix.$varname,
+ $defaults[$varname]);
+ }
+
+ private function setValue($varname, $value) {
+ \OCP\Config::setAppValue($this->configID,
+ $this->configPrefix.$varname,
+ $value);
+ }
+
/**
* Caches the general LDAP configuration.
*/
private function readConfiguration($force = false) {
- \OCP\Util::writeLog('user_ldap', 'Checking conf state: isConfigured? '.print_r($this->configured, true).' isForce? '.print_r($force, true).' configID? '.print_r($this->configID, true), \OCP\Util::DEBUG);
if((!$this->configured || $force) && !is_null($this->configID)) {
- \OCP\Util::writeLog('user_ldap', 'Reading the configuration', \OCP\Util::DEBUG);
- $this->config['ldapHost'] = \OCP\Config::getAppValue($this->configID, 'ldap_host', '');
- $this->config['ldapPort'] = \OCP\Config::getAppValue($this->configID, 'ldap_port', 389);
- $this->config['ldapAgentName'] = \OCP\Config::getAppValue($this->configID, 'ldap_dn', '');
- $this->config['ldapAgentPassword'] = base64_decode(\OCP\Config::getAppValue($this->configID, 'ldap_agent_password', ''));
- $this->config['ldapBase'] = \OCP\Config::getAppValue($this->configID, 'ldap_base', '');
- $this->config['ldapBaseUsers'] = \OCP\Config::getAppValue($this->configID, 'ldap_base_users', $this->config['ldapBase']);
- $this->config['ldapBaseGroups'] = \OCP\Config::getAppValue($this->configID, 'ldap_base_groups', $this->config['ldapBase']);
- $this->config['ldapTLS'] = \OCP\Config::getAppValue($this->configID, 'ldap_tls', 0);
- $this->config['ldapNoCase'] = \OCP\Config::getAppValue($this->configID, 'ldap_nocase', 0);
- $this->config['turnOffCertCheck'] = \OCP\Config::getAppValue($this->configID, 'ldap_turn_off_cert_check', 0);
- $this->config['ldapUserDisplayName'] = mb_strtolower(\OCP\Config::getAppValue($this->configID, 'ldap_display_name', 'uid'), 'UTF-8');
- $this->config['ldapUserFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_userlist_filter', 'objectClass=person');
- $this->config['ldapGroupFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_filter', '(objectClass=posixGroup)');
- $this->config['ldapLoginFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_login_filter', '(uid=%uid)');
- $this->config['ldapGroupDisplayName'] = mb_strtolower(\OCP\Config::getAppValue($this->configID, 'ldap_group_display_name', 'uid'), 'UTF-8');
- $this->config['ldapQuotaAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_quota_attr', '');
- $this->config['ldapQuotaDefault'] = \OCP\Config::getAppValue($this->configID, 'ldap_quota_def', '');
- $this->config['ldapEmailAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_email_attr', '');
- $this->config['ldapGroupMemberAssocAttr'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_member_assoc_attribute', 'uniqueMember');
- $this->config['ldapIgnoreNamingRules'] = \OCP\Config::getSystemValue('ldapIgnoreNamingRules', false);
- $this->config['ldapCacheTTL'] = \OCP\Config::getAppValue($this->configID, 'ldap_cache_ttl', 10*60);
- $this->config['ldapUuidAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_uuid_attribute', 'auto');
- $this->config['ldapOverrideUuidAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_override_uuid_attribute', 0);
- $this->config['homeFolderNamingRule'] = \OCP\Config::getAppValue($this->configID, 'home_folder_naming_rule', 'opt:username');
+ $defaults = $this->getDefaults();
+ $v = 'getValue';
+ $this->config['ldapHost'] = $this->$v('ldap_host');
+ $this->config['ldapBackupHost'] = $this->$v('ldap_backup_host');
+ $this->config['ldapPort'] = $this->$v('ldap_port');
+ $this->config['ldapBackupPort'] = $this->$v('ldap_backup_port');
+ $this->config['ldapOverrideMainServer']
+ = $this->$v('ldap_override_main_server');
+ $this->config['ldapAgentName'] = $this->$v('ldap_dn');
+ $this->config['ldapAgentPassword']
+ = base64_decode($this->$v('ldap_agent_password'));
+ $rawLdapBase = $this->$v('ldap_base');
+ $this->config['ldapBase']
+ = preg_split('/\r\n|\r|\n/', $rawLdapBase);
+ $this->config['ldapBaseUsers']
+ = preg_split('/\r\n|\r|\n/', ($this->$v('ldap_base_users')));
+ $this->config['ldapBaseGroups']
+ = preg_split('/\r\n|\r|\n/', $this->$v('ldap_base_groups'));
+ unset($rawLdapBase);
+ $this->config['ldapTLS'] = $this->$v('ldap_tls');
+ $this->config['ldapNoCase'] = $this->$v('ldap_nocase');
+ $this->config['turnOffCertCheck']
+ = $this->$v('ldap_turn_off_cert_check');
+ $this->config['ldapUserDisplayName']
+ = mb_strtolower($this->$v('ldap_display_name'),'UTF-8');
+ $this->config['ldapUserFilter']
+ = $this->$v('ldap_userlist_filter');
+ $this->config['ldapGroupFilter'] = $this->$v('ldap_group_filter');
+ $this->config['ldapLoginFilter'] = $this->$v('ldap_login_filter');
+ $this->config['ldapGroupDisplayName']
+ = mb_strtolower($this->$v('ldap_group_display_name'), 'UTF-8');
+ $this->config['ldapQuotaAttribute']
+ = $this->$v('ldap_quota_attr');
+ $this->config['ldapQuotaDefault']
+ = $this->$v('ldap_quota_def');
+ $this->config['ldapEmailAttribute']
+ = $this->$v('ldap_email_attr');
+ $this->config['ldapGroupMemberAssocAttr']
+ = $this->$v('ldap_group_member_assoc_attribute');
+ $this->config['ldapIgnoreNamingRules']
+ = \OCP\Config::getSystemValue('ldapIgnoreNamingRules', false);
+ $this->config['ldapCacheTTL'] = $this->$v('ldap_cache_ttl');
+ $this->config['ldapUuidAttribute']
+ = $this->$v('ldap_uuid_attribute');
+ $this->config['ldapOverrideUuidAttribute']
+ = $this->$v('ldap_override_uuid_attribute');
+ $this->config['homeFolderNamingRule']
+ = $this->$v('home_folder_naming_rule');
+ $this->config['ldapConfigurationActive']
+ = $this->$v('ldap_configuration_active');
+ $this->config['ldapAttributesForUserSearch']
+ = preg_split('/\r\n|\r|\n/', $this->$v('ldap_attributes_for_user_search'));
+ $this->config['ldapAttributesForGroupSearch']
+ = preg_split('/\r\n|\r|\n/', $this->$v('ldap_attributes_for_group_search'));
$this->configured = $this->validateConfiguration();
}
}
/**
+ * @return returns an array that maps internal variable names to database fields
+ */
+ private function getConfigTranslationArray() {
+ 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_userlist_filter'=>'ldapUserFilter', 'ldap_login_filter'=>'ldapLoginFilter', 'ldap_group_filter'=>'ldapGroupFilter', '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');
+ return $array;
+ }
+
+ /**
* @brief set LDAP configuration with values delivered by an array, not read from configuration
* @param $config array that holds the config parameters in an associated array
* @param &$setParameters optional; array where the set fields will be given to
@@ -223,11 +291,14 @@ class Connection {
return false;
}
- $params = array('ldap_host'=>'ldapHost', 'ldap_port'=>'ldapPort', 'ldap_dn'=>'ldapAgentName', 'ldap_agent_password'=>'ldapAgentPassword', 'ldap_base'=>'ldapBase', 'ldap_base_users'=>'ldapBaseUsers', 'ldap_base_groups'=>'ldapBaseGroups', 'ldap_userlist_filter'=>'ldapUserFilter', 'ldap_login_filter'=>'ldapLoginFilter', 'ldap_group_filter'=>'ldapGroupFilter', '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');
+ $params = $this->getConfigTranslationArray();
foreach($config as $parameter => $value) {
+ if(($parameter == 'homeFolderNamingRule'
+ || $params[$parameter] == 'homeFolderNamingRule')
+ && !empty($value)) {
+ $value = 'attr:'.$value;
+ }
if(isset($this->config[$parameter])) {
$this->config[$parameter] = $value;
if(is_array($setParameters)) {
@@ -247,6 +318,71 @@ class Connection {
}
/**
+ * @brief saves the current Configuration in the database
+ */
+ public function saveConfiguration() {
+ $trans = array_flip($this->getConfigTranslationArray());
+ foreach($this->config as $key => $value) {
+ \OCP\Util::writeLog('user_ldap', 'LDAP: storing key '.$key.' value '.$value, \OCP\Util::DEBUG);
+ switch ($key) {
+ case 'ldapAgentPassword':
+ $value = base64_encode($value);
+ break;
+ case 'homeFolderNamingRule':
+ $value = empty($value) ? 'opt:username' : $value;
+ break;
+ case 'ldapBase':
+ case 'ldapBaseUsers':
+ case 'ldapBaseGroups':
+ case 'ldapAttributesForUserSearch':
+ case 'ldapAttributesForGroupSearch':
+ if(is_array($value)){
+ $value = implode("\n", $value);
+ }
+ break;
+ case 'ldapIgnoreNamingRules':
+ case 'ldapOverrideUuidAttribute':
+ case 'ldapUuidAttribute':
+ case 'hasPagedResultSupport':
+ continue 2;
+ }
+ if(is_null($value)) {
+ $value = '';
+ }
+
+ $this->setValue($trans[$key], $value);
+ }
+ $this->clearCache();
+ }
+
+ /**
+ * @brief get the current LDAP configuration
+ * @return array
+ */
+ public function getConfiguration() {
+ $this->readConfiguration();
+ $trans = $this->getConfigTranslationArray();
+ $config = array();
+ foreach($trans as $dbKey => $classKey) {
+ if($classKey == 'homeFolderNamingRule') {
+ if(strpos($this->config[$classKey], 'opt') === 0) {
+ $config[$dbKey] = '';
+ } else {
+ $config[$dbKey] = substr($this->config[$classKey], 5);
+ }
+ continue;
+ } else if((strpos($classKey, 'ldapBase') !== false)
+ || (strpos($classKey, 'ldapAttributes') !== false)) {
+ $config[$dbKey] = implode("\n", $this->config[$classKey]);
+ continue;
+ }
+ $config[$dbKey] = $this->config[$classKey];
+ }
+
+ return $config;
+ }
+
+ /**
* @brief Validates the user specified configuration
* @returns true if configuration seems OK, false otherwise
*/
@@ -264,9 +400,26 @@ class Connection {
\OCP\Util::writeLog('user_ldap', 'No group filter is specified, LDAP group feature will not be used.', \OCP\Util::INFO);
}
if(!in_array($this->config['ldapUuidAttribute'], array('auto', 'entryuuid', 'nsuniqueid', 'objectguid')) && (!is_null($this->configID))) {
- \OCP\Config::setAppValue($this->configID, 'ldap_uuid_attribute', 'auto');
+ \OCP\Config::setAppValue($this->configID, $this->configPrefix.'ldap_uuid_attribute', 'auto');
\OCP\Util::writeLog('user_ldap', 'Illegal value for the UUID Attribute, reset to autodetect.', \OCP\Util::INFO);
}
+ if(empty($this->config['ldapBackupPort'])) {
+ //force default
+ $this->config['ldapBackupPort'] = $this->config['ldapPort'];
+ }
+ foreach(array('ldapAttributesForUserSearch', 'ldapAttributesForGroupSearch') as $key) {
+ if(is_array($this->config[$key])
+ && count($this->config[$key]) == 1
+ && empty($this->config[$key][0])) {
+ $this->config[$key] = array();
+ }
+ }
+ if((strpos($this->config['ldapHost'], 'ldaps') === 0)
+ && $this->config['ldapTLS']) {
+ $this->config['ldapTLS'] = false;
+ \OCP\Util::writeLog('user_ldap', 'LDAPS (already using secure connection) and TLS do not work together. Switched off TLS.', \OCP\Util::INFO);
+ }
+
//second step: critical checks. If left empty or filled wrong, set as unconfigured and give a warning.
@@ -311,9 +464,50 @@ class Connection {
}
/**
+ * @returns an associative array with the default values. Keys are correspond
+ * to config-value entries in the database table
+ */
+ public function getDefaults() {
+ return array(
+ 'ldap_host' => '',
+ 'ldap_port' => '389',
+ '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' => 'objectClass=person',
+ 'ldap_login_filter' => 'uid=%uid',
+ 'ldap_group_filter' => 'objectClass=posixGroup',
+ 'ldap_display_name' => 'cn',
+ '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_attribute' => 'auto',
+ 'ldap_override_uuid_attribute' => 0,
+ 'home_folder_naming_rule' => 'opt:username',
+ 'ldap_turn_off_cert_check' => 0,
+ 'ldap_configuration_active' => 1,
+ 'ldap_attributes_for_user_search' => '',
+ 'ldap_attributes_for_group_search' => '',
+ );
+ }
+
+ /**
* Connects and Binds to LDAP
*/
private function establishConnection() {
+ if(!$this->config['ldapConfigurationActive']) {
+ return null;
+ }
static $phpLDAPinstalled = true;
if(!$phpLDAPinstalled) {
return false;
@@ -336,16 +530,43 @@ class Connection {
\OCP\Util::writeLog('user_ldap', 'Could not turn off SSL certificate validation.', \OCP\Util::WARN);
}
}
- $this->ldapConnectionRes = ldap_connect($this->config['ldapHost'], $this->config['ldapPort']);
- if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) {
- if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) {
- if($this->config['ldapTLS']) {
- ldap_start_tls($this->ldapConnectionRes);
+ if(!$this->config['ldapOverrideMainServer'] && !$this->getFromCache('overrideMainServer')) {
+ $this->doConnect($this->config['ldapHost'], $this->config['ldapPort']);
+ $bindStatus = $this->bind();
+ $error = is_resource($this->ldapConnectionRes) ? ldap_errno($this->ldapConnectionRes) : -1;
+ } else {
+ $bindStatus = false;
+ $error = null;
+ }
+
+ $error = null;
+ //if LDAP server is not reachable, try the Backup (Replica!) Server
+ if((!$bindStatus && ($error == -1))
+ || $this->config['ldapOverrideMainServer']
+ || $this->getFromCache('overrideMainServer')) {
+ $this->doConnect($this->config['ldapBackupHost'], $this->config['ldapBackupPort']);
+ $bindStatus = $this->bind();
+ if($bindStatus && $error == -1) {
+ //when bind to backup server succeeded and failed to main server,
+ //skip contacting him until next cache refresh
+ $this->writeToCache('overrideMainServer', true);
}
- }
}
+ return $bindStatus;
+ }
+ }
- return $this->bind();
+ private function doConnect($host, $port) {
+ if(empty($host)) {
+ return false;
+ }
+ $this->ldapConnectionRes = ldap_connect($host, $port);
+ if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) {
+ if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) {
+ if($this->config['ldapTLS']) {
+ ldap_start_tls($this->ldapConnectionRes);
+ }
+ }
}
}
@@ -353,9 +574,16 @@ class Connection {
* Binds to LDAP
*/
public function bind() {
- $ldapLogin = @ldap_bind($this->getConnectionResource(), $this->config['ldapAgentName'], $this->config['ldapAgentPassword']);
+ if(!$this->config['ldapConfigurationActive']) {
+ return false;
+ }
+ $cr = $this->getConnectionResource();
+ if(!is_resource($cr)) {
+ return false;
+ }
+ $ldapLogin = @ldap_bind($cr, $this->config['ldapAgentName'], $this->config['ldapAgentPassword']);
if(!$ldapLogin) {
- \OCP\Util::writeLog('user_ldap', 'Bind failed: ' . ldap_errno($this->ldapConnectionRes) . ': ' . ldap_error($this->ldapConnectionRes), \OCP\Util::ERROR);
+ \OCP\Util::writeLog('user_ldap', 'Bind failed: ' . ldap_errno($cr) . ': ' . ldap_error($cr), \OCP\Util::ERROR);
$this->ldapConnectionRes = null;
return false;
}
diff --git a/apps/user_ldap/lib/helper.php b/apps/user_ldap/lib/helper.php
new file mode 100644
index 00000000000..29ce998dae7
--- /dev/null
+++ b/apps/user_ldap/lib/helper.php
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * ownCloud – LDAP Helper
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@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 OCA\user_ldap\lib;
+
+class Helper {
+
+ /**
+ * @brief returns prefixes for each saved LDAP/AD server configuration.
+ * @param bool optional, whether only active configuration shall be
+ * retrieved, defaults to false
+ * @return array with a list of the available prefixes
+ *
+ * Configuration prefixes are used to set up configurations for n LDAP or
+ * AD servers. Since configuration is stored in the database, table
+ * appconfig under appid user_ldap, the common identifiers in column
+ * 'configkey' have a prefix. The prefix for the very first server
+ * configuration is empty.
+ * Configkey Examples:
+ * Server 1: ldap_login_filter
+ * Server 2: s1_ldap_login_filter
+ * Server 3: s2_ldap_login_filter
+ *
+ * The prefix needs to be passed to the constructor of Connection class,
+ * except the default (first) server shall be connected to.
+ *
+ */
+ static public function getServerConfigurationPrefixes($activeConfigurations = false) {
+ $referenceConfigkey = 'ldap_configuration_active';
+
+ $query = '
+ SELECT DISTINCT `configkey`
+ FROM `*PREFIX*appconfig`
+ WHERE `configkey` LIKE ?
+ ';
+ if($activeConfigurations) {
+ $query .= ' AND `configvalue` = 1';
+ }
+ $query = \OCP\DB::prepare($query);
+
+ $serverConfigs = $query->execute(array('%'.$referenceConfigkey))->fetchAll();
+ $prefixes = array();
+
+ foreach($serverConfigs as $serverConfig) {
+ $len = strlen($serverConfig['configkey']) - strlen($referenceConfigkey);
+ $prefixes[] = substr($serverConfig['configkey'], 0, $len);
+ }
+
+ return $prefixes;
+ }
+
+ /**
+ * @brief deletes a given saved LDAP/AD server configuration.
+ * @param string the configuration prefix of the config to delete
+ * @return bool true on success, false otherwise
+ */
+ static public function deleteServerConfiguration($prefix) {
+ //just to be on the safe side
+ \OCP\User::checkAdminUser();
+
+ if(!in_array($prefix, self::getServerConfigurationPrefixes())) {
+ return false;
+ }
+
+ $query = \OCP\DB::prepare('
+ DELETE
+ FROM `*PREFIX*appconfig`
+ WHERE `configkey` LIKE ?
+ AND `appid` = "user_ldap"
+ AND `configkey` NOT IN ("enabled", "installed_version", "types", "bgjUpdateGroupsLastRun")
+ ');
+ $res = $query->execute(array($prefix.'%'));
+
+ if(\OCP\DB::isError($res)) {
+ return false;
+ }
+
+ if($res->numRows() == 0) {
+ return false;
+ }
+
+ return true;
+ }
+}
+
diff --git a/apps/user_ldap/lib/proxy.php b/apps/user_ldap/lib/proxy.php
new file mode 100644
index 00000000000..c80e2163475
--- /dev/null
+++ b/apps/user_ldap/lib/proxy.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * ownCloud – LDAP Backend Proxy
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@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 OCA\user_ldap\lib;
+
+abstract class Proxy {
+ static private $connectors = array();
+
+ public function __construct() {
+ $this->cache = \OC_Cache::getGlobalCache();
+ }
+
+ private function addConnector($configPrefix) {
+ self::$connectors[$configPrefix] = new \OCA\user_ldap\lib\Connection($configPrefix);
+ }
+
+ protected function getConnector($configPrefix) {
+ if(!isset(self::$connectors[$configPrefix])) {
+ $this->addConnector($configPrefix);
+ }
+ return self::$connectors[$configPrefix];
+ }
+
+ protected function getConnectors() {
+ return self::$connectors;
+ }
+
+ protected function getUserCacheKey($uid) {
+ return 'user-'.$uid.'-lastSeenOn';
+ }
+
+ protected function getGroupCacheKey($gid) {
+ return 'group-'.$gid.'-lastSeenOn';
+ }
+
+ abstract protected function callOnLastSeenOn($id, $method, $parameters);
+ abstract protected function walkBackends($id, $method, $parameters);
+
+ /**
+ * @brief Takes care of the request to the User backend
+ * @param $uid string, the uid connected to the request
+ * @param $method string, the method of the user backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the specified method
+ */
+ protected function handleRequest($id, $method, $parameters) {
+ if(!$result = $this->callOnLastSeenOn($id, $method, $parameters)) {
+ $result = $this->walkBackends($id, $method, $parameters);
+ }
+ return $result;
+ }
+
+ private function getCacheKey($key) {
+ $prefix = 'LDAP-Proxy-';
+ if(is_null($key)) {
+ return $prefix;
+ }
+ return $prefix.md5($key);
+ }
+
+ public function getFromCache($key) {
+ if(!$this->isCached($key)) {
+ return null;
+ }
+ $key = $this->getCacheKey($key);
+
+ return unserialize(base64_decode($this->cache->get($key)));
+ }
+
+ public function isCached($key) {
+ $key = $this->getCacheKey($key);
+ return $this->cache->hasKey($key);
+ }
+
+ public function writeToCache($key, $value) {
+ $key = $this->getCacheKey($key);
+ $value = base64_encode(serialize($value));
+ $this->cache->set($key, $value, '2592000');
+ }
+
+ public function clearCache() {
+ $this->cache->clear($this->getCacheKey(null));
+ }
+} \ No newline at end of file
diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php
index 58ec8e7f7a4..d5d2f648b38 100644
--- a/apps/user_ldap/settings.php
+++ b/apps/user_ldap/settings.php
@@ -23,58 +23,46 @@
OC_Util::checkAdminUser();
-$params = array('ldap_host', 'ldap_port', 'ldap_dn', 'ldap_agent_password', 'ldap_base', 'ldap_base_users', 'ldap_base_groups', 'ldap_userlist_filter', 'ldap_login_filter', 'ldap_group_filter', 'ldap_display_name', 'ldap_group_display_name', 'ldap_tls', 'ldap_turn_off_cert_check', 'ldap_nocase', 'ldap_quota_def', 'ldap_quota_attr', 'ldap_email_attr', 'ldap_group_member_assoc_attribute', 'ldap_cache_ttl', 'home_folder_naming_rule');
+$params = 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_login_filter', 'ldap_group_filter', 'ldap_display_name',
+ 'ldap_group_display_name', 'ldap_tls',
+ 'ldap_turn_off_cert_check', 'ldap_nocase', 'ldap_quota_def',
+ 'ldap_quota_attr', 'ldap_email_attr',
+ 'ldap_group_member_assoc_attribute', 'ldap_cache_ttl',
+ 'home_folder_naming_rule'
+ );
OCP\Util::addscript('user_ldap', 'settings');
OCP\Util::addstyle('user_ldap', 'settings');
-if ($_POST) {
- $clearCache = false;
- foreach($params as $param) {
- if(isset($_POST[$param])) {
- $clearCache = true;
- if('ldap_agent_password' == $param) {
- OCP\Config::setAppValue('user_ldap', $param, base64_encode($_POST[$param]));
- } elseif('home_folder_naming_rule' == $param) {
- $value = empty($_POST[$param]) ? 'opt:username' : 'attr:'.$_POST[$param];
- OCP\Config::setAppValue('user_ldap', $param, $value);
- } else {
- OCP\Config::setAppValue('user_ldap', $param, $_POST[$param]);
- }
- }
- elseif('ldap_tls' == $param) {
- // unchecked checkboxes are not included in the post paramters
- OCP\Config::setAppValue('user_ldap', $param, 0);
- }
- elseif('ldap_nocase' == $param) {
- OCP\Config::setAppValue('user_ldap', $param, 0);
- }
- elseif('ldap_turn_off_cert_check' == $param) {
- OCP\Config::setAppValue('user_ldap', $param, 0);
- }
- }
- if($clearCache) {
- $ldap = new \OCA\user_ldap\lib\Connection('user_ldap');
- $ldap->clearCache();
- }
+// fill template
+$tmpl = new OCP\Template('user_ldap', 'settings');
+
+$prefixes = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
+$scoHtml = '';
+$i = 1;
+$sel = ' selected';
+foreach($prefixes as $prefix) {
+ $scoHtml .= '<option value="'.$prefix.'"'.$sel.'>'.$i++.'. Server</option>';
+ $sel = '';
+}
+if(count($prefixes) == 0) {
+ $scoHtml .= '<option value="" selected>1. Server</option>';
}
+$tmpl->assign('serverConfigurationOptions', $scoHtml, false);
-// fill template
-$tmpl = new OCP\Template( 'user_ldap', 'settings');
-foreach($params as $param) {
- $value = OCP\Config::getAppValue('user_ldap', $param, '');
- $tmpl->assign($param, $value);
+// assign default values
+if(!isset($ldap)) {
+ $ldap = new \OCA\user_ldap\lib\Connection();
+}
+$defaults = $ldap->getDefaults();
+foreach($defaults as $key => $default) {
+ $tmpl->assign($key.'_default', $default);
}
-// settings with default values
-$tmpl->assign( 'ldap_port', OCP\Config::getAppValue('user_ldap', 'ldap_port', '389'));
-$tmpl->assign( 'ldap_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_display_name', 'uid'));
-$tmpl->assign( 'ldap_group_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_group_display_name', 'cn'));
-$tmpl->assign( 'ldap_group_member_assoc_attribute', OCP\Config::getAppValue('user_ldap', 'ldap_group_member_assoc_attribute', 'uniqueMember'));
-$tmpl->assign( 'ldap_agent_password', base64_decode(OCP\Config::getAppValue('user_ldap', 'ldap_agent_password')));
-$tmpl->assign( 'ldap_cache_ttl', OCP\Config::getAppValue('user_ldap', 'ldap_cache_ttl', '600'));
-$hfnr = OCP\Config::getAppValue('user_ldap', 'home_folder_naming_rule', 'opt:username');
-$hfnr = ($hfnr == 'opt:username') ? '' : substr($hfnr, strlen('attr:'));
-$tmpl->assign( 'home_folder_naming_rule', $hfnr, '');
+// $tmpl->assign();
return $tmpl->fetchPage();
diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php
index 8522d2f835c..c6f1834e013 100644
--- a/apps/user_ldap/templates/settings.php
+++ b/apps/user_ldap/templates/settings.php
@@ -8,35 +8,58 @@
echo '<p class="ldapwarning">'.$l->t('<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them.').'</p>';
}
if(!function_exists('ldap_connect')) {
- echo '<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>';
+ echo '<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>';
}
?>
<fieldset id="ldapSettings-1">
- <p><label for="ldap_host"><?php echo $l->t('Host');?></label><input type="text" id="ldap_host" name="ldap_host" value="<?php echo $_['ldap_host']; ?>" title="<?php echo $l->t('You can omit the protocol, except you require SSL. Then start with ldaps://');?>"></p>
- <p><label for="ldap_base"><?php echo $l->t('Base DN');?></label><input type="text" id="ldap_base" name="ldap_base" value="<?php echo $_['ldap_base']; ?>" title="<?php echo $l->t('You can specify Base DN for users and groups in the Advanced tab');?>" /></p>
- <p><label for="ldap_dn"><?php echo $l->t('User DN');?></label><input type="text" id="ldap_dn" name="ldap_dn" value="<?php echo $_['ldap_dn']; ?>" title="<?php echo $l->t('The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.');?>" /></p>
- <p><label for="ldap_agent_password"><?php echo $l->t('Password');?></label><input type="password" id="ldap_agent_password" name="ldap_agent_password" value="<?php echo $_['ldap_agent_password']; ?>" title="<?php echo $l->t('For anonymous access, leave DN and Password empty.');?>" /></p>
- <p><label for="ldap_login_filter"><?php echo $l->t('User Login Filter');?></label><input type="text" id="ldap_login_filter" name="ldap_login_filter" value="<?php echo $_['ldap_login_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.');?>" /><br /><small><?php echo $l->t('use %%uid placeholder, e.g. "uid=%%uid"');?></small></p>
- <p><label for="ldap_userlist_filter"><?php echo $l->t('User List Filter');?></label><input type="text" id="ldap_userlist_filter" name="ldap_userlist_filter" value="<?php echo $_['ldap_userlist_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving users.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=person".');?></small></p>
- <p><label for="ldap_group_filter"><?php echo $l->t('Group Filter');?></label><input type="text" id="ldap_group_filter" name="ldap_group_filter" value="<?php echo $_['ldap_group_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving groups.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=posixGroup".');?></small></p>
+ <p><label for="ldap_serverconfig_chooser"><?php echo $l->t('Server configuration');?></label><select id="ldap_serverconfig_chooser" name="ldap_serverconfig_chooser">
+ <?php echo $_['serverConfigurationOptions']; ?>
+ <option value="NEW"><?php echo $l->t('Add Server Configuration');?></option>
+ </select>
+ <button id="ldap_action_delete_configuration" name="ldap_action_delete_configuration">Delete Configuration</button>
+ </p>
+ <p><label for="ldap_host"><?php echo $l->t('Host');?></label><input type="text" id="ldap_host" name="ldap_host" data-default="<?php echo $_['ldap_host_default']; ?>" title="<?php echo $l->t('You can omit the protocol, except you require SSL. Then start with ldaps://');?>"></p>
+ <p><label for="ldap_base"><?php echo $l->t('Base DN');?></label><textarea id="ldap_base" name="ldap_base" placeholder="<?php echo $l->t('One Base DN per line');?>" title="<?php echo $l->t('You can specify Base DN for users and groups in the Advanced tab');?>" data-default="<?php echo $_['ldap_base_default']; ?>" ></textarea></p>
+ <p><label for="ldap_dn"><?php echo $l->t('User DN');?></label><input type="text" id="ldap_dn" name="ldap_dn" data-default="<?php echo $_['ldap_dn_default']; ?>" title="<?php echo $l->t('The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.');?>" /></p>
+ <p><label for="ldap_agent_password"><?php echo $l->t('Password');?></label><input type="password" id="ldap_agent_password" name="ldap_agent_password" data-default="<?php echo $_['ldap_agent_password_default']; ?>" title="<?php echo $l->t('For anonymous access, leave DN and Password empty.');?>" /></p>
+ <p><label for="ldap_login_filter"><?php echo $l->t('User Login Filter');?></label><input type="text" id="ldap_login_filter" name="ldap_login_filter" data-default="<?php echo $_['ldap_login_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.');?>" /><br /><small><?php echo $l->t('use %%uid placeholder, e.g. "uid=%%uid"');?></small></p>
+ <p><label for="ldap_userlist_filter"><?php echo $l->t('User List Filter');?></label><input type="text" id="ldap_userlist_filter" name="ldap_userlist_filter" data-default="<?php echo $_['ldap_userlist_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving users.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=person".');?></small></p>
+ <p><label for="ldap_group_filter"><?php echo $l->t('Group Filter');?></label><input type="text" id="ldap_group_filter" name="ldap_group_filter" data-default="<?php echo $_['ldap_group_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving groups.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=posixGroup".');?></small></p>
</fieldset>
<fieldset id="ldapSettings-2">
- <p><label for="ldap_port"><?php echo $l->t('Port');?></label><input type="text" id="ldap_port" name="ldap_port" value="<?php echo $_['ldap_port']; ?>" /></p>
- <p><label for="ldap_base_users"><?php echo $l->t('Base User Tree');?></label><input type="text" id="ldap_base_users" name="ldap_base_users" value="<?php echo $_['ldap_base_users']; ?>" /></p>
- <p><label for="ldap_base_groups"><?php echo $l->t('Base Group Tree');?></label><input type="text" id="ldap_base_groups" name="ldap_base_groups" value="<?php echo $_['ldap_base_groups']; ?>" /></p>
- <p><label for="ldap_group_member_assoc_attribute"><?php echo $l->t('Group-Member association');?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute"><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'uniqueMember')) echo ' selected'; ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'memberUid')) echo ' selected'; ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'member')) echo ' selected'; ?>>member (AD)</option></select></p>
- <p><label for="ldap_tls"><?php echo $l->t('Use TLS');?></label><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1"<?php if ($_['ldap_tls']) echo ' checked'; ?> title="<?php echo $l->t('Do not use it for SSL connections, it will fail.');?>" /></p>
- <p><label for="ldap_nocase"><?php echo $l->t('Case insensitve LDAP server (Windows)');?></label> <input type="checkbox" id="ldap_nocase" name="ldap_nocase" value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) echo ' checked'; ?>></p>
- <p><label for="ldap_turn_off_cert_check"><?php echo $l->t('Turn off SSL certificate validation.');?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php echo $l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your ownCloud server.');?>" value="1"<?php if ($_['ldap_turn_off_cert_check']) echo ' checked'; ?>><br/><small><?php echo $l->t('Not recommended, use for testing only.');?></small></p>
- <p><label for="ldap_display_name"><?php echo $l->t('User Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" value="<?php echo $_['ldap_display_name']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the user`s ownCloud name.');?>" /></p>
- <p><label for="ldap_group_display_name"><?php echo $l->t('Group Display Name Field');?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" value="<?php echo $_['ldap_group_display_name']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the groups`s ownCloud name.');?>" /></p>
- <p><label for="ldap_quota_attr">Quota Field</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" value="<?php echo $_['ldap_quota_attr']; ?>" /></p>
- <p><label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" value="<?php if (isset($_['ldap_quota_def'])) echo $_['ldap_quota_def']; ?>" title="<?php echo $l->t('in bytes');?>" /></p>
- <p><label for="ldap_email_attr">Email Field</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" value="<?php echo $_['ldap_email_attr']; ?>" /></p>
- <p><label for="ldap_cache_ttl">Cache Time-To-Live</label><input type="text" id="ldap_cache_ttl" name="ldap_cache_ttl" value="<?php echo $_['ldap_cache_ttl']; ?>" title="<?php echo $l->t('in seconds. A change empties the cache.');?>" /></p>
- <p><label for="home_folder_naming_rule">User Home Folder Naming Rule</label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" value="<?php echo $_['home_folder_naming_rule']; ?>" title="<?php echo $l->t('Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute.');?>" /></p>
+ <div id="ldapAdvancedAccordion">
+ <h3><?php echo $l->t('Connection Settings');?></h3>
+ <div>
+ <p><label for="ldap_configuration_active"><?php echo $l->t('Configuration Active');?></label><input type="checkbox" id="ldap_configuration_active" name="ldap_configuration_active" value="1" data-default="<?php echo $_['ldap_configuration_active_default']; ?>" title="<?php echo $l->t('When unchecked, this configuration will be skipped.');?>" /></p>
+ <p><label for="ldap_port"><?php echo $l->t('Port');?></label><input type="number" id="ldap_port" name="ldap_port" data-default="<?php echo $_['ldap_port_default']; ?>" /></p>
+ <p><label for="ldap_backup_host"><?php echo $l->t('Backup (Replica) Host');?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php echo $_['ldap_backup_host_default']; ?>" title="<?php echo $l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.');?>"></p>
+ <p><label for="ldap_backup_port"><?php echo $l->t('Backup (Replica) Port');?></label><input type="number" id="ldap_backup_port" name="ldap_backup_port" data-default="<?php echo $_['ldap_backup_port_default']; ?>" /></p>
+ <p><label for="ldap_override_main_server"><?php echo $l->t('Disable Main Server');?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php echo $_['ldap_override_main_server_default']; ?>" title="<?php echo $l->t('When switched on, ownCloud will only connect to the replica server.');?>" /></p>
+ <p><label for="ldap_tls"><?php echo $l->t('Use TLS');?></label><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1" data-default="<?php echo $_['ldap_tls_default']; ?>" title="<?php echo $l->t('Do not use it additionally for LDAPS connections, it will fail.');?>" /></p>
+ <p><label for="ldap_nocase"><?php echo $l->t('Case insensitve LDAP server (Windows)');?></label><input type="checkbox" id="ldap_nocase" name="ldap_nocase" data-default="<?php echo $_['ldap_nocase_default']; ?>" value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) echo ' checked'; ?>></p>
+ <p><label for="ldap_turn_off_cert_check"><?php echo $l->t('Turn off SSL certificate validation.');?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php echo $l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your ownCloud server.');?>" data-default="<?php echo $_['ldap_turn_off_cert_check_default']; ?>" value="1"><br/><small><?php echo $l->t('Not recommended, use for testing only.');?></small></p>
+ <p><label for="ldap_cache_ttl">Cache Time-To-Live</label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" title="<?php echo $l->t('in seconds. A change empties the cache.');?>" data-default="<?php echo $_['ldap_cache_ttl_default']; ?>" /></p>
+ </div>
+ <h3><?php echo $l->t('Directory Settings');?></h3>
+ <div>
+ <p><label for="ldap_display_name"><?php echo $l->t('User Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php echo $_['ldap_display_name_default']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the user`s ownCloud name.');?>" /></p>
+ <p><label for="ldap_base_users"><?php echo $l->t('Base User Tree');?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php echo $l->t('One User Base DN per line');?>" data-default="<?php echo $_['ldap_base_users_default']; ?>" title="<?php echo $l->t('Base User Tree');?>"></textarea></p>
+ <p><label for="ldap_attributes_for_user_search"><?php echo $l->t('User Search Attributes');?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php echo $l->t('Optional; one attribute per line');?>" data-default="<?php echo $_['ldap_attributes_for_user_search_default']; ?>" title="<?php echo $l->t('User Search Attributes');?>"></textarea></p>
+ <p><label for="ldap_group_display_name"><?php echo $l->t('Group Display Name Field');?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php echo $_['ldap_group_display_name_default']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the groups`s ownCloud name.');?>" /></p>
+ <p><label for="ldap_base_groups"><?php echo $l->t('Base Group Tree');?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php echo $l->t('One Group Base DN per line');?>" data-default="<?php echo $_['ldap_base_groups_default']; ?>" title="<?php echo $l->t('Base Group Tree');?>"></textarea></p>
+ <p><label for="ldap_attributes_for_group_search"><?php echo $l->t('Group Search Attributes');?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php echo $l->t('Optional; one attribute per line');?>" data-default="<?php echo $_['ldap_attributes_for_group_search_default']; ?>" title="<?php echo $l->t('Group Search Attributes');?>"></textarea></p>
+ <p><label for="ldap_group_member_assoc_attribute"><?php echo $l->t('Group-Member association');?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php echo $_['ldap_group_member_assoc_attribute_default']; ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'uniqueMember')) echo ' selected'; ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'memberUid')) echo ' selected'; ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'member')) echo ' selected'; ?>>member (AD)</option></select></p>
+ </div>
+ <h3><?php echo $l->t('Special Attributes');?></h3>
+ <div>
+ <p><label for="ldap_quota_attr">Quota Field</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" data-default="<?php echo $_['ldap_quota_attr_default']; ?>"/></p>
+ <p><label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" data-default="<?php echo $_['ldap_quota_def_default']; ?>" title="<?php echo $l->t('in bytes');?>" /></p>
+ <p><label for="ldap_email_attr">Email Field</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" data-default="<?php echo $_['ldap_email_attr_default']; ?>" /></p>
+ <p><label for="home_folder_naming_rule">User Home Folder Naming Rule</label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" title="<?php echo $l->t('Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute.');?>" data-default="<?php echo $_['home_folder_naming_rule_default']; ?>" /></p>
+ </div>
+ </div>
</fieldset>
- <input type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection">Test Configuration</button> <a href="http://owncloud.org/support/ldap-backend/" target="_blank"><img src="<?php echo OCP\Util::imagePath('', 'actions/info.png'); ?>" style="height:1.75ex" /> <?php echo $l->t('Help');?></a>
+ <input id="ldap_submit" type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection">Test Configuration</button> <a href="http://doc.owncloud.org/server/5.0/admin_manual/auth_ldap.html" target="_blank"><img src="<?php echo OCP\Util::imagePath('', 'actions/info.png'); ?>" style="height:1.75ex" /> <?php echo $l->t('Help');?></a>
</div>
</form>
diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php
index f99902d32f5..ae635597b71 100644
--- a/apps/user_ldap/tests/group_ldap.php
+++ b/apps/user_ldap/tests/group_ldap.php
@@ -20,7 +20,7 @@
*
*/
-class Test_Group_Ldap extends UnitTestCase {
+class Test_Group_Ldap extends PHPUnit_Framework_TestCase {
function setUp() {
OC_Group::clearBackends();
}
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 6591d1d5fee..0962756228c 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -116,10 +116,9 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
if($limit <= 0) {
$limit = null;
}
- $search = empty($search) ? '*' : '*'.$search.'*';
$filter = $this->combineFilterWithAnd(array(
$this->connection->ldapUserFilter,
- $this->connection->ldapUserDisplayName.'='.$search
+ $this->getFilterPartForUserSearch($search)
));
\OCP\Util::writeLog('user_ldap', 'getUsers: Options: search '.$search.' limit '.$limit.' offset '.$offset.' Filter: '.$filter, \OCP\Util::DEBUG);
@@ -156,6 +155,7 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
}
$this->connection->writeToCache('userExists'.$uid, true);
+ $this->updateQuota($dn);
return true;
}
@@ -171,41 +171,82 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
}
/**
- * @brief determine the user's home directory
- * @param string $uid the owncloud username
+ * @brief get the user's home directory
+ * @param string $uid the username
* @return boolean
*/
- private function determineHomeDir($uid) {
+ public function getHome($uid) {
+ $cacheKey = 'getHome'.$uid;
+ if($this->connection->isCached($cacheKey)) {
+ return $this->connection->getFromCache($cacheKey);
+ }
if(strpos($this->connection->homeFolderNamingRule, 'attr:') === 0) {
$attr = substr($this->connection->homeFolderNamingRule, strlen('attr:'));
$homedir = $this->readAttribute($this->username2dn($uid), $attr);
- if($homedir) {
- $homedir = \OCP\Config::getSystemValue( "datadirectory", \OC::$SERVERROOT."/data" ) . '/' . $homedir[0];
- \OCP\Config::setUserValue($uid, 'user_ldap', 'homedir', $homedir);
+ if($homedir && isset($homedir[0])) {
+ $path = $homedir[0];
+ //if attribute's value is an absolute path take this, otherwise append it to data dir
+ //check for / at the beginning or pattern c:\ resp. c:/
+ if(
+ '/' == $path[0]
+ || (3 < strlen($path) && ctype_alpha($path[0]) && $path[1] == ':' && ('\\' == $path[2] || '/' == $path[2]))
+ ) {
+ $homedir = $path;
+ } else {
+ $homedir = \OCP\Config::getSystemValue('datadirectory', \OC::$SERVERROOT.'/data' ) . '/' . $homedir[0];
+ }
+ $this->connection->writeToCache($cacheKey, $homedir);
return $homedir;
}
}
- //fallback and default: username
- $homedir = \OCP\Config::getSystemValue( "datadirectory", \OC::$SERVERROOT."/data" ) . '/' . $uid;
- \OCP\Config::setUserValue($uid, 'user_ldap', 'homedir', $homedir);
- return $homedir;
+ //false will apply default behaviour as defined and done by OC_User
+ $this->connection->writeToCache($cacheKey, false);
+ return false;
}
/**
- * @brief get the user's home directory
- * @param string $uid the username
- * @return boolean
- */
- public function getHome($uid) {
- if($this->userExists($uid)) {
- $homedir = \OCP\Config::getUserValue($uid, 'user_ldap', 'homedir', false);
- if(!$homedir) {
- $homedir = $this->determineHomeDir($uid);
- }
- return $homedir;
+ * @brief get display name of the user
+ * @param $uid user ID of the user
+ * @return display name
+ */
+ public function getDisplayName($uid) {
+ $cacheKey = 'getDisplayName'.$uid;
+ if(!is_null($displayName = $this->connection->getFromCache($cacheKey))) {
+ return $displayName;
}
- return false;
+
+ $displayName = $this->readAttribute(
+ $this->username2dn($uid),
+ $this->connection->ldapUserDisplayName);
+
+ if($displayName && (count($displayName) > 0)) {
+ $this->connection->writeToCache($cacheKey, $displayName);
+ return $displayName[0];
+ }
+
+ return null;
+ }
+
+ /**
+ * @brief Get a list of all display names
+ * @returns array with all displayNames (value) and the correspondig uids (key)
+ *
+ * Get a list of all display names and user ids.
+ */
+ public function getDisplayNames($search = '', $limit = null, $offset = null) {
+ $cacheKey = 'getDisplayNames-'.$search.'-'.$limit.'-'.$offset;
+ if(!is_null($displayNames = $this->connection->getFromCache($cacheKey))) {
+ return $displayNames;
+ }
+
+ $displayNames = array();
+ $users = $this->getUsers($search, $limit, $offset);
+ foreach ($users as $user) {
+ $displayNames[$user] = $this->getDisplayName($user);
+ }
+ $this->connection->writeToCache($cacheKey, $displayNames);
+ return $displayNames;
}
/**
diff --git a/apps/user_ldap/user_proxy.php b/apps/user_ldap/user_proxy.php
new file mode 100644
index 00000000000..a94be3354fc
--- /dev/null
+++ b/apps/user_ldap/user_proxy.php
@@ -0,0 +1,186 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Artuhr Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@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 OCA\user_ldap;
+
+class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
+ private $backends = array();
+ private $refBackend = null;
+
+ /**
+ * @brief Constructor
+ * @param $serverConfigPrefixes array containing the config Prefixes
+ */
+ public function __construct($serverConfigPrefixes) {
+ parent::__construct();
+ foreach($serverConfigPrefixes as $configPrefix) {
+ $this->backends[$configPrefix] = new \OCA\user_ldap\USER_LDAP();
+ $connector = $this->getConnector($configPrefix);
+ $this->backends[$configPrefix]->setConnector($connector);
+ if(is_null($this->refBackend)) {
+ $this->refBackend = &$this->backends[$configPrefix];
+ }
+ }
+ }
+
+ /**
+ * @brief Tries the backends one after the other until a positive result is returned from the specified method
+ * @param $uid string, the uid connected to the request
+ * @param $method string, the method of the user backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the method or false
+ */
+ protected function walkBackends($uid, $method, $parameters) {
+ $cacheKey = $this->getUserCacheKey($uid);
+ foreach($this->backends as $configPrefix => $backend) {
+ if($result = call_user_func_array(array($backend, $method), $parameters)) {
+ $this->writeToCache($cacheKey, $configPrefix);
+ return $result;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief Asks the backend connected to the server that supposely takes care of the uid from the request.
+ * @param $uid string, the uid connected to the request
+ * @param $method string, the method of the user backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the method or false
+ */
+ protected function callOnLastSeenOn($uid, $method, $parameters) {
+ $cacheKey = $this->getUserCacheKey($uid);
+ $prefix = $this->getFromCache($cacheKey);
+ //in case the uid has been found in the past, try this stored connection first
+ if(!is_null($prefix)) {
+ if(isset($this->backends[$prefix])) {
+ $result = call_user_func_array(array($this->backends[$prefix], $method), $parameters);
+ if(!$result) {
+ //not found here, reset cache to null
+ $this->writeToCache($cacheKey, null);
+ }
+ return $result;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief Check if backend implements actions
+ * @param $actions bitwise-or'ed actions
+ * @returns boolean
+ *
+ * Returns the supported actions as int to be
+ * compared with OC_USER_BACKEND_CREATE_USER etc.
+ */
+ public function implementsActions($actions) {
+ //it's the same across all our user backends obviously
+ return $this->refBackend->implementsActions($actions);
+ }
+
+ /**
+ * @brief Get a list of all users
+ * @returns array with all uids
+ *
+ * Get a list of all users.
+ */
+ public function getUsers($search = '', $limit = 10, $offset = 0) {
+ //we do it just as the /OC_User implementation: do not play around with limit and offset but ask all backends
+ $users = array();
+ foreach($this->backends as $backend) {
+ $backendUsers = $backend->getUsers($search, $limit, $offset);
+ if (is_array($backendUsers)) {
+ $users = array_merge($users, $backendUsers);
+ }
+ }
+ return $users;
+ }
+
+ /**
+ * @brief check if a user exists
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function userExists($uid) {
+ return $this->handleRequest($uid, 'userExists', array($uid));
+ }
+
+ /**
+ * @brief Check if the password is correct
+ * @param $uid The username
+ * @param $password The password
+ * @returns true/false
+ *
+ * Check if the password is correct without logging in the user
+ */
+ public function checkPassword($uid, $password) {
+ return $this->handleRequest($uid, 'checkPassword', array($uid, $password));
+ }
+
+ /**
+ * @brief get the user's home directory
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function getHome($uid) {
+ return $this->handleRequest($uid, 'getHome', array($uid));
+ }
+
+ /**
+ * @brief get display name of the user
+ * @param $uid user ID of the user
+ * @return display name
+ */
+ public function getDisplayName($uid) {
+ return $this->handleRequest($uid, 'getDisplayName', array($uid));
+ }
+
+ /**
+ * @brief Get a list of all display names
+ * @returns array with all displayNames (value) and the corresponding uids (key)
+ *
+ * Get a list of all display names and user ids.
+ */
+ public function getDisplayNames($search = '', $limit = null, $offset = null) {
+ //we do it just as the /OC_User implementation: do not play around with limit and offset but ask all backends
+ $users = array();
+ foreach($this->backends as $backend) {
+ $backendUsers = $backend->getDisplayNames($search, $limit, $offset);
+ if (is_array($backendUsers)) {
+ $users = array_merge($users, $backendUsers);
+ }
+ }
+ return $users;
+ }
+
+ /**
+ * @brief delete a user
+ * @param $uid The username of the user to delete
+ * @returns true/false
+ *
+ * Deletes a user
+ */
+ public function deleteUser($uid) {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/apps/user_webdavauth/appinfo/info.xml b/apps/user_webdavauth/appinfo/info.xml
index e51f2e9ec4f..f62f03577e8 100755
--- a/apps/user_webdavauth/appinfo/info.xml
+++ b/apps/user_webdavauth/appinfo/info.xml
@@ -7,7 +7,7 @@
This app is not compatible to the LDAP user and group backend.</description>
<licence>AGPL</licence>
<author>Frank Karlitschek</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<types>
<authentication/>
diff --git a/apps/user_webdavauth/l10n/bn_BD.php b/apps/user_webdavauth/l10n/bn_BD.php
new file mode 100644
index 00000000000..5366552efae
--- /dev/null
+++ b/apps/user_webdavauth/l10n/bn_BD.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"URL: http://" => "URL:http://"
+);
diff --git a/apps/user_webdavauth/l10n/ca.php b/apps/user_webdavauth/l10n/ca.php
index 84a6c599e78..7ac540f2130 100644
--- a/apps/user_webdavauth/l10n/ca.php
+++ b/apps/user_webdavauth/l10n/ca.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Autenticació WebDAV",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud enviarà les credencials d'usuari a aquesta URL. S'interpretarà http 401 i http 403 com a credencials incorrectes i tots els altres codis com a credencials correctes."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud enviarà les credencials d'usuari a aquesta URL. Aquest endollable en comprova la resposta i interpretarà els codis d'estat 401 i 403 com a credencials no vàlides, i qualsevol altra resposta com a credencials vàlides."
);
diff --git a/apps/user_webdavauth/l10n/cs_CZ.php b/apps/user_webdavauth/l10n/cs_CZ.php
index 5cb9b4c3704..9bd4c96a2bb 100644
--- a/apps/user_webdavauth/l10n/cs_CZ.php
+++ b/apps/user_webdavauth/l10n/cs_CZ.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Ověření WebDAV",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud odeÅ¡le pÅ™ihlaÅ¡ovací údaje uživatele na URL a z návratové hodnoty urÄí stav pÅ™ihlášení. Http 401 a 403 vyhodnotí jako neplatné údaje a vÅ¡echny ostatní jako úspěšné pÅ™ihlášení."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud odeÅ¡le uživatelské údaje na zadanou URL. Plugin zkontroluje odpovÄ›Ä a považuje návratovou hodnotu HTTP 401 a 403 za neplatné údaje a vÅ¡echny ostatní hodnoty jako platné pÅ™ihlaÅ¡ovací údaje."
);
diff --git a/apps/user_webdavauth/l10n/da.php b/apps/user_webdavauth/l10n/da.php
index 7d9ee1d5b29..b268d3e15d0 100644
--- a/apps/user_webdavauth/l10n/da.php
+++ b/apps/user_webdavauth/l10n/da.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV-godkendelse",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud vil sende brugeroplysningerne til denne webadresse er fortolker http 401 og http 403 som brugeroplysninger forkerte og alle andre koder som brugeroplysninger korrekte."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud vil sende brugerens oplysninger til denne URL. Plugin'et registrerer responsen og fortolker HTTP-statuskoder 401 og 403 som ugyldige oplysninger, men alle andre besvarelser som gyldige oplysninger."
);
diff --git a/apps/user_webdavauth/l10n/de.php b/apps/user_webdavauth/l10n/de.php
index 8589dc0c4fd..f893bddc71c 100644
--- a/apps/user_webdavauth/l10n/de.php
+++ b/apps/user_webdavauth/l10n/de.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV Authentifikation",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud wird die Logindaten zu dieser URL senden. http 401 und http 403 werden als falsche Logindaten interpretiert und alle anderen Codes als korrekte Logindaten."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud wird die Benutzer-Anmeldedaten an diese URL schicken. Dieses Plugin prüft die Anmeldedaten auf ihre Gültigkeit und interpretiert die HTTP Statusfehler 401 und 403 als ungültige, sowie alle Anderen als gültige Anmeldedaten."
);
diff --git a/apps/user_webdavauth/l10n/de_DE.php b/apps/user_webdavauth/l10n/de_DE.php
index 3d73dccfe8e..8f67575fc0f 100644
--- a/apps/user_webdavauth/l10n/de_DE.php
+++ b/apps/user_webdavauth/l10n/de_DE.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV Authentifizierung",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud "
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud sendet die Benutzerdaten an diese URL. Dieses Plugin prüft die Antwort und wird die Statuscodes 401 und 403 als ungültige Daten interpretieren und alle anderen Antworten als gültige Daten."
);
diff --git a/apps/user_webdavauth/l10n/el.php b/apps/user_webdavauth/l10n/el.php
index bf4c11af64c..951709c4d64 100644
--- a/apps/user_webdavauth/l10n/el.php
+++ b/apps/user_webdavauth/l10n/el.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Αυθεντικοποίηση μέσω WebDAV ",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "Το ownCloud θα στείλει τα συνθηματικά χÏήστη σε αυτό το URL, μεταφÏάζοντας τα http 401 και http 403 ως λανθασμένα συνθηματικά και όλους τους άλλους κωδικοÏÏ‚ ως σωστά συνθηματικά."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Το ownCloud θα στείλει τα διαπιστευτήÏια χÏήστη σε αυτό το URL. Αυτό το plugin ελέγχει την απάντηση και την μετατÏέπει σε HTTP κωδικό κατάστασης 401 και 403 για μη έγκυÏα, όλες οι υπόλοιπες απαντήσεις είναι έγκυÏες."
);
diff --git a/apps/user_webdavauth/l10n/eo.php b/apps/user_webdavauth/l10n/eo.php
index 245a5101341..d945f181e6b 100644
--- a/apps/user_webdavauth/l10n/eo.php
+++ b/apps/user_webdavauth/l10n/eo.php
@@ -1,3 +1,4 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV-aÅ­tentigo",
"URL: http://" => "URL: http://"
);
diff --git a/apps/user_webdavauth/l10n/es.php b/apps/user_webdavauth/l10n/es.php
index 3975b04cbc1..103c3738e2d 100644
--- a/apps/user_webdavauth/l10n/es.php
+++ b/apps/user_webdavauth/l10n/es.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Autenticación de WevDAV",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud enviará al usuario las interpretaciones 401 y 403 a esta URL como incorrectas y todas las otras credenciales como correctas"
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "onwCloud enviará las credenciales de usuario a esta URL. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas."
);
diff --git a/apps/user_webdavauth/l10n/es_AR.php b/apps/user_webdavauth/l10n/es_AR.php
index 0606d3a8eb4..103c3738e2d 100644
--- a/apps/user_webdavauth/l10n/es_AR.php
+++ b/apps/user_webdavauth/l10n/es_AR.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Autenticación de WevDAV",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud enviará las credenciales a esta dirección, si son interpretadas como http 401 o http 403 las credenciales son erroneas; todos los otros códigos indican que las credenciales son correctas."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "onwCloud enviará las credenciales de usuario a esta URL. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas."
);
diff --git a/apps/user_webdavauth/l10n/eu.php b/apps/user_webdavauth/l10n/eu.php
index bbda9f10ba0..d792c1588bb 100644
--- a/apps/user_webdavauth/l10n/eu.php
+++ b/apps/user_webdavauth/l10n/eu.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV Autentikazioa",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud erabiltzailearen kredentzialak helbide honetara bidaliko ditu. http 401 eta http 403 kredentzial ez zuzenak bezala hartuko dira eta beste kode guztiak kredentzial zuzentzat hartuko dira."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloudek erabiltzailearen kredentzialak URL honetara bidaliko ditu. Plugin honek erantzuna aztertzen du eta HTTP 401 eta 403 egoera kodeak baliogabezko kredentzialtzat hartuko ditu, beste erantzunak kredentzial egokitzat hartuko dituelarik."
);
diff --git a/apps/user_webdavauth/l10n/fr.php b/apps/user_webdavauth/l10n/fr.php
index 238c8d3a2fb..9d528a3a9d2 100644
--- a/apps/user_webdavauth/l10n/fr.php
+++ b/apps/user_webdavauth/l10n/fr.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Authentification WebDAV",
"URL: http://" => "URL : http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "Owncloud enverra les identifiants de sécurité de l'utilisateur à cet URL et interprète les http 401 et 403 comme des erreurs d'identification et tous les autres codes seront considérés comme une identification valide."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud enverra les informations de connexion à cette adresse. Ce module complémentaire analyse le code réponse HTTP et considère tout code différent des codes 401 et 403 comme associé à une authentification correcte."
);
diff --git a/apps/user_webdavauth/l10n/gl.php b/apps/user_webdavauth/l10n/gl.php
index fa81db333d4..f63a7cb0ce8 100644
--- a/apps/user_webdavauth/l10n/gl.php
+++ b/apps/user_webdavauth/l10n/gl.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Autenticación WebDAV",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud enviará as credenciais do usuario a este URL, http 401 e http 403 interpretanse como credenciais incorrectas e todos os outros códigos como credenciais correctas."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud enviará as credenciais do usuario a este URL. Este engadido comproba a resposta e interpretará os códigos de estado HTTP 401 e 403 como credenciais incorrectas, e todas as outras respostas como credenciais correctas."
);
diff --git a/apps/user_webdavauth/l10n/hu_HU.php b/apps/user_webdavauth/l10n/hu_HU.php
index 75a23ed7be4..64352801142 100644
--- a/apps/user_webdavauth/l10n/hu_HU.php
+++ b/apps/user_webdavauth/l10n/hu_HU.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV hitelesítés",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "Az ownCloud rendszer erre a címre fogja elküldeni a felhasználók bejelentkezési adatait. Ha 401-es vagy 403-as http kódot kap vissza, azt sikertelen azonosításként fogja értelmezni, minden más kódot sikeresnek fog tekinteni."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Az ownCloud elküldi a felhasználói fiók adatai a következő URL-re. Ez a bővítőmodul leellenőrzi a választ és ha a HTTP hibakód nem 401 vagy 403 azaz érvénytelen hitelesítő, akkor minden más válasz érvényes lesz."
);
diff --git a/apps/user_webdavauth/l10n/id.php b/apps/user_webdavauth/l10n/id.php
new file mode 100644
index 00000000000..4324ee8ff52
--- /dev/null
+++ b/apps/user_webdavauth/l10n/id.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Otentikasi WebDAV",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud akan mengirimkan informasi pengguna ke URL ini. Pengaya akan mengecek respon dan menginterpretasikan kode status HTTP 401 serta 403 sebagai informasi yang keliru, sedangkan respon lainnya dianggap benar."
+);
diff --git a/apps/user_webdavauth/l10n/is.php b/apps/user_webdavauth/l10n/is.php
index 13d9a1fe8f4..8fe0d974b32 100644
--- a/apps/user_webdavauth/l10n/is.php
+++ b/apps/user_webdavauth/l10n/is.php
@@ -1,4 +1,3 @@
<?php $TRANSLATIONS = array(
-"URL: http://" => "Vefslóð: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud mun senda auðkenni notenda á þessa vefslóð og túkla svörin http 401 og http 403 sem rangar auðkenniupplýsingar og öll önnur svör sem rétt."
+"URL: http://" => "Vefslóð: http://"
);
diff --git a/apps/user_webdavauth/l10n/it.php b/apps/user_webdavauth/l10n/it.php
index b0abf2f2082..a7cd6e8e4b4 100644
--- a/apps/user_webdavauth/l10n/it.php
+++ b/apps/user_webdavauth/l10n/it.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Autenticazione WebDAV",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud invierà le credenziali dell'utente a questo URL. Interpreta i codici http 401 e http 403 come credenziali errate e tutti gli altri codici come credenziali corrette."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud invierà le credenziali dell'utente a questo URL. Questa estensione controlla la risposta e interpreta i codici di stato 401 e 403 come credenziali non valide, e tutte le altre risposte come credenziali valide."
);
diff --git a/apps/user_webdavauth/l10n/ja_JP.php b/apps/user_webdavauth/l10n/ja_JP.php
index 8643805ffcc..1cd14a03c72 100644
--- a/apps/user_webdavauth/l10n/ja_JP.php
+++ b/apps/user_webdavauth/l10n/ja_JP.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV èªè¨¼",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloudã®ã“ã®URLã¸ã®ãƒ¦ãƒ¼ã‚¶è³‡æ ¼æƒ…å ±ã®é€ä¿¡ã¯ã€è³‡æ ¼æƒ…å ±ãŒé–“é•ã£ã¦ã„ã‚‹å ´åˆã¯HTTP401ã‚‚ã—ãã¯403ã‚’è¿”ã—ã€æ­£ã—ã„å ´åˆã¯å…¨ã¦ã®ã‚³ãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚"
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloudã¯ã“ã®URLã«ãƒ¦ãƒ¼ã‚¶è³‡æ ¼æƒ…報をé€ä¿¡ã—ã¾ã™ã€‚ã“ã®ãƒ—ラグインã¯å¿œç­”ã‚’ãƒã‚§ãƒƒã‚¯ã—ã€HTTP状態コード㌠401 㨠403 ã®å ´åˆã¯ç„¡åйãªè³‡æ ¼æƒ…å ±ã¨ã—ã€ä»–ã®å¿œç­”ã¯ã™ã¹ã¦æœ‰åйãªè³‡æ ¼æƒ…å ±ã¨ã—ã¦å‡¦ç†ã—ã¾ã™ã€‚"
);
diff --git a/apps/user_webdavauth/l10n/ko.php b/apps/user_webdavauth/l10n/ko.php
index a806df750f7..578ff35e721 100644
--- a/apps/user_webdavauth/l10n/ko.php
+++ b/apps/user_webdavauth/l10n/ko.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV ì¸ì¦",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud는 ì´ URL로 유저 ì¸ì¦ì„ 보내게 ë˜ë©°, http 401 ê³¼ http 403ì€ ì¸ì¦ 오류로, ê·¸ 외 코드는 ì¸ì¦ì´ 올바른 것으로 í•´ì„합니다."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloudì—서 ì´ URL로 ì‚¬ìš©ìž ì¸ì¦ 정보를 보냅니다. ì´ í”ŒëŸ¬ê·¸ì¸ì€ ì‘ë‹µì„ í™•ì¸í•˜ì—¬ HTTP ìƒíƒœ 코드 401ì´ë‚˜ 403ì´ ëŒì•„온 ê²½ìš°ì— ìž˜ëª»ëœ ì¸ì¦ 정보로 간주합니다. 다른 모든 ìƒíƒœ 코드는 올바른 ì¸ì¦ 정보로 간주합니다."
);
diff --git a/apps/user_webdavauth/l10n/lv.php b/apps/user_webdavauth/l10n/lv.php
new file mode 100644
index 00000000000..d0043df9f07
--- /dev/null
+++ b/apps/user_webdavauth/l10n/lv.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV autentifikÄcija",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud sÅ«tÄ«s lietotÄja akreditÄcijas datus uz Å¡o URL. Å is spraudnis pÄrbauda atbildi un interpretÄ“ HTTP statusa kodus 401 un 403 kÄ nederÄ«gus akreditÄcijas datus un visas citas atbildes kÄ derÄ«gus akreditÄcijas datus."
+);
diff --git a/apps/user_webdavauth/l10n/nl.php b/apps/user_webdavauth/l10n/nl.php
index 687442fb665..7d1bb33923e 100644
--- a/apps/user_webdavauth/l10n/nl.php
+++ b/apps/user_webdavauth/l10n/nl.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV authenticatie",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud zal de inloggegevens naar deze URL als geïnterpreteerde http 401 en http 403 als de inloggegevens onjuist zijn. Andere codes als de inloggegevens correct zijn."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud stuurt de inloggegevens naar deze URL. Deze plugin controleert het antwoord en interpreteert de HTTP statuscodes 401 als 403 als ongeldige inloggegevens, maar alle andere antwoorden als geldige inloggegevens."
);
diff --git a/apps/user_webdavauth/l10n/pl.php b/apps/user_webdavauth/l10n/pl.php
index 245a5101341..4887e935316 100644
--- a/apps/user_webdavauth/l10n/pl.php
+++ b/apps/user_webdavauth/l10n/pl.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"URL: http://" => "URL: http://"
+"WebDAV Authentication" => "Uwierzytelnienie WebDAV",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud wyśle dane uwierzytelniające do tego URL. Ten plugin sprawdza odpowiedź i zinterpretuje kody HTTP 401 oraz 403 jako nieprawidłowe dane uwierzytelniające, a każdy inny kod odpowiedzi jako poprawne dane."
);
diff --git a/apps/user_webdavauth/l10n/pt_BR.php b/apps/user_webdavauth/l10n/pt_BR.php
index 991c746a221..6ddd00ccc3e 100644
--- a/apps/user_webdavauth/l10n/pt_BR.php
+++ b/apps/user_webdavauth/l10n/pt_BR.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"WebDAV URL: http://" => "URL do WebDAV: http://"
+"WebDAV Authentication" => "Autenticação WebDAV",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "O ownCloud enviará as credenciais do usuário para esta URL. Este plugin verifica a resposta e interpreta o os códigos de status do HTTP 401 e 403 como credenciais inválidas, e todas as outras respostas como credenciais válidas."
);
diff --git a/apps/user_webdavauth/l10n/pt_PT.php b/apps/user_webdavauth/l10n/pt_PT.php
index e8bfcfda81e..d7e87b5c8d1 100644
--- a/apps/user_webdavauth/l10n/pt_PT.php
+++ b/apps/user_webdavauth/l10n/pt_PT.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Autenticação WebDAV",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "O ownCloud vai enviar as credenciais para este URL. Todos os códigos http 401 e 403 serão interpretados como credenciais inválidas, todos os restantes códigos http serão interpretados como credenciais correctas."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "O ownCloud vai enviar as credenciais do utilizador através deste URL. Este plugin verifica a resposta e vai interpretar os códigos de estado HTTP 401 e 403 como credenciais inválidas, e todas as outras como válidas."
);
diff --git a/apps/user_webdavauth/l10n/ro.php b/apps/user_webdavauth/l10n/ro.php
index 17157da044d..9df490e81ec 100644
--- a/apps/user_webdavauth/l10n/ro.php
+++ b/apps/user_webdavauth/l10n/ro.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "Autentificare WebDAV",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "owncloud va trimite acreditatile de utilizator pentru a interpreta aceasta pagina. Http 401 si Http 403 are acreditarile si orice alt cod gresite ca acreditarile corecte"
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud va trimite datele de autentificare la acest URL. Acest modul verifică răspunsul și va interpreta codurile de status HTTP 401 sau 403 ca fiind date de autentificare invalide, și orice alt răspuns ca fiind date valide."
);
diff --git a/apps/user_webdavauth/l10n/ru_RU.php b/apps/user_webdavauth/l10n/ru_RU.php
index 245a5101341..46f74cb972f 100644
--- a/apps/user_webdavauth/l10n/ru_RU.php
+++ b/apps/user_webdavauth/l10n/ru_RU.php
@@ -1,3 +1,4 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV аутентификациÑ",
"URL: http://" => "URL: http://"
);
diff --git a/apps/user_webdavauth/l10n/sk_SK.php b/apps/user_webdavauth/l10n/sk_SK.php
index 9bd32954b05..c4e6dfddc7b 100644
--- a/apps/user_webdavauth/l10n/sk_SK.php
+++ b/apps/user_webdavauth/l10n/sk_SK.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"WebDAV URL: http://" => "WebDAV URL: http://"
+"WebDAV Authentication" => "WebDAV overenie",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud odoÅ¡le používateľské údaje na zadanú URL. Plugin skontroluje odpoveÄ a považuje návratovú hodnotu HTTP 401 a 403 za neplatné údaje a vÅ¡etky ostatné hodnoty ako platné prihlasovacie údaje."
);
diff --git a/apps/user_webdavauth/l10n/sl.php b/apps/user_webdavauth/l10n/sl.php
index 8f4effc81a1..245a5101341 100644
--- a/apps/user_webdavauth/l10n/sl.php
+++ b/apps/user_webdavauth/l10n/sl.php
@@ -1,4 +1,3 @@
<?php $TRANSLATIONS = array(
-"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud bo poslal uporabniška poverila temu URL naslovu. Pri tem bo interpretiral http 401 in http 403 odgovor kot spodletelo avtentikacijo ter vse ostale http odgovore kot uspešne."
+"URL: http://" => "URL: http://"
);
diff --git a/apps/user_webdavauth/l10n/sr.php b/apps/user_webdavauth/l10n/sr.php
new file mode 100644
index 00000000000..518fcbe9be5
--- /dev/null
+++ b/apps/user_webdavauth/l10n/sr.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV провера идентитета",
+"URL: http://" => "ÐдреÑа: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud ће поÑлати акредитиве кориÑника на ову адреÑу. Овај прикључак проверава одговор и тумачи HTTP ÑтатуÑне кодове 401 и 403 као неиÑправне акредитиве, а Ñве оÑтале одговоре као иÑправне."
+);
diff --git a/apps/user_webdavauth/l10n/sv.php b/apps/user_webdavauth/l10n/sv.php
index b7a7e4ea2d9..c79b35c27cd 100644
--- a/apps/user_webdavauth/l10n/sv.php
+++ b/apps/user_webdavauth/l10n/sv.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV Autentisering",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud kommer att skicka inloggningsuppgifterna till denna URL och tolkar http 401 och http 403 som fel och alla andra koder som korrekt."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud kommer skicka användaruppgifterna till denna URL. Denna plugin kontrollerar svaret och tolkar HTTP-statuskoderna 401 och 403 som felaktiga uppgifter, och alla andra svar som giltiga uppgifter."
);
diff --git a/apps/user_webdavauth/l10n/th_TH.php b/apps/user_webdavauth/l10n/th_TH.php
index 9bd32954b05..2bd1f685e65 100644
--- a/apps/user_webdavauth/l10n/th_TH.php
+++ b/apps/user_webdavauth/l10n/th_TH.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"WebDAV URL: http://" => "WebDAV URL: http://"
+"WebDAV Authentication" => "WebDAV Authentication",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud จะส่งข้อมูลà¸à¸²à¸£à¹€à¸‚้าใช้งานของผู้ใช้งานไปยังที่อยู่ URL ดังà¸à¸¥à¹ˆà¸²à¸§à¸™à¸µà¹‰ ปลั๊à¸à¸­à¸´à¸™à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸ˆà¸°à¸—ำà¸à¸²à¸£à¸•รวจสอบข้อมูลที่โต้ตอบà¸à¸¥à¸±à¸šà¸¡à¸²à¹à¸¥à¸°à¸ˆà¸°à¸—ำà¸à¸²à¸£à¹à¸›à¸¥à¸£à¸«à¸±à¸ª HTTP statuscodes 401 à¹à¸¥à¸° 403 ให้เป็นข้อมูลà¸à¸²à¸£à¹€à¸‚้าใช้งานที่ไม่สามารถใช้งานได้ ส่วนข้อมูลอื่นๆที่เหลือทั้งหมดจะเป็นข้อมูลà¸à¸²à¸£à¹€à¸‚้าใช้งานที่สามารถใช้งานได้"
);
diff --git a/apps/user_webdavauth/l10n/uk.php b/apps/user_webdavauth/l10n/uk.php
index 57aa90684ae..245a5101341 100644
--- a/apps/user_webdavauth/l10n/uk.php
+++ b/apps/user_webdavauth/l10n/uk.php
@@ -1,4 +1,3 @@
<?php $TRANSLATIONS = array(
-"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct." => "ownCloud відправить облікові дані на цей URL та буде інтерпретувати http 401 Ñ– http 403, Ñк невірні облікові дані, а вÑÑ– інші коди, Ñк вірні."
+"URL: http://" => "URL: http://"
);
diff --git a/apps/user_webdavauth/l10n/vi.php b/apps/user_webdavauth/l10n/vi.php
index 9bd32954b05..ee2aa089125 100644
--- a/apps/user_webdavauth/l10n/vi.php
+++ b/apps/user_webdavauth/l10n/vi.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"WebDAV URL: http://" => "WebDAV URL: http://"
+"WebDAV Authentication" => "Xác thực WebDAV",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud sẽ gá»­i chứng thư ngưá»i dùng tá»›i URL này. Tính năng này kiểm tra trả lá»i và sẽ hiểu mã 401 và 403 cá»§a giao thức HTTP là chứng thư không hợp lệ, và má»i trả lá»i khác được coi là hợp lệ."
);
diff --git a/apps/user_webdavauth/l10n/zh_CN.php b/apps/user_webdavauth/l10n/zh_CN.php
index 5b06409b42e..72d2a0c11df 100644
--- a/apps/user_webdavauth/l10n/zh_CN.php
+++ b/apps/user_webdavauth/l10n/zh_CN.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"URL: http://" => "URL:http://"
+"WebDAV Authentication" => "WebDAV 认è¯",
+"URL: http://" => "URL:http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud 将会å‘é€ç”¨æˆ·çš„身份到此 URL。这个æ’件检查返回值并且将 HTTP 状æ€ç¼–ç  401 å’Œ 403 è§£é‡Šä¸ºéžæ³•èº«ä»½ï¼Œå…¶ä»–æ‰€æœ‰è¿”å›žå€¼ä¸ºåˆæ³•身份。"
);
diff --git a/apps/user_webdavauth/settings.php b/apps/user_webdavauth/settings.php
index 41d7fa51cd2..7eabb0d48cc 100755
--- a/apps/user_webdavauth/settings.php
+++ b/apps/user_webdavauth/settings.php
@@ -24,7 +24,9 @@
OC_Util::checkAdminUser();
if($_POST) {
-
+ // CSRF check
+ OCP\JSON::callCheck();
+
if(isset($_POST['webdav_url'])) {
OC_CONFIG::setValue('user_webdavauth_url', strip_tags($_POST['webdav_url']));
}
diff --git a/apps/user_webdavauth/templates/settings.php b/apps/user_webdavauth/templates/settings.php
index 62ed45fd278..45f4d81aecf 100755
--- a/apps/user_webdavauth/templates/settings.php
+++ b/apps/user_webdavauth/templates/settings.php
@@ -1,8 +1,9 @@
<form id="webdavauth" action="#" method="post">
<fieldset class="personalblock">
- <legend><strong>WebDAV Authentication</strong></legend>
+ <legend><strong><?php echo $l->t('WebDAV Authentication');?></strong></legend>
<p><label for="webdav_url"><?php echo $l->t('URL: http://');?><input type="text" id="webdav_url" name="webdav_url" value="<?php echo $_['webdav_url']; ?>"></label>
+ <input type="hidden" name="requesttoken" value="<?php echo $_['requesttoken'] ?>" id="requesttoken">
<input type="submit" value="Save" />
- <br /><?php echo $l->t('ownCloud will send the user credentials to this URL is interpret http 401 and http 403 as credentials wrong and all other codes as credentials correct.'); ?>
+ <br /><?php echo $l->t('ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials.'); ?>
</fieldset>
</form>
diff --git a/autotest.cmd b/autotest.cmd
new file mode 100644
index 00000000000..053860db547
--- /dev/null
+++ b/autotest.cmd
@@ -0,0 +1,117 @@
+::
+:: ownCloud
+::
+:: @author Thomas Müller
+:: @author Tobias Ramforth (translated into Windows batch file)
+::
+:: @copyright 2012 Thomas Müller thomas.mueller@tmit.eu
+::
+@echo off
+
+set DATADIR=data-autotest
+set BASEDIR=%~dp0
+
+:: create autoconfig for sqlite, mysql and postgresql
+echo ^<?php > .\tests\autoconfig-sqlite.php
+echo $AUTOCONFIG ^= array ^( >> .\tests\autoconfig-sqlite.php
+echo 'installed' ^=^> false^, >> .\tests\autoconfig-sqlite.php
+echo 'dbtype' ^=^> 'sqlite'^, >> .\tests\autoconfig-sqlite.php
+echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-sqlite.php
+echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-sqlite.php
+echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-sqlite.php
+echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-sqlite.php
+echo ^)^; >> .\tests\autoconfig-sqlite.php
+
+echo ^<?php > .\tests\autoconfig-mysql.php
+echo $AUTOCONFIG ^= array ^( >> .\tests\autoconfig-mysql.php
+echo 'installed' ^=^> false^, >> .\tests\autoconfig-mysql.php
+echo 'dbtype' ^=^> 'mysql'^, >> .\tests\autoconfig-mysql.php
+echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-mysql.php
+echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-mysql.php
+echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-mysql.php
+echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-mysql.php
+echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mysql.php
+echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mysql.php
+echo 'dbhost' ^=^> 'localhost'^, >> .\tests\autoconfig-mysql.php
+echo 'dbpass' ^=^> 'owncloud'^, >> .\tests\autoconfig-mysql.php
+echo ^)^; >> .\tests\autoconfig-mysql.php
+
+echo ^<?php > .\tests\autoconfig-pgsql.php
+echo $AUTOCONFIG ^= array ^( >> .\tests\autoconfig-pgsql.php
+echo 'installed' ^=^> false^, >> .\tests\autoconfig-pgsql.php
+echo 'dbtype' ^=^> 'pgsql'^, >> .\tests\autoconfig-pgsql.php
+echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-pgsql.php
+echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-pgsql.php
+echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-pgsql.php
+echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-pgsql.php
+echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-pgsql.php
+echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-pgsql.php
+echo 'dbhost' ^=^> 'localhost'^, >> .\tests\autoconfig-pgsql.php
+echo 'dbpass' ^=^> 'owncloud'^, >> .\tests\autoconfig-pgsql.php
+echo ^)^; >> .\tests\autoconfig-pgsql.php
+
+echo localhost:5432:*:oc_autotest:owncloud > %APPDATA%\postgresql\pgpass.conf
+
+::
+:: start test execution
+::
+::call:execute_tests "sqlite"
+call:execute_tests "mysql"
+::call:execute_tests "mssql"
+::call:execute_tests "ora"
+::call:execute_tests "pgsql"
+
+goto:eof
+
+:execute_tests
+ echo "Setup environment for %~1 testing ..."
+ :: back to root folder
+ cd %BASEDIR%
+
+ :: revert changes to tests\data
+ git checkout tests\data\*
+
+ :: reset data directory
+ rmdir /s /q %DATADIR%
+ md %DATADIR%
+
+ :: remove the old config file
+ :: del /q /f config\config.php
+ copy /y tests\preseed-config.php config\config.php
+
+ :: drop database
+ if "%~1" == "mysql" mysql -u oc_autotest -powncloud -e "DROP DATABASE oc_autotest"
+
+ if "%~1" == "pgsql" dropdb -h localhost -p 5432 -U oc_autotest -w oc_autotest
+
+ :: copy autoconfig
+ copy /y %BASEDIR%\tests\autoconfig-%~1.php %BASEDIR%\config\autoconfig.php
+
+ :: trigger installation
+ php -f index.php
+
+ ::test execution
+ echo "Testing with %~1 ..."
+ cd tests
+ rmdir /s /q coverage-html-%~1
+ md coverage-html-%~1
+ php -f enable_all.php
+ ::phpunit --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1
+ ::phpunit --bootstrap bootstrap.php --configuration phpunit.xml
+ php win32-phpunit.php --bootstrap bootstrap.php --configuration phpunit.xml --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1
+ echo "Done with testing %~1 ..."
+ cd %BASEDIR%
+goto:eof
+
+::
+:: NOTES on mysql:
+:: - CREATE USER 'oc_autotest'@'localhost' IDENTIFIED BY 'owncloud';
+:: - grant access permissions: grant all on oc_autotest.* to 'oc_autotest'@'localhost';
+::
+:: NOTES on pgsql:
+:: - su - postgres
+:: - createuser -P (enter username and password and enable superuser)
+:: - to enable dropdb I decided to add following line to pg_hba.conf (this is not the safest way but I don't care for the testing machine):
+:: local all all trust
+::
+
diff --git a/autotest.sh b/autotest.sh
index 744bcdbe8f9..fdf6d2fe098 100755
--- a/autotest.sh
+++ b/autotest.sh
@@ -90,7 +90,7 @@ function execute_tests {
rm -rf coverage-html-$1
mkdir coverage-html-$1
php -f enable_all.php
- phpunit --log-junit autotest-results-$1.xml --coverage-clover autotest-clover-$1.xml --coverage-html coverage-html-$1
+ phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml --coverage-clover autotest-clover-$1.xml --coverage-html coverage-html-$1
}
#
diff --git a/build/phpcs.xml b/build/phpcs.xml
index 1e10be1a111..d2909955ed2 100644
--- a/build/phpcs.xml
+++ b/build/phpcs.xml
@@ -10,7 +10,7 @@
<exclude-pattern>*/files_pdfviewer/js/pdfjs/*</exclude-pattern>
<exclude-pattern>*/files_odfviewer/src/*</exclude-pattern>
<exclude-pattern>*/files_svgedit/svg-edit/*</exclude-pattern>
- <exclude-pattern>*jquery-ui-1.8.16.custom.css</exclude-pattern>
+ <exclude-pattern>*jquery-ui-*.css</exclude-pattern>
<extensions>php</extensions>
<!-- Include the whole PEAR standard -->
diff --git a/config/config.sample.php b/config/config.sample.php
index b1655d02830..2f394c41a3b 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -1,5 +1,7 @@
<?php
+/* Only enable this for local development and not in productive environments */
+/* This will disable the minifier and outputs some additional debug informations */
define("DEBUG", true);
$CONFIG = array(
@@ -30,17 +32,20 @@ $CONFIG = array(
/* Force use of HTTPS connection (true = use HTTPS) */
"forcessl" => false,
+/* Blacklist a specific file and disallow the upload of files with this name - WARNING: USE THIS ONLY IF YOU KNOW WHAT YOU ARE DOING. */
+"blacklisted_files" => array('.htaccess'),
+
/* The automatic hostname detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the automatic detection. You can also add a port. For example "www.example.com:88" */
"overwritehost" => "",
/* The automatic protocol detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the protocol detection. For example "https" */
"overwriteprotocol" => "",
-/* Enhanced auth forces users to enter their password again when performing potential sensitive actions like creating or deleting users */
-"enhancedauth" => true,
+/* The automatic webroot detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the automatic detection. For example "/domain.tld/ownCloud" */
+"overwritewebroot" => "",
-/* Time in seconds how long an user is authenticated without entering his password again before performing sensitive actions like creating or deleting users etc...*/
-"enhancedauthtime" => 15 * 60,
+/* The automatic detection of ownCloud can fail in certain reverse proxy situations. This option allows to define a manually override condition as regular expression for the remote ip address. For example "^10\.0\.0\.[1-3]$" */
+"overwritecondaddr" => "",
/* A proxy to use to connect to the internet. For example "myproxy.org:88" */
"proxy" => "",
@@ -72,6 +77,9 @@ $CONFIG = array(
/* URL of the appstore to use, server should understand OCS */
"appstoreurl" => "http://api.apps.owncloud.com/v1",
+/* Enable SMTP class debugging */
+"mail_smtpdebug" => false,
+
/* Mode to use for sending mail, can be sendmail, smtp, qmail or php, see PHPMailer docs */
"mail_smtpmode" => "sendmail",
@@ -81,17 +89,34 @@ $CONFIG = array(
/* Port to use for sending mail, depends on mail_smtpmode if this is used */
"mail_smtpport" => 25,
+/* SMTP server timeout in seconds for sending mail, depends on mail_smtpmode if this is used */
+"mail_smtptimeout" => 10,
+
+/* SMTP connection prefix or sending mail, depends on mail_smtpmode if this is used.
+ Can be '', ssl or tls */
+"mail_smtpsecure" => "",
+
/* authentication needed to send mail, depends on mail_smtpmode if this is used
* (false = disable authentication)
*/
"mail_smtpauth" => false,
+/* authentication type needed to send mail, depends on mail_smtpmode if this is used
+ * Can be LOGIN (default), PLAIN or NTLM */
+"mail_smtpauthtype" => "LOGIN",
+
/* Username to use for sendmail mail, depends on mail_smtpauth if this is used */
"mail_smtpname" => "",
/* Password to use for sendmail mail, depends on mail_smtpauth if this is used */
"mail_smtppassword" => "",
+/* How long should ownCloud keep deleted files in the trash bin, default value: 180 days */
+'trashbin_retention_obligation' => 180,
+
+/* allow user to change his display name, if it is supported by the back-end */
+'allow_user_to_change_display_name' => true,
+
/* Check 3rdparty apps for malicious code fragments */
"appcodechecker" => "",
@@ -110,6 +135,9 @@ $CONFIG = array(
/* Lifetime of the remember login cookie, default is 15 days */
"remember_login_cookie_lifetime" => 60*60*24*15,
+/* Custom CSP policy, changing this will overwrite the standard policy */
+"custom_csp_policy" => "default-src \'self\'; script-src \'self\' \'unsafe-eval\'; style-src \'self\' \'unsafe-inline\'; frame-src *; img-src *; font-src \'self\' data:",
+
/* The directory where the user data is stored, default to data in the owncloud
* directory. The sqlite database is also stored here, when sqlite is used.
*/
@@ -129,12 +157,16 @@ $CONFIG = array(
'path'=> '/var/www/owncloud/apps',
'url' => '/apps',
'writable' => true,
- ),
- ),
- 'user_backends'=>array(
- array(
- 'class'=>'OC_User_IMAP',
- 'arguments'=>array('{imap.gmail.com:993/imap/ssl}INBOX')
- )
- )
+ ),
+),
+'user_backends'=>array(
+ array(
+ 'class'=>'OC_User_IMAP',
+ 'arguments'=>array('{imap.gmail.com:993/imap/ssl}INBOX')
+ )
+),
+//links to custom clients
+'customclient_desktop' => '', //http://owncloud.org/sync-clients/
+'customclient_android' => '', //https://play.google.com/store/apps/details?id=com.owncloud.android
+'customclient_ios' => '' //https://itunes.apple.com/us/app/owncloud/id543672169?mt=8
);
diff --git a/core/ajax/share.php b/core/ajax/share.php
index 72ffc52e997..6704a00c5a2 100644
--- a/core/ajax/share.php
+++ b/core/ajax/share.php
@@ -72,6 +72,7 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
case 'email':
// read post variables
$user = OCP\USER::getUser();
+ $displayName = OCP\User::getDisplayName();
$type = $_POST['itemType'];
$link = $_POST['link'];
$file = $_POST['file'];
@@ -81,13 +82,13 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
$l = OC_L10N::get('core');
// setup the email
- $subject = (string)$l->t('User %s shared a file with you', $user);
+ $subject = (string)$l->t('User %s shared a file with you', $displayName);
if ($type === 'dir')
- $subject = (string)$l->t('User %s shared a folder with you', $user);
+ $subject = (string)$l->t('User %s shared a folder with you', $displayName);
- $text = (string)$l->t('User %s shared the file "%s" with you. It is available for download here: %s', array($user, $file, $link));
+ $text = (string)$l->t('User %s shared the file "%s" with you. It is available for download here: %s', array($displayName, $file, $link));
if ($type === 'dir')
- $text = (string)$l->t('User %s shared the folder "%s" with you. It is available for download here: %s', array($user, $file, $link));
+ $text = (string)$l->t('User %s shared the folder "%s" with you. It is available for download here: %s', array($displayName, $file, $link));
$default_from = OCP\Util::getDefaultEmailAddress('sharing-noreply');
@@ -98,7 +99,7 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
OCP\Util::sendMail($to_address, $to_address, $subject, $text, $from_address, $user);
OCP\JSON::success();
} catch (Exception $exception) {
- OCP\JSON::error(array('data' => array('message' => $exception->getMessage())));
+ OCP\JSON::error(array('data' => array('message' => OC_Util::sanitizeHTML($exception->getMessage()))));
}
break;
}
@@ -158,14 +159,14 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
while ($count < 4 && count($users) == $limit) {
$limit = 4 - $count;
if ($sharePolicy == 'groups_only') {
- $users = OC_Group::usersInGroups($groups, $_GET['search'], $limit, $offset);
+ $users = OC_Group::DisplayNamesInGroups($groups, $_GET['search'], $limit, $offset);
} else {
- $users = OC_User::getUsers($_GET['search'], $limit, $offset);
+ $users = OC_User::getDisplayNames($_GET['search'], $limit, $offset);
}
$offset += $limit;
- foreach ($users as $user) {
- if ((!isset($_GET['itemShares']) || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) || !in_array($user, $_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])) && $user != OC_User::getUser()) {
- $shareWith[] = array('label' => $user, 'value' => array('shareType' => OCP\Share::SHARE_TYPE_USER, 'shareWith' => $user));
+ foreach ($users as $uid => $displayName) {
+ if ((!isset($_GET['itemShares']) || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) || !in_array($uid, $_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])) && $uid != OC_User::getUser()) {
+ $shareWith[] = array('label' => $displayName, 'value' => array('shareType' => OCP\Share::SHARE_TYPE_USER, 'shareWith' => $uid));
$count++;
}
}
diff --git a/core/ajax/translations.php b/core/ajax/translations.php
index e22cbad4708..e52a2e9b1e8 100644
--- a/core/ajax/translations.php
+++ b/core/ajax/translations.php
@@ -22,6 +22,7 @@
*/
$app = $_POST["app"];
+$app = OC_App::cleanAppId($app);
$l = OC_L10N::get( $app );
diff --git a/core/ajax/vcategories/add.php b/core/ajax/vcategories/add.php
index 23d00af70ab..16a1461be08 100644
--- a/core/ajax/vcategories/add.php
+++ b/core/ajax/vcategories/add.php
@@ -34,7 +34,7 @@ debug(print_r($category, true));
$categories = new OC_VCategories($type);
if($categories->hasCategory($category)) {
- bailOut(OC_Contacts_App::$l10n->t('This category already exists: '.$category));
+ bailOut($l->t('This category already exists: %s', array($category)));
} else {
$categories->add($category, true);
}
diff --git a/core/ajax/vcategories/removeFromFavorites.php b/core/ajax/vcategories/removeFromFavorites.php
index ba6e95c2497..78a528caa86 100644
--- a/core/ajax/vcategories/removeFromFavorites.php
+++ b/core/ajax/vcategories/removeFromFavorites.php
@@ -27,12 +27,12 @@ if(is_null($type)) {
}
if(is_null($id)) {
- bailOut($l->t('%s ID not provided.', $type));
+ bailOut($l->t('%s ID not provided.', array($type)));
}
$categories = new OC_VCategories($type);
if(!$categories->removeFromFavorites($id, $type)) {
- bailOut($l->t('Error removing %s from favorites.', $id));
+ bailOut($l->t('Error removing %s from favorites.', array($id)));
}
OC_JSON::success();
diff --git a/core/css/images/animated-overlay.gif b/core/css/images/animated-overlay.gif
new file mode 100644
index 00000000000..d441f75ebfb
--- /dev/null
+++ b/core/css/images/animated-overlay.gif
Binary files differ
diff --git a/core/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/core/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 00000000000..954e22dbd99
--- /dev/null
+++ b/core/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Binary files differ
diff --git a/core/css/images/ui-bg_diagonals-thick_20_666666_40x40.png b/core/css/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 00000000000..64ece5707d9
--- /dev/null
+++ b/core/css/images/ui-bg_diagonals-thick_20_666666_40x40.png
Binary files differ
diff --git a/core/css/images/ui-bg_flat_100_ffffff_40x100.png b/core/css/images/ui-bg_flat_100_ffffff_40x100.png
new file mode 100644
index 00000000000..ac8b229af95
--- /dev/null
+++ b/core/css/images/ui-bg_flat_100_ffffff_40x100.png
Binary files differ
diff --git a/core/css/images/ui-bg_flat_10_000000_40x100.png b/core/css/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 00000000000..abdc01082bf
--- /dev/null
+++ b/core/css/images/ui-bg_flat_10_000000_40x100.png
Binary files differ
diff --git a/core/css/images/ui-bg_flat_35_1d2d44_40x100.png b/core/css/images/ui-bg_flat_35_1d2d44_40x100.png
new file mode 100644
index 00000000000..904ef14c37d
--- /dev/null
+++ b/core/css/images/ui-bg_flat_35_1d2d44_40x100.png
Binary files differ
diff --git a/core/css/images/ui-bg_glass_100_f8f8f8_1x400.png b/core/css/images/ui-bg_glass_100_f8f8f8_1x400.png
new file mode 100644
index 00000000000..cd79e9f1966
--- /dev/null
+++ b/core/css/images/ui-bg_glass_100_f8f8f8_1x400.png
Binary files differ
diff --git a/core/css/images/ui-bg_highlight-hard_100_f8f8f8_1x100.png b/core/css/images/ui-bg_highlight-hard_100_f8f8f8_1x100.png
new file mode 100644
index 00000000000..268e650935d
--- /dev/null
+++ b/core/css/images/ui-bg_highlight-hard_100_f8f8f8_1x100.png
Binary files differ
diff --git a/core/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/core/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 00000000000..f1273672d25
--- /dev/null
+++ b/core/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Binary files differ
diff --git a/core/css/images/ui-icons_1d2d44_256x240.png b/core/css/images/ui-icons_1d2d44_256x240.png
new file mode 100644
index 00000000000..2a857e4da57
--- /dev/null
+++ b/core/css/images/ui-icons_1d2d44_256x240.png
Binary files differ
diff --git a/core/css/images/ui-icons_222222_256x240.png b/core/css/images/ui-icons_222222_256x240.png
new file mode 100644
index 00000000000..b273ff111d2
--- /dev/null
+++ b/core/css/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/core/css/images/ui-icons_ffd27a_256x240.png b/core/css/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 00000000000..e117effa3dc
--- /dev/null
+++ b/core/css/images/ui-icons_ffd27a_256x240.png
Binary files differ
diff --git a/core/css/images/ui-icons_ffffff_256x240.png b/core/css/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 00000000000..42f8f992c72
--- /dev/null
+++ b/core/css/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/core/css/jquery-ui-1.10.0.custom.css b/core/css/jquery-ui-1.10.0.custom.css
new file mode 100644
index 00000000000..a1e9895c776
--- /dev/null
+++ b/core/css/jquery-ui-1.10.0.custom.css
@@ -0,0 +1,1174 @@
+/*! jQuery UI - v1.10.0 - 2013-01-22
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=%22Lucida%20Grande%22%2C%20Arial%2C%20Verdana%2C%20sans-serif&fwDefault=bold&fsDefault=1em&cornerRadius=4px&bgColorHeader=1d2d44&bgTextureHeader=01_flat.png&bgImgOpacityHeader=35&borderColorHeader=1d2d44&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f8f8f8&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=ddd&fcDefault=555&iconColorDefault=1d2d44&bgColorHover=ffffff&bgTextureHover=01_flat.png&bgImgOpacityHover=100&borderColorHover=ddd&fcHover=333&iconColorHover=1d2d44&bgColorActive=f8f8f8&bgTextureActive=02_glass.png&bgImgOpacityActive=100&borderColorActive=1d2d44&fcActive=1d2d44&iconColorActive=1d2d44&bgColorHighlight=f8f8f8&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=100&borderColorHighlight=ddd&fcHighlight=555&iconColorHighlight=ffffff&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0);
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin-top: 2px;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-noicons {
+ padding-left: .7em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month-year {
+ width: 100%;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 49%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 21px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 2px;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px -2px 5px -2px;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration: none;
+ display: block;
+ padding: 2px .4em;
+ line-height: 1.5;
+ min-height: 0; /* support: IE7 */
+ font-weight: normal;
+}
+.ui-menu .ui-menu-item a.ui-state-focus,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+
+.ui-menu .ui-state-disabled {
+ font-weight: normal;
+ margin: .4em 0 .2em;
+ line-height: 1.5;
+}
+.ui-menu .ui-state-disabled a {
+ cursor: default;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item a {
+ position: relative;
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: .2em;
+ left: .2em;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ position: static;
+ float: right;
+}
+.ui-progressbar {
+ height: 2em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("images/animated-overlay.gif");
+ height: 100%;
+ filter: alpha(opacity=25);
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* For IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to overide default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertical centre icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav li a {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+ cursor: text;
+}
+.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: "Lucida Grande", Arial, Verdana, sans-serif;
+ font-size: 1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: "Lucida Grande", Arial, Verdana, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #dddddd;
+ background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #1d2d44;
+ background: #1d2d44 url(images/ui-bg_flat_35_1d2d44_40x100.png) 50% 50% repeat-x;
+ color: #ffffff;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #ffffff;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #ddd;
+ background: #f8f8f8 url(images/ui-bg_glass_100_f8f8f8_1x400.png) 50% 50% repeat-x;
+ font-weight: bold;
+ color: #555;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #555;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #ddd;
+ background: #ffffff url(images/ui-bg_flat_100_ffffff_40x100.png) 50% 50% repeat-x;
+ font-weight: bold;
+ color: #333;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited {
+ color: #333;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #1d2d44;
+ background: #f8f8f8 url(images/ui-bg_glass_100_f8f8f8_1x400.png) 50% 50% repeat-x;
+ font-weight: bold;
+ color: #1d2d44;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #1d2d44;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ddd;
+ background: #f8f8f8 url(images/ui-bg_highlight-hard_100_f8f8f8_1x100.png) 50% top repeat-x;
+ color: #555;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #555;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #cd0a0a;
+ background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70);
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35);
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+ background-position: 16px 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url(images/ui-icons_222222_256x240.png);
+}
+.ui-widget-header .ui-icon {
+ background-image: url(images/ui-icons_222222_256x240.png);
+}
+.ui-state-default .ui-icon {
+ background-image: url(images/ui-icons_1d2d44_256x240.png);
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url(images/ui-icons_1d2d44_256x240.png);
+}
+.ui-state-active .ui-icon {
+ background-image: url(images/ui-icons_1d2d44_256x240.png);
+}
+.ui-state-highlight .ui-icon {
+ background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url(images/ui-icons_ffd27a_256x240.png);
+}
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
+ opacity: .5;
+ filter: Alpha(Opacity=50);
+}
+.ui-widget-shadow {
+ margin: -5px 0 0 -5px;
+ padding: 5px;
+ background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+ opacity: .2;
+ filter: Alpha(Opacity=20);
+ border-radius: 5px;
+}
diff --git a/core/css/jquery-ui-1.8.16.custom.css b/core/css/jquery-ui-1.8.16.custom.css
deleted file mode 100644
index add1c6af08c..00000000000
--- a/core/css/jquery-ui-1.8.16.custom.css
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault="Lucida%20Grande",%20Arial,%20Verdana,%20sans-serif&fwDefault=bold&fsDefault=1em&cornerRadius=4px&bgColorHeader=1d2d44&bgTextureHeader=01_flat.png&bgImgOpacityHeader=35&borderColorHeader=1d2d44&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f8f8f8&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=ddd&fcDefault=555&iconColorDefault=1d2d44&bgColorHover=ffffff&bgTextureHover=01_flat.png&bgImgOpacityHover=100&borderColorHover=ddd&fcHover=333&iconColorHover=1d2d44&bgColorActive=f8f8f8&bgTextureActive=02_glass.png&bgImgOpacityActive=100&borderColorActive=1d2d44&fcActive=1d2d44&iconColorActive=1d2d44&bgColorHighlight=f8f8f8&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=100&borderColorHighlight=ddd&fcHighlight=555&iconColorHighlight=ffffff&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: \\\"Lucida Grande\\\", Arial, Verdana, sans-serif; font-size: 1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: \\\"Lucida Grande\\\", Arial, Verdana, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee; color: #333333; }
-.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #1d2d44; background: #1d2d44; color: #ffffff; font-weight: bold; }
-.ui-widget-header a { color: #ffffff; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ddd; background: #f8f8f8; font-weight: bold; color: #555; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #ddd; background: #ffffff; font-weight: bold; color: #333; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #333; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #1d2d44; background: #f8f8f8; font-weight: bold; color: #1d2d44; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #1d2d44; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; }
-.ui-icon-closethick { background-image: url(../img/actions/delete.png); }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #666666; opacity: .50;filter:Alpha(Opacity=50); }
-.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
- * jQuery UI Resizable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Autocomplete 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.16
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
- list-style:none;
- padding: 2px;
- margin: 0;
- display:block;
- float: left;
-}
-.ui-menu .ui-menu {
- margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
- margin:0;
- padding: 0;
- zoom: 1;
- float: left;
- clear: left;
- width: 100%;
-}
-.ui-menu .ui-menu-item a {
- text-decoration:none;
- display:block;
- padding:.2em .4em;
- line-height:1.5;
- zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
- font-weight: normal;
- margin: -1px;
-}
-/*
- * jQuery UI Button 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4; }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; background-color: #EEE;}
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*
- * jQuery UI Datepicker 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
- display: none; /*sorry for IE5*/
- display/**/: block; /*sorry for IE5*/
- position: absolute; /*must have*/
- z-index: -1; /*must have*/
- filter: mask(); /*must have*/
- top: -4px; /*must have*/
- left: -4px; /*must have*/
- width: 200px; /*must have*/
- height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file
diff --git a/core/css/multiselect.css b/core/css/multiselect.css
index 99f0e039334..31c8ef88eb9 100644
--- a/core/css/multiselect.css
+++ b/core/css/multiselect.css
@@ -5,15 +5,25 @@
ul.multiselectoptions {
background-color:#fff;
border:1px solid #ddd;
- border-bottom-left-radius:.5em;
- border-bottom-right-radius:.5em;
border-top:none;
box-shadow:0 1px 1px #ddd;
padding-top:.5em;
position:absolute;
+ max-height: 20em;
+ overflow-y: auto;
z-index:49;
}
+ ul.multiselectoptions.down {
+ border-bottom-left-radius:.5em;
+ border-bottom-right-radius:.5em;
+ }
+
+ ul.multiselectoptions.up {
+ border-top-left-radius:.5em;
+ border-top-right-radius:.5em;
+ }
+
ul.multiselectoptions>li {
overflow:hidden;
white-space:nowrap;
@@ -30,11 +40,20 @@
div.multiselect.active {
background-color:#fff;
+ position:relative;
+ z-index:50;
+ }
+
+ div.multiselect.up {
+ border-top:0 none;
+ border-top-left-radius:0;
+ border-top-right-radius:0;
+ }
+
+ div.multiselect.down {
border-bottom:none;
border-bottom-left-radius:0;
border-bottom-right-radius:0;
- position:relative;
- z-index:50;
}
div.multiselect>span:first-child {
diff --git a/core/css/styles.css b/core/css/styles.css
index 496320561f8..f6bf652f07c 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -16,8 +16,8 @@ body { background:#fefefe; font:normal .8em/1.6em "Lucida Grande", Arial, Verdan
/* HEADERS */
-#body-user #header, #body-settings #header { position:fixed; top:0; left:0; right:0; z-index:100; height:2.5em; line-height:2.5em; padding:.5em; background:#1d2d44; -moz-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; -webkit-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; }
-#body-login #header { margin:-2em auto 0; text-align:center; height:10em; padding:1em 0 .5em;
+#body-user #header, #body-settings #header { position:fixed; top:0; left:0; right:0; z-index:100; height:45px; line-height:2.5em; background:#1d2d44; -moz-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; -webkit-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; }
+#body-login #header { margin: -2em auto 0; text-align:center; height:10em; padding:1em 0 .5em;
-moz-box-shadow:0 0 1em rgba(0, 0, 0, .5); -webkit-box-shadow:0 0 1em rgba(0, 0, 0, .5); box-shadow:0 0 1em rgba(0, 0, 0, .5);
background:#1d2d44; /* Old browsers */
background:-moz-linear-gradient(top, #35537a 0%, #1d2d42 100%); /* FF3.6+ */
@@ -28,7 +28,7 @@ background:-ms-linear-gradient(top, #35537a 0%,#1d2d42 100%); /* IE10+ */
background:linear-gradient(top, #35537a 0%,#1d2d42 100%); /* W3C */
filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#35537a', endColorstr='#1d2d42',GradientType=0 ); /* IE6-9 */ }
-#owncloud { float:left; vertical-align:middle; }
+#owncloud { position:absolute; top:0; left:0; padding:6px; padding-bottom:0; }
.header-right { float:right; vertical-align:middle; padding:0 0.5em; }
.header-right > * { vertical-align:middle; }
@@ -53,17 +53,24 @@ input[type="checkbox"]:hover+label, input[type="checkbox"]:focus+label { color:#
#quota { cursor:default; }
+/* SCROLLING */
+::-webkit-scrollbar { width:8px; }
+::-webkit-scrollbar-track-piece { background-color:transparent; }
+::-webkit-scrollbar-thumb { background:#ddd; }
+
+
/* BUTTONS */
input[type="submit"], input[type="button"], button, .button, #quota, div.jp-progress, select, .pager li a {
width:auto; padding:.4em;
- background-color:rgba(230,230,230,.5); font-weight:bold; color:#555; text-shadow:#fff 0 1px 0; border:1px solid #bbb; border:1px solid rgba(180,180,180,.5); cursor:pointer;
- -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset;
+ background-color:rgba(240,240,240,.9); font-weight:bold; color:#555; text-shadow:rgba(255,255,255,.9) 0 1px 0; border:1px solid rgba(190,190,190,.9); cursor:pointer;
+ -moz-box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset; -webkit-box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset; box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset;
-moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em;
}
input[type="submit"]:hover, input[type="submit"]:focus, input[type="button"]:hover, select:hover, select:focus, select:active, input[type="button"]:focus, .button:hover {
- background:rgba(255,255,255,.5); color:#333;
+ background:rgba(250,250,250,.9); color:#333;
}
input[type="submit"] img, input[type="button"] img, button img, .button img { cursor:pointer; }
+#header .button { border:none; -moz-box-shadow:none; -webkit-box-shadow:none; box-shadow:none; }
/* Primary action button, use sparingly */
.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary {
@@ -86,22 +93,40 @@ input[type="submit"] img, input[type="button"] img, button img, .button img { cu
#body-login input { font-size:1.5em; }
#body-login input[type="text"], #body-login input[type="password"] { width:13em; }
-#body-login input.login { width:auto; float:right; }
-#remember_login { margin:.8em .2em 0 1em; }
-.searchbox input[type="search"] { font-size:1.2em; padding:.2em .5em .2em 1.5em; background:#fff url('../img/actions/search.svg') no-repeat .5em center; border:0; -moz-border-radius:1em; -webkit-border-radius:1em; border-radius:1em; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70);opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }
+#body-login input.login { width:auto; float:right; padding:7px 9px 6px; }
+#remember_login { margin:.8em .2em 0 1em; vertical-align:text-bottom; }
+.searchbox input[type="search"] { font-size:1.2em; padding:.2em .5em .2em 1.5em; background:#fff url('../img/actions/search.svg') no-repeat .5em center; border:0; -moz-border-radius:1em; -webkit-border-radius:1em; border-radius:1em; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70);opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; margin-top:10px; float:right; }
input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; }
#select_all{ margin-top:.4em !important;}
+
/* CONTENT ------------------------------------------------------------------ */
-#controls { padding:0 0.5em; width:100%; top:3.5em; height:2.8em; margin:0; background:#f7f7f7; border-bottom:1px solid #eee; position:fixed; z-index:50; -moz-box-shadow:0 -3px 7px #000; -webkit-box-shadow:0 -3px 7px #000; box-shadow:0 -3px 7px #000; }
+#controls {
+ position:fixed;
+ height:2.8em; width:100%;
+ padding:0 70px 0 0.5em; margin:0;
+ -moz-box-sizing:border-box; box-sizing:border-box;
+ -moz-box-shadow:0 -3px 7px #000; -webkit-box-shadow:0 -3px 7px #000; box-shadow:0 -3px 7px #000;
+ background:#f7f7f7; border-bottom:1px solid #eee; z-index:50;
+}
#controls .button { display:inline-block; }
-#content { top:3.5em; left:12.5em; position:absolute; }
-#leftcontent, .leftcontent { position:fixed; overflow:auto; top:6.4em; width:20em; background:#f8f8f8; border-right:1px solid #ddd; }
+
+#content { position:relative; height:100%; width:100%; }
+#content .hascontrols { position: relative; top: 2.9em; }
+#content-wrapper {
+ position:absolute; height:100%; width:100%; padding-top:3.5em; padding-left:64px;
+ -moz-box-sizing:border-box; box-sizing:border-box;
+}
+#leftcontent, .leftcontent {
+ position:relative; overflow:auto; width:20em; height:100%;
+ background:#f8f8f8; border-right:1px solid #ddd;
+ -moz-box-sizing:border-box; box-sizing:border-box;
+}
#leftcontent li, .leftcontent li { background:#f8f8f8; padding:.5em .8em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; -webkit-transition:background-color 200ms; -moz-transition:background-color 200ms; -o-transition:background-color 200ms; transition:background-color 200ms; }
#leftcontent li:hover, #leftcontent li:active, #leftcontent li.active, .leftcontent li:hover, .leftcontent li:active, .leftcontent li.active { background:#eee; }
#leftcontent li.active, .leftcontent li.active { font-weight:bold; }
#leftcontent li:hover, .leftcontent li:hover { color:#333; background:#ddd; }
#leftcontent a { height:100%; display:block; margin:0; padding:0 1em 0 0; float:left; }
-#rightcontent, .rightcontent { position:fixed; top:6.4em; left:32.5em; overflow:auto }
+#rightcontent, .rightcontent { position:fixed; top:6.4em; left:24.5em; overflow:auto }
/* LOG IN & INSTALLATION ------------------------------------------------------------ */
@@ -122,16 +147,15 @@ input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-b
#login #datadirContent label { display:block; margin:0; color:#999; }
#login form #datadirField legend { margin-bottom:15px; }
-
/* Icons for username and password fields to better recognize them */
#adminlogin, #adminpass, #user, #password { width:11.7em!important; padding-left:1.8em; }
-#adminlogin+label, #adminpass+label, #user+label, #password+label { left:2.2em; }
-#adminlogin+label+img, #adminpass+label+img, #user+label+img, #password+label+img {
+#adminlogin+label+img, #adminpass-icon, #user+label+img, #password-icon {
position:absolute; left:1.25em; top:1.65em;
opacity:.3;
}
-#adminpass+label+img, #password+label+img { top:1.1em; }
-
+#adminpass-icon, #password-icon { top:1.1em; }
+input[name="password-clone"] { padding-left:1.8em; width:11.7em !important; }
+input[name="adminpass-clone"] { padding-left:1.8em; width:11.7em !important; }
/* Nicely grouping input field sets */
.grouptop input {
@@ -149,15 +173,29 @@ input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-b
box-shadow:0 1px 1px #fff,0 1px 0 #ddd inset;
}
+/* In field labels. No, HTML placeholder does not work as well. */
#login form label { color:#666; }
#login .groupmiddle label, #login .groupbottom label { top:.65em; }
-/* NEEDED FOR INFIELD LABELS */
p.infield { position:relative; }
label.infield { cursor:text !important; top:1.05em; left:.85em; }
-#login form label.infield { position:absolute; font-size:19px; color:#aaa; white-space:nowrap; }
+#login form label.infield { position:absolute; font-size:19px; color:#aaa; white-space:nowrap; padding-left:1.4em; }
+#login #databaseField .infield { padding-left:0; }
#login form input[type="checkbox"]+label { position:relative; margin:0; font-size:1em; text-shadow:#fff 0 1px 0; }
#login form .errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; }
+/* Show password toggle */
+#show { position:absolute; right:1em; top:.8em; float:right; }
+#show, #personal-show { display:none; }
+#show + label { right:1em; top:1.25em!important; }
+#show:checked + label, #personal-show:checked + label { opacity:.8; }
+#show + label, #personal-show + label {
+ position:absolute!important; height:14px; width:24px;
+ background-image:url("../img/actions/toggle.png"); background-repeat:no-repeat; opacity:.3;
+}
+#personal-show + label { margin-top:1em; }
+#passwordbutton { margin-left:2.5em; }
+
+/* Database selector */
#login form #selectDbType { text-align:center; }
#login form #selectDbType label {
position:static; margin:0 -3px 5px; padding:.4em;
@@ -167,34 +205,62 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; }
}
#login form #selectDbType label.ui-state-hover, #login form #selectDbType label.ui-state-active { color:#000; background-color:#e8e8e8; }
+/* Warnings */
fieldset.warning {
padding:8px;
color:#b94a48; background-color:#f2dede; border:1px solid #eed3d7;
border-radius:5px;
}
fieldset.warning legend { color:#b94a48 !important; }
+fieldset.warning a { color:#b94a48 !important; font-weight:bold; }
+
+/* Alternative Logins */
+#alternative-logins legend { margin-bottom:10px; }
+#alternative-logins li { height:40px; display:inline-block; white-space:nowrap; }
/* NAVIGATION ------------------------------------------------------------- */
-#navigation { position:fixed; top:3.5em; float:left; width:12.5em; padding:0; z-index:75; height:100%; background:#eee; border-right:1px #ccc solid; -moz-box-shadow:-3px 0 7px #000; -webkit-box-shadow:-3px 0 7px #000; box-shadow:-3px 0 7px #000; overflow:hidden;}
-#navigation a { display:block; padding:.6em .5em .4em 2.5em; background:#eee 1em center no-repeat; border-bottom:1px solid #ddd; border-top:1px solid #fff; text-decoration:none; font-size:1.2em; color:#666; text-shadow:#f8f8f8 0 1px 0; }
-#navigation a.active, #navigation a:hover, #navigation a:focus { background-color:#dbdbdb; border-top:1px solid #d4d4d4; border-bottom:1px solid #ccc; color:#333; }
-#navigation a.active { background-color:#ddd; }
-#navigation #settings { position:absolute; bottom:3.5em; width:100%; }
-#expand { position:relative; z-index:100; margin-bottom:-.5em; padding:.5em 10.1em .7em 1.2em; cursor:pointer; }
-#expand+span { position:absolute; z-index:99; margin:-1.7em 0 0 2.5em; font-size:1.2em; color:#666; text-shadow:#f8f8f8 0 1px 0; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }
-#expand:hover+span, #expand+span:hover { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; cursor:pointer; }
+#navigation {
+ position:fixed; top:3.5em; float:left; width:64px; padding:0; z-index:75; height:100%;
+ background:#383c43 url('../img/noise.png') repeat; border-right:1px #333 solid;
+ -moz-box-shadow:0 0 7px #000; -webkit-box-shadow:0 0 7px #000; box-shadow:0 0 7px #000;
+ overflow-x:scroll;
+}
+#navigation a {
+ display:block; padding:8px 0 4px;
+ text-decoration:none; font-size:10px; text-align:center;
+ color:#fff; text-shadow:#000 0 -1px 0; opacity:.5;
+ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; // ellipsize long app names
+}
+ #navigation a:hover, #navigation a:focus { opacity:.8; }
+ #navigation a.active { opacity:1; }
+ #navigation .icon { display:block; width:32px; height:32px; margin:0 16px 0; }
+ #navigation li:first-child a { padding-top:16px; }
+#settings { float:right; margin-top:7px; color:#bbb; text-shadow:0 -1px 0 #000; }
+#expand { padding:15px; cursor:pointer; font-weight:bold; }
+#expand:hover, #expand:focus, #expand:active { color:#fff; }
+#expand img { opacity:.7; margin-bottom:-2px; }
+#expand:hover img, #expand:focus img, #expand:active img { opacity:1; }
+#expanddiv {
+ position:absolute; right:0; top:45px; z-index:76; display:none;
+ background-color:#444; border-bottom-left-radius:7px; box-shadow: 0 0 20px rgb(29,45,68);
+}
+ #expanddiv a { display:block; color:#fff; text-shadow:0 -1px 0 #000; padding:0 8px; opacity:.7; }
+ #expanddiv a img { margin-bottom:-3px; }
+ #expanddiv a:hover, #expanddiv a:focus, #expanddiv a:active { opacity:1; }
+
/* VARIOUS REUSABLE SELECTORS */
.hidden { display:none; }
.bold { font-weight:bold; }
.center { text-align:center; }
-#notification { z-index:101; background-color:#fc4; border:0; padding:0 .7em .3em; display:none; position:fixed; left:50%; top:0; -moz-border-radius-bottomleft:1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius:1em; border-bottom-right-radius:1em; }
+#notification-container { position: fixed; top: 0px; width: 100%; text-align: center; z-index: 101; line-height: 1.2;}
+#notification { z-index:101; background-color:#fc4; border:0; padding:0 .7em .3em; display:none; position: relative; top:0; -moz-border-radius-bottomleft:1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius:1em; border-bottom-right-radius:1em; }
#notification span { cursor:pointer; font-weight:bold; margin-left:1em; }
-tr .action, .selectedActions a { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; }
-tr:hover .action, .selectedActions a { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter:alpha(opacity=50); opacity:.5; }
+tr .action:not(.permanent), .selectedActions a { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; }
+tr:hover .action, tr .action.permanent, .selectedActions a { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter:alpha(opacity=50); opacity:.5; }
tr .action { width:16px; height:16px; }
.header-action { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; }
tr:hover .action:hover, .selectedActions a:hover, .header-action:hover { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
@@ -255,8 +321,11 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin
.arrow.left { left:-13px; bottom:1.2em; -webkit-transform:rotate(270deg); -moz-transform:rotate(270deg); -o-transform:rotate(270deg); -ms-transform:rotate(270deg); transform:rotate(270deg); }
.arrow.up { top:-8px; right:2em; }
.arrow.down { -webkit-transform:rotate(180deg); -moz-transform:rotate(180deg); -o-transform:rotate(180deg); -ms-transform:rotate(180deg); transform:rotate(180deg); }
+.help-includes {overflow: hidden; width: 100%; height: 100%; -moz-box-sizing: border-box; box-sizing: border-box; padding-top: 2.8em; }
+.help-iframe {width: 100%; height: 100%; margin: 0;padding: 0; border: 0; overflow: auto;}
/* ---- BREADCRUMB ---- */
-div.crumb { float:left; display:block; background:no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; }
-div.crumb:first-child { padding-left:1em; }
-div.crumb.last { font-weight:bold; }
+div.crumb { float:left; display:block; background:url('../img/breadcrumb.svg') no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; -moz-box-sizing:border-box; box-sizing:border-box; }
+div.crumb:first-child { padding:10px 20px 10px 5px; }
+div.crumb.last { font-weight:bold; background:none; padding-right:10px; }
+div.crumb a{ padding: 0.9em 0 0.7em 0; }
diff --git a/core/img/actions/caret.png b/core/img/actions/caret.png
new file mode 100644
index 00000000000..e0ae969a943
--- /dev/null
+++ b/core/img/actions/caret.png
Binary files differ
diff --git a/core/img/actions/caret.svg b/core/img/actions/caret.svg
new file mode 100644
index 00000000000..7bb0c59cde2
--- /dev/null
+++ b/core/img/actions/caret.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="10"
+ height="10"
+ id="svg2403"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="logout.svg"
+ inkscape:export-filename="caret.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="800"
+ id="namedview3047"
+ showgrid="false"
+ inkscape:zoom="25.279067"
+ inkscape:cx="3.6223673"
+ inkscape:cy="6.0978375"
+ inkscape:window-x="0"
+ inkscape:window-y="-31"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2403"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <metadata
+ id="metadata15">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs2405">
+ <linearGradient
+ x1="11.644068"
+ y1="2.4988678"
+ x2="11.644068"
+ y2="15.00281"
+ id="linearGradient2392"
+ xlink:href="#linearGradient3678"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(1.0000001,1.1920928e-8)" />
+ <linearGradient
+ x1="8.4964771"
+ y1="-0.061573759"
+ x2="8.4964771"
+ y2="8.083209"
+ id="linearGradient2395"
+ xlink:href="#linearGradient3678"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0526316,0,0,0.9843625,0.5789474,0.06024281)" />
+ <linearGradient
+ id="linearGradient3678">
+ <stop
+ id="stop3680"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3682"
+ style="stop-color:#e6e6e6;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3678"
+ id="linearGradient2993"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0526316,0,0,0.9843625,-3.4210526,1.060243)"
+ x1="8.4964771"
+ y1="-0.061573759"
+ x2="8.4964771"
+ y2="8.083209" />
+ </defs>
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path3023"
+ d="M 1,2 5,10 9,2.011 z"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+ <path
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:url(#linearGradient2993);fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="M 1,1 5,9 9,1.011 z"
+ id="path3716"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+</svg>
diff --git a/core/img/actions/close.png b/core/img/actions/close.png
new file mode 100644
index 00000000000..bc0c782882d
--- /dev/null
+++ b/core/img/actions/close.png
Binary files differ
diff --git a/core/img/actions/close.svg b/core/img/actions/close.svg
new file mode 100644
index 00000000000..6a6d98e34ad
--- /dev/null
+++ b/core/img/actions/close.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg3875"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="close.svg"
+ inkscape:export-filename="close.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3877" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.67268"
+ inkscape:cx="11.940651"
+ inkscape:cy="15.685139"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3883"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3880">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ d="m 3,1040.3622 1,-1 4,3 4,-3 1,1 -3,4 3,4 -1,1 -4,-3 -4,3 -1,-1 3,-4 z"
+ id="path3086"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccc" />
+ </g>
+</svg>
diff --git a/core/img/actions/delete-hover.png b/core/img/actions/delete-hover.png
new file mode 100644
index 00000000000..08b15510d92
--- /dev/null
+++ b/core/img/actions/delete-hover.png
Binary files differ
diff --git a/core/img/actions/delete-hover.svg b/core/img/actions/delete-hover.svg
new file mode 100644
index 00000000000..63cacd5e38e
--- /dev/null
+++ b/core/img/actions/delete-hover.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg3875"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="delete.svg"
+ inkscape:export-filename="delete-hover.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3877" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.67268"
+ inkscape:cx="11.940651"
+ inkscape:cy="15.685139"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3883"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3880">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#d40000;fill-opacity:1;stroke:none"
+ d="m 3,1040.3622 1,-1 4,3 4,-3 1,1 -3,4 3,4 -1,1 -4,-3 -4,3 -1,-1 3,-4 z"
+ id="path3086"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccc" />
+ </g>
+</svg>
diff --git a/core/img/actions/logout.png b/core/img/actions/logout.png
index 37f62543ac2..e2f4b7af12e 100644
--- a/core/img/actions/logout.png
+++ b/core/img/actions/logout.png
Binary files differ
diff --git a/core/img/actions/logout.svg b/core/img/actions/logout.svg
index 0281fad43e7..e5edc24895d 100644
--- a/core/img/actions/logout.svg
+++ b/core/img/actions/logout.svg
@@ -33,7 +33,7 @@
id="namedview3047"
showgrid="false"
inkscape:zoom="25.279067"
- inkscape:cx="5.0341304"
+ inkscape:cx="-1.6512429"
inkscape:cy="6.4537904"
inkscape:window-x="0"
inkscape:window-y="27"
@@ -47,7 +47,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -164,14 +164,15 @@
y2="15.216674" />
</defs>
<path
+ sodipodi:nodetypes="sccsccsccssscscssscscc"
+ inkscape:connector-curvature="0"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="m 8.0000634,0 c -0.4714045,0 -0.9610304,0.5419023 -0.95,1 l 0,6 c -0.00747,0.5283126 0.4216346,1 0.95,1 0.5283654,0 0.957472,-0.4716874 0.95,-1 l 0,-6 c 0.014622,-0.605105 -0.4785955,-1 -0.95,-1 z m -3.34375,2.5 c -0.087186,0.019294 -0.1716251,0.050959 -0.25,0.09375 -2.9994999,1.5715133 -3.91842874,4.7978566 -3.125,7.46875 C 2.0747421,12.733393 4.5611725,15 7.9688134,15 11.327833,15 13.846204,12.850562 14.687563,10.21875 15.528922,7.5869378 14.630363,4.3955638 11.562563,2.625 11.128957,2.3713639 10.503661,2.535122 10.250038,2.9687356 9.9964154,3.4023491 10.160192,4.0276401 10.593813,4.28125 c 2.390793,1.3798311 2.882452,3.4944109 2.28125,5.375 -0.601202,1.880589 -2.344037,3.4375 -4.9062496,3.4375 -2.575923,0 -4.297634,-1.650181 -4.875,-3.59375 C 2.5164474,7.5564313 3.0469519,5.451888 5.2813134,4.28125 5.6599659,4.0748887 5.8603711,3.5887067 5.7371222,3.1754605 5.6138734,2.7622144 5.1798937,2.4652349 4.7500634,2.5 4.7188384,2.49846 4.6875384,2.49846 4.6563134,2.5 z"
+ id="path3781" />
+ <path
id="path3927"
d="m 8.0000634,1 c -0.4714045,0 -0.9610304,0.5419023 -0.95,1 l 0,6 c -0.00747,0.5283126 0.4216346,1 0.95,1 0.5283654,0 0.957472,-0.4716874 0.95,-1 l 0,-6 c 0.014622,-0.605105 -0.4785955,-1 -0.95,-1 z m -3.34375,2.5 c -0.087186,0.019294 -0.1716251,0.050959 -0.25,0.09375 -2.9994999,1.5715133 -3.91842874,4.7978566 -3.125,7.46875 C 2.0747421,13.733393 4.5611725,16 7.9688134,16 11.327833,16 13.846204,13.850562 14.687563,11.21875 15.528922,8.5869378 14.630363,5.3955638 11.562563,3.625 11.128957,3.3713639 10.503661,3.535122 10.250038,3.9687356 9.9964154,4.4023491 10.160192,5.0276401 10.593813,5.28125 c 2.390793,1.3798311 2.882452,3.4944109 2.28125,5.375 -0.601202,1.880589 -2.344037,3.4375 -4.9062496,3.4375 -2.575923,0 -4.297634,-1.650181 -4.875,-3.59375 C 2.5164474,8.5564313 3.0469519,6.451888 5.2813134,5.28125 5.6599659,5.0748887 5.8603711,4.5887067 5.7371222,4.1754605 5.6138734,3.7622144 5.1798937,3.4652349 4.7500634,3.5 4.7188384,3.49846 4.6875384,3.49846 4.6563134,3.5 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sccsccsccssscscssscscc" />
- <path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:url(#linearGradient3942);fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- d="m 8.0000634,0 c -0.4714045,0 -1.0110304,0.54190231 -1,1 l 0,6 c -0.00747,0.5283126 0.4716346,1 1,1 0.5283654,0 1.007472,-0.4716874 1,-1 l 0,-6 c 0.014622,-0.60510499 -0.5285955,-1 -1,-1 z m -3.34375,2.5 a 0.95009499,0.95009499 0 0 0 -0.25,0.09375 C 1.4068135,4.1652633 0.48788466,7.3916066 1.2813134,10.0625 2.0747421,12.733393 4.5611725,15 7.9688134,15 c 3.3590196,0 5.8773906,-2.149438 6.7187496,-4.78125 0.841359,-2.6318122 -0.0572,-5.8231862 -3.125,-7.59375 a 0.95938009,0.95938009 0 1 0 -0.96875,1.65625 c 2.390793,1.3798311 2.882452,3.4944109 2.28125,5.375 -0.601202,1.880589 -2.344037,3.4375 -4.9062496,3.4375 -2.575923,0 -4.297634,-1.650181 -4.875,-3.59375 -0.577366,-1.9435687 -0.046862,-4.048112 2.1875,-5.21875 A 0.95009499,0.95009499 0 0 0 4.7500634,2.5 a 0.95009499,0.95009499 0 0 0 -0.09375,0 z"
- id="path3716"
- inkscape:connector-curvature="0" />
</svg>
diff --git a/core/img/actions/toggle.png b/core/img/actions/toggle.png
new file mode 100644
index 00000000000..6ef3f2227b7
--- /dev/null
+++ b/core/img/actions/toggle.png
Binary files differ
diff --git a/core/img/actions/toggle.svg b/core/img/actions/toggle.svg
new file mode 100644
index 00000000000..82a5171477e
--- /dev/null
+++ b/core/img/actions/toggle.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0px"
+ y="0px"
+ width="16px"
+ height="9px"
+ viewBox="0 0 16 9"
+ overflow="visible"
+ enable-background="new 0 0 16 9"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="eye_all.svg"><metadata
+ id="metadata12"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1021"
+ id="namedview10"
+ showgrid="false"
+ inkscape:zoom="20.75"
+ inkscape:cx="8.0963855"
+ inkscape:cy="4.5"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2" />
+<defs
+ id="defs4">
+</defs>
+<path
+ fill="#575756"
+ d="M7.999,0C4.89,0,2.073,1.719,0,4.5C2.073,7.281,4.89,9,7.999,9C11.11,9,13.927,7.281,16,4.5 C13.927,1.719,11.108,0,7.999,0z M8,7.5c-1.657,0-3-1.343-3-3s1.343-3,3-3c1.657,0,3,1.343,3,3S9.657,7.5,8,7.5z"
+ id="path6"
+ style="fill:#222222;fill-opacity:1" />
+<circle
+ fill="#575756"
+ cx="8"
+ cy="4.501"
+ r="1.5"
+ id="circle8"
+ style="fill:#222222;fill-opacity:1" />
+</svg> \ No newline at end of file
diff --git a/core/img/actions/undelete.png b/core/img/actions/undelete.png
new file mode 100644
index 00000000000..d712527ef61
--- /dev/null
+++ b/core/img/actions/undelete.png
Binary files differ
diff --git a/core/img/actions/view-close.png b/core/img/actions/view-close.png
new file mode 100644
index 00000000000..80339d78229
--- /dev/null
+++ b/core/img/actions/view-close.png
Binary files differ
diff --git a/core/img/actions/view-close.svg b/core/img/actions/view-close.svg
new file mode 100644
index 00000000000..45d66976084
--- /dev/null
+++ b/core/img/actions/view-close.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg3875"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="view-close.svg"
+ inkscape:export-filename="view-close.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3877" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.3363397"
+ inkscape:cx="4.7098147"
+ inkscape:cy="23.356371"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3883"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3880">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none"
+ d="m 6,1028.3622 2,-2 8,7 8,-7 2,2 -7,8 7,8 -2,2 -8,-7 -8,7 -2,-2 7,-8 z"
+ id="path3086"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccc" />
+ </g>
+</svg>
diff --git a/core/img/actions/view-next.png b/core/img/actions/view-next.png
new file mode 100644
index 00000000000..b76bea06713
--- /dev/null
+++ b/core/img/actions/view-next.png
Binary files differ
diff --git a/core/img/actions/view-next.svg b/core/img/actions/view-next.svg
new file mode 100644
index 00000000000..d5642f1a11c
--- /dev/null
+++ b/core/img/actions/view-next.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg3875"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="view-next.svg"
+ inkscape:export-filename="view-next.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3877" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.3363398"
+ inkscape:cx="30.082863"
+ inkscape:cy="19.387471"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3883"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3880">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none"
+ d="m 9,1024.3622 2,-2 14,14 -14,14 -2,-2 10,-12 z"
+ id="path3086"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+</svg>
diff --git a/core/img/actions/view-pause.png b/core/img/actions/view-pause.png
new file mode 100644
index 00000000000..64264ff9281
--- /dev/null
+++ b/core/img/actions/view-pause.png
Binary files differ
diff --git a/core/img/actions/view-pause.svg b/core/img/actions/view-pause.svg
new file mode 100644
index 00000000000..0edc6f14e28
--- /dev/null
+++ b/core/img/actions/view-pause.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg3875"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="pause.svg"
+ inkscape:export-filename="view-pause.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3877" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.3363397"
+ inkscape:cx="8.9383019"
+ inkscape:cy="10.400115"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3883"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3880">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none"
+ d="m 6,1026.3622 0,20 8,0 0,-20 -8,0 z m 12,0 0,20 8,0 0,-20 -8,0 z"
+ id="path3086"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/core/img/actions/view-play.png b/core/img/actions/view-play.png
new file mode 100644
index 00000000000..0080d45b5cd
--- /dev/null
+++ b/core/img/actions/view-play.png
Binary files differ
diff --git a/core/img/actions/view-play.svg b/core/img/actions/view-play.svg
new file mode 100644
index 00000000000..0bdc63bf7e1
--- /dev/null
+++ b/core/img/actions/view-play.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg3875"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="play.svg"
+ inkscape:export-filename="view-play.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3877" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.3363397"
+ inkscape:cx="12.629914"
+ inkscape:cy="9.5218526"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3883"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3880">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none"
+ d="m 4,1024.3622 24,12 -24,12 z"
+ id="path3086"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/core/img/actions/view-previous.png b/core/img/actions/view-previous.png
new file mode 100644
index 00000000000..82943c23a59
--- /dev/null
+++ b/core/img/actions/view-previous.png
Binary files differ
diff --git a/core/img/actions/view-previous.svg b/core/img/actions/view-previous.svg
new file mode 100644
index 00000000000..df1f49511d0
--- /dev/null
+++ b/core/img/actions/view-previous.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg3875"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="view-next.svg"
+ inkscape:export-filename="view-previous.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3877" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.67268"
+ inkscape:cx="13.313675"
+ inkscape:cy="18.927817"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3883"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3880">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path2984"
+ d="m 23,1024.3622 -2,-2 -14,14 14,14 2,-2 -10,-12 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:none" />
+ </g>
+</svg>
diff --git a/core/img/appstore.png b/core/img/appstore.png
new file mode 100644
index 00000000000..009b2b51b98
--- /dev/null
+++ b/core/img/appstore.png
Binary files differ
diff --git a/core/img/desktopapp.png b/core/img/desktopapp.png
new file mode 100644
index 00000000000..182ddd2cf18
--- /dev/null
+++ b/core/img/desktopapp.png
Binary files differ
diff --git a/core/img/desktopapp.svg b/core/img/desktopapp.svg
new file mode 100644
index 00000000000..93d91e461a6
--- /dev/null
+++ b/core/img/desktopapp.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="170"
+ height="60"
+ viewBox="0 0 1346.4 475.2"
+ enable-background="new 0 0 792 612"
+ xml:space="preserve"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="desktopapp.svg"
+ inkscape:export-filename="desktopapp.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><metadata
+ id="metadata3043"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs3041" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ id="namedview3039"
+ showgrid="true"
+ fit-margin-top="3"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="3"
+ inkscape:zoom="2"
+ inkscape:cx="155.97228"
+ inkscape:cy="56.168028"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1"
+ showguides="true"
+ inkscape:guide-bbox="true"><inkscape:grid
+ type="xygrid"
+ id="grid3146"
+ empspacing="4"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ originx="-3.5865408e-16px"
+ originy="-3px" /></sodipodi:namedview>
+
+
+<rect
+ id="rect3026"
+ width="1346.3999"
+ height="475.20016"
+ x="-2.8405402e-15"
+ y="-3.5527137e-15"
+ rx="50"
+ ry="50"
+ style="fill:#1a1a1a" /><path
+ d="m 150.48,126.72 c -11.88,0 -23.76,11.88 -23.76,23.76 l 0,166.32 -47.52,23.76 0,11.88 c 0,0 0,11.88 11.88,11.88 l 356.4,0 c 11.88,0 11.88,-11.88 11.88,-11.88 l 0,-11.88 -47.52,-23.76 0,-166.32 c 0,-11.88 -11.88,-23.76 -23.76,-23.76 z m 0,23.66718 237.6,0 0,142.65282 -237.6,0 z"
+ id="path3037"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sscccsscccsssccccc"
+ style="fill:#ffffff" /><text
+ xml:space="preserve"
+ style="font-size:316.79998778999998876px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
+ x="451.44"
+ y="239.58"
+ id="text2983"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2985"
+ x="451.44"
+ y="239.58"
+ style="font-size:126.71999999999999886px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:FreeSans;-inkscape-font-specification:FreeSans Semi-Bold;fill:#ffffff">Desktop app</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:316.79998778999998876px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
+ x="493.01996"
+ y="342.54001"
+ id="text2991"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2993"
+ x="493.01996"
+ y="342.54001"
+ style="font-size:71.28000000000000114px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:FreeSans;-inkscape-font-specification:FreeSans;fill:#ffffff">Windows, OS X, Linux</tspan></text>
+</svg> \ No newline at end of file
diff --git a/core/img/filetypes/application.png b/core/img/filetypes/application.png
new file mode 100644
index 00000000000..1dee9e36609
--- /dev/null
+++ b/core/img/filetypes/application.png
Binary files differ
diff --git a/core/img/googleplay.png b/core/img/googleplay.png
new file mode 100644
index 00000000000..2d9ad629608
--- /dev/null
+++ b/core/img/googleplay.png
Binary files differ
diff --git a/core/img/noise.png b/core/img/noise.png
new file mode 100644
index 00000000000..8fdda17b5e3
--- /dev/null
+++ b/core/img/noise.png
Binary files differ
diff --git a/core/img/places/files.png b/core/img/places/files.png
new file mode 100644
index 00000000000..9c7ff2642f9
--- /dev/null
+++ b/core/img/places/files.png
Binary files differ
diff --git a/core/img/places/files.svg b/core/img/places/files.svg
new file mode 100644
index 00000000000..8ebf861f6d5
--- /dev/null
+++ b/core/img/places/files.svg
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg3349"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="files.svg"
+ inkscape:export-filename="files.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3351">
+ <linearGradient
+ id="linearGradient3754">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3756" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.70779222;"
+ offset="1"
+ id="stop3758" />
+ </linearGradient>
+ <linearGradient
+ y2="1013.451"
+ x2="209.34245"
+ y1="998.45801"
+ x1="209.34245"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3528"
+ xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-55-2"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3587-6-5-3-4-5-4-0-1-55-2">
+ <stop
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop3589-9-2-2-3-2-53-4-3-95-4" />
+ <stop
+ offset="1"
+ style="stop-color:#363636;stop-opacity:1"
+ id="stop3591-7-4-73-7-9-86-9-3-6-3" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3587-6-5-2-1">
+ <stop
+ id="stop3589-9-2-8-2"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3591-7-4-0-2"
+ style="stop-color:#363636;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="9.6005683"
+ inkscape:cy="17.34375"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1280"
+ inkscape:window-height="773"
+ inkscape:window-x="0"
+ inkscape:window-y="-1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4530"
+ empspacing="4"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ dotted="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3354">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(573.14286,110.2963)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m -570.22204,-108.29572 c -0.50115,0 -0.92082,0.41966 -0.92082,0.92081 l 0,24.157882 c 0,0.51739 0.40324,0.920728 0.92082,0.920728 l 26.15768,0 c 0.51756,0 0.92081,-0.403165 0.92081,-0.920728 l 6.9e-4,-14.154116 c 0,-0.501097 -0.41966,-0.925235 -0.92081,-0.925235 l -21.07897,0 -7e-4,11.004713 c 0,0.480123 -0.52409,0.97706 -1.00422,0.97706 -0.48012,0 -0.99573,-0.496937 -0.99573,-0.97706 l 7e-4,-12.142797 c 0,-0.480124 0.40484,-0.862147 0.88497,-0.862147 l 4.59443,0 14.52051,5.2e-4 -7e-4,-2.95163 c 0,-0.56713 -0.42551,-1.04812 -0.99245,-1.04812 l -13.00724,0 0,-3.07907 c 0,-0.50118 -0.40586,-0.92081 -0.90701,-0.92081 z"
+ id="path5073"
+ sodipodi:nodetypes="ccccccccccsccccccccccc"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ sodipodi:nodetypes="ccccccccccsccccccccccc"
+ id="rect3845-5"
+ d="m -570.22204,-107.2957 c -0.50115,0 -0.92082,0.41966 -0.92082,0.92081 l 0,24.157884 c 0,0.51739 0.40324,0.920728 0.92082,0.920728 l 26.15768,0 c 0.51756,0 0.92081,-0.403165 0.92081,-0.920728 l 6.9e-4,-14.154116 c 0,-0.501097 -0.41966,-0.925235 -0.92081,-0.925235 l -21.07897,0 -7e-4,11.004713 c 0,0.480123 -0.52409,0.97706 -1.00422,0.97706 -0.48012,0 -0.99573,-0.496937 -0.99573,-0.97706 l 7e-4,-12.142797 c 0,-0.480124 0.40484,-0.862143 0.88497,-0.862143 l 4.59443,0 14.52051,5.2e-4 -7e-4,-2.951636 c 0,-0.56713 -0.42551,-1.04812 -0.99245,-1.04812 l -13.00724,0 0,-3.07907 c 0,-0.50118 -0.40586,-0.92081 -0.90701,-0.92081 z"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/core/img/places/home.png b/core/img/places/home.png
index c3dbd3e3538..2945b84e868 100644
--- a/core/img/places/home.png
+++ b/core/img/places/home.png
Binary files differ
diff --git a/core/img/places/home.svg b/core/img/places/home.svg
index 4b45ef12bcb..a836a5999f0 100644
--- a/core/img/places/home.svg
+++ b/core/img/places/home.svg
@@ -14,9 +14,9 @@
width="16"
height="16"
id="svg11300"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="help.svg"
- inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/help.png"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="home.svg"
+ inkscape:export-filename="home.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
@@ -27,7 +27,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -41,16 +41,16 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
- inkscape:window-height="776"
+ inkscape:window-height="773"
id="namedview24"
showgrid="true"
showguides="true"
inkscape:guide-bbox="true"
- inkscape:zoom="22.627418"
- inkscape:cx="14.025105"
- inkscape:cy="9.2202448"
+ inkscape:zoom="16.000001"
+ inkscape:cx="2.7409248"
+ inkscape:cy="8.4568105"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="-1"
inkscape:window-maximized="1"
inkscape:current-layer="g4146">
<inkscape:grid
@@ -65,6 +65,17 @@
<defs
id="defs3">
<linearGradient
+ id="linearGradient4085">
+ <stop
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop4087" />
+ <stop
+ offset="1"
+ style="stop-color:#363636;stop-opacity:0.7"
+ id="stop4089" />
+ </linearGradient>
+ <linearGradient
id="linearGradient4136">
<stop
offset="0"
@@ -1743,6 +1754,44 @@
id="linearGradient3475"
xlink:href="#linearGradient3587-6-5-26"
inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3587-6-5-26"
+ id="linearGradient4074"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(13.927091,-3.426613)"
+ x1="-2.4040222"
+ y1="4.4573336"
+ x2="-2.4040222"
+ y2="18.967093" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4085"
+ id="linearGradient4083"
+ x1="8"
+ y1="1"
+ x2="8"
+ y2="15.458407"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4085"
+ id="linearGradient4121"
+ gradientUnits="userSpaceOnUse"
+ x1="8"
+ y1="1"
+ x2="8"
+ y2="15.458407"
+ gradientTransform="translate(-20,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4085"
+ id="linearGradient4436"
+ x1="8"
+ y1="1"
+ x2="8"
+ y2="15"
+ gradientUnits="userSpaceOnUse" />
</defs>
<g
transform="matrix(0.78786264,0,0,0.78786264,-3.1483699,0.44173984)"
@@ -1761,19 +1810,10 @@
style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
<g
id="g4146">
- <g
- id="g4550"
- transform="translate(0,-20)">
- <path
- inkscape:connector-curvature="0"
- d="M 8,22.03072 0,30 l 3,0 0,6 10,0 0,-6 3,0 L 13,26.969459 13,23 l -3.0000001,0 0,1.081152 L 8,22.03072 z"
- id="path3887"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- d="M 8,21.03072 0,29 l 3,0 0,6 10,0 0,-6 3,0 L 13,25.969459 13,22 l -3.0000001,0 0,1.081152 L 8,21.03072 z"
- id="path3883"
- style="opacity:0.7;fill:url(#linearGradient3475);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
+ <path
+ inkscape:connector-curvature="0"
+ d="M 8,1.030589 0,9 l 3,0 0,6.0001 10,0 L 13,9 l 3,0 -3,-3.030592 0,-3.969524 -3,0 0,1.081169 -2,-2.050464 z"
+ id="path3328"
+ style="fill:url(#linearGradient4436);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.7" />
</g>
</svg>
diff --git a/core/img/places/music.png b/core/img/places/music.png
index 85ee2474cd1..5b71e19ee3c 100644
--- a/core/img/places/music.png
+++ b/core/img/places/music.png
Binary files differ
diff --git a/core/img/places/music.svg b/core/img/places/music.svg
index 1f397660970..e8f91f46166 100644
--- a/core/img/places/music.svg
+++ b/core/img/places/music.svg
@@ -7,1664 +7,67 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.0"
- width="16"
- height="16"
- id="svg11300"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="search.svg"
- inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/search.png"
+ width="32"
+ height="32"
+ id="svg4375"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="music.svg"
+ inkscape:export-filename="music.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
+ <defs
+ id="defs4377" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.2"
+ inkscape:cx="7.9636746"
+ inkscape:cy="12.572189"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1280"
+ inkscape:window-height="745"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
<metadata
- id="metadata26">
+ id="metadata4380">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
- <sodipodi:namedview
- pagecolor="#cccccc"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1280"
- inkscape:window-height="776"
- id="namedview24"
- showgrid="true"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:zoom="22.627418"
- inkscape:cx="-2.2078397"
- inkscape:cy="6.5568429"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg11300">
- <inkscape:grid
- type="xygrid"
- id="grid4330"
- empspacing="5"
- dotted="true"
- visible="true"
- enabled="true"
- snapvisiblegridlinesonly="true" />
- </sodipodi:namedview>
- <defs
- id="defs3">
- <linearGradient
- id="linearGradient4136">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1;"
- id="stop4138" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop4140" />
- </linearGradient>
- <linearGradient
- id="linearGradient4303">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop4305" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop4307" />
- </linearGradient>
- <linearGradient
- id="linearGradient4297">
- <stop
- id="stop4299"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4301"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient4115">
- <stop
- id="stop4117"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4119"
- style="stop-color:#363636;stop-opacity:0.698"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3785">
- <stop
- id="stop3787"
- style="stop-color:#b8b8b8;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3789"
- style="stop-color:#878787;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient6954">
- <stop
- id="stop6960"
- style="stop-color:#f5f5f5;stop-opacity:1"
- offset="0" />
- <stop
- id="stop6962"
- style="stop-color:#d2d2d2;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3341">
- <stop
- id="stop3343"
- style="stop-color:white;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3345"
- style="stop-color:white;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <radialGradient
- cx="24.999998"
- cy="28.659998"
- r="16"
- fx="24.999998"
- fy="28.659998"
- id="radialGradient2856"
- xlink:href="#linearGradient6954"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.56186795,0,0,0.15787922,-6.1682604,5.3385209)" />
- <linearGradient
- x1="30"
- y1="25.084745"
- x2="30"
- y2="45"
- id="linearGradient2858"
- xlink:href="#linearGradient3785"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.42808986,0,0,0.42296591,-2.823809,-3.2486024)" />
- <radialGradient
- cx="26.375898"
- cy="12.31301"
- r="8"
- fx="26.375898"
- fy="12.31301"
- id="radialGradient2860"
- xlink:href="#linearGradient6954"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.55250164,-0.0426402,0.04315608,0.50971914,-6.3026675,-1.9765067)" />
- <linearGradient
- x1="30"
- y1="5"
- x2="30"
- y2="44.678879"
- id="linearGradient2862"
- xlink:href="#linearGradient3785"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.33685737,0,0,0.32161283,-0.10572085,-0.29529973)" />
- <linearGradient
- x1="30"
- y1="0.91818392"
- x2="30"
- y2="25.792814"
- id="linearGradient2864"
- xlink:href="#linearGradient3341"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.33685737,0,0,0.32161283,-0.10572085,-0.29529973)" />
- <linearGradient
- x1="29.955881"
- y1="21.86607"
- x2="29.955881"
- y2="43.144382"
- id="linearGradient2866"
- xlink:href="#linearGradient3341"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.42808986,0,0,0.42296591,-2.823809,-3.2486024)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient7308"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.54681372,0,0,0.39376081,3.7325729,-0.29182867)"
- x1="34.992828"
- y1="0.94087797"
- x2="34.992828"
- y2="33.955856" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3796"
- x1="8.3635759"
- y1="15.028702"
- x2="15.937561"
- y2="11.00073"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3798"
- x1="6.9951797"
- y1="4.7478018"
- x2="13.00482"
- y2="4.7478018"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3815"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-5"
- id="linearGradient3815-3"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-5">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-9" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-5"
- id="linearGradient3831"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient3833">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3835" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3837" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3874"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2"
- id="linearGradient3892-2"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(0.96967712,0,0,0.96967712,0.26437941,-0.96950812)"
- y2="16.052532"
- x2="8.6826077"
- y1="1.0035814"
- x1="8.7094374"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3909"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3984"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(0.78786264,0,0,0.78786264,-1.5726929,-0.7389112)"
- y2="16.052532"
- x2="8.6826077"
- y1="1.0035814"
- x1="8.7094374"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3909-3"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2-2"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-2">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-7" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4115-9"
- id="linearGradient4113-3"
- x1="0.86849999"
- y1="13.895414"
- x2="0.44923753"
- y2="28.776533"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient4115-9">
- <stop
- id="stop4117-5"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4119-6"
- style="stop-color:#363636;stop-opacity:0.698"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3104"
- id="linearGradient3815-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.23426255,0,0,0.2859159,18.734419,0.35950872)"
- x1="-51.786404"
- y1="50.786446"
- x2="-51.786404"
- y2="2.9062471" />
- <linearGradient
- id="linearGradient3104">
- <stop
- id="stop3106"
- style="stop-color:#aaaaaa;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3108"
- style="stop-color:#c8c8c8;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <radialGradient
- cx="13.138569"
- cy="25.625349"
- r="13.931416"
- fx="13.138569"
- fy="25.625349"
- id="radialGradient2965"
- xlink:href="#linearGradient3690-451"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,0.92614711,-1.0546317,0,32.402583,-9.3345932)" />
- <linearGradient
- id="linearGradient3690-451">
- <stop
- id="stop2857"
- style="stop-color:#e8e8e8;stop-opacity:1"
- offset="0" />
- <stop
- id="stop2859"
- style="stop-color:#d8d8d8;stop-opacity:1"
- offset="0.26238" />
- <stop
- id="stop2861"
- style="stop-color:#c2c2c2;stop-opacity:1"
- offset="0.66093999" />
- <stop
- id="stop2863"
- style="stop-color:#a5a5a5;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="21.483376"
- y1="36.255058"
- x2="21.483376"
- y2="9.5799999"
- id="linearGradient2967"
- xlink:href="#linearGradient3603-84"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.55048262,0,0,0.57815823,-3.8262247,-5.2762279)" />
- <linearGradient
- id="linearGradient3603-84">
- <stop
- id="stop2867"
- style="stop-color:#707070;stop-opacity:1"
- offset="0" />
- <stop
- id="stop2869"
- style="stop-color:#9e9e9e;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11.566265"
- y1="22.292103"
- x2="15.214532"
- y2="33.95525"
- id="linearGradient3674-262"
- xlink:href="#linearGradient8265-821-176-38-919-66-249-529"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4893617,0,0,0.4893617,1.7131795,22.728095)" />
- <linearGradient
- id="linearGradient8265-821-176-38-919-66-249-529">
- <stop
- id="stop2873"
- style="stop-color:#ffffff;stop-opacity:0.27450982"
- offset="0" />
- <stop
- id="stop2875"
- style="stop-color:#ffffff;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="24.046366"
- y1="11.673002"
- x2="24.046366"
- y2="34.713669"
- id="linearGradient3677-116"
- xlink:href="#linearGradient3642-81"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.55048262,0,0,0.57815823,-3.8262247,-5.2762276)" />
- <linearGradient
- id="linearGradient3642-81">
- <stop
- id="stop2879"
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0" />
- <stop
- id="stop2881"
- style="stop-color:#ffffff;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="34.713669"
- x2="24.046366"
- y1="11.673002"
- x1="24.046366"
- gradientTransform="matrix(0.55048262,0,0,0.57815823,-3.8262247,-5.2762276)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3037"
- xlink:href="#linearGradient3642-81"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3155-40"
- id="linearGradient8639"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.415777,-0.4174938,0.518983,0.5146192,-15.747227,2.6503673)"
- spreadMethod="pad"
- x1="23.575972"
- y1="25.356892"
- x2="23.575972"
- y2="31.210939" />
- <linearGradient
- id="linearGradient3155-40">
- <stop
- id="stop2541"
- offset="0"
- style="stop-color:#181818;stop-opacity:1;" />
- <stop
- style="stop-color:#dbdbdb;stop-opacity:1;"
- offset="0.13482948"
- id="stop2543" />
- <stop
- id="stop2545"
- offset="0.20224422"
- style="stop-color:#a4a4a4;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.26965895"
- id="stop2547" />
- <stop
- id="stop2549"
- offset="0.44650277"
- style="stop-color:#8d8d8d;stop-opacity:1;" />
- <stop
- style="stop-color:#959595;stop-opacity:1;"
- offset="0.57114136"
- id="stop2551" />
- <stop
- id="stop2553"
- offset="0.72038066"
- style="stop-color:#cecece;stop-opacity:1;" />
- <stop
- id="stop2555"
- offset="1"
- style="stop-color:#181818;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3240-279"
- id="linearGradient8641"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.867764,0.6930272)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3240-279">
- <stop
- style="stop-color:#565656;stop-opacity:1;"
- offset="0"
- id="stop2559" />
- <stop
- id="stop2561"
- offset="0.5"
- style="stop-color:#9a9a9a;stop-opacity:1;" />
- <stop
- style="stop-color:#545454;stop-opacity:1;"
- offset="1"
- id="stop2563" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3223-789"
- id="linearGradient8643"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.983472,0.8092126)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3223-789">
- <stop
- id="stop2567"
- offset="0"
- style="stop-color:#b1b1b1;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.5"
- id="stop2569" />
- <stop
- id="stop2571"
- offset="1"
- style="stop-color:#8f8f8f;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3240-686"
- id="linearGradient8645"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.465684,0.2892868)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3240-686">
- <stop
- style="stop-color:#565656;stop-opacity:1;"
- offset="0"
- id="stop2575" />
- <stop
- id="stop2577"
- offset="0.5"
- style="stop-color:#9a9a9a;stop-opacity:1;" />
- <stop
- style="stop-color:#545454;stop-opacity:1;"
- offset="1"
- id="stop2579" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3223-768"
- id="linearGradient8647"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.581392,0.4054707)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3223-768">
- <stop
- id="stop2583"
- offset="0"
- style="stop-color:#b1b1b1;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.5"
- id="stop2585" />
- <stop
- id="stop2587"
- offset="1"
- style="stop-color:#8f8f8f;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3240-907"
- id="linearGradient8649"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.061661,-0.1164056)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3240-907">
- <stop
- style="stop-color:#565656;stop-opacity:1;"
- offset="0"
- id="stop2591" />
- <stop
- id="stop2593"
- offset="0.5"
- style="stop-color:#9a9a9a;stop-opacity:1;" />
- <stop
- style="stop-color:#545454;stop-opacity:1;"
- offset="1"
- id="stop2595" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3223-699"
- id="linearGradient8651"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.177369,-2.1969969e-4)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3223-699">
- <stop
- id="stop2599"
- offset="0"
- style="stop-color:#b1b1b1;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.5"
- id="stop2601" />
- <stop
- id="stop2603"
- offset="1"
- style="stop-color:#8f8f8f;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3290-678"
- id="linearGradient8653"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.602268,-17.636692,0.462492)"
- x1="9"
- y1="29.056757"
- x2="9"
- y2="26.02973" />
- <linearGradient
- id="linearGradient3290-678">
- <stop
- id="stop2607"
- offset="0"
- style="stop-color:#ece5a5;stop-opacity:1;" />
- <stop
- id="stop2609"
- offset="1"
- style="stop-color:#fcfbf2;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3191-577"
- id="linearGradient8655"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.3763801,0.03615261,0.03669995,0.374874,-2.2182805,-1.1331002)"
- x1="5.5178981"
- y1="37.371799"
- x2="9.5220556"
- y2="41.391716" />
- <linearGradient
- id="linearGradient3191-577">
- <stop
- id="stop2613"
- offset="0"
- style="stop-color:#dbce48;stop-opacity:1;" />
- <stop
- id="stop2615"
- offset="1"
- style="stop-color:#c5b625;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2-1-0"
- id="linearGradient3934-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99998838,0,0,0.99998838,-1.9961264,-41.000004)"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1-0">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4-9" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6-0" />
- </linearGradient>
- <linearGradient
- y2="16.052532"
- x2="8.6826077"
- y1="1.0035814"
- x1="8.7094374"
- gradientTransform="matrix(0.99998838,0,0,0.99998838,-1.9961264,-41.000004)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4154-8"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2-1-0-9"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1-0-9">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4-9-8" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6-0-4" />
- </linearGradient>
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1-0-9-0">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4-9-8-3" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6-0-4-8" />
- </linearGradient>
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1-0-3">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4-9-3" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6-0-6" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5"
- id="linearGradient4326"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6858824,0,0,0.68591053,-5.3691237,-18.974705)"
- x1="14.501121"
- y1="-1.4095211"
- x2="14.152531"
- y2="20.074369" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5"
- id="linearGradient4328"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99998838,0,0,0.99998838,-1.9961264,-41.000004)"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532" />
- <linearGradient
- x1="-2.4040222"
- y1="4.4573336"
- x2="-2.4040222"
- y2="18.967093"
- id="linearGradient3878"
- xlink:href="#linearGradient3587-6-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(13.927091,-3.4266134)" />
- <linearGradient
- id="linearGradient3587-6-5">
- <stop
- id="stop3589-9-2"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5"
- id="linearGradient4357"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0344828,0,0,1.0344828,8.0707628,-14.513825)"
- x1="0.86849999"
- y1="13.895414"
- x2="0.44923753"
- y2="28.776533" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient4405"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-55"
- id="linearGradient4413-7"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-55">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-95" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-6" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2"
- id="linearGradient4411-3"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- id="linearGradient3587-6-5-2">
- <stop
- id="stop3589-9-2-8"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-0"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4"
- id="linearGradient4466-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.23426255,0,0,0.2859159,18.734419,60.359508)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.553459"
- y2="54.703121" />
- <linearGradient
- id="linearGradient3587-6-5-2-4">
- <stop
- id="stop3589-9-2-8-7"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="54.703121"
- x2="-41.553459"
- y1="2.2401412"
- x1="-41.553459"
- gradientTransform="matrix(0.21864454,0,0,0.26685422,17.618755,60.402242)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4483-3"
- xlink:href="#linearGradient3587-6-5-2-4-9"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-9">
- <stop
- id="stop3589-9-2-8-7-2"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-8"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-55"
- id="linearGradient4564"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5"
- id="linearGradient4566"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(13.927091,16.573387)"
- x1="-2.4040222"
- y1="4.4573336"
- x2="-2.4040222"
- y2="18.967093" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2"
- id="linearGradient4578"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-55"
- id="linearGradient4580"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3"
- id="linearGradient4359-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99998838,0,0,0.99998838,29.038238,-21.358617)"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532" />
- <linearGradient
- id="linearGradient3587-6-5-3">
- <stop
- id="stop3589-9-2-6"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-5"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3"
- id="linearGradient4361-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6858824,0,0,0.68591053,25.66524,-19.333318)"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532" />
- <linearGradient
- id="linearGradient4597">
- <stop
- id="stop4599"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4601"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="16.052532"
- x2="8.6826077"
- y1="1.0035814"
- x1="8.7094374"
- gradientTransform="matrix(0.6858824,0,0,0.68591053,25.66524,-19.333318)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4610"
- xlink:href="#linearGradient3587-6-5-3"
- inkscape:collect="always" />
- <linearGradient
- x1="1.3333321"
- y1="6.6666665"
- x2="1.3333321"
- y2="33.333332"
- id="linearGradient2422"
- xlink:href="#linearGradient3587-6-5-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4090909,0,0,0.375,7.4545459,0.5)" />
- <linearGradient
- id="linearGradient3587-6-5-5">
- <stop
- id="stop3589-9-2-4"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-3"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837"
- id="linearGradient3189"
- xlink:href="#linearGradient3587-6-5-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,0.5)" />
- <linearGradient
- id="linearGradient3587-6-5-8">
- <stop
- id="stop3589-9-2-67"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-2"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837"
- id="linearGradient3203"
- xlink:href="#linearGradient3587-6-5-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5000001,0.5)" />
- <linearGradient
- id="linearGradient3120">
- <stop
- id="stop3122"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3124"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837"
- id="linearGradient3207"
- xlink:href="#linearGradient3587-6-5-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,7.499999)" />
- <linearGradient
- id="linearGradient3127">
- <stop
- id="stop3129"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3131"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837"
- id="linearGradient3211"
- xlink:href="#linearGradient3587-6-5-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5,7.5)" />
- <linearGradient
- id="linearGradient3134">
- <stop
- id="stop3136"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3138"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11"
- y1="6"
- x2="11"
- y2="17"
- id="linearGradient2409"
- xlink:href="#linearGradient3587-6-5-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2403101,0,0,0.8988764,10.387597,0.2247191)" />
- <linearGradient
- id="linearGradient3587-6-5-1">
- <stop
- id="stop3589-9-2-0"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-21"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="40.805084"
- y1="5.6271191"
- x2="40.805084"
- y2="17.627119"
- id="linearGradient3206"
- xlink:href="#linearGradient3587-8-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-32.805085,-3.6271193)" />
- <linearGradient
- id="linearGradient3587-8-5">
- <stop
- id="stop3589-2-7"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-3-5"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="17.627119"
- x2="40.805084"
- y1="5.6271191"
- x1="40.805084"
- gradientTransform="translate(-32.805085,-3.6271193)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3180"
- xlink:href="#linearGradient3587-8-5"
- inkscape:collect="always" />
- <linearGradient
- x1="1.3333321"
- y1="6.6666665"
- x2="1.3333321"
- y2="33.333332"
- id="linearGradient2422-1"
- xlink:href="#linearGradient3587-6-5-86"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2727273,0,0,0.375,9.636365,1.5)" />
- <linearGradient
- id="linearGradient3587-6-5-86">
- <stop
- id="stop3589-9-2-65"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-9"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11"
- y1="6"
- x2="11"
- y2="17"
- id="linearGradient2427"
- xlink:href="#linearGradient3587-6-5-86"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,1.5842703)" />
- <linearGradient
- id="linearGradient3207-3">
- <stop
- id="stop3209"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3211"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11"
- y1="6"
- x2="11"
- y2="17"
- id="linearGradient2436"
- xlink:href="#linearGradient3587-6-5-86"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,9.58427)" />
- <linearGradient
- id="linearGradient3214">
- <stop
- id="stop3216"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3218"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11"
- y1="6"
- x2="11"
- y2="17"
- id="linearGradient2442"
- xlink:href="#linearGradient3587-6-5-86"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,5.5842706)" />
- <linearGradient
- id="linearGradient3221">
- <stop
- id="stop3223"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3225"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="1.3333321"
- y1="4.9755898"
- x2="1.3333321"
- y2="37.373981"
- id="linearGradient2422-1-0"
- xlink:href="#linearGradient3587-6-5-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.39871888,0,0,0.3091132,71.812715,15.470662)" />
- <linearGradient
- id="linearGradient3587-6-5-0">
- <stop
- id="stop3589-9-2-5"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-1"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="46.395508"
- y1="12.707516"
- x2="46.395508"
- y2="38.409042"
- id="linearGradient3795-2"
- xlink:href="#linearGradient3587-6-5-3-5-7"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.4100229,0,0,0.5447147,28.02322,-5.9219706)" />
- <linearGradient
- id="linearGradient3587-6-5-3-5-7">
- <stop
- id="stop3589-9-2-2-6-2"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-73-5-1"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3587-6-5-3-5">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-6" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-5"
- id="linearGradient4872"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.4100229,0,0,0.5447147,19.329265,-26.729116)"
- x1="100.77747"
- y1="17.859186"
- x2="100.77747"
- y2="38.055252" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient4894"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5000001,0.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient4900"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,0.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient4906"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,7.499999)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient4912"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5,7.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- id="linearGradient3587-6-5-8-6">
- <stop
- id="stop3589-9-2-67-3"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-2-3"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient4935">
- <stop
- id="stop4937"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4939"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient4942">
- <stop
- id="stop4944"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4946"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8-6"
- id="linearGradient4912-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5,7.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- id="linearGradient4949">
- <stop
- id="stop4951"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4953"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient5012"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5,7.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient5015"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,7.499999)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient5018"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5000001,0.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient5021"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,0.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4"
- id="linearGradient3335"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.21864454,0,0,0.26685422,18.618755,-19.597758)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.553459"
- y2="54.703121" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4136"
- id="linearGradient4134"
- x1="9"
- y1="0"
- x2="9"
- y2="15"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4136"
- id="linearGradient4150"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- x1="9"
- y1="0"
- x2="9"
- y2="15" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6"
- id="linearGradient3335-7"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,76.619476,1.402242)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.755585"
- y2="47.208389" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6">
- <stop
- id="stop3589-9-2-8-7-8"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-0"
- id="linearGradient3335-7-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,16.619476,0.402242)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.553459"
- y2="54.703121" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-0">
- <stop
- id="stop3589-9-2-8-7-8-7"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-7"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-4"
- id="linearGradient3335-7-7"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,16.619476,0.402242)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.553459"
- y2="54.703121" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-4">
- <stop
- id="stop3589-9-2-8-7-8-2"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-2"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-7"
- id="linearGradient3335-7-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,16.619476,1.402242)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.755585"
- y2="47.208389" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-7">
- <stop
- id="stop3589-9-2-8-7-8-4"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-5"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-2"
- id="linearGradient3335-7-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,56.619476,1.4022422)"
- x1="-39.421574"
- y1="-5.2547116"
- x2="-39.421574"
- y2="47.208389" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-2">
- <stop
- id="stop3589-9-2-8-7-8-77"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-9"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4136-9"
- id="linearGradient4150-0"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- x1="9"
- y1="0"
- x2="9"
- y2="15" />
- <linearGradient
- id="linearGradient4136-9">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1;"
- id="stop4138-6" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop4140-3" />
- </linearGradient>
- <linearGradient
- y2="15"
- x2="9"
- y1="0"
- x1="9"
- spreadMethod="pad"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3374"
- xlink:href="#linearGradient4136-9"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4136-9"
- id="linearGradient3457"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- x1="9"
- y1="0"
- x2="9"
- y2="15" />
- </defs>
<g
- transform="matrix(0.78786264,0,0,0.78786264,-3.1483699,0.44173984)"
- id="g3743-3"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
- <rect
- style="color:#000000;fill:#ccc000;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect3136"
- width="163.31035"
- height="97.986206"
- x="-62.896553"
- y="-32.993103" />
- <g
- transform="matrix(0.99998873,0,0,0.99998873,-3.996044,-20.001608)"
- id="g3743-9-4"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
- <g
- id="g4146">
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(581.71429,-2.0764682)">
<path
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:none"
- id="path4031"
- d="m 13.36218,1.0010808 c -2.357103,0.379835 -5.5116295,0.770846 -7.8621805,1.1718941 -0.622438,0.303692 -0.482505,1.085702 -0.510043,1.653123 0,2.531942 0,5.063885 0,7.5958261 -1.311726,-0.246608 -2.911355,0.837273 -2.980733,2.553424 -0.113252,1.068438 0.834207,1.998453 1.864482,2.023461 1.844664,0.04478 3.106285,-1.179076 3.126294,-2.726857 -0.02014,-2.599407 0.0057,-5.1998371 0,-7.7996441 0.285577,-0.02115 4.6110295,-0.846503 4.9999995,-0.901457 0,1.947147 0,3.894295 0,5.8414421 -1.146387,-0.274636 -2.6118965,0.478721 -2.9752685,2.017253 -0.15337,0.862385 0.136496,1.944831 1.0115455,2.309984 1.708237,0.784936 4.053268,-0.805037 3.957931,-2.671065 -0.02646,-3.4661721 0.02169,-6.9337631 0,-10.4003062 C 13.949347,1.3424008 13.7286,0.97756684 13.36218,1.0010808 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path4291"
+ d="m -554.98993,2.0786484 c -4.7142,0.75967 -11.02325,1.541691 -15.72435,2.343787 -1.24488,0.607384 -0.96502,2.171403 -1.02008,3.306244 0,5.0638836 0,10.1277666 0,15.1916436 -2.62346,-0.493215 -5.82272,1.674544 -5.96148,5.106844 -0.2265,2.136875 1.66842,3.996904 3.72898,4.04692 3.68932,0.08956 6.21256,-2.358151 6.25258,-5.453711 -0.0402,-5.198808 0.012,-10.399665 0,-15.599277 0.57116,-0.0423 9.22205,-1.6930062 9.99999,-1.8029142 0,3.8942932 0,7.7885872 0,11.6828792 -2.29278,-0.549271 -5.22379,0.957442 -5.95053,4.0345 -0.30674,1.72477 0.273,3.88966 2.0231,4.619966 3.41645,1.569871 8.10651,-1.610073 7.91585,-5.342127 -0.053,-6.932337 0.0434,-13.867516 0,-20.8005996 -0.0898,-0.651515 -0.53122,-1.381183 -1.26406,-1.334155 z"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:url(#linearGradient3457);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ inkscape:connector-curvature="0"
+ d="m -554.98993,3.0786486 c -4.7142,0.75967 -11.02325,1.541691 -15.72435,2.343787 -1.24488,0.607384 -0.96502,2.171403 -1.02008,3.306244 0,5.0638834 0,10.1277664 0,15.1916434 -2.62346,-0.493215 -5.82272,1.674544 -5.96148,5.106844 -0.2265,2.136875 1.66842,3.996904 3.72898,4.04692 3.68932,0.08956 6.21256,-2.358151 6.25258,-5.453711 -0.0402,-5.198808 0.012,-10.399665 0,-15.599277 0.57116,-0.0423 9.22205,-1.693006 9.99999,-1.802914 0,3.894293 0,7.788587 0,11.682879 -2.29278,-0.549271 -5.22379,0.957442 -5.95053,4.0345 -0.30674,1.72477 0.273,3.88966 2.0231,4.619966 3.41645,1.569871 8.10651,-1.610073 7.91585,-5.342127 -0.053,-6.932337 0.0434,-13.867516 0,-20.8005994 -0.0898,-0.651515 -0.53122,-1.381183 -1.26406,-1.334155 z"
id="path4031-1"
- d="m 13.36218,0.00108226 c -2.357103,0.379835 -5.5116293,0.770846 -7.8621803,1.17189404 -0.6224381,0.303692 -0.4825051,1.085702 -0.5100431,1.653123 0,2.531942 0,5.063885 0,7.5958257 -1.3117261,-0.246608 -2.9113551,0.837272 -2.9807331,2.553423 -0.113252,1.068438 0.834207,1.998453 1.864482,2.023461 1.8446642,0.04478 3.1062852,-1.179076 3.1262942,-2.726857 -0.02014,-2.5994053 0.0057,-5.1998357 0,-7.7996427 0.285577,-0.02115 4.6110293,-0.846503 4.9999993,-0.901457 0,1.947147 0,3.894295 0,5.8414424 -1.146387,-0.274636 -2.6118963,0.478721 -2.9752683,2.0172513 -0.15337,0.862385 0.136496,1.944831 1.0115453,2.309984 1.708237,0.784936 4.053268,-0.805037 3.957931,-2.671065 -0.02646,-3.4661707 0.02169,-6.9337617 0,-10.40030474 -0.04486,-0.325758 -0.265607,-0.69059202 -0.632027,-0.667078 z"
- inkscape:connector-curvature="0" />
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
</g>
</svg>
diff --git a/core/img/places/picture.png b/core/img/places/picture.png
index 9abcd09722c..a278240a6d6 100644
--- a/core/img/places/picture.png
+++ b/core/img/places/picture.png
Binary files differ
diff --git a/core/img/places/picture.svg b/core/img/places/picture.svg
index 26c3d6312c2..aba68e62063 100644
--- a/core/img/places/picture.svg
+++ b/core/img/places/picture.svg
@@ -7,1691 +7,69 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.0"
- width="16"
- height="16"
- id="svg11300"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="audio.svg"
- inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/audio.png"
+ width="32"
+ height="32"
+ id="svg4375"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="picture.svg"
+ inkscape:export-filename="picture.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
+ <defs
+ id="defs4377" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.2"
+ inkscape:cx="13.989783"
+ inkscape:cy="8.9886524"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1280"
+ inkscape:window-height="745"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
<metadata
- id="metadata26">
+ id="metadata4380">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
- <sodipodi:namedview
- pagecolor="#cccccc"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1280"
- inkscape:window-height="776"
- id="namedview24"
- showgrid="true"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:zoom="22.627418"
- inkscape:cx="14.025105"
- inkscape:cy="9.2202448"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- inkscape:current-layer="g4146">
- <inkscape:grid
- type="xygrid"
- id="grid4330"
- empspacing="5"
- dotted="true"
- visible="true"
- enabled="true"
- snapvisiblegridlinesonly="true" />
- </sodipodi:namedview>
- <defs
- id="defs3">
- <linearGradient
- id="linearGradient4136">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1;"
- id="stop4138" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop4140" />
- </linearGradient>
- <linearGradient
- id="linearGradient4303">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop4305" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop4307" />
- </linearGradient>
- <linearGradient
- id="linearGradient4297">
- <stop
- id="stop4299"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4301"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient4115">
- <stop
- id="stop4117"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4119"
- style="stop-color:#363636;stop-opacity:0.698"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3785">
- <stop
- id="stop3787"
- style="stop-color:#b8b8b8;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3789"
- style="stop-color:#878787;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient6954">
- <stop
- id="stop6960"
- style="stop-color:#f5f5f5;stop-opacity:1"
- offset="0" />
- <stop
- id="stop6962"
- style="stop-color:#d2d2d2;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3341">
- <stop
- id="stop3343"
- style="stop-color:white;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3345"
- style="stop-color:white;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <radialGradient
- cx="24.999998"
- cy="28.659998"
- r="16"
- fx="24.999998"
- fy="28.659998"
- id="radialGradient2856"
- xlink:href="#linearGradient6954"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.56186795,0,0,0.15787922,-6.1682604,5.3385209)" />
- <linearGradient
- x1="30"
- y1="25.084745"
- x2="30"
- y2="45"
- id="linearGradient2858"
- xlink:href="#linearGradient3785"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.42808986,0,0,0.42296591,-2.823809,-3.2486024)" />
- <radialGradient
- cx="26.375898"
- cy="12.31301"
- r="8"
- fx="26.375898"
- fy="12.31301"
- id="radialGradient2860"
- xlink:href="#linearGradient6954"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.55250164,-0.0426402,0.04315608,0.50971914,-6.3026675,-1.9765067)" />
- <linearGradient
- x1="30"
- y1="5"
- x2="30"
- y2="44.678879"
- id="linearGradient2862"
- xlink:href="#linearGradient3785"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.33685737,0,0,0.32161283,-0.10572085,-0.29529973)" />
- <linearGradient
- x1="30"
- y1="0.91818392"
- x2="30"
- y2="25.792814"
- id="linearGradient2864"
- xlink:href="#linearGradient3341"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.33685737,0,0,0.32161283,-0.10572085,-0.29529973)" />
- <linearGradient
- x1="29.955881"
- y1="21.86607"
- x2="29.955881"
- y2="43.144382"
- id="linearGradient2866"
- xlink:href="#linearGradient3341"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.42808986,0,0,0.42296591,-2.823809,-3.2486024)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient7308"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.54681372,0,0,0.39376081,3.7325729,-0.29182867)"
- x1="34.992828"
- y1="0.94087797"
- x2="34.992828"
- y2="33.955856" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3796"
- x1="8.3635759"
- y1="15.028702"
- x2="15.937561"
- y2="11.00073"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3798"
- x1="6.9951797"
- y1="4.7478018"
- x2="13.00482"
- y2="4.7478018"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3815"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-5"
- id="linearGradient3815-3"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-5">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-9" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-5"
- id="linearGradient3831"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient3833">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3835" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3837" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3874"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2"
- id="linearGradient3892-2"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(0.96967712,0,0,0.96967712,0.26437941,-0.96950812)"
- y2="16.052532"
- x2="8.6826077"
- y1="1.0035814"
- x1="8.7094374"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3909"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient3984"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(0.78786264,0,0,0.78786264,-1.5726929,-0.7389112)"
- y2="16.052532"
- x2="8.6826077"
- y1="1.0035814"
- x1="8.7094374"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3909-3"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2-2"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-2">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-7" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4115-9"
- id="linearGradient4113-3"
- x1="0.86849999"
- y1="13.895414"
- x2="0.44923753"
- y2="28.776533"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient4115-9">
- <stop
- id="stop4117-5"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4119-6"
- style="stop-color:#363636;stop-opacity:0.698"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3104"
- id="linearGradient3815-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.23426255,0,0,0.2859159,18.734419,0.35950872)"
- x1="-51.786404"
- y1="50.786446"
- x2="-51.786404"
- y2="2.9062471" />
- <linearGradient
- id="linearGradient3104">
- <stop
- id="stop3106"
- style="stop-color:#aaaaaa;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3108"
- style="stop-color:#c8c8c8;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <radialGradient
- cx="13.138569"
- cy="25.625349"
- r="13.931416"
- fx="13.138569"
- fy="25.625349"
- id="radialGradient2965"
- xlink:href="#linearGradient3690-451"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,0.92614711,-1.0546317,0,32.402583,-9.3345932)" />
- <linearGradient
- id="linearGradient3690-451">
- <stop
- id="stop2857"
- style="stop-color:#e8e8e8;stop-opacity:1"
- offset="0" />
- <stop
- id="stop2859"
- style="stop-color:#d8d8d8;stop-opacity:1"
- offset="0.26238" />
- <stop
- id="stop2861"
- style="stop-color:#c2c2c2;stop-opacity:1"
- offset="0.66093999" />
- <stop
- id="stop2863"
- style="stop-color:#a5a5a5;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="21.483376"
- y1="36.255058"
- x2="21.483376"
- y2="9.5799999"
- id="linearGradient2967"
- xlink:href="#linearGradient3603-84"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.55048262,0,0,0.57815823,-3.8262247,-5.2762279)" />
- <linearGradient
- id="linearGradient3603-84">
- <stop
- id="stop2867"
- style="stop-color:#707070;stop-opacity:1"
- offset="0" />
- <stop
- id="stop2869"
- style="stop-color:#9e9e9e;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11.566265"
- y1="22.292103"
- x2="15.214532"
- y2="33.95525"
- id="linearGradient3674-262"
- xlink:href="#linearGradient8265-821-176-38-919-66-249-529"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4893617,0,0,0.4893617,1.7131795,22.728095)" />
- <linearGradient
- id="linearGradient8265-821-176-38-919-66-249-529">
- <stop
- id="stop2873"
- style="stop-color:#ffffff;stop-opacity:0.27450982"
- offset="0" />
- <stop
- id="stop2875"
- style="stop-color:#ffffff;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="24.046366"
- y1="11.673002"
- x2="24.046366"
- y2="34.713669"
- id="linearGradient3677-116"
- xlink:href="#linearGradient3642-81"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.55048262,0,0,0.57815823,-3.8262247,-5.2762276)" />
- <linearGradient
- id="linearGradient3642-81">
- <stop
- id="stop2879"
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0" />
- <stop
- id="stop2881"
- style="stop-color:#ffffff;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="34.713669"
- x2="24.046366"
- y1="11.673002"
- x1="24.046366"
- gradientTransform="matrix(0.55048262,0,0,0.57815823,-3.8262247,-5.2762276)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3037"
- xlink:href="#linearGradient3642-81"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3155-40"
- id="linearGradient8639"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.415777,-0.4174938,0.518983,0.5146192,-15.747227,2.6503673)"
- spreadMethod="pad"
- x1="23.575972"
- y1="25.356892"
- x2="23.575972"
- y2="31.210939" />
- <linearGradient
- id="linearGradient3155-40">
- <stop
- id="stop2541"
- offset="0"
- style="stop-color:#181818;stop-opacity:1;" />
- <stop
- style="stop-color:#dbdbdb;stop-opacity:1;"
- offset="0.13482948"
- id="stop2543" />
- <stop
- id="stop2545"
- offset="0.20224422"
- style="stop-color:#a4a4a4;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.26965895"
- id="stop2547" />
- <stop
- id="stop2549"
- offset="0.44650277"
- style="stop-color:#8d8d8d;stop-opacity:1;" />
- <stop
- style="stop-color:#959595;stop-opacity:1;"
- offset="0.57114136"
- id="stop2551" />
- <stop
- id="stop2553"
- offset="0.72038066"
- style="stop-color:#cecece;stop-opacity:1;" />
- <stop
- id="stop2555"
- offset="1"
- style="stop-color:#181818;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3240-279"
- id="linearGradient8641"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.867764,0.6930272)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3240-279">
- <stop
- style="stop-color:#565656;stop-opacity:1;"
- offset="0"
- id="stop2559" />
- <stop
- id="stop2561"
- offset="0.5"
- style="stop-color:#9a9a9a;stop-opacity:1;" />
- <stop
- style="stop-color:#545454;stop-opacity:1;"
- offset="1"
- id="stop2563" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3223-789"
- id="linearGradient8643"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.983472,0.8092126)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3223-789">
- <stop
- id="stop2567"
- offset="0"
- style="stop-color:#b1b1b1;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.5"
- id="stop2569" />
- <stop
- id="stop2571"
- offset="1"
- style="stop-color:#8f8f8f;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3240-686"
- id="linearGradient8645"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.465684,0.2892868)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3240-686">
- <stop
- style="stop-color:#565656;stop-opacity:1;"
- offset="0"
- id="stop2575" />
- <stop
- id="stop2577"
- offset="0.5"
- style="stop-color:#9a9a9a;stop-opacity:1;" />
- <stop
- style="stop-color:#545454;stop-opacity:1;"
- offset="1"
- id="stop2579" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3223-768"
- id="linearGradient8647"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.581392,0.4054707)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3223-768">
- <stop
- id="stop2583"
- offset="0"
- style="stop-color:#b1b1b1;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.5"
- id="stop2585" />
- <stop
- id="stop2587"
- offset="1"
- style="stop-color:#8f8f8f;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3240-907"
- id="linearGradient8649"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.061661,-0.1164056)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3240-907">
- <stop
- style="stop-color:#565656;stop-opacity:1;"
- offset="0"
- id="stop2591" />
- <stop
- id="stop2593"
- offset="0.5"
- style="stop-color:#9a9a9a;stop-opacity:1;" />
- <stop
- style="stop-color:#545454;stop-opacity:1;"
- offset="1"
- id="stop2595" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3223-699"
- id="linearGradient8651"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.6022679,-17.177369,-2.1969969e-4)"
- x1="30.037716"
- y1="24.989594"
- x2="30.037716"
- y2="30.000141" />
- <linearGradient
- id="linearGradient3223-699">
- <stop
- id="stop2599"
- offset="0"
- style="stop-color:#b1b1b1;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.5"
- id="stop2601" />
- <stop
- id="stop2603"
- offset="1"
- style="stop-color:#8f8f8f;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3290-678"
- id="linearGradient8653"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4040235,-0.4056919,0.6073752,0.602268,-17.636692,0.462492)"
- x1="9"
- y1="29.056757"
- x2="9"
- y2="26.02973" />
- <linearGradient
- id="linearGradient3290-678">
- <stop
- id="stop2607"
- offset="0"
- style="stop-color:#ece5a5;stop-opacity:1;" />
- <stop
- id="stop2609"
- offset="1"
- style="stop-color:#fcfbf2;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3191-577"
- id="linearGradient8655"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.3763801,0.03615261,0.03669995,0.374874,-2.2182805,-1.1331002)"
- x1="5.5178981"
- y1="37.371799"
- x2="9.5220556"
- y2="41.391716" />
- <linearGradient
- id="linearGradient3191-577">
- <stop
- id="stop2613"
- offset="0"
- style="stop-color:#dbce48;stop-opacity:1;" />
- <stop
- id="stop2615"
- offset="1"
- style="stop-color:#c5b625;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2-1-0"
- id="linearGradient3934-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99998838,0,0,0.99998838,-1.9961264,-41.000004)"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1-0">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4-9" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6-0" />
- </linearGradient>
- <linearGradient
- y2="16.052532"
- x2="8.6826077"
- y1="1.0035814"
- x1="8.7094374"
- gradientTransform="matrix(0.99998838,0,0,0.99998838,-1.9961264,-41.000004)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4154-8"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-2-1-0-9"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1-0-9">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4-9-8" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6-0-4" />
- </linearGradient>
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1-0-9-0">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4-9-8-3" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6-0-4-8" />
- </linearGradient>
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-2-1-0-3">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-1-4-9-3" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-4-6-0-6" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5"
- id="linearGradient4326"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6858824,0,0,0.68591053,-5.3691237,-18.974705)"
- x1="14.501121"
- y1="-1.4095211"
- x2="14.152531"
- y2="20.074369" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5"
- id="linearGradient4328"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99998838,0,0,0.99998838,-1.9961264,-41.000004)"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532" />
- <linearGradient
- x1="-2.4040222"
- y1="4.4573336"
- x2="-2.4040222"
- y2="18.967093"
- id="linearGradient3878"
- xlink:href="#linearGradient3587-6-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(13.927091,-3.4266134)" />
- <linearGradient
- id="linearGradient3587-6-5">
- <stop
- id="stop3589-9-2"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5"
- id="linearGradient4357"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0344828,0,0,1.0344828,8.0707628,-14.513825)"
- x1="0.86849999"
- y1="13.895414"
- x2="0.44923753"
- y2="28.776533" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1"
- id="linearGradient4405"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-55"
- id="linearGradient4413-7"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- id="linearGradient3587-6-5-3-4-5-4-0-1-55">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-3-2-53-4-3-95" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-7-9-86-9-3-6" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2"
- id="linearGradient4411-3"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- id="linearGradient3587-6-5-2">
- <stop
- id="stop3589-9-2-8"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-0"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4"
- id="linearGradient4466-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.23426255,0,0,0.2859159,18.734419,60.359508)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.553459"
- y2="54.703121" />
- <linearGradient
- id="linearGradient3587-6-5-2-4">
- <stop
- id="stop3589-9-2-8-7"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="54.703121"
- x2="-41.553459"
- y1="2.2401412"
- x1="-41.553459"
- gradientTransform="matrix(0.21864454,0,0,0.26685422,17.618755,60.402242)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4483-3"
- xlink:href="#linearGradient3587-6-5-2-4-9"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-9">
- <stop
- id="stop3589-9-2-8-7-2"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-8"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-55"
- id="linearGradient4564"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5"
- id="linearGradient4566"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(13.927091,16.573387)"
- x1="-2.4040222"
- y1="4.4573336"
- x2="-2.4040222"
- y2="18.967093" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2"
- id="linearGradient4578"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-4-5-4-0-1-55"
- id="linearGradient4580"
- gradientUnits="userSpaceOnUse"
- x1="209.34245"
- y1="998.45801"
- x2="209.34245"
- y2="1013.451" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3"
- id="linearGradient4359-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99998838,0,0,0.99998838,29.038238,-21.358617)"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532" />
- <linearGradient
- id="linearGradient3587-6-5-3">
- <stop
- id="stop3589-9-2-6"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-5"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3"
- id="linearGradient4361-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6858824,0,0,0.68591053,25.66524,-19.333318)"
- x1="8.7094374"
- y1="1.0035814"
- x2="8.6826077"
- y2="16.052532" />
- <linearGradient
- id="linearGradient4597">
- <stop
- id="stop4599"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4601"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="16.052532"
- x2="8.6826077"
- y1="1.0035814"
- x1="8.7094374"
- gradientTransform="matrix(0.6858824,0,0,0.68591053,25.66524,-19.333318)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient4610"
- xlink:href="#linearGradient3587-6-5-3"
- inkscape:collect="always" />
- <linearGradient
- x1="1.3333321"
- y1="6.6666665"
- x2="1.3333321"
- y2="33.333332"
- id="linearGradient2422"
- xlink:href="#linearGradient3587-6-5-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4090909,0,0,0.375,7.4545459,0.5)" />
- <linearGradient
- id="linearGradient3587-6-5-5">
- <stop
- id="stop3589-9-2-4"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-3"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837"
- id="linearGradient3189"
- xlink:href="#linearGradient3587-6-5-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,0.5)" />
- <linearGradient
- id="linearGradient3587-6-5-8">
- <stop
- id="stop3589-9-2-67"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-2"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837"
- id="linearGradient3203"
- xlink:href="#linearGradient3587-6-5-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5000001,0.5)" />
- <linearGradient
- id="linearGradient3120">
- <stop
- id="stop3122"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3124"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837"
- id="linearGradient3207"
- xlink:href="#linearGradient3587-6-5-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,7.499999)" />
- <linearGradient
- id="linearGradient3127">
- <stop
- id="stop3129"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3131"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837"
- id="linearGradient3211"
- xlink:href="#linearGradient3587-6-5-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5,7.5)" />
- <linearGradient
- id="linearGradient3134">
- <stop
- id="stop3136"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3138"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11"
- y1="6"
- x2="11"
- y2="17"
- id="linearGradient2409"
- xlink:href="#linearGradient3587-6-5-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2403101,0,0,0.8988764,10.387597,0.2247191)" />
- <linearGradient
- id="linearGradient3587-6-5-1">
- <stop
- id="stop3589-9-2-0"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-21"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="40.805084"
- y1="5.6271191"
- x2="40.805084"
- y2="17.627119"
- id="linearGradient3206"
- xlink:href="#linearGradient3587-8-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-32.805085,-3.6271193)" />
- <linearGradient
- id="linearGradient3587-8-5">
- <stop
- id="stop3589-2-7"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-3-5"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="17.627119"
- x2="40.805084"
- y1="5.6271191"
- x1="40.805084"
- gradientTransform="translate(-32.805085,-3.6271193)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3180"
- xlink:href="#linearGradient3587-8-5"
- inkscape:collect="always" />
- <linearGradient
- x1="1.3333321"
- y1="6.6666665"
- x2="1.3333321"
- y2="33.333332"
- id="linearGradient2422-1"
- xlink:href="#linearGradient3587-6-5-86"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2727273,0,0,0.375,9.636365,1.5)" />
- <linearGradient
- id="linearGradient3587-6-5-86">
- <stop
- id="stop3589-9-2-65"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-9"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11"
- y1="6"
- x2="11"
- y2="17"
- id="linearGradient2427"
- xlink:href="#linearGradient3587-6-5-86"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,1.5842703)" />
- <linearGradient
- id="linearGradient3207-3">
- <stop
- id="stop3209"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3211"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11"
- y1="6"
- x2="11"
- y2="17"
- id="linearGradient2436"
- xlink:href="#linearGradient3587-6-5-86"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,9.58427)" />
- <linearGradient
- id="linearGradient3214">
- <stop
- id="stop3216"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3218"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="11"
- y1="6"
- x2="11"
- y2="17"
- id="linearGradient2442"
- xlink:href="#linearGradient3587-6-5-86"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,5.5842706)" />
- <linearGradient
- id="linearGradient3221">
- <stop
- id="stop3223"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3225"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="1.3333321"
- y1="4.9755898"
- x2="1.3333321"
- y2="37.373981"
- id="linearGradient2422-1-0"
- xlink:href="#linearGradient3587-6-5-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.39871888,0,0,0.3091132,71.812715,15.470662)" />
- <linearGradient
- id="linearGradient3587-6-5-0">
- <stop
- id="stop3589-9-2-5"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-1"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="46.395508"
- y1="12.707516"
- x2="46.395508"
- y2="38.409042"
- id="linearGradient3795-2"
- xlink:href="#linearGradient3587-6-5-3-5-7"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.4100229,0,0,0.5447147,28.02322,-5.9219706)" />
- <linearGradient
- id="linearGradient3587-6-5-3-5-7">
- <stop
- id="stop3589-9-2-2-6-2"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-73-5-1"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3587-6-5-3-5">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1"
- id="stop3589-9-2-2-6" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop3591-7-4-73-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-3-5"
- id="linearGradient4872"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.4100229,0,0,0.5447147,19.329265,-26.729116)"
- x1="100.77747"
- y1="17.859186"
- x2="100.77747"
- y2="38.055252" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient4894"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5000001,0.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient4900"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,0.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient4906"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,7.499999)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient4912"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5,7.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- id="linearGradient3587-6-5-8-6">
- <stop
- id="stop3589-9-2-67-3"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3591-7-4-2-3"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient4935">
- <stop
- id="stop4937"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4939"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient4942">
- <stop
- id="stop4944"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4946"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8-6"
- id="linearGradient4912-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5,7.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- id="linearGradient4949">
- <stop
- id="stop4951"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4953"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient5012"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5,7.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient5015"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,7.499999)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient5018"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,-0.5000001,0.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-8"
- id="linearGradient5021"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.375,0,0,0.375,7.5,0.5)"
- x1="26.045763"
- y1="9.6223383"
- x2="26.045763"
- y2="19.490837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4"
- id="linearGradient3335"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.21864454,0,0,0.26685422,18.618755,-19.597758)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.553459"
- y2="54.703121" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4136"
- id="linearGradient4134"
- x1="9"
- y1="0"
- x2="9"
- y2="15"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4136"
- id="linearGradient4150"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- x1="9"
- y1="0"
- x2="9"
- y2="15" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6"
- id="linearGradient3335-7"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,76.619476,1.402242)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.755585"
- y2="47.208389" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6">
- <stop
- id="stop3589-9-2-8-7-8"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-0"
- id="linearGradient3335-7-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,16.619476,0.402242)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.553459"
- y2="54.703121" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-0">
- <stop
- id="stop3589-9-2-8-7-8-7"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-7"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-4"
- id="linearGradient3335-7-7"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,16.619476,0.402242)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.553459"
- y2="54.703121" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-4">
- <stop
- id="stop3589-9-2-8-7-8-2"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-2"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-7"
- id="linearGradient3335-7-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,16.619476,1.402242)"
- x1="-41.553459"
- y1="2.2401412"
- x2="-41.755585"
- y2="47.208389" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-7">
- <stop
- id="stop3589-9-2-8-7-8-4"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-5"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-2"
- id="linearGradient3335-7-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,56.619476,1.4022422)"
- x1="-39.421574"
- y1="-5.2547116"
- x2="-39.421574"
- y2="47.208389" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-2">
- <stop
- id="stop3589-9-2-8-7-8-77"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-9"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4136-9"
- id="linearGradient4150-0"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- x1="9"
- y1="0"
- x2="9"
- y2="15" />
- <linearGradient
- id="linearGradient4136-9">
- <stop
- offset="0"
- style="stop-color:#000000;stop-opacity:1;"
- id="stop4138-6" />
- <stop
- offset="1"
- style="stop-color:#363636;stop-opacity:1"
- id="stop4140-3" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4136-9"
- id="linearGradient3457"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- x1="9"
- y1="0"
- x2="9"
- y2="15" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-2-4-6-2-6"
- id="linearGradient3335-7-1-7"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,56.619476,1.4022422)"
- x1="-39.421574"
- y1="-5.2547116"
- x2="-39.421574"
- y2="47.208389" />
- <linearGradient
- id="linearGradient3587-6-5-2-4-6-2-6">
- <stop
- id="stop3589-9-2-8-7-8-77-4"
- style="stop-color:#000000;stop-opacity:1;"
- offset="0" />
- <stop
- id="stop3591-7-4-0-3-4-9-3"
- style="stop-color:#363636;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- y2="47.208389"
- x2="-39.421574"
- y1="-5.2547116"
- x1="-39.421574"
- gradientTransform="matrix(0.2186487,0,0,0.26685422,56.619476,1.4022422)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3397"
- xlink:href="#linearGradient3587-6-5-2-4-6-2-6"
- inkscape:collect="always" />
- </defs>
- <g
- transform="matrix(0.78786264,0,0,0.78786264,-3.1483699,0.44173984)"
- id="g3743-3"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
- <rect
- style="color:#000000;fill:#ccc000;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect3136"
- width="163.31035"
- height="97.986206"
- x="-62.896553"
- y="-32.993103" />
- <g
- transform="matrix(0.99998873,0,0,0.99998873,-3.996044,-20.001608)"
- id="g3743-9-4"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
<g
- id="g4146">
- <g
- transform="translate(-39.999799,1)"
- id="g3376">
- <path
- sodipodi:nodetypes="cccccccccccccc"
- inkscape:connector-curvature="0"
- id="path4160-9-9-0"
- d="m 43.35011,1.0020512 c -0.197474,0.03825 -0.35356,0.233327 -0.350004,0.437439 l -3.07e-4,13.1230708 c 4e-6,0.229041 0.205223,0.437433 0.430774,0.437439 l 10.14024,0 c 0.225551,-6e-6 0.430768,-0.208398 0.430774,-0.437439 l 3.07e-4,-12.9606108 c -3.29e-4,-0.336436 -0.265499,-0.601856 -0.516871,-0.599899 0,0 -7.760335,0 -10.134913,0 z M 44,11 l 9,0 4.13e-4,3 L 44,14 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.6;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99992162;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- sodipodi:nodetypes="cccccccccccccc"
- inkscape:connector-curvature="0"
- id="path4160-9-9-8"
- d="m 43.35011,0.0020508 c -0.197474,0.03825 -0.35356,0.233327 -0.350004,0.437439 l -3.07e-4,13.1230712 c 4e-6,0.229041 0.205223,0.437433 0.430774,0.437439 l 10.14024,0 c 0.225551,-6e-6 0.430768,-0.208398 0.430774,-0.437439 L 54.001894,0.6019496 C 54.001565,0.265514 53.736395,9.38e-5 53.485023,0.0020508 c 0,0 -7.760335,0 -10.134913,0 z M 44,10 l 9,0 4.13e-4,3 L 44,13 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:url(#linearGradient3397);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99992162;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- </g>
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(581.71429,-2.0764682)">
+ <path
+ sodipodi:nodetypes="cccccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path3770"
+ d="m -575.01366,3.0805705 c -0.39495,0.0765 -0.70712,0.466654 -0.70001,0.874878 l -6.2e-4,26.2461415 c 10e-6,0.458082 0.41045,0.874866 0.86155,0.874878 l 20.28048,0 c 0.4511,-1.2e-5 0.86154,-0.416796 0.86155,-0.874878 l 6.1e-4,-25.9212225 c -6.5e-4,-0.672871 -0.53099,-1.203711 -1.03374,-1.199797 0,0 -15.52067,0 -20.26982,0 z m 1.29978,19.9958975 18,0 8.2e-4,6 -18.00082,0 z"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99992161999999996;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+ <path
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99992161999999996;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="m -575.01366,4.0805703 c -0.39495,0.0765 -0.70712,0.466654 -0.70001,0.874878 l -6.2e-4,26.2461417 c 10e-6,0.458082 0.41045,0.874866 0.86155,0.874878 l 20.28048,0 c 0.4511,-1.2e-5 0.86154,-0.416796 0.86155,-0.874878 l 6.1e-4,-25.9212227 c -6.5e-4,-0.672871 -0.53099,-1.203711 -1.03374,-1.199797 0,0 -15.52067,0 -20.26982,0 z m 1.29978,19.9958977 18,0 8.2e-4,6 -18.00082,0 z"
+ id="path4160-9-9-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccc" />
</g>
</svg>
diff --git a/core/js/config.php b/core/js/config.php
new file mode 100644
index 00000000000..9069175ed6f
--- /dev/null
+++ b/core/js/config.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright (c) 2013 Lukas Reschke <lukas@statuscode.ch>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// Set the content type to Javascript
+header("Content-type: text/javascript");
+
+// Disallow caching
+header("Cache-Control: no-cache, must-revalidate");
+header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
+
+// Enable l10n support
+$l = OC_L10N::get('core');
+
+// Get the config
+$apps_paths = array();
+foreach(OC_App::getEnabledApps() as $app) {
+ $apps_paths[$app] = OC_App::getAppWebPath($app);
+}
+
+$array = array(
+ "oc_debug" => (defined('DEBUG') && DEBUG) ? 'true' : 'false',
+ "oc_webroot" => "\"".OC::$WEBROOT."\"",
+ "oc_appswebroots" => str_replace('\\/', '/', json_encode($apps_paths)), // Ugly unescape slashes waiting for better solution
+ "oc_current_user" => "\"".OC_User::getUser(). "\"",
+ "oc_requesttoken" => "\"".OC_Util::callRegister(). "\"",
+ "datepickerFormatDate" => json_encode($l->l('jsdate', 'jsdate')),
+ "dayNames" => json_encode(array((string)$l->t('Sunday'), (string)$l->t('Monday'), (string)$l->t('Tuesday'), (string)$l->t('Wednesday'), (string)$l->t('Thursday'), (string)$l->t('Friday'), (string)$l->t('Saturday'))),
+ "monthNames" => json_encode(array((string)$l->t('January'), (string)$l->t('February'), (string)$l->t('March'), (string)$l->t('April'), (string)$l->t('May'), (string)$l->t('June'), (string)$l->t('July'), (string)$l->t('August'), (string)$l->t('September'), (string)$l->t('October'), (string)$l->t('November'), (string)$l->t('December'))),
+ "firstDay" => json_encode($l->l('firstday', 'firstday')) ,
+ );
+
+// Echo it
+foreach ($array as $setting => $value) {
+ echo("var ". $setting ."=".$value.";\n");
+}
+?> \ No newline at end of file
diff --git a/core/js/eventsource.js b/core/js/eventsource.js
index 0c2a995f331..f783ade7ae9 100644
--- a/core/js/eventsource.js
+++ b/core/js/eventsource.js
@@ -40,7 +40,7 @@ OC.EventSource=function(src,data){
dataStr+=name+'='+encodeURIComponent(data[name])+'&';
}
}
- dataStr+='requesttoken='+OC.EventSource.requesttoken;
+ dataStr+='requesttoken='+oc_requesttoken;
if(!this.useFallBack && typeof EventSource !='undefined'){
var joinChar = '&';
if(src.indexOf('?') == -1) {
diff --git a/core/js/jquery-ui-1.10.0.custom.js b/core/js/jquery-ui-1.10.0.custom.js
new file mode 100644
index 00000000000..ca57f47ede4
--- /dev/null
+++ b/core/js/jquery-ui-1.10.0.custom.js
@@ -0,0 +1,14850 @@
+/*! jQuery UI - v1.10.0 - 2013-01-22
+* http://jqueryui.com
+* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
+
+(function( $, undefined ) {
+
+var uuid = 0,
+ runiqueId = /^ui-id-\d+$/;
+
+// prevent duplicate loading
+// this is only a problem because we proxy existing functions
+// and we don't want to double proxy them
+$.ui = $.ui || {};
+if ( $.ui.version ) {
+ return;
+}
+
+$.extend( $.ui, {
+ version: "1.10.0",
+
+ keyCode: {
+ BACKSPACE: 8,
+ COMMA: 188,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ LEFT: 37,
+ NUMPAD_ADD: 107,
+ NUMPAD_DECIMAL: 110,
+ NUMPAD_DIVIDE: 111,
+ NUMPAD_ENTER: 108,
+ NUMPAD_MULTIPLY: 106,
+ NUMPAD_SUBTRACT: 109,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38
+ }
+});
+
+// plugins
+$.fn.extend({
+ _focus: $.fn.focus,
+ focus: function( delay, fn ) {
+ return typeof delay === "number" ?
+ this.each(function() {
+ var elem = this;
+ setTimeout(function() {
+ $( elem ).focus();
+ if ( fn ) {
+ fn.call( elem );
+ }
+ }, delay );
+ }) :
+ this._focus.apply( this, arguments );
+ },
+
+ scrollParent: function() {
+ var scrollParent;
+ if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
+ scrollParent = this.parents().filter(function() {
+ return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+ }).eq(0);
+ } else {
+ scrollParent = this.parents().filter(function() {
+ return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+ }).eq(0);
+ }
+
+ return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+ },
+
+ zIndex: function( zIndex ) {
+ if ( zIndex !== undefined ) {
+ return this.css( "zIndex", zIndex );
+ }
+
+ if ( this.length ) {
+ var elem = $( this[ 0 ] ), position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+ }
+
+ return 0;
+ },
+
+ uniqueId: function() {
+ return this.each(function() {
+ if ( !this.id ) {
+ this.id = "ui-id-" + (++uuid);
+ }
+ });
+ },
+
+ removeUniqueId: function() {
+ return this.each(function() {
+ if ( runiqueId.test( this.id ) ) {
+ $( this ).removeAttr( "id" );
+ }
+ });
+ }
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+ var map, mapName, img,
+ nodeName = element.nodeName.toLowerCase();
+ if ( "area" === nodeName ) {
+ map = element.parentNode;
+ mapName = map.name;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap=#" + mapName + "]" )[0];
+ return !!img && visible( img );
+ }
+ return ( /input|select|textarea|button|object/.test( nodeName ) ?
+ !element.disabled :
+ "a" === nodeName ?
+ element.href || isTabIndexNotNaN :
+ isTabIndexNotNaN) &&
+ // the element and all of its ancestors must be visible
+ visible( element );
+}
+
+function visible( element ) {
+ return $.expr.filters.visible( element ) &&
+ !$( element ).parents().addBack().filter(function() {
+ return $.css( this, "visibility" ) === "hidden";
+ }).length;
+}
+
+$.extend( $.expr[ ":" ], {
+ data: $.expr.createPseudo ?
+ $.expr.createPseudo(function( dataName ) {
+ return function( elem ) {
+ return !!$.data( elem, dataName );
+ };
+ }) :
+ // support: jQuery <1.8
+ function( elem, i, match ) {
+ return !!$.data( elem, match[ 3 ] );
+ },
+
+ focusable: function( element ) {
+ return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+ },
+
+ tabbable: function( element ) {
+ var tabIndex = $.attr( element, "tabindex" ),
+ isTabIndexNaN = isNaN( tabIndex );
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+ }
+});
+
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+ $.each( [ "Width", "Height" ], function( i, name ) {
+ var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce( elem, size, border, margin ) {
+ $.each( side, function() {
+ size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+ if ( border ) {
+ size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+ }
+ if ( margin ) {
+ size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+ }
+ });
+ return size;
+ }
+
+ $.fn[ "inner" + name ] = function( size ) {
+ if ( size === undefined ) {
+ return orig[ "inner" + name ].call( this );
+ }
+
+ return this.each(function() {
+ $( this ).css( type, reduce( this, size ) + "px" );
+ });
+ };
+
+ $.fn[ "outer" + name] = function( size, margin ) {
+ if ( typeof size !== "number" ) {
+ return orig[ "outer" + name ].call( this, size );
+ }
+
+ return this.each(function() {
+ $( this).css( type, reduce( this, size, true, margin ) + "px" );
+ });
+ };
+ });
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+ $.fn.removeData = (function( removeData ) {
+ return function( key ) {
+ if ( arguments.length ) {
+ return removeData.call( this, $.camelCase( key ) );
+ } else {
+ return removeData.call( this );
+ }
+ };
+ })( $.fn.removeData );
+}
+
+
+
+
+
+// deprecated
+$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+$.support.selectstart = "onselectstart" in document.createElement( "div" );
+$.fn.extend({
+ disableSelection: function() {
+ return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+ ".ui-disableSelection", function( event ) {
+ event.preventDefault();
+ });
+ },
+
+ enableSelection: function() {
+ return this.unbind( ".ui-disableSelection" );
+ }
+});
+
+$.extend( $.ui, {
+ // $.ui.plugin is deprecated. Use the proxy pattern instead.
+ plugin: {
+ add: function( module, option, set ) {
+ var i,
+ proto = $.ui[ module ].prototype;
+ for ( i in set ) {
+ proto.plugins[ i ] = proto.plugins[ i ] || [];
+ proto.plugins[ i ].push( [ option, set[ i ] ] );
+ }
+ },
+ call: function( instance, name, args ) {
+ var i,
+ set = instance.plugins[ name ];
+ if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
+ return;
+ }
+
+ for ( i = 0; i < set.length; i++ ) {
+ if ( instance.options[ set[ i ][ 0 ] ] ) {
+ set[ i ][ 1 ].apply( instance.element, args );
+ }
+ }
+ }
+ },
+
+ // only used by resizable
+ hasScroll: function( el, a ) {
+
+ //If overflow is hidden, the element might have extra content, but the user wants to hide it
+ if ( $( el ).css( "overflow" ) === "hidden") {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if ( el[ scroll ] > 0 ) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[ scroll ] = 1;
+ has = ( el[ scroll ] > 0 );
+ el[ scroll ] = 0;
+ return has;
+ }
+});
+
+})( jQuery );
+(function( $, undefined ) {
+
+var uuid = 0,
+ slice = Array.prototype.slice,
+ _cleanData = $.cleanData;
+$.cleanData = function( elems ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ try {
+ $( elem ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ }
+ _cleanData( elems );
+};
+
+$.widget = function( name, base, prototype ) {
+ var fullName, existingConstructor, constructor, basePrototype,
+ // proxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ proxiedPrototype = {},
+ namespace = name.split( "." )[ 0 ];
+
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+ return !!$.data( elem, fullName );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ existingConstructor = $[ namespace ][ name ];
+ constructor = $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without "new" keyword
+ if ( !this._createWidget ) {
+ return new constructor( options, element );
+ }
+
+ // allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+ // extend with the existing constructor to carry over any static properties
+ $.extend( constructor, existingConstructor, {
+ version: prototype.version,
+ // copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend( {}, prototype ),
+ // track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ });
+
+ basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
+ $.each( prototype, function( prop, value ) {
+ if ( !$.isFunction( value ) ) {
+ proxiedPrototype[ prop ] = value;
+ return;
+ }
+ proxiedPrototype[ prop ] = (function() {
+ var _super = function() {
+ return base.prototype[ prop ].apply( this, arguments );
+ },
+ _superApply = function( args ) {
+ return base.prototype[ prop ].apply( this, args );
+ };
+ return function() {
+ var __super = this._super,
+ __superApply = this._superApply,
+ returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply( this, arguments );
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ })();
+ });
+ constructor.prototype = $.widget.extend( basePrototype, {
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+ }, proxiedPrototype, {
+ constructor: constructor,
+ namespace: namespace,
+ widgetName: name,
+ widgetFullName: fullName
+ });
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if ( existingConstructor ) {
+ $.each( existingConstructor._childConstructors, function( i, child ) {
+ var childPrototype = child.prototype;
+
+ // redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+ });
+ // remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push( constructor );
+ }
+
+ $.widget.bridge( name, constructor );
+};
+
+$.widget.extend = function( target ) {
+ var input = slice.call( arguments, 1 ),
+ inputIndex = 0,
+ inputLength = input.length,
+ key,
+ value;
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
+ for ( key in input[ inputIndex ] ) {
+ value = input[ inputIndex ][ key ];
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+ // Clone objects
+ if ( $.isPlainObject( value ) ) {
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
+ $.widget.extend( {}, target[ key ], value ) :
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend( {}, value );
+ // Copy everything else by reference
+ } else {
+ target[ key ] = value;
+ }
+ }
+ }
+ }
+ return target;
+};
+
+$.widget.bridge = function( name, object ) {
+ var fullName = object.prototype.widgetFullName || name;
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = slice.call( arguments, 1 ),
+ returnValue = this;
+
+ // allow multiple hashes to be passed on init
+ options = !isMethodCall && args.length ?
+ $.widget.extend.apply( null, [ options ].concat(args) ) :
+ options;
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var methodValue,
+ instance = $.data( this, fullName );
+ if ( !instance ) {
+ return $.error( "cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+ return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+ }
+ methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack( methodValue.get() ) :
+ methodValue;
+ return false;
+ }
+ });
+ } else {
+ this.each(function() {
+ var instance = $.data( this, fullName );
+ if ( instance ) {
+ instance.option( options || {} )._init();
+ } else {
+ $.data( this, fullName, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "<div>",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
+
+ this._create();
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind( this.eventNamespace )
+ // 1.9 BC for #7810
+ // TODO remove dual storage
+ .removeData( this.widgetName )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
+ this.widget()
+ .unbind( this.eventNamespace )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ },
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( value === undefined ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( value === undefined ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOption( "disabled", false );
+ },
+ disable: function() {
+ return this._setOption( "disabled", true );
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ // accept selectors, DOM elements
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^(\w+)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
+})( jQuery );
+(function( $, undefined ) {
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+ mouseHandled = false;
+});
+
+$.widget("ui.mouse", {
+ version: "1.10.0",
+ options: {
+ cancel: "input,textarea,button,select,option",
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var that = this;
+
+ this.element
+ .bind("mousedown."+this.widgetName, function(event) {
+ return that._mouseDown(event);
+ })
+ .bind("click."+this.widgetName, function(event) {
+ if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, that.widgetName + ".preventClickEvent");
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.unbind("."+this.widgetName);
+ if ( this._mouseMoveDelegate ) {
+ $(document)
+ .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+ .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+ }
+ },
+
+ _mouseDown: function(event) {
+ // don't let more than one widget handle mouseStart
+ if( mouseHandled ) { return; }
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var that = this,
+ btnIsLeft = (event.which === 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function() {
+ that.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, this.widgetName + ".preventClickEvent");
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function(event) {
+ return that._mouseMove(event);
+ };
+ this._mouseUpDelegate = function(event) {
+ return that._mouseUp(event);
+ };
+ $(document)
+ .bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+ .bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function(event) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+ return this._mouseUp(event);
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function(event) {
+ $(document)
+ .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+ .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target === this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + ".preventClickEvent", true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ return false;
+ },
+
+ _mouseDistanceMet: function(event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function(/* event */) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function(/* event */) {},
+ _mouseDrag: function(/* event */) {},
+ _mouseStop: function(/* event */) {},
+ _mouseCapture: function(/* event */) { return true; }
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.ui = $.ui || {};
+
+var cachedScrollbarWidth,
+ max = Math.max,
+ abs = Math.abs,
+ round = Math.round,
+ rhorizontal = /left|center|right/,
+ rvertical = /top|center|bottom/,
+ roffset = /[\+\-]\d+%?/,
+ rposition = /^\w+/,
+ rpercent = /%$/,
+ _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+ return [
+ parseInt( offsets[ 0 ], 10 ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+ parseInt( offsets[ 1 ], 10 ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+ ];
+}
+
+function parseCss( element, property ) {
+ return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+ var raw = elem[0];
+ if ( raw.nodeType === 9 ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: 0, left: 0 }
+ };
+ }
+ if ( $.isWindow( raw ) ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+ };
+ }
+ if ( raw.preventDefault ) {
+ return {
+ width: 0,
+ height: 0,
+ offset: { top: raw.pageY, left: raw.pageX }
+ };
+ }
+ return {
+ width: elem.outerWidth(),
+ height: elem.outerHeight(),
+ offset: elem.offset()
+ };
+}
+
+$.position = {
+ scrollbarWidth: function() {
+ if ( cachedScrollbarWidth !== undefined ) {
+ return cachedScrollbarWidth;
+ }
+ var w1, w2,
+ div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+ innerDiv = div.children()[0];
+
+ $( "body" ).append( div );
+ w1 = innerDiv.offsetWidth;
+ div.css( "overflow", "scroll" );
+
+ w2 = innerDiv.offsetWidth;
+
+ if ( w1 === w2 ) {
+ w2 = div[0].clientWidth;
+ }
+
+ div.remove();
+
+ return (cachedScrollbarWidth = w1 - w2);
+ },
+ getScrollInfo: function( within ) {
+ var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
+ overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+ hasOverflowX = overflowX === "scroll" ||
+ ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+ hasOverflowY = overflowY === "scroll" ||
+ ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+ return {
+ width: hasOverflowX ? $.position.scrollbarWidth() : 0,
+ height: hasOverflowY ? $.position.scrollbarWidth() : 0
+ };
+ },
+ getWithinInfo: function( element ) {
+ var withinElement = $( element || window ),
+ isWindow = $.isWindow( withinElement[0] );
+ return {
+ element: withinElement,
+ isWindow: isWindow,
+ offset: withinElement.offset() || { left: 0, top: 0 },
+ scrollLeft: withinElement.scrollLeft(),
+ scrollTop: withinElement.scrollTop(),
+ width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+ height: isWindow ? withinElement.height() : withinElement.outerHeight()
+ };
+ }
+};
+
+$.fn.position = function( options ) {
+ if ( !options || !options.of ) {
+ return _position.apply( this, arguments );
+ }
+
+ // make a copy, we don't want to modify arguments
+ options = $.extend( {}, options );
+
+ var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+ target = $( options.of ),
+ within = $.position.getWithinInfo( options.within ),
+ scrollInfo = $.position.getScrollInfo( within ),
+ collision = ( options.collision || "flip" ).split( " " ),
+ offsets = {};
+
+ dimensions = getDimensions( target );
+ if ( target[0].preventDefault ) {
+ // force left top to allow flipping
+ options.at = "left top";
+ }
+ targetWidth = dimensions.width;
+ targetHeight = dimensions.height;
+ targetOffset = dimensions.offset;
+ // clone to reuse original targetOffset later
+ basePosition = $.extend( {}, targetOffset );
+
+ // force my and at to have valid horizontal and vertical positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each( [ "my", "at" ], function() {
+ var pos = ( options[ this ] || "" ).split( " " ),
+ horizontalOffset,
+ verticalOffset;
+
+ if ( pos.length === 1) {
+ pos = rhorizontal.test( pos[ 0 ] ) ?
+ pos.concat( [ "center" ] ) :
+ rvertical.test( pos[ 0 ] ) ?
+ [ "center" ].concat( pos ) :
+ [ "center", "center" ];
+ }
+ pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+ pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+ // calculate offsets
+ horizontalOffset = roffset.exec( pos[ 0 ] );
+ verticalOffset = roffset.exec( pos[ 1 ] );
+ offsets[ this ] = [
+ horizontalOffset ? horizontalOffset[ 0 ] : 0,
+ verticalOffset ? verticalOffset[ 0 ] : 0
+ ];
+
+ // reduce to just the positions without the offsets
+ options[ this ] = [
+ rposition.exec( pos[ 0 ] )[ 0 ],
+ rposition.exec( pos[ 1 ] )[ 0 ]
+ ];
+ });
+
+ // normalize collision option
+ if ( collision.length === 1 ) {
+ collision[ 1 ] = collision[ 0 ];
+ }
+
+ if ( options.at[ 0 ] === "right" ) {
+ basePosition.left += targetWidth;
+ } else if ( options.at[ 0 ] === "center" ) {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if ( options.at[ 1 ] === "bottom" ) {
+ basePosition.top += targetHeight;
+ } else if ( options.at[ 1 ] === "center" ) {
+ basePosition.top += targetHeight / 2;
+ }
+
+ atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+ basePosition.left += atOffset[ 0 ];
+ basePosition.top += atOffset[ 1 ];
+
+ return this.each(function() {
+ var collisionPosition, using,
+ elem = $( this ),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseCss( this, "marginLeft" ),
+ marginTop = parseCss( this, "marginTop" ),
+ collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+ collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+ position = $.extend( {}, basePosition ),
+ myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+ if ( options.my[ 0 ] === "right" ) {
+ position.left -= elemWidth;
+ } else if ( options.my[ 0 ] === "center" ) {
+ position.left -= elemWidth / 2;
+ }
+
+ if ( options.my[ 1 ] === "bottom" ) {
+ position.top -= elemHeight;
+ } else if ( options.my[ 1 ] === "center" ) {
+ position.top -= elemHeight / 2;
+ }
+
+ position.left += myOffset[ 0 ];
+ position.top += myOffset[ 1 ];
+
+ // if the browser doesn't support fractions, then round for consistent results
+ if ( !$.support.offsetFractions ) {
+ position.left = round( position.left );
+ position.top = round( position.top );
+ }
+
+ collisionPosition = {
+ marginLeft: marginLeft,
+ marginTop: marginTop
+ };
+
+ $.each( [ "left", "top" ], function( i, dir ) {
+ if ( $.ui.position[ collision[ i ] ] ) {
+ $.ui.position[ collision[ i ] ][ dir ]( position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+ my: options.my,
+ at: options.at,
+ within: within,
+ elem : elem
+ });
+ }
+ });
+
+ if ( options.using ) {
+ // adds feedback as second argument to using callback, if present
+ using = function( props ) {
+ var left = targetOffset.left - position.left,
+ right = left + targetWidth - elemWidth,
+ top = targetOffset.top - position.top,
+ bottom = top + targetHeight - elemHeight,
+ feedback = {
+ target: {
+ element: target,
+ left: targetOffset.left,
+ top: targetOffset.top,
+ width: targetWidth,
+ height: targetHeight
+ },
+ element: {
+ element: elem,
+ left: position.left,
+ top: position.top,
+ width: elemWidth,
+ height: elemHeight
+ },
+ horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+ vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+ };
+ if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+ feedback.horizontal = "center";
+ }
+ if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+ feedback.vertical = "middle";
+ }
+ if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+ feedback.important = "horizontal";
+ } else {
+ feedback.important = "vertical";
+ }
+ options.using.call( this, props, feedback );
+ };
+ }
+
+ elem.offset( $.extend( position, { using: using } ) );
+ });
+};
+
+$.ui.position = {
+ fit: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+ outerWidth = within.width,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = withinOffset - collisionPosLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+ newOverRight;
+
+ // element is wider than within
+ if ( data.collisionWidth > outerWidth ) {
+ // element is initially over the left side of within
+ if ( overLeft > 0 && overRight <= 0 ) {
+ newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+ position.left += overLeft - newOverRight;
+ // element is initially over right side of within
+ } else if ( overRight > 0 && overLeft <= 0 ) {
+ position.left = withinOffset;
+ // element is initially over both left and right sides of within
+ } else {
+ if ( overLeft > overRight ) {
+ position.left = withinOffset + outerWidth - data.collisionWidth;
+ } else {
+ position.left = withinOffset;
+ }
+ }
+ // too far left -> align with left edge
+ } else if ( overLeft > 0 ) {
+ position.left += overLeft;
+ // too far right -> align with right edge
+ } else if ( overRight > 0 ) {
+ position.left -= overRight;
+ // adjust based on position and margin
+ } else {
+ position.left = max( position.left - collisionPosLeft, position.left );
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+ outerHeight = data.within.height,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = withinOffset - collisionPosTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+ newOverBottom;
+
+ // element is taller than within
+ if ( data.collisionHeight > outerHeight ) {
+ // element is initially over the top of within
+ if ( overTop > 0 && overBottom <= 0 ) {
+ newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+ position.top += overTop - newOverBottom;
+ // element is initially over bottom of within
+ } else if ( overBottom > 0 && overTop <= 0 ) {
+ position.top = withinOffset;
+ // element is initially over both top and bottom of within
+ } else {
+ if ( overTop > overBottom ) {
+ position.top = withinOffset + outerHeight - data.collisionHeight;
+ } else {
+ position.top = withinOffset;
+ }
+ }
+ // too far up -> align with top
+ } else if ( overTop > 0 ) {
+ position.top += overTop;
+ // too far down -> align with bottom edge
+ } else if ( overBottom > 0 ) {
+ position.top -= overBottom;
+ // adjust based on position and margin
+ } else {
+ position.top = max( position.top - collisionPosTop, position.top );
+ }
+ }
+ },
+ flip: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.left + within.scrollLeft,
+ outerWidth = within.width,
+ offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = collisionPosLeft - offsetLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+ myOffset = data.my[ 0 ] === "left" ?
+ -data.elemWidth :
+ data.my[ 0 ] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[ 0 ] === "left" ?
+ data.targetWidth :
+ data.at[ 0 ] === "right" ?
+ -data.targetWidth :
+ 0,
+ offset = -2 * data.offset[ 0 ],
+ newOverRight,
+ newOverLeft;
+
+ if ( overLeft < 0 ) {
+ newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+ if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ }
+ else if ( overRight > 0 ) {
+ newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+ if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.top + within.scrollTop,
+ outerHeight = within.height,
+ offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = collisionPosTop - offsetTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+ top = data.my[ 1 ] === "top",
+ myOffset = top ?
+ -data.elemHeight :
+ data.my[ 1 ] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[ 1 ] === "top" ?
+ data.targetHeight :
+ data.at[ 1 ] === "bottom" ?
+ -data.targetHeight :
+ 0,
+ offset = -2 * data.offset[ 1 ],
+ newOverTop,
+ newOverBottom;
+ if ( overTop < 0 ) {
+ newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+ if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ }
+ else if ( overBottom > 0 ) {
+ newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+ if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ }
+ }
+ },
+ flipfit: {
+ left: function() {
+ $.ui.position.flip.left.apply( this, arguments );
+ $.ui.position.fit.left.apply( this, arguments );
+ },
+ top: function() {
+ $.ui.position.flip.top.apply( this, arguments );
+ $.ui.position.fit.top.apply( this, arguments );
+ }
+ }
+};
+
+// fraction support test
+(function () {
+ var testElement, testElementParent, testElementStyle, offsetLeft, i,
+ body = document.getElementsByTagName( "body" )[ 0 ],
+ div = document.createElement( "div" );
+
+ //Create a "fake body" for testing based on method used in jQuery.support
+ testElement = document.createElement( body ? "div" : "body" );
+ testElementStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ background: "none"
+ };
+ if ( body ) {
+ $.extend( testElementStyle, {
+ position: "absolute",
+ left: "-1000px",
+ top: "-1000px"
+ });
+ }
+ for ( i in testElementStyle ) {
+ testElement.style[ i ] = testElementStyle[ i ];
+ }
+ testElement.appendChild( div );
+ testElementParent = body || document.documentElement;
+ testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+ div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+ offsetLeft = $( div ).offset().left;
+ $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+ testElement.innerHTML = "";
+ testElementParent.removeChild( testElement );
+})();
+
+}( jQuery ) );
+(function( $, undefined ) {
+
+$.widget("ui.draggable", $.ui.mouse, {
+ version: "1.10.0",
+ widgetEventPrefix: "drag",
+ options: {
+ addClasses: true,
+ appendTo: "parent",
+ axis: false,
+ connectToSortable: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ iframeFix: false,
+ opacity: false,
+ refreshPositions: false,
+ revert: false,
+ revertDuration: 500,
+ scope: "default",
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ snap: false,
+ snapMode: "both",
+ snapTolerance: 20,
+ stack: false,
+ zIndex: false,
+
+ // callbacks
+ drag: null,
+ start: null,
+ stop: null
+ },
+ _create: function() {
+
+ if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
+ this.element[0].style.position = "relative";
+ }
+ if (this.options.addClasses){
+ this.element.addClass("ui-draggable");
+ }
+ if (this.options.disabled){
+ this.element.addClass("ui-draggable-disabled");
+ }
+
+ this._mouseInit();
+
+ },
+
+ _destroy: function() {
+ this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function(event) {
+
+ var o = this.options;
+
+ // among others, prevent a drag on a resizable-handle
+ if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+ return false;
+ }
+
+ //Quit if we're not on a valid handle
+ this.handle = this._getHandle(event);
+ if (!this.handle) {
+ return false;
+ }
+
+ $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+ $("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
+ .css({
+ width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+ position: "absolute", opacity: "0.001", zIndex: 1000
+ })
+ .css($(this).offset())
+ .appendTo("body");
+ });
+
+ return true;
+
+ },
+
+ _mouseStart: function(event) {
+
+ var o = this.options;
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ this.helper.addClass("ui-draggable-dragging");
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ //If ddmanager is used for droppables, set the global draggable
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Store the helper's css position
+ this.cssPosition = this.helper.css("position");
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.positionAbs = this.element.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ //Generate the original position
+ this.originalPosition = this.position = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Set a containment if given in the options
+ if(o.containment) {
+ this._setContainment();
+ }
+
+ //Trigger event + callbacks
+ if(this._trigger("start", event) === false) {
+ this._clear();
+ return false;
+ }
+
+ //Recache the helper size
+ this._cacheHelperProportions();
+
+ //Prepare the droppable offsets
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+
+ this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStart(this, event);
+ }
+
+ return true;
+ },
+
+ _mouseDrag: function(event, noPropagation) {
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Call plugins and callbacks and use the resulting position if something is returned
+ if (!noPropagation) {
+ var ui = this._uiHash();
+ if(this._trigger("drag", event, ui) === false) {
+ this._mouseUp({});
+ return false;
+ }
+ this.position = ui.position;
+ }
+
+ if(!this.options.axis || this.options.axis !== "y") {
+ this.helper[0].style.left = this.position.left+"px";
+ }
+ if(!this.options.axis || this.options.axis !== "x") {
+ this.helper[0].style.top = this.position.top+"px";
+ }
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ //If we are using droppables, inform the manager about the drop
+ var element,
+ that = this,
+ elementInDom = false,
+ dropped = false;
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ dropped = $.ui.ddmanager.drop(this, event);
+ }
+
+ //if a drop comes from outside (a sortable)
+ if(this.dropped) {
+ dropped = this.dropped;
+ this.dropped = false;
+ }
+
+ //if the original element is no longer in the DOM don't bother to continue (see #8269)
+ element = this.element[0];
+ while ( element && (element = element.parentNode) ) {
+ if (element === document ) {
+ elementInDom = true;
+ }
+ }
+ if ( !elementInDom && this.options.helper === "original" ) {
+ return false;
+ }
+
+ if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+ $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+ if(that._trigger("stop", event) !== false) {
+ that._clear();
+ }
+ });
+ } else {
+ if(this._trigger("stop", event) !== false) {
+ this._clear();
+ }
+ }
+
+ return false;
+ },
+
+ _mouseUp: function(event) {
+ //Remove frame helpers
+ $("div.ui-draggable-iframeFix").each(function() {
+ this.parentNode.removeChild(this);
+ });
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+ if( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStop(this, event);
+ }
+
+ return $.ui.mouse.prototype._mouseUp.call(this, event);
+ },
+
+ cancel: function() {
+
+ if(this.helper.is(".ui-draggable-dragging")) {
+ this._mouseUp({});
+ } else {
+ this._clear();
+ }
+
+ return this;
+
+ },
+
+ _getHandle: function(event) {
+
+ var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
+ $(this.options.handle, this.element)
+ .find("*")
+ .addBack()
+ .each(function() {
+ if(this === event.target) {
+ handle = true;
+ }
+ });
+
+ return handle;
+
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+
+ if(!helper.parents("body").length) {
+ helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+ }
+
+ if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+ helper.css("position", "absolute");
+ }
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function() {
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ //This needs to be actually done for all browsers, since pageX/pageY includes this information
+ //Ugly IE fix
+ if((this.offsetParent[0] === document.body) ||
+ (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+
+ if(this.cssPosition === "relative") {
+ var p = this.element.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return { top: 0, left: 0 };
+ }
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.element.css("marginLeft"),10) || 0),
+ top: (parseInt(this.element.css("marginTop"),10) || 0),
+ right: (parseInt(this.element.css("marginRight"),10) || 0),
+ bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var over, c, ce,
+ o = this.options;
+
+ if(o.containment === "parent") {
+ o.containment = this.helper[0].parentNode;
+ }
+ if(o.containment === "document" || o.containment === "window") {
+ this.containment = [
+ o.containment === "document" ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+ o.containment === "document" ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+ (o.containment === "document" ? 0 : $(window).scrollLeft()) + $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
+ (o.containment === "document" ? 0 : $(window).scrollTop()) + ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor !== Array) {
+ c = $(o.containment);
+ ce = c[0];
+
+ if(!ce) {
+ return;
+ }
+
+ over = ($(ce).css("overflow") !== "hidden");
+
+ this.containment = [
+ (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
+ (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
+ (over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
+ (over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom
+ ];
+ this.relative_container = c;
+
+ } else if(o.containment.constructor === Array) {
+ this.containment = o.containment;
+ }
+
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if(!pos) {
+ pos = this.position;
+ }
+
+ var mod = d === "absolute" ? 1 : -1,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function(event) {
+
+ var containment, co, top, left,
+ o = this.options,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+ scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName),
+ pageX = event.pageX,
+ pageY = event.pageY;
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+ if(this.containment) {
+ if (this.relative_container){
+ co = this.relative_container.offset();
+ containment = [ this.containment[0] + co.left,
+ this.containment[1] + co.top,
+ this.containment[2] + co.left,
+ this.containment[3] + co.top ];
+ }
+ else {
+ containment = this.containment;
+ }
+
+ if(event.pageX - this.offset.click.left < containment[0]) {
+ pageX = containment[0] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top < containment[1]) {
+ pageY = containment[1] + this.offset.click.top;
+ }
+ if(event.pageX - this.offset.click.left > containment[2]) {
+ pageX = containment[2] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top > containment[3]) {
+ pageY = containment[3] + this.offset.click.top;
+ }
+ }
+
+ if(o.grid) {
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+ top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+ pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+ pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _clear: function() {
+ this.helper.removeClass("ui-draggable-dragging");
+ if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ this.cancelHelperRemoval = false;
+ },
+
+ // From now on bulk stuff - mainly helpers
+
+ _trigger: function(type, event, ui) {
+ ui = ui || this._uiHash();
+ $.ui.plugin.call(this, type, [event, ui]);
+ //The absolute position has to be recalculated after plugins
+ if(type === "drag") {
+ this.positionAbs = this._convertPositionTo("absolute");
+ }
+ return $.Widget.prototype._trigger.call(this, type, event, ui);
+ },
+
+ plugins: {},
+
+ _uiHash: function() {
+ return {
+ helper: this.helper,
+ position: this.position,
+ originalPosition: this.originalPosition,
+ offset: this.positionAbs
+ };
+ }
+
+});
+
+$.ui.plugin.add("draggable", "connectToSortable", {
+ start: function(event, ui) {
+
+ var inst = $(this).data("ui-draggable"), o = inst.options,
+ uiSortable = $.extend({}, ui, { item: inst.element });
+ inst.sortables = [];
+ $(o.connectToSortable).each(function() {
+ var sortable = $.data(this, "ui-sortable");
+ if (sortable && !sortable.options.disabled) {
+ inst.sortables.push({
+ instance: sortable,
+ shouldRevert: sortable.options.revert
+ });
+ sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+ sortable._trigger("activate", event, uiSortable);
+ }
+ });
+
+ },
+ stop: function(event, ui) {
+
+ //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+ var inst = $(this).data("ui-draggable"),
+ uiSortable = $.extend({}, ui, { item: inst.element });
+
+ $.each(inst.sortables, function() {
+ if(this.instance.isOver) {
+
+ this.instance.isOver = 0;
+
+ inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+ this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+
+ //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
+ if(this.shouldRevert) {
+ this.instance.options.revert = true;
+ }
+
+ //Trigger the stop of the sortable
+ this.instance._mouseStop(event);
+
+ this.instance.options.helper = this.instance.options._helper;
+
+ //If the helper has been the original item, restore properties in the sortable
+ if(inst.options.helper === "original") {
+ this.instance.currentItem.css({ top: "auto", left: "auto" });
+ }
+
+ } else {
+ this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+ this.instance._trigger("deactivate", event, uiSortable);
+ }
+
+ });
+
+ },
+ drag: function(event, ui) {
+
+ var inst = $(this).data("ui-draggable"), that = this;
+
+ $.each(inst.sortables, function() {
+
+ var innermostIntersecting = false,
+ thisSortable = this;
+
+ //Copy over some variables to allow calling the sortable's native _intersectsWith
+ this.instance.positionAbs = inst.positionAbs;
+ this.instance.helperProportions = inst.helperProportions;
+ this.instance.offset.click = inst.offset.click;
+
+ if(this.instance._intersectsWith(this.instance.containerCache)) {
+ innermostIntersecting = true;
+ $.each(inst.sortables, function () {
+ this.instance.positionAbs = inst.positionAbs;
+ this.instance.helperProportions = inst.helperProportions;
+ this.instance.offset.click = inst.offset.click;
+ if (this !== thisSortable &&
+ this.instance._intersectsWith(this.instance.containerCache) &&
+ $.ui.contains(thisSortable.instance.element[0], this.instance.element[0])
+ ) {
+ innermostIntersecting = false;
+ }
+ return innermostIntersecting;
+ });
+ }
+
+
+ if(innermostIntersecting) {
+ //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+ if(!this.instance.isOver) {
+
+ this.instance.isOver = 1;
+ //Now we fake the start of dragging for the sortable instance,
+ //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+ //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+ this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
+ this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+ this.instance.options.helper = function() { return ui.helper[0]; };
+
+ event.target = this.instance.currentItem[0];
+ this.instance._mouseCapture(event, true);
+ this.instance._mouseStart(event, true, true);
+
+ //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+ this.instance.offset.click.top = inst.offset.click.top;
+ this.instance.offset.click.left = inst.offset.click.left;
+ this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+ this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+
+ inst._trigger("toSortable", event);
+ inst.dropped = this.instance.element; //draggable revert needs that
+ //hack so receive/update callbacks work (mostly)
+ inst.currentItem = inst.element;
+ this.instance.fromOutside = inst;
+
+ }
+
+ //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+ if(this.instance.currentItem) {
+ this.instance._mouseDrag(event);
+ }
+
+ } else {
+
+ //If it doesn't intersect with the sortable, and it intersected before,
+ //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+ if(this.instance.isOver) {
+
+ this.instance.isOver = 0;
+ this.instance.cancelHelperRemoval = true;
+
+ //Prevent reverting on this forced stop
+ this.instance.options.revert = false;
+
+ // The out event needs to be triggered independently
+ this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+
+ this.instance._mouseStop(event, true);
+ this.instance.options.helper = this.instance.options._helper;
+
+ //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+ this.instance.currentItem.remove();
+ if(this.instance.placeholder) {
+ this.instance.placeholder.remove();
+ }
+
+ inst._trigger("fromSortable", event);
+ inst.dropped = false; //draggable revert needs that
+ }
+
+ }
+
+ });
+
+ }
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+ start: function() {
+ var t = $("body"), o = $(this).data("ui-draggable").options;
+ if (t.css("cursor")) {
+ o._cursor = t.css("cursor");
+ }
+ t.css("cursor", o.cursor);
+ },
+ stop: function() {
+ var o = $(this).data("ui-draggable").options;
+ if (o._cursor) {
+ $("body").css("cursor", o._cursor);
+ }
+ }
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+ start: function(event, ui) {
+ var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+ if(t.css("opacity")) {
+ o._opacity = t.css("opacity");
+ }
+ t.css("opacity", o.opacity);
+ },
+ stop: function(event, ui) {
+ var o = $(this).data("ui-draggable").options;
+ if(o._opacity) {
+ $(ui.helper).css("opacity", o._opacity);
+ }
+ }
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+ start: function() {
+ var i = $(this).data("ui-draggable");
+ if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+ i.overflowOffset = i.scrollParent.offset();
+ }
+ },
+ drag: function( event ) {
+
+ var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+
+ if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+
+ if(!o.axis || o.axis !== "x") {
+ if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+ i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+ } else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+ i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+ }
+ }
+
+ if(!o.axis || o.axis !== "y") {
+ if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+ i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+ } else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+ i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+ }
+ }
+
+ } else {
+
+ if(!o.axis || o.axis !== "x") {
+ if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+ }
+ }
+
+ if(!o.axis || o.axis !== "y") {
+ if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+ }
+ }
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(i, event);
+ }
+
+ }
+});
+
+$.ui.plugin.add("draggable", "snap", {
+ start: function() {
+
+ var i = $(this).data("ui-draggable"),
+ o = i.options;
+
+ i.snapElements = [];
+
+ $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+ var $t = $(this),
+ $o = $t.offset();
+ if(this !== i.element[0]) {
+ i.snapElements.push({
+ item: this,
+ width: $t.outerWidth(), height: $t.outerHeight(),
+ top: $o.top, left: $o.left
+ });
+ }
+ });
+
+ },
+ drag: function(event, ui) {
+
+ var ts, bs, ls, rs, l, r, t, b, i, first,
+ inst = $(this).data("ui-draggable"),
+ o = inst.options,
+ d = o.snapTolerance,
+ x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+ for (i = inst.snapElements.length - 1; i >= 0; i--){
+
+ l = inst.snapElements[i].left;
+ r = l + inst.snapElements[i].width;
+ t = inst.snapElements[i].top;
+ b = t + inst.snapElements[i].height;
+
+ //Yes, I know, this is insane ;)
+ if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
+ if(inst.snapElements[i].snapping) {
+ (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ }
+ inst.snapElements[i].snapping = false;
+ continue;
+ }
+
+ if(o.snapMode !== "inner") {
+ ts = Math.abs(t - y2) <= d;
+ bs = Math.abs(b - y1) <= d;
+ ls = Math.abs(l - x2) <= d;
+ rs = Math.abs(r - x1) <= d;
+ if(ts) {
+ ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+ }
+ if(bs) {
+ ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+ }
+ if(ls) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+ }
+ if(rs) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+ }
+ }
+
+ first = (ts || bs || ls || rs);
+
+ if(o.snapMode !== "outer") {
+ ts = Math.abs(t - y1) <= d;
+ bs = Math.abs(b - y2) <= d;
+ ls = Math.abs(l - x1) <= d;
+ rs = Math.abs(r - x2) <= d;
+ if(ts) {
+ ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+ }
+ if(bs) {
+ ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+ }
+ if(ls) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+ }
+ if(rs) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+ }
+ }
+
+ if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+ (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ }
+ inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+ }
+
+ }
+});
+
+$.ui.plugin.add("draggable", "stack", {
+ start: function() {
+
+ var min,
+ o = $(this).data("ui-draggable").options,
+ group = $.makeArray($(o.stack)).sort(function(a,b) {
+ return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+ });
+
+ if (!group.length) { return; }
+
+ min = parseInt(group[0].style.zIndex, 10) || 0;
+ $(group).each(function(i) {
+ this.style.zIndex = min + i;
+ });
+
+ this[0].style.zIndex = min + group.length;
+
+ }
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+ start: function(event, ui) {
+ var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+ if(t.css("zIndex")) {
+ o._zIndex = t.css("zIndex");
+ }
+ t.css("zIndex", o.zIndex);
+ },
+ stop: function(event, ui) {
+ var o = $(this).data("ui-draggable").options;
+ if(o._zIndex) {
+ $(ui.helper).css("zIndex", o._zIndex);
+ }
+ }
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+function isOverAxis( x, reference, size ) {
+ return ( x > reference ) && ( x < ( reference + size ) );
+}
+
+$.widget("ui.droppable", {
+ version: "1.10.0",
+ widgetEventPrefix: "drop",
+ options: {
+ accept: "*",
+ activeClass: false,
+ addClasses: true,
+ greedy: false,
+ hoverClass: false,
+ scope: "default",
+ tolerance: "intersect",
+
+ // callbacks
+ activate: null,
+ deactivate: null,
+ drop: null,
+ out: null,
+ over: null
+ },
+ _create: function() {
+
+ var o = this.options,
+ accept = o.accept;
+
+ this.isover = false;
+ this.isout = true;
+
+ this.accept = $.isFunction(accept) ? accept : function(d) {
+ return d.is(accept);
+ };
+
+ //Store the droppable's proportions
+ this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+
+ // Add the reference and positions to the manager
+ $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+ $.ui.ddmanager.droppables[o.scope].push(this);
+
+ (o.addClasses && this.element.addClass("ui-droppable"));
+
+ },
+
+ _destroy: function() {
+ var i = 0,
+ drop = $.ui.ddmanager.droppables[this.options.scope];
+
+ for ( ; i < drop.length; i++ ) {
+ if ( drop[i] === this ) {
+ drop.splice(i, 1);
+ }
+ }
+
+ this.element.removeClass("ui-droppable ui-droppable-disabled");
+ },
+
+ _setOption: function(key, value) {
+
+ if(key === "accept") {
+ this.accept = $.isFunction(value) ? value : function(d) {
+ return d.is(value);
+ };
+ }
+ $.Widget.prototype._setOption.apply(this, arguments);
+ },
+
+ _activate: function(event) {
+ var draggable = $.ui.ddmanager.current;
+ if(this.options.activeClass) {
+ this.element.addClass(this.options.activeClass);
+ }
+ if(draggable){
+ this._trigger("activate", event, this.ui(draggable));
+ }
+ },
+
+ _deactivate: function(event) {
+ var draggable = $.ui.ddmanager.current;
+ if(this.options.activeClass) {
+ this.element.removeClass(this.options.activeClass);
+ }
+ if(draggable){
+ this._trigger("deactivate", event, this.ui(draggable));
+ }
+ },
+
+ _over: function(event) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+ return;
+ }
+
+ if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+ if(this.options.hoverClass) {
+ this.element.addClass(this.options.hoverClass);
+ }
+ this._trigger("over", event, this.ui(draggable));
+ }
+
+ },
+
+ _out: function(event) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+ return;
+ }
+
+ if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+ if(this.options.hoverClass) {
+ this.element.removeClass(this.options.hoverClass);
+ }
+ this._trigger("out", event, this.ui(draggable));
+ }
+
+ },
+
+ _drop: function(event,custom) {
+
+ var draggable = custom || $.ui.ddmanager.current,
+ childrenIntersection = false;
+
+ // Bail if draggable and droppable are same element
+ if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+ return false;
+ }
+
+ this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
+ var inst = $.data(this, "ui-droppable");
+ if(
+ inst.options.greedy &&
+ !inst.options.disabled &&
+ inst.options.scope === draggable.options.scope &&
+ inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
+ $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+ ) { childrenIntersection = true; return false; }
+ });
+ if(childrenIntersection) {
+ return false;
+ }
+
+ if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+ if(this.options.activeClass) {
+ this.element.removeClass(this.options.activeClass);
+ }
+ if(this.options.hoverClass) {
+ this.element.removeClass(this.options.hoverClass);
+ }
+ this._trigger("drop", event, this.ui(draggable));
+ return this.element;
+ }
+
+ return false;
+
+ },
+
+ ui: function(c) {
+ return {
+ draggable: (c.currentItem || c.element),
+ helper: c.helper,
+ position: c.position,
+ offset: c.positionAbs
+ };
+ }
+
+});
+
+$.ui.intersect = function(draggable, droppable, toleranceMode) {
+
+ if (!droppable.offset) {
+ return false;
+ }
+
+ var draggableLeft, draggableTop,
+ x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+ y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
+ l = droppable.offset.left, r = l + droppable.proportions.width,
+ t = droppable.offset.top, b = t + droppable.proportions.height;
+
+ switch (toleranceMode) {
+ case "fit":
+ return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+ case "intersect":
+ return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
+ x2 - (draggable.helperProportions.width / 2) < r && // Left Half
+ t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
+ y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+ case "pointer":
+ draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
+ draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
+ return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
+ case "touch":
+ return (
+ (y1 >= t && y1 <= b) || // Top edge touching
+ (y2 >= t && y2 <= b) || // Bottom edge touching
+ (y1 < t && y2 > b) // Surrounded vertically
+ ) && (
+ (x1 >= l && x1 <= r) || // Left edge touching
+ (x2 >= l && x2 <= r) || // Right edge touching
+ (x1 < l && x2 > r) // Surrounded horizontally
+ );
+ default:
+ return false;
+ }
+
+};
+
+/*
+ This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+ current: null,
+ droppables: { "default": [] },
+ prepareOffsets: function(t, event) {
+
+ var i, j,
+ m = $.ui.ddmanager.droppables[t.options.scope] || [],
+ type = event ? event.type : null, // workaround for #2317
+ list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+
+ droppablesLoop: for (i = 0; i < m.length; i++) {
+
+ //No disabled and non-accepted
+ if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+ continue;
+ }
+
+ // Filter out elements in the current dragged item
+ for (j=0; j < list.length; j++) {
+ if(list[j] === m[i].element[0]) {
+ m[i].proportions.height = 0;
+ continue droppablesLoop;
+ }
+ }
+
+ m[i].visible = m[i].element.css("display") !== "none";
+ if(!m[i].visible) {
+ continue;
+ }
+
+ //Activate the droppable if used directly from draggables
+ if(type === "mousedown") {
+ m[i]._activate.call(m[i], event);
+ }
+
+ m[i].offset = m[i].element.offset();
+ m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+
+ }
+
+ },
+ drop: function(draggable, event) {
+
+ var dropped = false;
+ $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+
+ if(!this.options) {
+ return;
+ }
+ if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
+ dropped = this._drop.call(this, event) || dropped;
+ }
+
+ if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+ this.isout = true;
+ this.isover = false;
+ this._deactivate.call(this, event);
+ }
+
+ });
+ return dropped;
+
+ },
+ dragStart: function( draggable, event ) {
+ //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+ draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+ if( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ });
+ },
+ drag: function(draggable, event) {
+
+ //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+ if(draggable.options.refreshPositions) {
+ $.ui.ddmanager.prepareOffsets(draggable, event);
+ }
+
+ //Run through all droppables and check their positions based on specific tolerance options
+ $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+
+ if(this.options.disabled || this.greedyChild || !this.visible) {
+ return;
+ }
+
+ var parentInstance, scope, parent,
+ intersects = $.ui.intersect(draggable, this, this.options.tolerance),
+ c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+ if(!c) {
+ return;
+ }
+
+ if (this.options.greedy) {
+ // find droppable parents with same scope
+ scope = this.options.scope;
+ parent = this.element.parents(":data(ui-droppable)").filter(function () {
+ return $.data(this, "ui-droppable").options.scope === scope;
+ });
+
+ if (parent.length) {
+ parentInstance = $.data(parent[0], "ui-droppable");
+ parentInstance.greedyChild = (c === "isover");
+ }
+ }
+
+ // we just moved into a greedy child
+ if (parentInstance && c === "isover") {
+ parentInstance.isover = false;
+ parentInstance.isout = true;
+ parentInstance._out.call(parentInstance, event);
+ }
+
+ this[c] = true;
+ this[c === "isout" ? "isover" : "isout"] = false;
+ this[c === "isover" ? "_over" : "_out"].call(this, event);
+
+ // we just moved out of a greedy child
+ if (parentInstance && c === "isout") {
+ parentInstance.isout = false;
+ parentInstance.isover = true;
+ parentInstance._over.call(parentInstance, event);
+ }
+ });
+
+ },
+ dragStop: function( draggable, event ) {
+ draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+ //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+ if( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ }
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+function num(v) {
+ return parseInt(v, 10) || 0;
+}
+
+function isNumber(value) {
+ return !isNaN(parseInt(value, 10));
+}
+
+$.widget("ui.resizable", $.ui.mouse, {
+ version: "1.10.0",
+ widgetEventPrefix: "resize",
+ options: {
+ alsoResize: false,
+ animate: false,
+ animateDuration: "slow",
+ animateEasing: "swing",
+ aspectRatio: false,
+ autoHide: false,
+ containment: false,
+ ghost: false,
+ grid: false,
+ handles: "e,s,se",
+ helper: false,
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 10,
+ minWidth: 10,
+ // See #7960
+ zIndex: 90,
+
+ // callbacks
+ resize: null,
+ start: null,
+ stop: null
+ },
+ _create: function() {
+
+ var n, i, handle, axis, hname,
+ that = this,
+ o = this.options;
+ this.element.addClass("ui-resizable");
+
+ $.extend(this, {
+ _aspectRatio: !!(o.aspectRatio),
+ aspectRatio: o.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+ });
+
+ //Wrap the element if it cannot hold child nodes
+ if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+
+ //Create a wrapper element and set the wrapper to the new current internal element
+ this.element.wrap(
+ $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+ position: this.element.css("position"),
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ top: this.element.css("top"),
+ left: this.element.css("left")
+ })
+ );
+
+ //Overwrite the original this.element
+ this.element = this.element.parent().data(
+ "ui-resizable", this.element.data("ui-resizable")
+ );
+
+ this.elementIsWrapper = true;
+
+ //Move margins to the wrapper
+ this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+ this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+
+ //Prevent Safari textarea resize
+ this.originalResizeStyle = this.originalElement.css("resize");
+ this.originalElement.css("resize", "none");
+
+ //Push the actual element to our proportionallyResize internal array
+ this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+
+ // avoid IE jump (hard set the margin)
+ this.originalElement.css({ margin: this.originalElement.css("margin") });
+
+ // fix handlers offset
+ this._proportionallyResize();
+
+ }
+
+ this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
+ if(this.handles.constructor === String) {
+
+ if ( this.handles === "all") {
+ this.handles = "n,e,s,w,se,sw,ne,nw";
+ }
+
+ n = this.handles.split(",");
+ this.handles = {};
+
+ for(i = 0; i < n.length; i++) {
+
+ handle = $.trim(n[i]);
+ hname = "ui-resizable-"+handle;
+ axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+
+ // Apply zIndex to all handles - see #7960
+ axis.css({ zIndex: o.zIndex });
+
+ //TODO : What's going on here?
+ if ("se" === handle) {
+ axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+ }
+
+ //Insert into internal handles object and append to element
+ this.handles[handle] = ".ui-resizable-"+handle;
+ this.element.append(axis);
+ }
+
+ }
+
+ this._renderAxis = function(target) {
+
+ var i, axis, padPos, padWrapper;
+
+ target = target || this.element;
+
+ for(i in this.handles) {
+
+ if(this.handles[i].constructor === String) {
+ this.handles[i] = $(this.handles[i], this.element).show();
+ }
+
+ //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+ if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+
+ axis = $(this.handles[i], this.element);
+
+ //Checking the correct pad and border
+ padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+ //The padding type i have to apply...
+ padPos = [ "padding",
+ /ne|nw|n/.test(i) ? "Top" :
+ /se|sw|s/.test(i) ? "Bottom" :
+ /^e$/.test(i) ? "Right" : "Left" ].join("");
+
+ target.css(padPos, padWrapper);
+
+ this._proportionallyResize();
+
+ }
+
+ //TODO: What's that good for? There's not anything to be executed left
+ if(!$(this.handles[i]).length) {
+ continue;
+ }
+ }
+ };
+
+ //TODO: make renderAxis a prototype function
+ this._renderAxis(this.element);
+
+ this._handles = $(".ui-resizable-handle", this.element)
+ .disableSelection();
+
+ //Matching axis name
+ this._handles.mouseover(function() {
+ if (!that.resizing) {
+ if (this.className) {
+ axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+ }
+ //Axis, default = se
+ that.axis = axis && axis[1] ? axis[1] : "se";
+ }
+ });
+
+ //If we want to auto hide the elements
+ if (o.autoHide) {
+ this._handles.hide();
+ $(this.element)
+ .addClass("ui-resizable-autohide")
+ .mouseenter(function() {
+ if (o.disabled) {
+ return;
+ }
+ $(this).removeClass("ui-resizable-autohide");
+ that._handles.show();
+ })
+ .mouseleave(function(){
+ if (o.disabled) {
+ return;
+ }
+ if (!that.resizing) {
+ $(this).addClass("ui-resizable-autohide");
+ that._handles.hide();
+ }
+ });
+ }
+
+ //Initialize the mouse interaction
+ this._mouseInit();
+
+ },
+
+ _destroy: function() {
+
+ this._mouseDestroy();
+
+ var wrapper,
+ _destroy = function(exp) {
+ $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+ .removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+ };
+
+ //TODO: Unwrap at same DOM position
+ if (this.elementIsWrapper) {
+ _destroy(this.element);
+ wrapper = this.element;
+ this.originalElement.css({
+ position: wrapper.css("position"),
+ width: wrapper.outerWidth(),
+ height: wrapper.outerHeight(),
+ top: wrapper.css("top"),
+ left: wrapper.css("left")
+ }).insertAfter( wrapper );
+ wrapper.remove();
+ }
+
+ this.originalElement.css("resize", this.originalResizeStyle);
+ _destroy(this.originalElement);
+
+ return this;
+ },
+
+ _mouseCapture: function(event) {
+ var i, handle,
+ capture = false;
+
+ for (i in this.handles) {
+ handle = $(this.handles[i])[0];
+ if (handle === event.target || $.contains(handle, event.target)) {
+ capture = true;
+ }
+ }
+
+ return !this.options.disabled && capture;
+ },
+
+ _mouseStart: function(event) {
+
+ var curleft, curtop, cursor,
+ o = this.options,
+ iniPos = this.element.position(),
+ el = this.element;
+
+ this.resizing = true;
+
+ // bugfix for http://dev.jquery.com/ticket/1749
+ if ( (/absolute/).test( el.css("position") ) ) {
+ el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
+ } else if (el.is(".ui-draggable")) {
+ el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
+ }
+
+ this._renderProxy();
+
+ curleft = num(this.helper.css("left"));
+ curtop = num(this.helper.css("top"));
+
+ if (o.containment) {
+ curleft += $(o.containment).scrollLeft() || 0;
+ curtop += $(o.containment).scrollTop() || 0;
+ }
+
+ //Store needed variables
+ this.offset = this.helper.offset();
+ this.position = { left: curleft, top: curtop };
+ this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+ this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+ this.originalPosition = { left: curleft, top: curtop };
+ this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+ this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+ //Aspect Ratio
+ this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+
+ cursor = $(".ui-resizable-" + this.axis).css("cursor");
+ $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+
+ el.addClass("ui-resizable-resizing");
+ this._propagate("start", event);
+ return true;
+ },
+
+ _mouseDrag: function(event) {
+
+ //Increase performance, avoid regex
+ var data,
+ el = this.helper, props = {},
+ smp = this.originalMousePosition,
+ a = this.axis,
+ prevTop = this.position.top,
+ prevLeft = this.position.left,
+ prevWidth = this.size.width,
+ prevHeight = this.size.height,
+ dx = (event.pageX-smp.left)||0,
+ dy = (event.pageY-smp.top)||0,
+ trigger = this._change[a];
+
+ if (!trigger) {
+ return false;
+ }
+
+ // Calculate the attrs that will be change
+ data = trigger.apply(this, [event, dx, dy]);
+
+ // Put this in the mouseDrag handler since the user can start pressing shift while resizing
+ this._updateVirtualBoundaries(event.shiftKey);
+ if (this._aspectRatio || event.shiftKey) {
+ data = this._updateRatio(data, event);
+ }
+
+ data = this._respectSize(data, event);
+
+ this._updateCache(data);
+
+ // plugins callbacks need to be called first
+ this._propagate("resize", event);
+
+ if (this.position.top !== prevTop) {
+ props.top = this.position.top + "px";
+ }
+ if (this.position.left !== prevLeft) {
+ props.left = this.position.left + "px";
+ }
+ if (this.size.width !== prevWidth) {
+ props.width = this.size.width + "px";
+ }
+ if (this.size.height !== prevHeight) {
+ props.height = this.size.height + "px";
+ }
+ el.css(props);
+
+ if (!this._helper && this._proportionallyResizeElements.length) {
+ this._proportionallyResize();
+ }
+
+ // Call the user callback if the element was resized
+ if ( ! $.isEmptyObject(props) ) {
+ this._trigger("resize", event, this.ui());
+ }
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ this.resizing = false;
+ var pr, ista, soffseth, soffsetw, s, left, top,
+ o = this.options, that = this;
+
+ if(this._helper) {
+
+ pr = this._proportionallyResizeElements;
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+ soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+ soffsetw = ista ? 0 : that.sizeDiff.width;
+
+ s = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) };
+ left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
+ top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+
+ if (!o.animate) {
+ this.element.css($.extend(s, { top: top, left: left }));
+ }
+
+ that.helper.height(that.size.height);
+ that.helper.width(that.size.width);
+
+ if (this._helper && !o.animate) {
+ this._proportionallyResize();
+ }
+ }
+
+ $("body").css("cursor", "auto");
+
+ this.element.removeClass("ui-resizable-resizing");
+
+ this._propagate("stop", event);
+
+ if (this._helper) {
+ this.helper.remove();
+ }
+
+ return false;
+
+ },
+
+ _updateVirtualBoundaries: function(forceAspectRatio) {
+ var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+ o = this.options;
+
+ b = {
+ minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+ maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+ minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+ maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+ };
+
+ if(this._aspectRatio || forceAspectRatio) {
+ // We want to create an enclosing box whose aspect ration is the requested one
+ // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+ pMinWidth = b.minHeight * this.aspectRatio;
+ pMinHeight = b.minWidth / this.aspectRatio;
+ pMaxWidth = b.maxHeight * this.aspectRatio;
+ pMaxHeight = b.maxWidth / this.aspectRatio;
+
+ if(pMinWidth > b.minWidth) {
+ b.minWidth = pMinWidth;
+ }
+ if(pMinHeight > b.minHeight) {
+ b.minHeight = pMinHeight;
+ }
+ if(pMaxWidth < b.maxWidth) {
+ b.maxWidth = pMaxWidth;
+ }
+ if(pMaxHeight < b.maxHeight) {
+ b.maxHeight = pMaxHeight;
+ }
+ }
+ this._vBoundaries = b;
+ },
+
+ _updateCache: function(data) {
+ this.offset = this.helper.offset();
+ if (isNumber(data.left)) {
+ this.position.left = data.left;
+ }
+ if (isNumber(data.top)) {
+ this.position.top = data.top;
+ }
+ if (isNumber(data.height)) {
+ this.size.height = data.height;
+ }
+ if (isNumber(data.width)) {
+ this.size.width = data.width;
+ }
+ },
+
+ _updateRatio: function( data ) {
+
+ var cpos = this.position,
+ csize = this.size,
+ a = this.axis;
+
+ if (isNumber(data.height)) {
+ data.width = (data.height * this.aspectRatio);
+ } else if (isNumber(data.width)) {
+ data.height = (data.width / this.aspectRatio);
+ }
+
+ if (a === "sw") {
+ data.left = cpos.left + (csize.width - data.width);
+ data.top = null;
+ }
+ if (a === "nw") {
+ data.top = cpos.top + (csize.height - data.height);
+ data.left = cpos.left + (csize.width - data.width);
+ }
+
+ return data;
+ },
+
+ _respectSize: function( data ) {
+
+ var o = this._vBoundaries,
+ a = this.axis,
+ ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+ isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+ dw = this.originalPosition.left + this.originalSize.width,
+ dh = this.position.top + this.size.height,
+ cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+ if (isminw) {
+ data.width = o.minWidth;
+ }
+ if (isminh) {
+ data.height = o.minHeight;
+ }
+ if (ismaxw) {
+ data.width = o.maxWidth;
+ }
+ if (ismaxh) {
+ data.height = o.maxHeight;
+ }
+
+ if (isminw && cw) {
+ data.left = dw - o.minWidth;
+ }
+ if (ismaxw && cw) {
+ data.left = dw - o.maxWidth;
+ }
+ if (isminh && ch) {
+ data.top = dh - o.minHeight;
+ }
+ if (ismaxh && ch) {
+ data.top = dh - o.maxHeight;
+ }
+
+ // fixing jump error on top/left - bug #2330
+ if (!data.width && !data.height && !data.left && data.top) {
+ data.top = null;
+ } else if (!data.width && !data.height && !data.top && data.left) {
+ data.left = null;
+ }
+
+ return data;
+ },
+
+ _proportionallyResize: function() {
+
+ if (!this._proportionallyResizeElements.length) {
+ return;
+ }
+
+ var i, j, borders, paddings, prel,
+ element = this.helper || this.element;
+
+ for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+
+ prel = this._proportionallyResizeElements[i];
+
+ if (!this.borderDif) {
+ this.borderDif = [];
+ borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
+ paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
+
+ for ( j = 0; j < borders.length; j++ ) {
+ this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
+ }
+ }
+
+ prel.css({
+ height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+ width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+ });
+
+ }
+
+ },
+
+ _renderProxy: function() {
+
+ var el = this.element, o = this.options;
+ this.elementOffset = el.offset();
+
+ if(this._helper) {
+
+ this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+
+ this.helper.addClass(this._helper).css({
+ width: this.element.outerWidth() - 1,
+ height: this.element.outerHeight() - 1,
+ position: "absolute",
+ left: this.elementOffset.left +"px",
+ top: this.elementOffset.top +"px",
+ zIndex: ++o.zIndex //TODO: Don't modify option
+ });
+
+ this.helper
+ .appendTo("body")
+ .disableSelection();
+
+ } else {
+ this.helper = this.element;
+ }
+
+ },
+
+ _change: {
+ e: function(event, dx) {
+ return { width: this.originalSize.width + dx };
+ },
+ w: function(event, dx) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { left: sp.left + dx, width: cs.width - dx };
+ },
+ n: function(event, dx, dy) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { top: sp.top + dy, height: cs.height - dy };
+ },
+ s: function(event, dx, dy) {
+ return { height: this.originalSize.height + dy };
+ },
+ se: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+ },
+ sw: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+ },
+ ne: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+ },
+ nw: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+ }
+ },
+
+ _propagate: function(n, event) {
+ $.ui.plugin.call(this, n, [event, this.ui()]);
+ (n !== "resize" && this._trigger(n, event, this.ui()));
+ },
+
+ plugins: {},
+
+ ui: function() {
+ return {
+ originalElement: this.originalElement,
+ element: this.element,
+ helper: this.helper,
+ position: this.position,
+ size: this.size,
+ originalSize: this.originalSize,
+ originalPosition: this.originalPosition
+ };
+ }
+
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "animate", {
+
+ stop: function( event ) {
+ var that = $(this).data("ui-resizable"),
+ o = that.options,
+ pr = that._proportionallyResizeElements,
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+ soffsetw = ista ? 0 : that.sizeDiff.width,
+ style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+ left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
+ top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+
+ that.element.animate(
+ $.extend(style, top && left ? { top: top, left: left } : {}), {
+ duration: o.animateDuration,
+ easing: o.animateEasing,
+ step: function() {
+
+ var data = {
+ width: parseInt(that.element.css("width"), 10),
+ height: parseInt(that.element.css("height"), 10),
+ top: parseInt(that.element.css("top"), 10),
+ left: parseInt(that.element.css("left"), 10)
+ };
+
+ if (pr && pr.length) {
+ $(pr[0]).css({ width: data.width, height: data.height });
+ }
+
+ // propagating resize, and updating values for each animation step
+ that._updateCache(data);
+ that._propagate("resize", event);
+
+ }
+ }
+ );
+ }
+
+});
+
+$.ui.plugin.add("resizable", "containment", {
+
+ start: function() {
+ var element, p, co, ch, cw, width, height,
+ that = $(this).data("ui-resizable"),
+ o = that.options,
+ el = that.element,
+ oc = o.containment,
+ ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+
+ if (!ce) {
+ return;
+ }
+
+ that.containerElement = $(ce);
+
+ if (/document/.test(oc) || oc === document) {
+ that.containerOffset = { left: 0, top: 0 };
+ that.containerPosition = { left: 0, top: 0 };
+
+ that.parentData = {
+ element: $(document), left: 0, top: 0,
+ width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+ };
+ }
+
+ // i'm a node, so compute top, left, right, bottom
+ else {
+ element = $(ce);
+ p = [];
+ $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+
+ that.containerOffset = element.offset();
+ that.containerPosition = element.position();
+ that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+
+ co = that.containerOffset;
+ ch = that.containerSize.height;
+ cw = that.containerSize.width;
+ width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
+ height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+
+ that.parentData = {
+ element: ce, left: co.left, top: co.top, width: width, height: height
+ };
+ }
+ },
+
+ resize: function( event ) {
+ var woset, hoset, isParent, isOffsetRelative,
+ that = $(this).data("ui-resizable"),
+ o = that.options,
+ co = that.containerOffset, cp = that.position,
+ pRatio = that._aspectRatio || event.shiftKey,
+ cop = { top:0, left:0 }, ce = that.containerElement;
+
+ if (ce[0] !== document && (/static/).test(ce.css("position"))) {
+ cop = co;
+ }
+
+ if (cp.left < (that._helper ? co.left : 0)) {
+ that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
+ if (pRatio) {
+ that.size.height = that.size.width / that.aspectRatio;
+ }
+ that.position.left = o.helper ? co.left : 0;
+ }
+
+ if (cp.top < (that._helper ? co.top : 0)) {
+ that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
+ if (pRatio) {
+ that.size.width = that.size.height * that.aspectRatio;
+ }
+ that.position.top = that._helper ? co.top : 0;
+ }
+
+ that.offset.left = that.parentData.left+that.position.left;
+ that.offset.top = that.parentData.top+that.position.top;
+
+ woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
+ hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
+
+ isParent = that.containerElement.get(0) === that.element.parent().get(0);
+ isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+
+ if(isParent && isOffsetRelative) {
+ woset -= that.parentData.left;
+ }
+
+ if (woset + that.size.width >= that.parentData.width) {
+ that.size.width = that.parentData.width - woset;
+ if (pRatio) {
+ that.size.height = that.size.width / that.aspectRatio;
+ }
+ }
+
+ if (hoset + that.size.height >= that.parentData.height) {
+ that.size.height = that.parentData.height - hoset;
+ if (pRatio) {
+ that.size.width = that.size.height * that.aspectRatio;
+ }
+ }
+ },
+
+ stop: function(){
+ var that = $(this).data("ui-resizable"),
+ o = that.options,
+ co = that.containerOffset,
+ cop = that.containerPosition,
+ ce = that.containerElement,
+ helper = $(that.helper),
+ ho = helper.offset(),
+ w = helper.outerWidth() - that.sizeDiff.width,
+ h = helper.outerHeight() - that.sizeDiff.height;
+
+ if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
+ $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+ }
+
+ if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
+ $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+ }
+
+ }
+});
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+ start: function () {
+ var that = $(this).data("ui-resizable"),
+ o = that.options,
+ _store = function (exp) {
+ $(exp).each(function() {
+ var el = $(this);
+ el.data("ui-resizable-alsoresize", {
+ width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+ left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+ });
+ });
+ };
+
+ if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
+ if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+ else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+ }else{
+ _store(o.alsoResize);
+ }
+ },
+
+ resize: function (event, ui) {
+ var that = $(this).data("ui-resizable"),
+ o = that.options,
+ os = that.originalSize,
+ op = that.originalPosition,
+ delta = {
+ height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
+ top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
+ },
+
+ _alsoResize = function (exp, c) {
+ $(exp).each(function() {
+ var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+ css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+
+ $.each(css, function (i, prop) {
+ var sum = (start[prop]||0) + (delta[prop]||0);
+ if (sum && sum >= 0) {
+ style[prop] = sum || null;
+ }
+ });
+
+ el.css(style);
+ });
+ };
+
+ if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
+ $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+ }else{
+ _alsoResize(o.alsoResize);
+ }
+ },
+
+ stop: function () {
+ $(this).removeData("resizable-alsoresize");
+ }
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+ start: function() {
+
+ var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
+
+ that.ghost = that.originalElement.clone();
+ that.ghost
+ .css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+ .addClass("ui-resizable-ghost")
+ .addClass(typeof o.ghost === "string" ? o.ghost : "");
+
+ that.ghost.appendTo(that.helper);
+
+ },
+
+ resize: function(){
+ var that = $(this).data("ui-resizable");
+ if (that.ghost) {
+ that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+ }
+ },
+
+ stop: function() {
+ var that = $(this).data("ui-resizable");
+ if (that.ghost && that.helper) {
+ that.helper.get(0).removeChild(that.ghost.get(0));
+ }
+ }
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+ resize: function() {
+ var that = $(this).data("ui-resizable"),
+ o = that.options,
+ cs = that.size,
+ os = that.originalSize,
+ op = that.originalPosition,
+ a = that.axis,
+ grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
+ gridX = (grid[0]||1),
+ gridY = (grid[1]||1),
+ ox = Math.round((cs.width - os.width) / gridX) * gridX,
+ oy = Math.round((cs.height - os.height) / gridY) * gridY,
+ newWidth = os.width + ox,
+ newHeight = os.height + oy,
+ isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+ isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+ isMinWidth = o.minWidth && (o.minWidth > newWidth),
+ isMinHeight = o.minHeight && (o.minHeight > newHeight);
+
+ o.grid = grid;
+
+ if (isMinWidth) {
+ newWidth = newWidth + gridX;
+ }
+ if (isMinHeight) {
+ newHeight = newHeight + gridY;
+ }
+ if (isMaxWidth) {
+ newWidth = newWidth - gridX;
+ }
+ if (isMaxHeight) {
+ newHeight = newHeight - gridY;
+ }
+
+ if (/^(se|s|e)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ } else if (/^(ne)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else if (/^(sw)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.left = op.left - ox;
+ } else {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ that.position.left = op.left - ox;
+ }
+ }
+
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.widget("ui.selectable", $.ui.mouse, {
+ version: "1.10.0",
+ options: {
+ appendTo: "body",
+ autoRefresh: true,
+ distance: 0,
+ filter: "*",
+ tolerance: "touch",
+
+ // callbacks
+ selected: null,
+ selecting: null,
+ start: null,
+ stop: null,
+ unselected: null,
+ unselecting: null
+ },
+ _create: function() {
+ var selectees,
+ that = this;
+
+ this.element.addClass("ui-selectable");
+
+ this.dragged = false;
+
+ // cache selectee children based on filter
+ this.refresh = function() {
+ selectees = $(that.options.filter, that.element[0]);
+ selectees.addClass("ui-selectee");
+ selectees.each(function() {
+ var $this = $(this),
+ pos = $this.offset();
+ $.data(this, "selectable-item", {
+ element: this,
+ $element: $this,
+ left: pos.left,
+ top: pos.top,
+ right: pos.left + $this.outerWidth(),
+ bottom: pos.top + $this.outerHeight(),
+ startselected: false,
+ selected: $this.hasClass("ui-selected"),
+ selecting: $this.hasClass("ui-selecting"),
+ unselecting: $this.hasClass("ui-unselecting")
+ });
+ });
+ };
+ this.refresh();
+
+ this.selectees = selectees.addClass("ui-selectee");
+
+ this._mouseInit();
+
+ this.helper = $("<div class='ui-selectable-helper'></div>");
+ },
+
+ _destroy: function() {
+ this.selectees
+ .removeClass("ui-selectee")
+ .removeData("selectable-item");
+ this.element
+ .removeClass("ui-selectable ui-selectable-disabled");
+ this._mouseDestroy();
+ },
+
+ _mouseStart: function(event) {
+ var that = this,
+ options = this.options;
+
+ this.opos = [event.pageX, event.pageY];
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ this.selectees = $(options.filter, this.element[0]);
+
+ this._trigger("start", event);
+
+ $(options.appendTo).append(this.helper);
+ // position helper (lasso)
+ this.helper.css({
+ "left": event.pageX,
+ "top": event.pageY,
+ "width": 0,
+ "height": 0
+ });
+
+ if (options.autoRefresh) {
+ this.refresh();
+ }
+
+ this.selectees.filter(".ui-selected").each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.startselected = true;
+ if (!event.metaKey && !event.ctrlKey) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ });
+
+ $(event.target).parents().addBack().each(function() {
+ var doSelect,
+ selectee = $.data(this, "selectable-item");
+ if (selectee) {
+ doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+ selectee.$element
+ .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+ .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+ selectee.unselecting = !doSelect;
+ selectee.selecting = doSelect;
+ selectee.selected = doSelect;
+ // selectable (UN)SELECTING callback
+ if (doSelect) {
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ } else {
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ return false;
+ }
+ });
+
+ },
+
+ _mouseDrag: function(event) {
+
+ this.dragged = true;
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ var tmp,
+ that = this,
+ options = this.options,
+ x1 = this.opos[0],
+ y1 = this.opos[1],
+ x2 = event.pageX,
+ y2 = event.pageY;
+
+ if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+ if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+ this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+
+ this.selectees.each(function() {
+ var selectee = $.data(this, "selectable-item"),
+ hit = false;
+
+ //prevent helper from being selected if appendTo: selectable
+ if (!selectee || selectee.element === that.element[0]) {
+ return;
+ }
+
+ if (options.tolerance === "touch") {
+ hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+ } else if (options.tolerance === "fit") {
+ hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+ }
+
+ if (hit) {
+ // SELECT
+ if (selectee.selected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ }
+ if (selectee.unselecting) {
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ }
+ if (!selectee.selecting) {
+ selectee.$element.addClass("ui-selecting");
+ selectee.selecting = true;
+ // selectable SELECTING callback
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ }
+ } else {
+ // UNSELECT
+ if (selectee.selecting) {
+ if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ selectee.$element.addClass("ui-selected");
+ selectee.selected = true;
+ } else {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ if (selectee.startselected) {
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ }
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ if (selectee.selected) {
+ if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ }
+ });
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+ var that = this;
+
+ this.dragged = false;
+
+ $(".ui-unselecting", this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ selectee.startselected = false;
+ that._trigger("unselected", event, {
+ unselected: selectee.element
+ });
+ });
+ $(".ui-selecting", this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+ selectee.selecting = false;
+ selectee.selected = true;
+ selectee.startselected = true;
+ that._trigger("selected", event, {
+ selected: selectee.element
+ });
+ });
+ this._trigger("stop", event);
+
+ this.helper.remove();
+
+ return false;
+ }
+
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+/*jshint loopfunc: true */
+
+function isOverAxis( x, reference, size ) {
+ return ( x > reference ) && ( x < ( reference + size ) );
+}
+
+$.widget("ui.sortable", $.ui.mouse, {
+ version: "1.10.0",
+ widgetEventPrefix: "sort",
+ ready: false,
+ options: {
+ appendTo: "parent",
+ axis: false,
+ connectWith: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ dropOnEmpty: true,
+ forcePlaceholderSize: false,
+ forceHelperSize: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ items: "> *",
+ opacity: false,
+ placeholder: false,
+ revert: false,
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1000,
+
+ // callbacks
+ activate: null,
+ beforeStop: null,
+ change: null,
+ deactivate: null,
+ out: null,
+ over: null,
+ receive: null,
+ remove: null,
+ sort: null,
+ start: null,
+ stop: null,
+ update: null
+ },
+ _create: function() {
+
+ var o = this.options;
+ this.containerCache = {};
+ this.element.addClass("ui-sortable");
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine if the items are being displayed horizontally
+ this.floating = this.items.length ? o.axis === "x" || (/left|right/).test(this.items[0].item.css("float")) || (/inline|table-cell/).test(this.items[0].item.css("display")) : false;
+
+ //Let's determine the parent's offset
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this._mouseInit();
+
+ //We're ready to go
+ this.ready = true;
+
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass("ui-sortable ui-sortable-disabled");
+ this._mouseDestroy();
+
+ for ( var i = this.items.length - 1; i >= 0; i-- ) {
+ this.items[i].item.removeData(this.widgetName + "-item");
+ }
+
+ return this;
+ },
+
+ _setOption: function(key, value){
+ if ( key === "disabled" ) {
+ this.options[ key ] = value;
+
+ this.widget().toggleClass( "ui-sortable-disabled", !!value );
+ } else {
+ // Don't call widget base _setOption for disable as it adds ui-state-disabled class
+ $.Widget.prototype._setOption.apply(this, arguments);
+ }
+ },
+
+ _mouseCapture: function(event, overrideHandle) {
+ var currentItem = null,
+ validHandle = false,
+ that = this;
+
+ if (this.reverting) {
+ return false;
+ }
+
+ if(this.options.disabled || this.options.type === "static") {
+ return false;
+ }
+
+ //We have to refresh the items data once first
+ this._refreshItems(event);
+
+ //Find out if the clicked node (or one of its parents) is a actual item in this.items
+ $(event.target).parents().each(function() {
+ if($.data(this, that.widgetName + "-item") === that) {
+ currentItem = $(this);
+ return false;
+ }
+ });
+ if($.data(event.target, that.widgetName + "-item") === that) {
+ currentItem = $(event.target);
+ }
+
+ if(!currentItem) {
+ return false;
+ }
+ if(this.options.handle && !overrideHandle) {
+ $(this.options.handle, currentItem).find("*").addBack().each(function() {
+ if(this === event.target) {
+ validHandle = true;
+ }
+ });
+ if(!validHandle) {
+ return false;
+ }
+ }
+
+ this.currentItem = currentItem;
+ this._removeCurrentsFromItems();
+ return true;
+
+ },
+
+ _mouseStart: function(event, overrideHandle, noActivation) {
+
+ var i,
+ o = this.options;
+
+ this.currentContainer = this;
+
+ //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+ this.refreshPositions();
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Get the next scrolling parent
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.currentItem.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ // Only after we got the offset, we can change the helper's position to absolute
+ // TODO: Still need to figure out a way to make relative sorting possible
+ this.helper.css("position", "absolute");
+ this.cssPosition = this.helper.css("position");
+
+ //Generate the original position
+ this.originalPosition = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Cache the former DOM position
+ this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+
+ //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+ if(this.helper[0] !== this.currentItem[0]) {
+ this.currentItem.hide();
+ }
+
+ //Create the placeholder
+ this._createPlaceholder();
+
+ //Set a containment if given in the options
+ if(o.containment) {
+ this._setContainment();
+ }
+
+ if(o.cursor) { // cursor option
+ if ($("body").css("cursor")) {
+ this._storedCursor = $("body").css("cursor");
+ }
+ $("body").css("cursor", o.cursor);
+ }
+
+ if(o.opacity) { // opacity option
+ if (this.helper.css("opacity")) {
+ this._storedOpacity = this.helper.css("opacity");
+ }
+ this.helper.css("opacity", o.opacity);
+ }
+
+ if(o.zIndex) { // zIndex option
+ if (this.helper.css("zIndex")) {
+ this._storedZIndex = this.helper.css("zIndex");
+ }
+ this.helper.css("zIndex", o.zIndex);
+ }
+
+ //Prepare scrolling
+ if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+ this.overflowOffset = this.scrollParent.offset();
+ }
+
+ //Call callbacks
+ this._trigger("start", event, this._uiHash());
+
+ //Recache the helper size
+ if(!this._preserveHelperProportions) {
+ this._cacheHelperProportions();
+ }
+
+
+ //Post "activate" events to possible containers
+ if( !noActivation ) {
+ for ( i = this.containers.length - 1; i >= 0; i-- ) {
+ this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+ }
+ }
+
+ //Prepare possible droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ this.dragging = true;
+
+ this.helper.addClass("ui-sortable-helper");
+ this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+ return true;
+
+ },
+
+ _mouseDrag: function(event) {
+ var i, item, itemElement, intersection,
+ o = this.options,
+ scrolled = false;
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ if (!this.lastPositionAbs) {
+ this.lastPositionAbs = this.positionAbs;
+ }
+
+ //Do scrolling
+ if(this.options.scroll) {
+ if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+
+ if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+ } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+ }
+
+ if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+ } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+ }
+
+ } else {
+
+ if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+ }
+
+ if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+ }
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+ }
+
+ //Regenerate the absolute position used for position checks
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Set the helper position
+ if(!this.options.axis || this.options.axis !== "y") {
+ this.helper[0].style.left = this.position.left+"px";
+ }
+ if(!this.options.axis || this.options.axis !== "x") {
+ this.helper[0].style.top = this.position.top+"px";
+ }
+
+ //Rearrange
+ for (i = this.items.length - 1; i >= 0; i--) {
+
+ //Cache variables and intersection, continue if no intersection
+ item = this.items[i];
+ itemElement = item.item[0];
+ intersection = this._intersectsWithPointer(item);
+ if (!intersection) {
+ continue;
+ }
+
+ // Only put the placeholder inside the current Container, skip all
+ // items form other containers. This works because when moving
+ // an item from one container to another the
+ // currentContainer is switched before the placeholder is moved.
+ //
+ // Without this moving items in "sub-sortables" can cause the placeholder to jitter
+ // beetween the outer and inner container.
+ if (item.instance !== this.currentContainer) {
+ continue;
+ }
+
+ // cannot intersect with itself
+ // no useless actions that have been done before
+ // no action if the item moved is the parent of the item checked
+ if (itemElement !== this.currentItem[0] &&
+ this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+ !$.contains(this.placeholder[0], itemElement) &&
+ (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+ ) {
+
+ this.direction = intersection === 1 ? "down" : "up";
+
+ if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+ this._rearrange(event, item);
+ } else {
+ break;
+ }
+
+ this._trigger("change", event, this._uiHash());
+ break;
+ }
+ }
+
+ //Post events to containers
+ this._contactContainers(event);
+
+ //Interconnect with droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ //Call callbacks
+ this._trigger("sort", event, this._uiHash());
+
+ this.lastPositionAbs = this.positionAbs;
+ return false;
+
+ },
+
+ _mouseStop: function(event, noPropagation) {
+
+ if(!event) {
+ return;
+ }
+
+ //If we are using droppables, inform the manager about the drop
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ $.ui.ddmanager.drop(this, event);
+ }
+
+ if(this.options.revert) {
+ var that = this,
+ cur = this.placeholder.offset();
+
+ this.reverting = true;
+
+ $(this.helper).animate({
+ left: cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft),
+ top: cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop)
+ }, parseInt(this.options.revert, 10) || 500, function() {
+ that._clear(event);
+ });
+ } else {
+ this._clear(event, noPropagation);
+ }
+
+ return false;
+
+ },
+
+ cancel: function() {
+
+ if(this.dragging) {
+
+ this._mouseUp({ target: null });
+
+ if(this.options.helper === "original") {
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ //Post deactivating events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", null, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ if (this.placeholder) {
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ if(this.placeholder[0].parentNode) {
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+ }
+ if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+ this.helper.remove();
+ }
+
+ $.extend(this, {
+ helper: null,
+ dragging: false,
+ reverting: false,
+ _noFinalSort: null
+ });
+
+ if(this.domPosition.prev) {
+ $(this.domPosition.prev).after(this.currentItem);
+ } else {
+ $(this.domPosition.parent).prepend(this.currentItem);
+ }
+ }
+
+ return this;
+
+ },
+
+ serialize: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ str = [];
+ o = o || {};
+
+ $(items).each(function() {
+ var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+ if (res) {
+ str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+ }
+ });
+
+ if(!str.length && o.key) {
+ str.push(o.key + "=");
+ }
+
+ return str.join("&");
+
+ },
+
+ toArray: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ ret = [];
+
+ o = o || {};
+
+ items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+ return ret;
+
+ },
+
+ /* Be careful with the following core functions */
+ _intersectsWith: function(item) {
+
+ var x1 = this.positionAbs.left,
+ x2 = x1 + this.helperProportions.width,
+ y1 = this.positionAbs.top,
+ y2 = y1 + this.helperProportions.height,
+ l = item.left,
+ r = l + item.width,
+ t = item.top,
+ b = t + item.height,
+ dyClick = this.offset.click.top,
+ dxClick = this.offset.click.left,
+ isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
+
+ if ( this.options.tolerance === "pointer" ||
+ this.options.forcePointerForContainers ||
+ (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+ ) {
+ return isOverElement;
+ } else {
+
+ return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+ x2 - (this.helperProportions.width / 2) < r && // Left Half
+ t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+ y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+ }
+ },
+
+ _intersectsWithPointer: function(item) {
+
+ var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+ isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+ isOverElement = isOverElementHeight && isOverElementWidth,
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (!isOverElement) {
+ return false;
+ }
+
+ return this.floating ?
+ ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+ : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+
+ },
+
+ _intersectsWithSides: function(item) {
+
+ var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+ isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (this.floating && horizontalDirection) {
+ return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+ } else {
+ return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+ }
+
+ },
+
+ _getDragVerticalDirection: function() {
+ var delta = this.positionAbs.top - this.lastPositionAbs.top;
+ return delta !== 0 && (delta > 0 ? "down" : "up");
+ },
+
+ _getDragHorizontalDirection: function() {
+ var delta = this.positionAbs.left - this.lastPositionAbs.left;
+ return delta !== 0 && (delta > 0 ? "right" : "left");
+ },
+
+ refresh: function(event) {
+ this._refreshItems(event);
+ this.refreshPositions();
+ return this;
+ },
+
+ _connectWith: function() {
+ var options = this.options;
+ return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+ },
+
+ _getItemsAsjQuery: function(connected) {
+
+ var i, j, cur, inst,
+ items = [],
+ queries = [],
+ connectWith = this._connectWith();
+
+ if(connectWith && connected) {
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i]);
+ for ( j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+ }
+ }
+ }
+ }
+
+ queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+
+ for (i = queries.length - 1; i >= 0; i--){
+ queries[i][0].each(function() {
+ items.push(this);
+ });
+ }
+
+ return $(items);
+
+ },
+
+ _removeCurrentsFromItems: function() {
+
+ var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+
+ this.items = $.grep(this.items, function (item) {
+ for (var j=0; j < list.length; j++) {
+ if(list[j] === item.item[0]) {
+ return false;
+ }
+ }
+ return true;
+ });
+
+ },
+
+ _refreshItems: function(event) {
+
+ this.items = [];
+ this.containers = [this];
+
+ var i, j, cur, inst, targetData, _queries, item, queriesLength,
+ items = this.items,
+ queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+ connectWith = this._connectWith();
+
+ if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i]);
+ for (j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+ this.containers.push(inst);
+ }
+ }
+ }
+ }
+
+ for (i = queries.length - 1; i >= 0; i--) {
+ targetData = queries[i][1];
+ _queries = queries[i][0];
+
+ for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+ item = $(_queries[j]);
+
+ item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+
+ items.push({
+ item: item,
+ instance: targetData,
+ width: 0, height: 0,
+ left: 0, top: 0
+ });
+ }
+ }
+
+ },
+
+ refreshPositions: function(fast) {
+
+ //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+ if(this.offsetParent && this.helper) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ var i, item, t, p;
+
+ for (i = this.items.length - 1; i >= 0; i--){
+ item = this.items[i];
+
+ //We ignore calculating positions of all connected containers when we're not over them
+ if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+ continue;
+ }
+
+ t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+ if (!fast) {
+ item.width = t.outerWidth();
+ item.height = t.outerHeight();
+ }
+
+ p = t.offset();
+ item.left = p.left;
+ item.top = p.top;
+ }
+
+ if(this.options.custom && this.options.custom.refreshContainers) {
+ this.options.custom.refreshContainers.call(this);
+ } else {
+ for (i = this.containers.length - 1; i >= 0; i--){
+ p = this.containers[i].element.offset();
+ this.containers[i].containerCache.left = p.left;
+ this.containers[i].containerCache.top = p.top;
+ this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+ this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+ }
+ }
+
+ return this;
+ },
+
+ _createPlaceholder: function(that) {
+ that = that || this;
+ var className,
+ o = that.options;
+
+ if(!o.placeholder || o.placeholder.constructor === String) {
+ className = o.placeholder;
+ o.placeholder = {
+ element: function() {
+
+ var el = $(document.createElement(that.currentItem[0].nodeName))
+ .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+ .removeClass("ui-sortable-helper")[0];
+
+ if(!className) {
+ el.style.visibility = "hidden";
+ }
+
+ return el;
+ },
+ update: function(container, p) {
+
+ // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+ // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+ if(className && !o.forcePlaceholderSize) {
+ return;
+ }
+
+ //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+ if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+ if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+ }
+ };
+ }
+
+ //Create the placeholder
+ that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+
+ //Append it after the actual current item
+ that.currentItem.after(that.placeholder);
+
+ //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+ o.placeholder.update(that, that.placeholder);
+
+ },
+
+ _contactContainers: function(event) {
+ var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom,
+ innermostContainer = null,
+ innermostIndex = null;
+
+ // get innermost container that intersects with item
+ for (i = this.containers.length - 1; i >= 0; i--) {
+
+ // never consider a container that's located within the item itself
+ if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+ continue;
+ }
+
+ if(this._intersectsWith(this.containers[i].containerCache)) {
+
+ // if we've already found a container and it's more "inner" than this, then continue
+ if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+ continue;
+ }
+
+ innermostContainer = this.containers[i];
+ innermostIndex = i;
+
+ } else {
+ // container doesn't intersect. trigger "out" event if necessary
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", event, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ // if no intersecting containers found, return
+ if(!innermostContainer) {
+ return;
+ }
+
+ // move the item into the container if it's not there already
+ if(this.containers.length === 1) {
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ } else {
+
+ //When entering a new container, we will find the item with the least distance and append our item near it
+ dist = 10000;
+ itemWithLeastDistance = null;
+ posProperty = this.containers[innermostIndex].floating ? "left" : "top";
+ sizeProperty = this.containers[innermostIndex].floating ? "width" : "height";
+ base = this.positionAbs[posProperty] + this.offset.click[posProperty];
+ for (j = this.items.length - 1; j >= 0; j--) {
+ if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+ continue;
+ }
+ if(this.items[j].item[0] === this.currentItem[0]) {
+ continue;
+ }
+ cur = this.items[j].item.offset()[posProperty];
+ nearBottom = false;
+ if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+ nearBottom = true;
+ cur += this.items[j][sizeProperty];
+ }
+
+ if(Math.abs(cur - base) < dist) {
+ dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+ this.direction = nearBottom ? "up": "down";
+ }
+ }
+
+ //Check if dropOnEmpty is enabled
+ if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+ return;
+ }
+
+ this.currentContainer = this.containers[innermostIndex];
+ itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+ this._trigger("change", event, this._uiHash());
+ this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+
+ //Update the placeholder
+ this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+
+
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+
+ //Add the helper to the DOM if that didn't happen already
+ if(!helper.parents("body").length) {
+ $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+ }
+
+ if(helper[0] === this.currentItem[0]) {
+ this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+ }
+
+ if(!helper[0].style.width || o.forceHelperSize) {
+ helper.width(this.currentItem.width());
+ }
+ if(!helper[0].style.height || o.forceHelperSize) {
+ helper.height(this.currentItem.height());
+ }
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function() {
+
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ // This needs to be actually done for all browsers, since pageX/pageY includes this information
+ // with an ugly IE fix
+ if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+
+ if(this.cssPosition === "relative") {
+ var p = this.currentItem.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return { top: 0, left: 0 };
+ }
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+ top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var ce, co, over,
+ o = this.options;
+ if(o.containment === "parent") {
+ o.containment = this.helper[0].parentNode;
+ }
+ if(o.containment === "document" || o.containment === "window") {
+ this.containment = [
+ 0 - this.offset.relative.left - this.offset.parent.left,
+ 0 - this.offset.relative.top - this.offset.parent.top,
+ $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
+ ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ if(!(/^(document|window|parent)$/).test(o.containment)) {
+ ce = $(o.containment)[0];
+ co = $(o.containment).offset();
+ over = ($(ce).css("overflow") !== "hidden");
+
+ this.containment = [
+ co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+ co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+ co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+ co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if(!pos) {
+ pos = this.position;
+ }
+ var mod = d === "absolute" ? 1 : -1,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+ scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function(event) {
+
+ var top, left,
+ o = this.options,
+ pageX = event.pageX,
+ pageY = event.pageY,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ // This is another very weird special case that only happens for relative elements:
+ // 1. If the css position is relative
+ // 2. and the scroll parent is the document or similar to the offset parent
+ // we have to refresh the relative offset during the scroll so there are no jumps
+ if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+ this.offset.relative = this._getRelativeOffset();
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+ if(this.containment) {
+ if(event.pageX - this.offset.click.left < this.containment[0]) {
+ pageX = this.containment[0] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top < this.containment[1]) {
+ pageY = this.containment[1] + this.offset.click.top;
+ }
+ if(event.pageX - this.offset.click.left > this.containment[2]) {
+ pageX = this.containment[2] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top > this.containment[3]) {
+ pageY = this.containment[3] + this.offset.click.top;
+ }
+ }
+
+ if(o.grid) {
+ top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+ pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+ pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _rearrange: function(event, i, a, hardRefresh) {
+
+ a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+
+ //Various things done here to improve the performance:
+ // 1. we create a setTimeout, that calls refreshPositions
+ // 2. on the instance, we have a counter variable, that get's higher after every append
+ // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+ // 4. this lets only the last addition to the timeout stack through
+ this.counter = this.counter ? ++this.counter : 1;
+ var counter = this.counter;
+
+ this._delay(function() {
+ if(counter === this.counter) {
+ this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+ }
+ });
+
+ },
+
+ _clear: function(event, noPropagation) {
+
+ this.reverting = false;
+ // We delay all events that have to be triggered to after the point where the placeholder has been removed and
+ // everything else normalized again
+ var i,
+ delayedTriggers = [];
+
+ // We first have to update the dom position of the actual currentItem
+ // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+ if(!this._noFinalSort && this.currentItem.parent().length) {
+ this.placeholder.before(this.currentItem);
+ }
+ this._noFinalSort = null;
+
+ if(this.helper[0] === this.currentItem[0]) {
+ for(i in this._storedCSS) {
+ if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+ this._storedCSS[i] = "";
+ }
+ }
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ if(this.fromOutside && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+ }
+ if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+ }
+
+ // Check if the items Container has Changed and trigger appropriate
+ // events.
+ if (this !== this.currentContainer) {
+ if(!noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ }
+ }
+
+
+ //Post events to containers
+ for (i = this.containers.length - 1; i >= 0; i--){
+ if(!noPropagation) {
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
+ }
+ if(this.containers[i].containerCache.over) {
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ //Do what was originally in plugins
+ if(this._storedCursor) {
+ $("body").css("cursor", this._storedCursor);
+ }
+ if(this._storedOpacity) {
+ this.helper.css("opacity", this._storedOpacity);
+ }
+ if(this._storedZIndex) {
+ this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+ }
+
+ this.dragging = false;
+ if(this.cancelHelperRemoval) {
+ if(!noPropagation) {
+ this._trigger("beforeStop", event, this._uiHash());
+ for (i=0; i < delayedTriggers.length; i++) {
+ delayedTriggers[i].call(this, event);
+ } //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+
+ this.fromOutside = false;
+ return false;
+ }
+
+ if(!noPropagation) {
+ this._trigger("beforeStop", event, this._uiHash());
+ }
+
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+ if(this.helper[0] !== this.currentItem[0]) {
+ this.helper.remove();
+ }
+ this.helper = null;
+
+ if(!noPropagation) {
+ for (i=0; i < delayedTriggers.length; i++) {
+ delayedTriggers[i].call(this, event);
+ } //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+
+ this.fromOutside = false;
+ return true;
+
+ },
+
+ _trigger: function() {
+ if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+ this.cancel();
+ }
+ },
+
+ _uiHash: function(_inst) {
+ var inst = _inst || this;
+ return {
+ helper: inst.helper,
+ placeholder: inst.placeholder || $([]),
+ position: inst.position,
+ originalPosition: inst.originalPosition,
+ offset: inst.positionAbs,
+ item: inst.currentItem,
+ sender: _inst ? _inst.element : null
+ };
+ }
+
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+var uid = 0,
+ hideProps = {},
+ showProps = {};
+
+hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
+ hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
+showProps.height = showProps.paddingTop = showProps.paddingBottom =
+ showProps.borderTopWidth = showProps.borderBottomWidth = "show";
+
+$.widget( "ui.accordion", {
+ version: "1.10.0",
+ options: {
+ active: 0,
+ animate: {},
+ collapsible: false,
+ event: "click",
+ header: "> li > :first-child,> :not(li):even",
+ heightStyle: "auto",
+ icons: {
+ activeHeader: "ui-icon-triangle-1-s",
+ header: "ui-icon-triangle-1-e"
+ },
+
+ // callbacks
+ activate: null,
+ beforeActivate: null
+ },
+
+ _create: function() {
+ var options = this.options;
+ this.prevShow = this.prevHide = $();
+ this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+ // ARIA
+ .attr( "role", "tablist" );
+
+ // don't allow collapsible: false and active: false / null
+ if ( !options.collapsible && (options.active === false || options.active == null) ) {
+ options.active = 0;
+ }
+
+ this._processPanels();
+ // handle negative values
+ if ( options.active < 0 ) {
+ options.active += this.headers.length;
+ }
+ this._refresh();
+ },
+
+ _getCreateEventData: function() {
+ return {
+ header: this.active,
+ content: !this.active.length ? $() : this.active.next()
+ };
+ },
+
+ _createIcons: function() {
+ var icons = this.options.icons;
+ if ( icons ) {
+ $( "<span>" )
+ .addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+ .prependTo( this.headers );
+ this.active.children( ".ui-accordion-header-icon" )
+ .removeClass( icons.header )
+ .addClass( icons.activeHeader );
+ this.headers.addClass( "ui-accordion-icons" );
+ }
+ },
+
+ _destroyIcons: function() {
+ this.headers
+ .removeClass( "ui-accordion-icons" )
+ .children( ".ui-accordion-header-icon" )
+ .remove();
+ },
+
+ _destroy: function() {
+ var contents;
+
+ // clean up main element
+ this.element
+ .removeClass( "ui-accordion ui-widget ui-helper-reset" )
+ .removeAttr( "role" );
+
+ // clean up headers
+ this.headers
+ .removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "aria-controls" )
+ .removeAttr( "tabIndex" )
+ .each(function() {
+ if ( /^ui-accordion/.test( this.id ) ) {
+ this.removeAttribute( "id" );
+ }
+ });
+ this._destroyIcons();
+
+ // clean up content panels
+ contents = this.headers.next()
+ .css( "display", "" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-labelledby" )
+ .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+ .each(function() {
+ if ( /^ui-accordion/.test( this.id ) ) {
+ this.removeAttribute( "id" );
+ }
+ });
+ if ( this.options.heightStyle !== "content" ) {
+ contents.css( "height", "" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "event" ) {
+ if ( this.options.event ) {
+ this._off( this.headers, this.options.event );
+ }
+ this._setupEvents( value );
+ }
+
+ this._super( key, value );
+
+ // setting collapsible: false while collapsed; open first panel
+ if ( key === "collapsible" && !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+
+ if ( key === "icons" ) {
+ this._destroyIcons();
+ if ( value ) {
+ this._createIcons();
+ }
+ }
+
+ // #5332 - opacity doesn't cascade to positioned elements in IE
+ // so we need to add the disabled class to the headers and panels
+ if ( key === "disabled" ) {
+ this.headers.add( this.headers.next() )
+ .toggleClass( "ui-state-disabled", !!value );
+ }
+ },
+
+ _keydown: function( event ) {
+ /*jshint maxcomplexity:15*/
+ if ( event.altKey || event.ctrlKey ) {
+ return;
+ }
+
+ var keyCode = $.ui.keyCode,
+ length = this.headers.length,
+ currentIndex = this.headers.index( event.target ),
+ toFocus = false;
+
+ switch ( event.keyCode ) {
+ case keyCode.RIGHT:
+ case keyCode.DOWN:
+ toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+ break;
+ case keyCode.LEFT:
+ case keyCode.UP:
+ toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+ break;
+ case keyCode.SPACE:
+ case keyCode.ENTER:
+ this._eventHandler( event );
+ break;
+ case keyCode.HOME:
+ toFocus = this.headers[ 0 ];
+ break;
+ case keyCode.END:
+ toFocus = this.headers[ length - 1 ];
+ break;
+ }
+
+ if ( toFocus ) {
+ $( event.target ).attr( "tabIndex", -1 );
+ $( toFocus ).attr( "tabIndex", 0 );
+ toFocus.focus();
+ event.preventDefault();
+ }
+ },
+
+ _panelKeyDown : function( event ) {
+ if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+ $( event.currentTarget ).prev().focus();
+ }
+ },
+
+ refresh: function() {
+ var options = this.options;
+ this._processPanels();
+
+ // was collapsed or no panel
+ if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+ options.active = false;
+ this.active = $();
+ // active false only when collapsible is true
+ } if ( options.active === false ) {
+ this._activate( 0 );
+ // was active, but active panel is gone
+ } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ // all remaining panel are disabled
+ if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+ options.active = false;
+ this.active = $();
+ // activate previous panel
+ } else {
+ this._activate( Math.max( 0, options.active - 1 ) );
+ }
+ // was active, active panel still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.headers.index( this.active );
+ }
+
+ this._destroyIcons();
+
+ this._refresh();
+ },
+
+ _processPanels: function() {
+ this.headers = this.element.find( this.options.header )
+ .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+
+ this.headers.next()
+ .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+ .filter(":not(.ui-accordion-content-active)")
+ .hide();
+ },
+
+ _refresh: function() {
+ var maxHeight,
+ options = this.options,
+ heightStyle = options.heightStyle,
+ parent = this.element.parent(),
+ accordionId = this.accordionId = "ui-accordion-" +
+ (this.element.attr( "id" ) || ++uid);
+
+ this.active = this._findActive( options.active )
+ .addClass( "ui-accordion-header-active ui-state-active" )
+ .toggleClass( "ui-corner-all ui-corner-top" );
+ this.active.next()
+ .addClass( "ui-accordion-content-active" )
+ .show();
+
+ this.headers
+ .attr( "role", "tab" )
+ .each(function( i ) {
+ var header = $( this ),
+ headerId = header.attr( "id" ),
+ panel = header.next(),
+ panelId = panel.attr( "id" );
+ if ( !headerId ) {
+ headerId = accordionId + "-header-" + i;
+ header.attr( "id", headerId );
+ }
+ if ( !panelId ) {
+ panelId = accordionId + "-panel-" + i;
+ panel.attr( "id", panelId );
+ }
+ header.attr( "aria-controls", panelId );
+ panel.attr( "aria-labelledby", headerId );
+ })
+ .next()
+ .attr( "role", "tabpanel" );
+
+ this.headers
+ .not( this.active )
+ .attr({
+ "aria-selected": "false",
+ tabIndex: -1
+ })
+ .next()
+ .attr({
+ "aria-expanded": "false",
+ "aria-hidden": "true"
+ })
+ .hide();
+
+ // make sure at least one header is in the tab order
+ if ( !this.active.length ) {
+ this.headers.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active.attr({
+ "aria-selected": "true",
+ tabIndex: 0
+ })
+ .next()
+ .attr({
+ "aria-expanded": "true",
+ "aria-hidden": "false"
+ });
+ }
+
+ this._createIcons();
+
+ this._setupEvents( options.event );
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ this.element.siblings( ":visible" ).each(function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ });
+
+ this.headers.each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.headers.next()
+ .each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.headers.next()
+ .each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+ })
+ .height( maxHeight );
+ }
+ },
+
+ _activate: function( index ) {
+ var active = this._findActive( index )[ 0 ];
+
+ // trying to activate the already active panel
+ if ( active === this.active[ 0 ] ) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the currently active header
+ active = active || this.active[ 0 ];
+
+ this._eventHandler({
+ target: active,
+ currentTarget: active,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function( selector ) {
+ return typeof selector === "number" ? this.headers.eq( selector ) : $();
+ },
+
+ _setupEvents: function( event ) {
+ var events = {
+ keydown: "_keydown"
+ };
+ if ( event ) {
+ $.each( event.split(" "), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ });
+ }
+
+ this._off( this.headers.add( this.headers.next() ) );
+ this._on( this.headers, events );
+ this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+ this._hoverable( this.headers );
+ this._focusable( this.headers );
+ },
+
+ _eventHandler: function( event ) {
+ var options = this.options,
+ active = this.active,
+ clicked = $( event.currentTarget ),
+ clickedIsActive = clicked[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : clicked.next(),
+ toHide = active.next(),
+ eventData = {
+ oldHeader: active,
+ oldPanel: toHide,
+ newHeader: collapsing ? $() : clicked,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if (
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.headers.index( clicked );
+
+ // when the call to ._toggle() comes after the class changes
+ // it causes a very odd bug in IE 8 (see #6720)
+ this.active = clickedIsActive ? $() : clicked;
+ this._toggle( eventData );
+
+ // switch classes
+ // corner classes on the previously active header stay after the animation
+ active.removeClass( "ui-accordion-header-active ui-state-active" );
+ if ( options.icons ) {
+ active.children( ".ui-accordion-header-icon" )
+ .removeClass( options.icons.activeHeader )
+ .addClass( options.icons.header );
+ }
+
+ if ( !clickedIsActive ) {
+ clicked
+ .removeClass( "ui-corner-all" )
+ .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+ if ( options.icons ) {
+ clicked.children( ".ui-accordion-header-icon" )
+ .removeClass( options.icons.header )
+ .addClass( options.icons.activeHeader );
+ }
+
+ clicked
+ .next()
+ .addClass( "ui-accordion-content-active" );
+ }
+ },
+
+ _toggle: function( data ) {
+ var toShow = data.newPanel,
+ toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+ // handle activating a panel during the animation for another activation
+ this.prevShow.add( this.prevHide ).stop( true, true );
+ this.prevShow = toShow;
+ this.prevHide = toHide;
+
+ if ( this.options.animate ) {
+ this._animate( toShow, toHide, data );
+ } else {
+ toHide.hide();
+ toShow.show();
+ this._toggleComplete( data );
+ }
+
+ toHide.attr({
+ "aria-expanded": "false",
+ "aria-hidden": "true"
+ });
+ toHide.prev().attr( "aria-selected", "false" );
+ // if we're switching panels, remove the old header from the tab order
+ // if we're opening from collapsed state, remove the previous header from the tab order
+ // if we're collapsing, then keep the collapsing header in the tab order
+ if ( toShow.length && toHide.length ) {
+ toHide.prev().attr( "tabIndex", -1 );
+ } else if ( toShow.length ) {
+ this.headers.filter(function() {
+ return $( this ).attr( "tabIndex" ) === 0;
+ })
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow
+ .attr({
+ "aria-expanded": "true",
+ "aria-hidden": "false"
+ })
+ .prev()
+ .attr({
+ "aria-selected": "true",
+ tabIndex: 0
+ });
+ },
+
+ _animate: function( toShow, toHide, data ) {
+ var total, easing, duration,
+ that = this,
+ adjust = 0,
+ down = toShow.length &&
+ ( !toHide.length || ( toShow.index() < toHide.index() ) ),
+ animate = this.options.animate || {},
+ options = down && animate.down || animate,
+ complete = function() {
+ that._toggleComplete( data );
+ };
+
+ if ( typeof options === "number" ) {
+ duration = options;
+ }
+ if ( typeof options === "string" ) {
+ easing = options;
+ }
+ // fall back from options to animation in case of partial down settings
+ easing = easing || options.easing || animate.easing;
+ duration = duration || options.duration || animate.duration;
+
+ if ( !toHide.length ) {
+ return toShow.animate( showProps, duration, easing, complete );
+ }
+ if ( !toShow.length ) {
+ return toHide.animate( hideProps, duration, easing, complete );
+ }
+
+ total = toShow.show().outerHeight();
+ toHide.animate( hideProps, {
+ duration: duration,
+ easing: easing,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ }
+ });
+ toShow
+ .hide()
+ .animate( showProps, {
+ duration: duration,
+ easing: easing,
+ complete: complete,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ if ( fx.prop !== "height" ) {
+ adjust += fx.now;
+ } else if ( that.options.heightStyle !== "content" ) {
+ fx.now = Math.round( total - toHide.outerHeight() - adjust );
+ adjust = 0;
+ }
+ }
+ });
+ },
+
+ _toggleComplete: function( data ) {
+ var toHide = data.oldPanel;
+
+ toHide
+ .removeClass( "ui-accordion-content-active" )
+ .prev()
+ .removeClass( "ui-corner-top" )
+ .addClass( "ui-corner-all" );
+
+ // Work around for rendering bug in IE (#5421)
+ if ( toHide.length ) {
+ toHide.parent()[0].className = toHide.parent()[0].className;
+ }
+
+ this._trigger( "activate", null, data );
+ }
+});
+
+})( jQuery );
+(function( $, undefined ) {
+
+// used to prevent race conditions with remote data sources
+var requestIndex = 0;
+
+$.widget( "ui.autocomplete", {
+ version: "1.10.0",
+ defaultElement: "<input>",
+ options: {
+ appendTo: null,
+ autoFocus: false,
+ delay: 300,
+ minLength: 1,
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ source: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ response: null,
+ search: null,
+ select: null
+ },
+
+ pending: 0,
+
+ _create: function() {
+ // Some browsers only repeat keydown events, not keypress events,
+ // so we use the suppressKeyPress flag to determine if we've already
+ // handled the keydown event. #7269
+ // Unfortunately the code for & in keypress is the same as the up arrow,
+ // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+ // events when we know the keydown event was used to modify the
+ // search term. #7799
+ var suppressKeyPress, suppressKeyPressRepeat, suppressInput;
+
+ this.isMultiLine = this._isMultiLine();
+ this.valueMethod = this.element[ this.element.is( "input,textarea" ) ? "val" : "text" ];
+ this.isNewMenu = true;
+
+ this.element
+ .addClass( "ui-autocomplete-input" )
+ .attr( "autocomplete", "off" );
+
+ this._on( this.element, {
+ keydown: function( event ) {
+ /*jshint maxcomplexity:15*/
+ if ( this.element.prop( "readOnly" ) ) {
+ suppressKeyPress = true;
+ suppressInput = true;
+ suppressKeyPressRepeat = true;
+ return;
+ }
+
+ suppressKeyPress = false;
+ suppressInput = false;
+ suppressKeyPressRepeat = false;
+ var keyCode = $.ui.keyCode;
+ switch( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ suppressKeyPress = true;
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ suppressKeyPress = true;
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ suppressKeyPress = true;
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ suppressKeyPress = true;
+ this._keyEvent( "next", event );
+ break;
+ case keyCode.ENTER:
+ case keyCode.NUMPAD_ENTER:
+ // when menu is open and has focus
+ if ( this.menu.active ) {
+ // #6055 - Opera still allows the keypress to occur
+ // which causes forms to submit
+ suppressKeyPress = true;
+ event.preventDefault();
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.TAB:
+ if ( this.menu.active ) {
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.ESCAPE:
+ if ( this.menu.element.is( ":visible" ) ) {
+ this._value( this.term );
+ this.close( event );
+ // Different browsers have different default behavior for escape
+ // Single press can mean undo or clear
+ // Double press in IE means clear the whole form
+ event.preventDefault();
+ }
+ break;
+ default:
+ suppressKeyPressRepeat = true;
+ // search timeout should be triggered before the input value is changed
+ this._searchTimeout( event );
+ break;
+ }
+ },
+ keypress: function( event ) {
+ if ( suppressKeyPress ) {
+ suppressKeyPress = false;
+ event.preventDefault();
+ return;
+ }
+ if ( suppressKeyPressRepeat ) {
+ return;
+ }
+
+ // replicate some key handlers to allow them to repeat in Firefox and Opera
+ var keyCode = $.ui.keyCode;
+ switch( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ this._keyEvent( "next", event );
+ break;
+ }
+ },
+ input: function( event ) {
+ if ( suppressInput ) {
+ suppressInput = false;
+ event.preventDefault();
+ return;
+ }
+ this._searchTimeout( event );
+ },
+ focus: function() {
+ this.selectedItem = null;
+ this.previous = this._value();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ clearTimeout( this.searching );
+ this.close( event );
+ this._change( event );
+ }
+ });
+
+ this._initSource();
+ this.menu = $( "<ul>" )
+ .addClass( "ui-autocomplete" )
+ .appendTo( this._appendTo() )
+ .menu({
+ // custom key handling for now
+ input: $(),
+ // disable ARIA support, the live region takes care of that
+ role: null
+ })
+ .zIndex( this.element.zIndex() + 1 )
+ .hide()
+ .data( "ui-menu" );
+
+ this._on( this.menu.element, {
+ mousedown: function( event ) {
+ // prevent moving focus out of the text field
+ event.preventDefault();
+
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ this.cancelBlur = true;
+ this._delay(function() {
+ delete this.cancelBlur;
+ });
+
+ // clicking on the scrollbar causes focus to shift to the body
+ // but we can't detect a mouseup or a click immediately afterward
+ // so we have to track the next mousedown and close the menu if
+ // the user clicks somewhere outside of the autocomplete
+ var menuElement = this.menu.element[ 0 ];
+ if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+ this._delay(function() {
+ var that = this;
+ this.document.one( "mousedown", function( event ) {
+ if ( event.target !== that.element[ 0 ] &&
+ event.target !== menuElement &&
+ !$.contains( menuElement, event.target ) ) {
+ that.close();
+ }
+ });
+ });
+ }
+ },
+ menufocus: function( event, ui ) {
+ // #7024 - Prevent accidental activation of menu items in Firefox
+ if ( this.isNewMenu ) {
+ this.isNewMenu = false;
+ if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+ this.menu.blur();
+
+ this.document.one( "mousemove", function() {
+ $( event.target ).trigger( event.originalEvent );
+ });
+
+ return;
+ }
+ }
+
+ var item = ui.item.data( "ui-autocomplete-item" );
+ if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+ // use value to match what will end up in the input, if it was a key event
+ if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+ this._value( item.value );
+ }
+ } else {
+ // Normally the input is populated with the item's value as the
+ // menu is navigated, causing screen readers to notice a change and
+ // announce the item. Since the focus event was canceled, this doesn't
+ // happen, so we update the live region so that screen readers can
+ // still notice the change and announce it.
+ this.liveRegion.text( item.value );
+ }
+ },
+ menuselect: function( event, ui ) {
+ var item = ui.item.data( "ui-autocomplete-item" ),
+ previous = this.previous;
+
+ // only trigger when focus was lost (click on menu)
+ if ( this.element[0] !== this.document[0].activeElement ) {
+ this.element.focus();
+ this.previous = previous;
+ // #6109 - IE triggers two focus events and the second
+ // is asynchronous, so we need to reset the previous
+ // term synchronously and asynchronously :-(
+ this._delay(function() {
+ this.previous = previous;
+ this.selectedItem = item;
+ });
+ }
+
+ if ( false !== this._trigger( "select", event, { item: item } ) ) {
+ this._value( item.value );
+ }
+ // reset the term after the select event
+ // this allows custom select handling to work properly
+ this.term = this._value();
+
+ this.close( event );
+ this.selectedItem = item;
+ }
+ });
+
+ this.liveRegion = $( "<span>", {
+ role: "status",
+ "aria-live": "polite"
+ })
+ .addClass( "ui-helper-hidden-accessible" )
+ .insertAfter( this.element );
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ });
+ },
+
+ _destroy: function() {
+ clearTimeout( this.searching );
+ this.element
+ .removeClass( "ui-autocomplete-input" )
+ .removeAttr( "autocomplete" );
+ this.menu.element.remove();
+ this.liveRegion.remove();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "source" ) {
+ this._initSource();
+ }
+ if ( key === "appendTo" ) {
+ this.menu.element.appendTo( this._appendTo() );
+ }
+ if ( key === "disabled" && value && this.xhr ) {
+ this.xhr.abort();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element ) {
+ element = this.element.closest( ".ui-front" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[0].body;
+ }
+
+ return element;
+ },
+
+ _isMultiLine: function() {
+ // Textareas are always multi-line
+ if ( this.element.is( "textarea" ) ) {
+ return true;
+ }
+ // Inputs are always single-line, even if inside a contentEditable element
+ // IE also treats inputs as contentEditable
+ if ( this.element.is( "input" ) ) {
+ return false;
+ }
+ // All other element types are determined by whether or not they're contentEditable
+ return this.element.prop( "isContentEditable" );
+ },
+
+ _initSource: function() {
+ var array, url,
+ that = this;
+ if ( $.isArray(this.options.source) ) {
+ array = this.options.source;
+ this.source = function( request, response ) {
+ response( $.ui.autocomplete.filter( array, request.term ) );
+ };
+ } else if ( typeof this.options.source === "string" ) {
+ url = this.options.source;
+ this.source = function( request, response ) {
+ if ( that.xhr ) {
+ that.xhr.abort();
+ }
+ that.xhr = $.ajax({
+ url: url,
+ data: request,
+ dataType: "json",
+ success: function( data ) {
+ response( data );
+ },
+ error: function() {
+ response( [] );
+ }
+ });
+ };
+ } else {
+ this.source = this.options.source;
+ }
+ },
+
+ _searchTimeout: function( event ) {
+ clearTimeout( this.searching );
+ this.searching = this._delay(function() {
+ // only search if the value has changed
+ if ( this.term !== this._value() ) {
+ this.selectedItem = null;
+ this.search( null, event );
+ }
+ }, this.options.delay );
+ },
+
+ search: function( value, event ) {
+ value = value != null ? value : this._value();
+
+ // always save the actual value, not the one passed as an argument
+ this.term = this._value();
+
+ if ( value.length < this.options.minLength ) {
+ return this.close( event );
+ }
+
+ if ( this._trigger( "search", event ) === false ) {
+ return;
+ }
+
+ return this._search( value );
+ },
+
+ _search: function( value ) {
+ this.pending++;
+ this.element.addClass( "ui-autocomplete-loading" );
+ this.cancelSearch = false;
+
+ this.source( { term: value }, this._response() );
+ },
+
+ _response: function() {
+ var that = this,
+ index = ++requestIndex;
+
+ return function( content ) {
+ if ( index === requestIndex ) {
+ that.__response( content );
+ }
+
+ that.pending--;
+ if ( !that.pending ) {
+ that.element.removeClass( "ui-autocomplete-loading" );
+ }
+ };
+ },
+
+ __response: function( content ) {
+ if ( content ) {
+ content = this._normalize( content );
+ }
+ this._trigger( "response", null, { content: content } );
+ if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+ this._suggest( content );
+ this._trigger( "open" );
+ } else {
+ // use ._close() instead of .close() so we don't cancel future searches
+ this._close();
+ }
+ },
+
+ close: function( event ) {
+ this.cancelSearch = true;
+ this._close( event );
+ },
+
+ _close: function( event ) {
+ if ( this.menu.element.is( ":visible" ) ) {
+ this.menu.element.hide();
+ this.menu.blur();
+ this.isNewMenu = true;
+ this._trigger( "close", event );
+ }
+ },
+
+ _change: function( event ) {
+ if ( this.previous !== this._value() ) {
+ this._trigger( "change", event, { item: this.selectedItem } );
+ }
+ },
+
+ _normalize: function( items ) {
+ // assume all items have the right format when the first item is complete
+ if ( items.length && items[0].label && items[0].value ) {
+ return items;
+ }
+ return $.map( items, function( item ) {
+ if ( typeof item === "string" ) {
+ return {
+ label: item,
+ value: item
+ };
+ }
+ return $.extend({
+ label: item.label || item.value,
+ value: item.value || item.label
+ }, item );
+ });
+ },
+
+ _suggest: function( items ) {
+ var ul = this.menu.element
+ .empty()
+ .zIndex( this.element.zIndex() + 1 );
+ this._renderMenu( ul, items );
+ this.menu.refresh();
+
+ // size and position menu
+ ul.show();
+ this._resizeMenu();
+ ul.position( $.extend({
+ of: this.element
+ }, this.options.position ));
+
+ if ( this.options.autoFocus ) {
+ this.menu.next();
+ }
+ },
+
+ _resizeMenu: function() {
+ var ul = this.menu.element;
+ ul.outerWidth( Math.max(
+ // Firefox wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping (#7513)
+ ul.width( "" ).outerWidth() + 1,
+ this.element.outerWidth()
+ ) );
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this;
+ $.each( items, function( index, item ) {
+ that._renderItemData( ul, item );
+ });
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ return $( "<li>" )
+ .append( $( "<a>" ).text( item.label ) )
+ .appendTo( ul );
+ },
+
+ _move: function( direction, event ) {
+ if ( !this.menu.element.is( ":visible" ) ) {
+ this.search( null, event );
+ return;
+ }
+ if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+ this.menu.isLastItem() && /^next/.test( direction ) ) {
+ this._value( this.term );
+ this.menu.blur();
+ return;
+ }
+ this.menu[ direction ]( event );
+ },
+
+ widget: function() {
+ return this.menu.element;
+ },
+
+ _value: function() {
+ return this.valueMethod.apply( this.element, arguments );
+ },
+
+ _keyEvent: function( keyEvent, event ) {
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ this._move( keyEvent, event );
+
+ // prevents moving cursor to beginning/end of the text field in some browsers
+ event.preventDefault();
+ }
+ }
+});
+
+$.extend( $.ui.autocomplete, {
+ escapeRegex: function( value ) {
+ return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+ },
+ filter: function(array, term) {
+ var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+ return $.grep( array, function(value) {
+ return matcher.test( value.label || value.value || value );
+ });
+ }
+});
+
+
+// live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+ options: {
+ messages: {
+ noResults: "No search results.",
+ results: function( amount ) {
+ return amount + ( amount > 1 ? " results are" : " result is" ) +
+ " available, use up and down arrow keys to navigate.";
+ }
+ }
+ },
+
+ __response: function( content ) {
+ var message;
+ this._superApply( arguments );
+ if ( this.options.disabled || this.cancelSearch ) {
+ return;
+ }
+ if ( content && content.length ) {
+ message = this.options.messages.results( content.length );
+ } else {
+ message = this.options.messages.noResults;
+ }
+ this.liveRegion.text( message );
+ }
+});
+
+}( jQuery ));
+(function( $, undefined ) {
+
+var lastActive, startXPos, startYPos, clickDragged,
+ baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+ stateClasses = "ui-state-hover ui-state-active ",
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+ formResetHandler = function() {
+ var buttons = $( this ).find( ":ui-button" );
+ setTimeout(function() {
+ buttons.button( "refresh" );
+ }, 1 );
+ },
+ radioGroup = function( radio ) {
+ var name = radio.name,
+ form = radio.form,
+ radios = $( [] );
+ if ( name ) {
+ name = name.replace( /'/g, "\\'" );
+ if ( form ) {
+ radios = $( form ).find( "[name='" + name + "']" );
+ } else {
+ radios = $( "[name='" + name + "']", radio.ownerDocument )
+ .filter(function() {
+ return !this.form;
+ });
+ }
+ }
+ return radios;
+ };
+
+$.widget( "ui.button", {
+ version: "1.10.0",
+ defaultElement: "<button>",
+ options: {
+ disabled: null,
+ text: true,
+ label: null,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+ _create: function() {
+ this.element.closest( "form" )
+ .unbind( "reset" + this.eventNamespace )
+ .bind( "reset" + this.eventNamespace, formResetHandler );
+
+ if ( typeof this.options.disabled !== "boolean" ) {
+ this.options.disabled = !!this.element.prop( "disabled" );
+ } else {
+ this.element.prop( "disabled", this.options.disabled );
+ }
+
+ this._determineButtonType();
+ this.hasTitle = !!this.buttonElement.attr( "title" );
+
+ var that = this,
+ options = this.options,
+ toggleButton = this.type === "checkbox" || this.type === "radio",
+ activeClass = !toggleButton ? "ui-state-active" : "",
+ focusClass = "ui-state-focus";
+
+ if ( options.label === null ) {
+ options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+ }
+
+ this._hoverable( this.buttonElement );
+
+ this.buttonElement
+ .addClass( baseClasses )
+ .attr( "role", "button" )
+ .bind( "mouseenter" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ if ( this === lastActive ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ .bind( "mouseleave" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( activeClass );
+ })
+ .bind( "click" + this.eventNamespace, function( event ) {
+ if ( options.disabled ) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ });
+
+ this.element
+ .bind( "focus" + this.eventNamespace, function() {
+ // no need to check disabled, focus won't be triggered anyway
+ that.buttonElement.addClass( focusClass );
+ })
+ .bind( "blur" + this.eventNamespace, function() {
+ that.buttonElement.removeClass( focusClass );
+ });
+
+ if ( toggleButton ) {
+ this.element.bind( "change" + this.eventNamespace, function() {
+ if ( clickDragged ) {
+ return;
+ }
+ that.refresh();
+ });
+ // if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+ // prevents issue where button state changes but checkbox/radio checked state
+ // does not in Firefox (see ticket #6970)
+ this.buttonElement
+ .bind( "mousedown" + this.eventNamespace, function( event ) {
+ if ( options.disabled ) {
+ return;
+ }
+ clickDragged = false;
+ startXPos = event.pageX;
+ startYPos = event.pageY;
+ })
+ .bind( "mouseup" + this.eventNamespace, function( event ) {
+ if ( options.disabled ) {
+ return;
+ }
+ if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+ clickDragged = true;
+ }
+ });
+ }
+
+ if ( this.type === "checkbox" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled || clickDragged ) {
+ return false;
+ }
+ });
+ } else if ( this.type === "radio" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled || clickDragged ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ that.buttonElement.attr( "aria-pressed", "true" );
+
+ var radio = that.element[ 0 ];
+ radioGroup( radio )
+ .not( radio )
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ });
+ } else {
+ this.buttonElement
+ .bind( "mousedown" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ lastActive = this;
+ that.document.one( "mouseup", function() {
+ lastActive = null;
+ });
+ })
+ .bind( "mouseup" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).removeClass( "ui-state-active" );
+ })
+ .bind( "keydown" + this.eventNamespace, function(event) {
+ if ( options.disabled ) {
+ return false;
+ }
+ if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ // see #8559, we bind to blur here in case the button element loses
+ // focus between keydown and keyup, it would be left in an "active" state
+ .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+ $( this ).removeClass( "ui-state-active" );
+ });
+
+ if ( this.buttonElement.is("a") ) {
+ this.buttonElement.keyup(function(event) {
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
+ $( this ).click();
+ }
+ });
+ }
+ }
+
+ // TODO: pull out $.Widget's handling for the disabled option into
+ // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+ // be overridden by individual plugins
+ this._setOption( "disabled", options.disabled );
+ this._resetButton();
+ },
+
+ _determineButtonType: function() {
+ var ancestor, labelSelector, checked;
+
+ if ( this.element.is("[type=checkbox]") ) {
+ this.type = "checkbox";
+ } else if ( this.element.is("[type=radio]") ) {
+ this.type = "radio";
+ } else if ( this.element.is("input") ) {
+ this.type = "input";
+ } else {
+ this.type = "button";
+ }
+
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ // we don't search against the document in case the element
+ // is disconnected from the DOM
+ ancestor = this.element.parents().last();
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
+ this.buttonElement = ancestor.find( labelSelector );
+ if ( !this.buttonElement.length ) {
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+ this.buttonElement = ancestor.filter( labelSelector );
+ if ( !this.buttonElement.length ) {
+ this.buttonElement = ancestor.find( labelSelector );
+ }
+ }
+ this.element.addClass( "ui-helper-hidden-accessible" );
+
+ checked = this.element.is( ":checked" );
+ if ( checked ) {
+ this.buttonElement.addClass( "ui-state-active" );
+ }
+ this.buttonElement.prop( "aria-pressed", checked );
+ } else {
+ this.buttonElement = this.element;
+ }
+ },
+
+ widget: function() {
+ return this.buttonElement;
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-helper-hidden-accessible" );
+ this.buttonElement
+ .removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+ .removeAttr( "role" )
+ .removeAttr( "aria-pressed" )
+ .html( this.buttonElement.find(".ui-button-text").html() );
+
+ if ( !this.hasTitle ) {
+ this.buttonElement.removeAttr( "title" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "disabled" ) {
+ if ( value ) {
+ this.element.prop( "disabled", true );
+ } else {
+ this.element.prop( "disabled", false );
+ }
+ return;
+ }
+ this._resetButton();
+ },
+
+ refresh: function() {
+ //See #8237 & #8828
+ var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOption( "disabled", isDisabled );
+ }
+ if ( this.type === "radio" ) {
+ radioGroup( this.element[0] ).each(function() {
+ if ( $( this ).is( ":checked" ) ) {
+ $( this ).button( "widget" )
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ $( this ).button( "widget" )
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ });
+ } else if ( this.type === "checkbox" ) {
+ if ( this.element.is( ":checked" ) ) {
+ this.buttonElement
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ this.buttonElement
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ }
+ },
+
+ _resetButton: function() {
+ if ( this.type === "input" ) {
+ if ( this.options.label ) {
+ this.element.val( this.options.label );
+ }
+ return;
+ }
+ var buttonElement = this.buttonElement.removeClass( typeClasses ),
+ buttonText = $( "<span></span>", this.document[0] )
+ .addClass( "ui-button-text" )
+ .html( this.options.label )
+ .appendTo( buttonElement.empty() )
+ .text(),
+ icons = this.options.icons,
+ multipleIcons = icons.primary && icons.secondary,
+ buttonClasses = [];
+
+ if ( icons.primary || icons.secondary ) {
+ if ( this.options.text ) {
+ buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+ }
+
+ if ( icons.primary ) {
+ buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+ }
+
+ if ( icons.secondary ) {
+ buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+ }
+
+ if ( !this.options.text ) {
+ buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+ if ( !this.hasTitle ) {
+ buttonElement.attr( "title", $.trim( buttonText ) );
+ }
+ }
+ } else {
+ buttonClasses.push( "ui-button-text-only" );
+ }
+ buttonElement.addClass( buttonClasses.join( " " ) );
+ }
+});
+
+$.widget( "ui.buttonset", {
+ version: "1.10.0",
+ options: {
+ items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+ },
+
+ _create: function() {
+ this.element.addClass( "ui-buttonset" );
+ },
+
+ _init: function() {
+ this.refresh();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "disabled" ) {
+ this.buttons.button( "option", key, value );
+ }
+
+ this._super( key, value );
+ },
+
+ refresh: function() {
+ var rtl = this.element.css( "direction" ) === "rtl";
+
+ this.buttons = this.element.find( this.options.items )
+ .filter( ":ui-button" )
+ .button( "refresh" )
+ .end()
+ .not( ":ui-button" )
+ .button()
+ .end()
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+ .filter( ":first" )
+ .addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+ .end()
+ .filter( ":last" )
+ .addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+ .end()
+ .end();
+ },
+
+ _destroy: function() {
+ this.element.removeClass( "ui-buttonset" );
+ this.buttons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-left ui-corner-right" )
+ .end()
+ .button( "destroy" );
+ }
+});
+
+}( jQuery ) );
+(function( $, undefined ) {
+
+$.extend($.ui, { datepicker: { version: "1.10.0" } });
+
+var PROP_NAME = "datepicker",
+ dpuuid = new Date().getTime(),
+ instActive;
+
+/* Date picker manager.
+ Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+ Settings for (groups of) date pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+function Datepicker() {
+ this._curInst = null; // The current instance in use
+ this._keyEvent = false; // If the last event was a key event
+ this._disabledInputs = []; // List of date picker inputs that have been disabled
+ this._datepickerShowing = false; // True if the popup picker is showing , false if not
+ this._inDialog = false; // True if showing within a "dialog", false if not
+ this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+ this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+ this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+ this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+ this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+ this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+ this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+ this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+ this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[""] = { // Default regional settings
+ closeText: "Done", // Display text for close link
+ prevText: "Prev", // Display text for previous month link
+ nextText: "Next", // Display text for next month link
+ currentText: "Today", // Display text for current month link
+ monthNames: ["January","February","March","April","May","June",
+ "July","August","September","October","November","December"], // Names of months for drop-down and formatting
+ monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+ dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+ dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+ dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+ weekHeader: "Wk", // Column header for week of the year
+ dateFormat: "mm/dd/yy", // See format options on parseDate
+ firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+ isRTL: false, // True if right-to-left language, false if left-to-right
+ showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+ yearSuffix: "" // Additional text to append to the year in the month headers
+ };
+ this._defaults = { // Global defaults for all the date picker instances
+ showOn: "focus", // "focus" for popup on focus,
+ // "button" for trigger button, or "both" for either
+ showAnim: "fadeIn", // Name of jQuery animation for popup
+ showOptions: {}, // Options for enhanced animations
+ defaultDate: null, // Used when field is blank: actual date,
+ // +/-number for offset from today, null for today
+ appendText: "", // Display text following the input box, e.g. showing the format
+ buttonText: "...", // Text for trigger button
+ buttonImage: "", // URL for trigger button image
+ buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+ hideIfNoPrevNext: false, // True to hide next/previous month links
+ // if not applicable, false to just disable them
+ navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+ gotoCurrent: false, // True if today link goes back to current selection instead
+ changeMonth: false, // True if month can be selected directly, false if only prev/next
+ changeYear: false, // True if year can be selected directly, false if only prev/next
+ yearRange: "c-10:c+10", // Range of years to display in drop-down,
+ // either relative to today's year (-nn:+nn), relative to currently displayed year
+ // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+ showOtherMonths: false, // True to show dates in other months, false to leave blank
+ selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+ showWeek: false, // True to show week of the year, false to not show it
+ calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+ // takes a Date and returns the number of the week for it
+ shortYearCutoff: "+10", // Short year values < this are in the current century,
+ // > this are in the previous century,
+ // string value starting with "+" for current year + value
+ minDate: null, // The earliest selectable date, or null for no limit
+ maxDate: null, // The latest selectable date, or null for no limit
+ duration: "fast", // Duration of display/closure
+ beforeShowDay: null, // Function that takes a date and returns an array with
+ // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+ // [2] = cell title (optional), e.g. $.datepicker.noWeekends
+ beforeShow: null, // Function that takes an input field and
+ // returns a set of custom settings for the date picker
+ onSelect: null, // Define a callback function when a date is selected
+ onChangeMonthYear: null, // Define a callback function when the month or year is changed
+ onClose: null, // Define a callback function when the datepicker is closed
+ numberOfMonths: 1, // Number of months to show at a time
+ showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+ stepMonths: 1, // Number of months to step back/forward
+ stepBigMonths: 12, // Number of months to step back/forward for the big links
+ altField: "", // Selector for an alternate field to store selected dates into
+ altFormat: "", // The date format to use for the alternate field
+ constrainInput: true, // The input is constrained by the current date format
+ showButtonPanel: false, // True to show button panel, false to not show it
+ autoSize: false, // True to size the input for the date format, false to leave as is
+ disabled: false // The initial disabled state
+ };
+ $.extend(this._defaults, this.regional[""]);
+ this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+}
+
+$.extend(Datepicker.prototype, {
+ /* Class name added to elements to indicate already configured with a date picker. */
+ markerClassName: "hasDatepicker",
+
+ //Keep track of the maximum number of rows displayed (see #7043)
+ maxRows: 4,
+
+ // TODO rename to "widget" when switching to widget factory
+ _widgetDatepicker: function() {
+ return this.dpDiv;
+ },
+
+ /* Override the default settings for all instances of the date picker.
+ * @param settings object - the new settings to use as defaults (anonymous object)
+ * @return the manager object
+ */
+ setDefaults: function(settings) {
+ extendRemove(this._defaults, settings || {});
+ return this;
+ },
+
+ /* Attach the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param settings object - the new settings to use for this date picker instance (anonymous)
+ */
+ _attachDatepicker: function(target, settings) {
+ var nodeName, inline, inst;
+ nodeName = target.nodeName.toLowerCase();
+ inline = (nodeName === "div" || nodeName === "span");
+ if (!target.id) {
+ this.uuid += 1;
+ target.id = "dp" + this.uuid;
+ }
+ inst = this._newInst($(target), inline);
+ inst.settings = $.extend({}, settings || {});
+ if (nodeName === "input") {
+ this._connectDatepicker(target, inst);
+ } else if (inline) {
+ this._inlineDatepicker(target, inst);
+ }
+ },
+
+ /* Create a new instance object. */
+ _newInst: function(target, inline) {
+ var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+ return {id: id, input: target, // associated target
+ selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+ drawMonth: 0, drawYear: 0, // month being drawn
+ inline: inline, // is datepicker inline or not
+ dpDiv: (!inline ? this.dpDiv : // presentation div
+ bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+ },
+
+ /* Attach the date picker to an input field. */
+ _connectDatepicker: function(target, inst) {
+ var input = $(target);
+ inst.append = $([]);
+ inst.trigger = $([]);
+ if (input.hasClass(this.markerClassName)) {
+ return;
+ }
+ this._attachments(input, inst);
+ input.addClass(this.markerClassName).keydown(this._doKeyDown).
+ keypress(this._doKeyPress).keyup(this._doKeyUp);
+ this._autoSize(inst);
+ $.data(target, PROP_NAME, inst);
+ //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ },
+
+ /* Make attachments based on settings. */
+ _attachments: function(input, inst) {
+ var showOn, buttonText, buttonImage,
+ appendText = this._get(inst, "appendText"),
+ isRTL = this._get(inst, "isRTL");
+
+ if (inst.append) {
+ inst.append.remove();
+ }
+ if (appendText) {
+ inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+ input[isRTL ? "before" : "after"](inst.append);
+ }
+
+ input.unbind("focus", this._showDatepicker);
+
+ if (inst.trigger) {
+ inst.trigger.remove();
+ }
+
+ showOn = this._get(inst, "showOn");
+ if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+ input.focus(this._showDatepicker);
+ }
+ if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+ buttonText = this._get(inst, "buttonText");
+ buttonImage = this._get(inst, "buttonImage");
+ inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+ $("<img/>").addClass(this._triggerClass).
+ attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+ $("<button type='button'></button>").addClass(this._triggerClass).
+ html(!buttonImage ? buttonText : $("<img/>").attr(
+ { src:buttonImage, alt:buttonText, title:buttonText })));
+ input[isRTL ? "before" : "after"](inst.trigger);
+ inst.trigger.click(function() {
+ if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+ $.datepicker._hideDatepicker();
+ } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+ $.datepicker._hideDatepicker();
+ $.datepicker._showDatepicker(input[0]);
+ } else {
+ $.datepicker._showDatepicker(input[0]);
+ }
+ return false;
+ });
+ }
+ },
+
+ /* Apply the maximum length for the date format. */
+ _autoSize: function(inst) {
+ if (this._get(inst, "autoSize") && !inst.inline) {
+ var findMax, max, maxI, i,
+ date = new Date(2009, 12 - 1, 20), // Ensure double digits
+ dateFormat = this._get(inst, "dateFormat");
+
+ if (dateFormat.match(/[DM]/)) {
+ findMax = function(names) {
+ max = 0;
+ maxI = 0;
+ for (i = 0; i < names.length; i++) {
+ if (names[i].length > max) {
+ max = names[i].length;
+ maxI = i;
+ }
+ }
+ return maxI;
+ };
+ date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+ "monthNames" : "monthNamesShort"))));
+ date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+ "dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+ }
+ inst.input.attr("size", this._formatDate(inst, date).length);
+ }
+ },
+
+ /* Attach an inline date picker to a div. */
+ _inlineDatepicker: function(target, inst) {
+ var divSpan = $(target);
+ if (divSpan.hasClass(this.markerClassName)) {
+ return;
+ }
+ divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+ $.data(target, PROP_NAME, inst);
+ this._setDate(inst, this._getDefaultDate(inst), true);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+ // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+ inst.dpDiv.css( "display", "block" );
+ },
+
+ /* Pop-up the date picker in a "dialog" box.
+ * @param input element - ignored
+ * @param date string or Date - the initial date to display
+ * @param onSelect function - the function to call when a date is selected
+ * @param settings object - update the dialog date picker instance's settings (anonymous object)
+ * @param pos int[2] - coordinates for the dialog's position within the screen or
+ * event - with x/y coordinates or
+ * leave empty for default (screen centre)
+ * @return the manager object
+ */
+ _dialogDatepicker: function(input, date, onSelect, settings, pos) {
+ var id, browserWidth, browserHeight, scrollX, scrollY,
+ inst = this._dialogInst; // internal instance
+
+ if (!inst) {
+ this.uuid += 1;
+ id = "dp" + this.uuid;
+ this._dialogInput = $("<input type='text' id='" + id +
+ "' style='position: absolute; top: -100px; width: 0px;'/>");
+ this._dialogInput.keydown(this._doKeyDown);
+ $("body").append(this._dialogInput);
+ inst = this._dialogInst = this._newInst(this._dialogInput, false);
+ inst.settings = {};
+ $.data(this._dialogInput[0], PROP_NAME, inst);
+ }
+ extendRemove(inst.settings, settings || {});
+ date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+ this._dialogInput.val(date);
+
+ this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+ if (!this._pos) {
+ browserWidth = document.documentElement.clientWidth;
+ browserHeight = document.documentElement.clientHeight;
+ scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+ scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+ this._pos = // should use actual width/height below
+ [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+ }
+
+ // move input on screen for focus, but hidden behind dialog
+ this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+ inst.settings.onSelect = onSelect;
+ this._inDialog = true;
+ this.dpDiv.addClass(this._dialogClass);
+ this._showDatepicker(this._dialogInput[0]);
+ if ($.blockUI) {
+ $.blockUI(this.dpDiv);
+ }
+ $.data(this._dialogInput[0], PROP_NAME, inst);
+ return this;
+ },
+
+ /* Detach a datepicker from its control.
+ * @param target element - the target input field or division or span
+ */
+ _destroyDatepicker: function(target) {
+ var nodeName,
+ $target = $(target),
+ inst = $.data(target, PROP_NAME);
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ $.removeData(target, PROP_NAME);
+ if (nodeName === "input") {
+ inst.append.remove();
+ inst.trigger.remove();
+ $target.removeClass(this.markerClassName).
+ unbind("focus", this._showDatepicker).
+ unbind("keydown", this._doKeyDown).
+ unbind("keypress", this._doKeyPress).
+ unbind("keyup", this._doKeyUp);
+ } else if (nodeName === "div" || nodeName === "span") {
+ $target.removeClass(this.markerClassName).empty();
+ }
+ },
+
+ /* Enable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _enableDatepicker: function(target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, PROP_NAME);
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = false;
+ inst.trigger.filter("button").
+ each(function() { this.disabled = false; }).end().
+ filter("img").css({opacity: "1.0", cursor: ""});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().removeClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", false);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value === target ? null : value); }); // delete entry
+ },
+
+ /* Disable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _disableDatepicker: function(target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, PROP_NAME);
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = true;
+ inst.trigger.filter("button").
+ each(function() { this.disabled = true; }).end().
+ filter("img").css({opacity: "0.5", cursor: "default"});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().addClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", true);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value === target ? null : value); }); // delete entry
+ this._disabledInputs[this._disabledInputs.length] = target;
+ },
+
+ /* Is the first field in a jQuery collection disabled as a datepicker?
+ * @param target element - the target input field or division or span
+ * @return boolean - true if disabled, false if enabled
+ */
+ _isDisabledDatepicker: function(target) {
+ if (!target) {
+ return false;
+ }
+ for (var i = 0; i < this._disabledInputs.length; i++) {
+ if (this._disabledInputs[i] === target) {
+ return true;
+ }
+ }
+ return false;
+ },
+
+ /* Retrieve the instance data for the target control.
+ * @param target element - the target input field or division or span
+ * @return object - the associated instance data
+ * @throws error if a jQuery problem getting data
+ */
+ _getInst: function(target) {
+ try {
+ return $.data(target, PROP_NAME);
+ }
+ catch (err) {
+ throw "Missing instance data for this datepicker";
+ }
+ },
+
+ /* Update or retrieve the settings for a date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ * @param name object - the new settings to update or
+ * string - the name of the setting to change or retrieve,
+ * when retrieving also "all" for all instance settings or
+ * "defaults" for all global defaults
+ * @param value any - the new value for the setting
+ * (omit if above is an object or to retrieve a value)
+ */
+ _optionDatepicker: function(target, name, value) {
+ var settings, date, minDate, maxDate,
+ inst = this._getInst(target);
+
+ if (arguments.length === 2 && typeof name === "string") {
+ return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+ (inst ? (name === "all" ? $.extend({}, inst.settings) :
+ this._get(inst, name)) : null));
+ }
+
+ settings = name || {};
+ if (typeof name === "string") {
+ settings = {};
+ settings[name] = value;
+ }
+
+ if (inst) {
+ if (this._curInst === inst) {
+ this._hideDatepicker();
+ }
+
+ date = this._getDateDatepicker(target, true);
+ minDate = this._getMinMaxDate(inst, "min");
+ maxDate = this._getMinMaxDate(inst, "max");
+ extendRemove(inst.settings, settings);
+ // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+ if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+ inst.settings.minDate = this._formatDate(inst, minDate);
+ }
+ if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+ inst.settings.maxDate = this._formatDate(inst, maxDate);
+ }
+ if ( "disabled" in settings ) {
+ if ( settings.disabled ) {
+ this._disableDatepicker(target);
+ } else {
+ this._enableDatepicker(target);
+ }
+ }
+ this._attachments($(target), inst);
+ this._autoSize(inst);
+ this._setDate(inst, date);
+ this._updateAlternate(inst);
+ this._updateDatepicker(inst);
+ }
+ },
+
+ // change method deprecated
+ _changeDatepicker: function(target, name, value) {
+ this._optionDatepicker(target, name, value);
+ },
+
+ /* Redraw the date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ */
+ _refreshDatepicker: function(target) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._updateDatepicker(inst);
+ }
+ },
+
+ /* Set the dates for a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param date Date - the new date
+ */
+ _setDateDatepicker: function(target, date) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._setDate(inst, date);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ }
+ },
+
+ /* Get the date(s) for the first entry in a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param noDefault boolean - true if no default date is to be used
+ * @return Date - the current date
+ */
+ _getDateDatepicker: function(target, noDefault) {
+ var inst = this._getInst(target);
+ if (inst && !inst.inline) {
+ this._setDateFromField(inst, noDefault);
+ }
+ return (inst ? this._getDate(inst) : null);
+ },
+
+ /* Handle keystrokes. */
+ _doKeyDown: function(event) {
+ var onSelect, dateStr, sel,
+ inst = $.datepicker._getInst(event.target),
+ handled = true,
+ isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+
+ inst._keyEvent = true;
+ if ($.datepicker._datepickerShowing) {
+ switch (event.keyCode) {
+ case 9: $.datepicker._hideDatepicker();
+ handled = false;
+ break; // hide on tab out
+ case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+ $.datepicker._currentClass + ")", inst.dpDiv);
+ if (sel[0]) {
+ $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+ }
+
+ onSelect = $.datepicker._get(inst, "onSelect");
+ if (onSelect) {
+ dateStr = $.datepicker._formatDate(inst);
+
+ // trigger custom callback
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+ } else {
+ $.datepicker._hideDatepicker();
+ }
+
+ return false; // don't submit the form
+ case 27: $.datepicker._hideDatepicker();
+ break; // hide on escape
+ case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ break; // previous month/year on page up/+ ctrl
+ case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ break; // next month/year on page down/+ ctrl
+ case 35: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._clearDate(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // clear on ctrl or command +end
+ case 36: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._gotoToday(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // current on ctrl or command +home
+ case 37: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // -1 day on ctrl or command +left
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +left on Mac
+ break;
+ case 38: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, -7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // -1 week on ctrl or command +up
+ case 39: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // +1 day on ctrl or command +right
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +right
+ break;
+ case 40: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, +7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // +1 week on ctrl or command +down
+ default: handled = false;
+ }
+ } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+ $.datepicker._showDatepicker(this);
+ } else {
+ handled = false;
+ }
+
+ if (handled) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ },
+
+ /* Filter entered characters - based on date format. */
+ _doKeyPress: function(event) {
+ var chars, chr,
+ inst = $.datepicker._getInst(event.target);
+
+ if ($.datepicker._get(inst, "constrainInput")) {
+ chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+ chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+ return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+ }
+ },
+
+ /* Synchronise manual entry and field/alternate field. */
+ _doKeyUp: function(event) {
+ var date,
+ inst = $.datepicker._getInst(event.target);
+
+ if (inst.input.val() !== inst.lastVal) {
+ try {
+ date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ (inst.input ? inst.input.val() : null),
+ $.datepicker._getFormatConfig(inst));
+
+ if (date) { // only if valid
+ $.datepicker._setDateFromField(inst);
+ $.datepicker._updateAlternate(inst);
+ $.datepicker._updateDatepicker(inst);
+ }
+ }
+ catch (err) {
+ }
+ }
+ return true;
+ },
+
+ /* Pop-up the date picker for a given input field.
+ * If false returned from beforeShow event handler do not show.
+ * @param input element - the input field attached to the date picker or
+ * event - if triggered by focus
+ */
+ _showDatepicker: function(input) {
+ input = input.target || input;
+ if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+ input = $("input", input.parentNode)[0];
+ }
+
+ if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+ return;
+ }
+
+ var inst, beforeShow, beforeShowSettings, isFixed,
+ offset, showAnim, duration;
+
+ inst = $.datepicker._getInst(input);
+ if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+ $.datepicker._curInst.dpDiv.stop(true, true);
+ if ( inst && $.datepicker._datepickerShowing ) {
+ $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+ }
+ }
+
+ beforeShow = $.datepicker._get(inst, "beforeShow");
+ beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+ if(beforeShowSettings === false){
+ return;
+ }
+ extendRemove(inst.settings, beforeShowSettings);
+
+ inst.lastVal = null;
+ $.datepicker._lastInput = input;
+ $.datepicker._setDateFromField(inst);
+
+ if ($.datepicker._inDialog) { // hide cursor
+ input.value = "";
+ }
+ if (!$.datepicker._pos) { // position below input
+ $.datepicker._pos = $.datepicker._findPos(input);
+ $.datepicker._pos[1] += input.offsetHeight; // add the height
+ }
+
+ isFixed = false;
+ $(input).parents().each(function() {
+ isFixed |= $(this).css("position") === "fixed";
+ return !isFixed;
+ });
+
+ offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+ $.datepicker._pos = null;
+ //to avoid flashes on Firefox
+ inst.dpDiv.empty();
+ // determine sizing offscreen
+ inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+ $.datepicker._updateDatepicker(inst);
+ // fix width for dynamic number of date pickers
+ // and adjust position before showing
+ offset = $.datepicker._checkOffset(inst, offset, isFixed);
+ inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+ "static" : (isFixed ? "fixed" : "absolute")), display: "none",
+ left: offset.left + "px", top: offset.top + "px"});
+
+ if (!inst.inline) {
+ showAnim = $.datepicker._get(inst, "showAnim");
+ duration = $.datepicker._get(inst, "duration");
+ inst.dpDiv.zIndex($(input).zIndex()+1);
+ $.datepicker._datepickerShowing = true;
+
+ if ( $.effects && $.effects.effect[ showAnim ] ) {
+ inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+ } else {
+ inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+ }
+
+ if (inst.input.is(":visible") && !inst.input.is(":disabled")) {
+ inst.input.focus();
+ }
+ $.datepicker._curInst = inst;
+ }
+ },
+
+ /* Generate the date picker content. */
+ _updateDatepicker: function(inst) {
+ this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+ instActive = inst; // for delegate hover events
+ inst.dpDiv.empty().append(this._generateHTML(inst));
+ this._attachHandlers(inst);
+ inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
+
+ var origyearshtml,
+ numMonths = this._getNumberOfMonths(inst),
+ cols = numMonths[1],
+ width = 17;
+
+ inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+ if (cols > 1) {
+ inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+ }
+ inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+ "Class"]("ui-datepicker-multi");
+ inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+ "Class"]("ui-datepicker-rtl");
+
+ // #6694 - don't focus the input if it's already focused
+ // this breaks the change event in IE
+ if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
+ inst.input.is(":visible") && !inst.input.is(":disabled") && inst.input[0] !== document.activeElement) {
+ inst.input.focus();
+ }
+
+ // deffered render of the years select (to avoid flashes on Firefox)
+ if( inst.yearshtml ){
+ origyearshtml = inst.yearshtml;
+ setTimeout(function(){
+ //assure that inst.yearshtml didn't change.
+ if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+ inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+ }
+ origyearshtml = inst.yearshtml = null;
+ }, 0);
+ }
+ },
+
+ /* Retrieve the size of left and top borders for an element.
+ * @param elem (jQuery object) the element of interest
+ * @return (number[2]) the left and top borders
+ */
+ _getBorders: function(elem) {
+ var convert = function(value) {
+ return {thin: 1, medium: 2, thick: 3}[value] || value;
+ };
+ return [parseFloat(convert(elem.css("border-left-width"))),
+ parseFloat(convert(elem.css("border-top-width")))];
+ },
+
+ /* Check positioning to remain on screen. */
+ _checkOffset: function(inst, offset, isFixed) {
+ var dpWidth = inst.dpDiv.outerWidth(),
+ dpHeight = inst.dpDiv.outerHeight(),
+ inputWidth = inst.input ? inst.input.outerWidth() : 0,
+ inputHeight = inst.input ? inst.input.outerHeight() : 0,
+ viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+ viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+
+ offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+ offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+ offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+ // now check if datepicker is showing outside window viewport - move to a better place if so.
+ offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+ Math.abs(offset.left + dpWidth - viewWidth) : 0);
+ offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+ Math.abs(dpHeight + inputHeight) : 0);
+
+ return offset;
+ },
+
+ /* Find an object's position on the screen. */
+ _findPos: function(obj) {
+ var position,
+ inst = this._getInst(obj),
+ isRTL = this._get(inst, "isRTL");
+
+ while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+ obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+ }
+
+ position = $(obj).offset();
+ return [position.left, position.top];
+ },
+
+ /* Hide the date picker from view.
+ * @param input element - the input field attached to the date picker
+ */
+ _hideDatepicker: function(input) {
+ var showAnim, duration, postProcess, onClose,
+ inst = this._curInst;
+
+ if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
+ return;
+ }
+
+ if (this._datepickerShowing) {
+ showAnim = this._get(inst, "showAnim");
+ duration = this._get(inst, "duration");
+ postProcess = function() {
+ $.datepicker._tidyDialog(inst);
+ };
+
+ // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+ if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+ inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+ } else {
+ inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+ (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+ }
+
+ if (!showAnim) {
+ postProcess();
+ }
+ this._datepickerShowing = false;
+
+ onClose = this._get(inst, "onClose");
+ if (onClose) {
+ onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+ }
+
+ this._lastInput = null;
+ if (this._inDialog) {
+ this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+ if ($.blockUI) {
+ $.unblockUI();
+ $("body").append(this.dpDiv);
+ }
+ }
+ this._inDialog = false;
+ }
+ },
+
+ /* Tidy up after a dialog display. */
+ _tidyDialog: function(inst) {
+ inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+ },
+
+ /* Close date picker if clicked elsewhere. */
+ _checkExternalClick: function(event) {
+ if (!$.datepicker._curInst) {
+ return;
+ }
+
+ var $target = $(event.target),
+ inst = $.datepicker._getInst($target[0]);
+
+ if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+ $target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+ !$target.hasClass($.datepicker.markerClassName) &&
+ !$target.closest("." + $.datepicker._triggerClass).length &&
+ $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+ ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+ $.datepicker._hideDatepicker();
+ }
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustDate: function(id, offset, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+ this._adjustInstDate(inst, offset +
+ (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+ period);
+ this._updateDatepicker(inst);
+ },
+
+ /* Action for current link. */
+ _gotoToday: function(id) {
+ var date,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+ inst.selectedDay = inst.currentDay;
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+ inst.drawYear = inst.selectedYear = inst.currentYear;
+ } else {
+ date = new Date();
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ }
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a new month/year. */
+ _selectMonthYear: function(id, select, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ inst["selected" + (period === "M" ? "Month" : "Year")] =
+ inst["draw" + (period === "M" ? "Month" : "Year")] =
+ parseInt(select.options[select.selectedIndex].value,10);
+
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a day. */
+ _selectDay: function(id, month, year, td) {
+ var inst,
+ target = $(id);
+
+ if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+
+ inst = this._getInst(target[0]);
+ inst.selectedDay = inst.currentDay = $("a", td).html();
+ inst.selectedMonth = inst.currentMonth = month;
+ inst.selectedYear = inst.currentYear = year;
+ this._selectDate(id, this._formatDate(inst,
+ inst.currentDay, inst.currentMonth, inst.currentYear));
+ },
+
+ /* Erase the input field and hide the date picker. */
+ _clearDate: function(id) {
+ var target = $(id);
+ this._selectDate(target, "");
+ },
+
+ /* Update the input field with the selected date. */
+ _selectDate: function(id, dateStr) {
+ var onSelect,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+ if (inst.input) {
+ inst.input.val(dateStr);
+ }
+ this._updateAlternate(inst);
+
+ onSelect = this._get(inst, "onSelect");
+ if (onSelect) {
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
+ } else if (inst.input) {
+ inst.input.trigger("change"); // fire the change event
+ }
+
+ if (inst.inline){
+ this._updateDatepicker(inst);
+ } else {
+ this._hideDatepicker();
+ this._lastInput = inst.input[0];
+ if (typeof(inst.input[0]) !== "object") {
+ inst.input.focus(); // restore focus
+ }
+ this._lastInput = null;
+ }
+ },
+
+ /* Update any alternate field to synchronise with the main field. */
+ _updateAlternate: function(inst) {
+ var altFormat, date, dateStr,
+ altField = this._get(inst, "altField");
+
+ if (altField) { // update alternate field too
+ altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+ date = this._getDate(inst);
+ dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+ $(altField).each(function() { $(this).val(dateStr); });
+ }
+ },
+
+ /* Set as beforeShowDay function to prevent selection of weekends.
+ * @param date Date - the date to customise
+ * @return [boolean, string] - is this date selectable?, what is its CSS class?
+ */
+ noWeekends: function(date) {
+ var day = date.getDay();
+ return [(day > 0 && day < 6), ""];
+ },
+
+ /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+ * @param date Date - the date to get the week for
+ * @return number - the number of the week within the year that contains this date
+ */
+ iso8601Week: function(date) {
+ var time,
+ checkDate = new Date(date.getTime());
+
+ // Find Thursday of this week starting on Monday
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+
+ time = checkDate.getTime();
+ checkDate.setMonth(0); // Compare with Jan 1
+ checkDate.setDate(1);
+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+ },
+
+ /* Parse a string value into a date object.
+ * See formatDate below for the possible formats.
+ *
+ * @param format string - the expected format of the date
+ * @param value string - the date in the above format
+ * @param settings Object - attributes include:
+ * shortYearCutoff number - the cutoff year for determining the century (optional)
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return Date - the extracted date value or null if value is blank
+ */
+ parseDate: function (format, value, settings) {
+ if (format == null || value == null) {
+ throw "Invalid arguments";
+ }
+
+ value = (typeof value === "object" ? value.toString() : value + "");
+ if (value === "") {
+ return null;
+ }
+
+ var iFormat, dim, extra,
+ iValue = 0,
+ shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+ shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ year = -1,
+ month = -1,
+ day = -1,
+ doy = -1,
+ literal = false,
+ date,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Extract a number from the string value
+ getNumber = function(match) {
+ var isDoubled = lookAhead(match),
+ size = (match === "@" ? 14 : (match === "!" ? 20 :
+ (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+ digits = new RegExp("^\\d{1," + size + "}"),
+ num = value.substring(iValue).match(digits);
+ if (!num) {
+ throw "Missing number at position " + iValue;
+ }
+ iValue += num[0].length;
+ return parseInt(num[0], 10);
+ },
+ // Extract a name from the string value and convert to an index
+ getName = function(match, shortNames, longNames) {
+ var index = -1,
+ names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+ return [ [k, v] ];
+ }).sort(function (a, b) {
+ return -(a[1].length - b[1].length);
+ });
+
+ $.each(names, function (i, pair) {
+ var name = pair[1];
+ if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+ index = pair[0];
+ iValue += name.length;
+ return false;
+ }
+ });
+ if (index !== -1) {
+ return index + 1;
+ } else {
+ throw "Unknown name at position " + iValue;
+ }
+ },
+ // Confirm that a literal character matches the string value
+ checkLiteral = function() {
+ if (value.charAt(iValue) !== format.charAt(iFormat)) {
+ throw "Unexpected literal at position " + iValue;
+ }
+ iValue++;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ checkLiteral();
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ day = getNumber("d");
+ break;
+ case "D":
+ getName("D", dayNamesShort, dayNames);
+ break;
+ case "o":
+ doy = getNumber("o");
+ break;
+ case "m":
+ month = getNumber("m");
+ break;
+ case "M":
+ month = getName("M", monthNamesShort, monthNames);
+ break;
+ case "y":
+ year = getNumber("y");
+ break;
+ case "@":
+ date = new Date(getNumber("@"));
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "!":
+ date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "'":
+ if (lookAhead("'")){
+ checkLiteral();
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ checkLiteral();
+ }
+ }
+ }
+
+ if (iValue < value.length){
+ extra = value.substr(iValue);
+ if (!/^\s+/.test(extra)) {
+ throw "Extra/unparsed characters found in date: " + extra;
+ }
+ }
+
+ if (year === -1) {
+ year = new Date().getFullYear();
+ } else if (year < 100) {
+ year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+ (year <= shortYearCutoff ? 0 : -100);
+ }
+
+ if (doy > -1) {
+ month = 1;
+ day = doy;
+ do {
+ dim = this._getDaysInMonth(year, month - 1);
+ if (day <= dim) {
+ break;
+ }
+ month++;
+ day -= dim;
+ } while (true);
+ }
+
+ date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+ if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+ throw "Invalid date"; // E.g. 31/02/00
+ }
+ return date;
+ },
+
+ /* Standard date formats. */
+ ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+ COOKIE: "D, dd M yy",
+ ISO_8601: "yy-mm-dd",
+ RFC_822: "D, d M y",
+ RFC_850: "DD, dd-M-y",
+ RFC_1036: "D, d M y",
+ RFC_1123: "D, d M yy",
+ RFC_2822: "D, d M yy",
+ RSS: "D, d M y", // RFC 822
+ TICKS: "!",
+ TIMESTAMP: "@",
+ W3C: "yy-mm-dd", // ISO 8601
+
+ _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+ Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+
+ /* Format a date object into a string value.
+ * The format can be combinations of the following:
+ * d - day of month (no leading zero)
+ * dd - day of month (two digit)
+ * o - day of year (no leading zeros)
+ * oo - day of year (three digit)
+ * D - day name short
+ * DD - day name long
+ * m - month of year (no leading zero)
+ * mm - month of year (two digit)
+ * M - month name short
+ * MM - month name long
+ * y - year (two digit)
+ * yy - year (four digit)
+ * @ - Unix timestamp (ms since 01/01/1970)
+ * ! - Windows ticks (100ns since 01/01/0001)
+ * "..." - literal text
+ * '' - single quote
+ *
+ * @param format string - the desired format of the date
+ * @param date Date - the date value to format
+ * @param settings Object - attributes include:
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return string - the date in the above format
+ */
+ formatDate: function (format, date, settings) {
+ if (!date) {
+ return "";
+ }
+
+ var iFormat,
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Format a number, with leading zero if necessary
+ formatNumber = function(match, value, len) {
+ var num = "" + value;
+ if (lookAhead(match)) {
+ while (num.length < len) {
+ num = "0" + num;
+ }
+ }
+ return num;
+ },
+ // Format a name, short or long as requested
+ formatName = function(match, value, shortNames, longNames) {
+ return (lookAhead(match) ? longNames[value] : shortNames[value]);
+ },
+ output = "",
+ literal = false;
+
+ if (date) {
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ output += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ output += formatNumber("d", date.getDate(), 2);
+ break;
+ case "D":
+ output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+ break;
+ case "o":
+ output += formatNumber("o",
+ Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+ break;
+ case "m":
+ output += formatNumber("m", date.getMonth() + 1, 2);
+ break;
+ case "M":
+ output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+ break;
+ case "y":
+ output += (lookAhead("y") ? date.getFullYear() :
+ (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+ break;
+ case "@":
+ output += date.getTime();
+ break;
+ case "!":
+ output += date.getTime() * 10000 + this._ticksTo1970;
+ break;
+ case "'":
+ if (lookAhead("'")) {
+ output += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ output += format.charAt(iFormat);
+ }
+ }
+ }
+ }
+ return output;
+ },
+
+ /* Extract all possible characters from the date format. */
+ _possibleChars: function (format) {
+ var iFormat,
+ chars = "",
+ literal = false,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ chars += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d": case "m": case "y": case "@":
+ chars += "0123456789";
+ break;
+ case "D": case "M":
+ return null; // Accept anything
+ case "'":
+ if (lookAhead("'")) {
+ chars += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ chars += format.charAt(iFormat);
+ }
+ }
+ }
+ return chars;
+ },
+
+ /* Get a setting value, defaulting if necessary. */
+ _get: function(inst, name) {
+ return inst.settings[name] !== undefined ?
+ inst.settings[name] : this._defaults[name];
+ },
+
+ /* Parse existing date and initialise date picker. */
+ _setDateFromField: function(inst, noDefault) {
+ if (inst.input.val() === inst.lastVal) {
+ return;
+ }
+
+ var dateFormat = this._get(inst, "dateFormat"),
+ dates = inst.lastVal = inst.input ? inst.input.val() : null,
+ defaultDate = this._getDefaultDate(inst),
+ date = defaultDate,
+ settings = this._getFormatConfig(inst);
+
+ try {
+ date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+ } catch (event) {
+ dates = (noDefault ? "" : dates);
+ }
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ inst.currentDay = (dates ? date.getDate() : 0);
+ inst.currentMonth = (dates ? date.getMonth() : 0);
+ inst.currentYear = (dates ? date.getFullYear() : 0);
+ this._adjustInstDate(inst);
+ },
+
+ /* Retrieve the default date shown on opening. */
+ _getDefaultDate: function(inst) {
+ return this._restrictMinMax(inst,
+ this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+ },
+
+ /* A date may be specified as an exact value or a relative one. */
+ _determineDate: function(inst, date, defaultDate) {
+ var offsetNumeric = function(offset) {
+ var date = new Date();
+ date.setDate(date.getDate() + offset);
+ return date;
+ },
+ offsetString = function(offset) {
+ try {
+ return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ offset, $.datepicker._getFormatConfig(inst));
+ }
+ catch (e) {
+ // Ignore
+ }
+
+ var date = (offset.toLowerCase().match(/^c/) ?
+ $.datepicker._getDate(inst) : null) || new Date(),
+ year = date.getFullYear(),
+ month = date.getMonth(),
+ day = date.getDate(),
+ pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+ matches = pattern.exec(offset);
+
+ while (matches) {
+ switch (matches[2] || "d") {
+ case "d" : case "D" :
+ day += parseInt(matches[1],10); break;
+ case "w" : case "W" :
+ day += parseInt(matches[1],10) * 7; break;
+ case "m" : case "M" :
+ month += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ case "y": case "Y" :
+ year += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ }
+ matches = pattern.exec(offset);
+ }
+ return new Date(year, month, day);
+ },
+ newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+ (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+
+ newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+ if (newDate) {
+ newDate.setHours(0);
+ newDate.setMinutes(0);
+ newDate.setSeconds(0);
+ newDate.setMilliseconds(0);
+ }
+ return this._daylightSavingAdjust(newDate);
+ },
+
+ /* Handle switch to/from daylight saving.
+ * Hours may be non-zero on daylight saving cut-over:
+ * > 12 when midnight changeover, but then cannot generate
+ * midnight datetime, so jump to 1AM, otherwise reset.
+ * @param date (Date) the date to check
+ * @return (Date) the corrected date
+ */
+ _daylightSavingAdjust: function(date) {
+ if (!date) {
+ return null;
+ }
+ date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+ return date;
+ },
+
+ /* Set the date(s) directly. */
+ _setDate: function(inst, date, noChange) {
+ var clear = !date,
+ origMonth = inst.selectedMonth,
+ origYear = inst.selectedYear,
+ newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+
+ inst.selectedDay = inst.currentDay = newDate.getDate();
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+ inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+ if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+ this._notifyChange(inst);
+ }
+ this._adjustInstDate(inst);
+ if (inst.input) {
+ inst.input.val(clear ? "" : this._formatDate(inst));
+ }
+ },
+
+ /* Retrieve the date(s) directly. */
+ _getDate: function(inst) {
+ var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+ this._daylightSavingAdjust(new Date(
+ inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return startDate;
+ },
+
+ /* Attach the onxxx handlers. These are declared statically so
+ * they work with static code transformers like Caja.
+ */
+ _attachHandlers: function(inst) {
+ var stepMonths = this._get(inst, "stepMonths"),
+ id = "#" + inst.id.replace( /\\\\/g, "\\" );
+ inst.dpDiv.find("[data-handler]").map(function () {
+ var handler = {
+ prev: function () {
+ window["DP_jQuery_" + dpuuid].datepicker._adjustDate(id, -stepMonths, "M");
+ },
+ next: function () {
+ window["DP_jQuery_" + dpuuid].datepicker._adjustDate(id, +stepMonths, "M");
+ },
+ hide: function () {
+ window["DP_jQuery_" + dpuuid].datepicker._hideDatepicker();
+ },
+ today: function () {
+ window["DP_jQuery_" + dpuuid].datepicker._gotoToday(id);
+ },
+ selectDay: function () {
+ window["DP_jQuery_" + dpuuid].datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+ return false;
+ },
+ selectMonth: function () {
+ window["DP_jQuery_" + dpuuid].datepicker._selectMonthYear(id, this, "M");
+ return false;
+ },
+ selectYear: function () {
+ window["DP_jQuery_" + dpuuid].datepicker._selectMonthYear(id, this, "Y");
+ return false;
+ }
+ };
+ $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+ });
+ },
+
+ /* Generate the HTML for the current state of the date picker. */
+ _generateHTML: function(inst) {
+ var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+ controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+ monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+ selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+ cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+ printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+ tempDate = new Date(),
+ today = this._daylightSavingAdjust(
+ new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+ isRTL = this._get(inst, "isRTL"),
+ showButtonPanel = this._get(inst, "showButtonPanel"),
+ hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+ navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+ numMonths = this._getNumberOfMonths(inst),
+ showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+ stepMonths = this._get(inst, "stepMonths"),
+ isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+ currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+ new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ drawMonth = inst.drawMonth - showCurrentAtPos,
+ drawYear = inst.drawYear;
+
+ if (drawMonth < 0) {
+ drawMonth += 12;
+ drawYear--;
+ }
+ if (maxDate) {
+ maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+ maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+ maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+ while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+ drawMonth--;
+ if (drawMonth < 0) {
+ drawMonth = 11;
+ drawYear--;
+ }
+ }
+ }
+ inst.drawMonth = drawMonth;
+ inst.drawYear = drawYear;
+
+ prevText = this._get(inst, "prevText");
+ prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+ " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+
+ nextText = this._get(inst, "nextText");
+ nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+ " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+
+ currentText = this._get(inst, "currentText");
+ gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+ currentText = (!navigationAsDateFormat ? currentText :
+ this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+
+ controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+ this._get(inst, "closeText") + "</button>" : "");
+
+ buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+ (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+ ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+
+ firstDay = parseInt(this._get(inst, "firstDay"),10);
+ firstDay = (isNaN(firstDay) ? 0 : firstDay);
+
+ showWeek = this._get(inst, "showWeek");
+ dayNames = this._get(inst, "dayNames");
+ dayNamesMin = this._get(inst, "dayNamesMin");
+ monthNames = this._get(inst, "monthNames");
+ monthNamesShort = this._get(inst, "monthNamesShort");
+ beforeShowDay = this._get(inst, "beforeShowDay");
+ showOtherMonths = this._get(inst, "showOtherMonths");
+ selectOtherMonths = this._get(inst, "selectOtherMonths");
+ defaultDate = this._getDefaultDate(inst);
+ html = "";
+ dow;
+ for (row = 0; row < numMonths[0]; row++) {
+ group = "";
+ this.maxRows = 4;
+ for (col = 0; col < numMonths[1]; col++) {
+ selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+ cornerClass = " ui-corner-all";
+ calender = "";
+ if (isMultiMonth) {
+ calender += "<div class='ui-datepicker-group";
+ if (numMonths[1] > 1) {
+ switch (col) {
+ case 0: calender += " ui-datepicker-group-first";
+ cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+ case numMonths[1]-1: calender += " ui-datepicker-group-last";
+ cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+ default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+ }
+ }
+ calender += "'>";
+ }
+ calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+ (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+ (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+ this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+ row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+ "</div><table class='ui-datepicker-calendar'><thead>" +
+ "<tr>";
+ thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+ for (dow = 0; dow < 7; dow++) { // days of the week
+ day = (dow + firstDay) % 7;
+ thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+ "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+ }
+ calender += thead + "</tr></thead><tbody>";
+ daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+ if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+ inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+ }
+ leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+ curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+ numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+ this.maxRows = numRows;
+ printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+ for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+ calender += "<tr>";
+ tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+ this._get(inst, "calculateWeek")(printDate) + "</td>");
+ for (dow = 0; dow < 7; dow++) { // create date picker days
+ daySettings = (beforeShowDay ?
+ beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+ otherMonth = (printDate.getMonth() !== drawMonth);
+ unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+ (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+ tbody += "<td class='" +
+ ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+ (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+ ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+ (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+ // or defaultDate is current printedDate and defaultDate is selectedDate
+ " " + this._dayOverClass : "") + // highlight selected day
+ (unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") + // highlight unselectable days
+ (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+ (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+ (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+ ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2] + "'" : "") + // cell title
+ (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+ (otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+ (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+ (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+ (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+ (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+ "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+ printDate.setDate(printDate.getDate() + 1);
+ printDate = this._daylightSavingAdjust(printDate);
+ }
+ calender += tbody + "</tr>";
+ }
+ drawMonth++;
+ if (drawMonth > 11) {
+ drawMonth = 0;
+ drawYear++;
+ }
+ calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+ ((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+ group += calender;
+ }
+ html += group;
+ }
+ html += buttonPanel;
+ inst._keyEvent = false;
+ return html;
+ },
+
+ /* Generate the month and year header. */
+ _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+ secondary, monthNames, monthNamesShort) {
+
+ var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+ changeMonth = this._get(inst, "changeMonth"),
+ changeYear = this._get(inst, "changeYear"),
+ showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+ html = "<div class='ui-datepicker-title'>",
+ monthHtml = "";
+
+ // month selection
+ if (secondary || !changeMonth) {
+ monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+ } else {
+ inMinYear = (minDate && minDate.getFullYear() === drawYear);
+ inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+ monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+ for ( month = 0; month < 12; month++) {
+ if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+ monthHtml += "<option value='" + month + "'" +
+ (month === drawMonth ? " selected='selected'" : "") +
+ ">" + monthNamesShort[month] + "</option>";
+ }
+ }
+ monthHtml += "</select>";
+ }
+
+ if (!showMonthAfterYear) {
+ html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+ }
+
+ // year selection
+ if ( !inst.yearshtml ) {
+ inst.yearshtml = "";
+ if (secondary || !changeYear) {
+ html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+ } else {
+ // determine range of years to display
+ years = this._get(inst, "yearRange").split(":");
+ thisYear = new Date().getFullYear();
+ determineYear = function(value) {
+ var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+ (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+ parseInt(value, 10)));
+ return (isNaN(year) ? thisYear : year);
+ };
+ year = determineYear(years[0]);
+ endYear = Math.max(year, determineYear(years[1] || ""));
+ year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+ endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+ inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+ for (; year <= endYear; year++) {
+ inst.yearshtml += "<option value='" + year + "'" +
+ (year === drawYear ? " selected='selected'" : "") +
+ ">" + year + "</option>";
+ }
+ inst.yearshtml += "</select>";
+
+ html += inst.yearshtml;
+ inst.yearshtml = null;
+ }
+ }
+
+ html += this._get(inst, "yearSuffix");
+ if (showMonthAfterYear) {
+ html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+ }
+ html += "</div>"; // Close datepicker_header
+ return html;
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustInstDate: function(inst, offset, period) {
+ var year = inst.drawYear + (period === "Y" ? offset : 0),
+ month = inst.drawMonth + (period === "M" ? offset : 0),
+ day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+ date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ if (period === "M" || period === "Y") {
+ this._notifyChange(inst);
+ }
+ },
+
+ /* Ensure a date is within any min/max bounds. */
+ _restrictMinMax: function(inst, date) {
+ var minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ newDate = (minDate && date < minDate ? minDate : date);
+ return (maxDate && newDate > maxDate ? maxDate : newDate);
+ },
+
+ /* Notify change of month/year. */
+ _notifyChange: function(inst) {
+ var onChange = this._get(inst, "onChangeMonthYear");
+ if (onChange) {
+ onChange.apply((inst.input ? inst.input[0] : null),
+ [inst.selectedYear, inst.selectedMonth + 1, inst]);
+ }
+ },
+
+ /* Determine the number of months to show. */
+ _getNumberOfMonths: function(inst) {
+ var numMonths = this._get(inst, "numberOfMonths");
+ return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+ },
+
+ /* Determine the current maximum date - ensure no time components are set. */
+ _getMinMaxDate: function(inst, minMax) {
+ return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+ },
+
+ /* Find the number of days in a given month. */
+ _getDaysInMonth: function(year, month) {
+ return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+ },
+
+ /* Find the day of the week of the first of a month. */
+ _getFirstDayOfMonth: function(year, month) {
+ return new Date(year, month, 1).getDay();
+ },
+
+ /* Determines if we should allow a "next/prev" month display change. */
+ _canAdjustMonth: function(inst, offset, curYear, curMonth) {
+ var numMonths = this._getNumberOfMonths(inst),
+ date = this._daylightSavingAdjust(new Date(curYear,
+ curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+
+ if (offset < 0) {
+ date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+ }
+ return this._isInRange(inst, date);
+ },
+
+ /* Is the given date in the accepted range? */
+ _isInRange: function(inst, date) {
+ var yearSplit, currentYear,
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ minYear = null,
+ maxYear = null,
+ years = this._get(inst, "yearRange");
+ if (years){
+ yearSplit = years.split(":");
+ currentYear = new Date().getFullYear();
+ minYear = parseInt(yearSplit[0], 10) + currentYear;
+ maxYear = parseInt(yearSplit[1], 10) + currentYear;
+ }
+
+ return ((!minDate || date.getTime() >= minDate.getTime()) &&
+ (!maxDate || date.getTime() <= maxDate.getTime()) &&
+ (!minYear || date.getFullYear() >= minYear) &&
+ (!maxYear || date.getFullYear() <= maxYear));
+ },
+
+ /* Provide the configuration settings for formatting/parsing. */
+ _getFormatConfig: function(inst) {
+ var shortYearCutoff = this._get(inst, "shortYearCutoff");
+ shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+ return {shortYearCutoff: shortYearCutoff,
+ dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+ monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+ },
+
+ /* Format the given date for display. */
+ _formatDate: function(inst, day, month, year) {
+ if (!day) {
+ inst.currentDay = inst.selectedDay;
+ inst.currentMonth = inst.selectedMonth;
+ inst.currentYear = inst.selectedYear;
+ }
+ var date = (day ? (typeof day === "object" ? day :
+ this._daylightSavingAdjust(new Date(year, month, day))) :
+ this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+ }
+});
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function bindHover(dpDiv) {
+ var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+ return dpDiv.delegate(selector, "mouseout", function() {
+ $(this).removeClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).removeClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).removeClass("ui-datepicker-next-hover");
+ }
+ })
+ .delegate(selector, "mouseover", function(){
+ if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
+ $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+ $(this).addClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).addClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).addClass("ui-datepicker-next-hover");
+ }
+ }
+ });
+}
+
+/* jQuery extend now ignores nulls! */
+function extendRemove(target, props) {
+ $.extend(target, props);
+ for (var name in props) {
+ if (props[name] == null) {
+ target[name] = props[name];
+ }
+ }
+ return target;
+}
+
+/* Invoke the datepicker functionality.
+ @param options string - a command, optionally followed by additional parameters or
+ Object - settings for attaching new datepicker functionality
+ @return jQuery object */
+$.fn.datepicker = function(options){
+
+ /* Verify an empty collection wasn't passed - Fixes #6976 */
+ if ( !this.length ) {
+ return this;
+ }
+
+ /* Initialise the date picker. */
+ if (!$.datepicker.initialized) {
+ $(document).mousedown($.datepicker._checkExternalClick);
+ $.datepicker.initialized = true;
+ }
+
+ /* Append datepicker main container to body if not exist. */
+ if ($("#"+$.datepicker._mainDivId).length === 0) {
+ $("body").append($.datepicker.dpDiv);
+ }
+
+ var otherArgs = Array.prototype.slice.call(arguments, 1);
+ if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ return this.each(function() {
+ typeof options === "string" ?
+ $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this].concat(otherArgs)) :
+ $.datepicker._attachDatepicker(this, options);
+ });
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.10.0";
+
+// Workaround for #4055
+// Add another global to avoid noConflict issues with inline event handlers
+window["DP_jQuery_" + dpuuid] = $;
+
+})(jQuery);
+(function( $, undefined ) {
+
+var sizeRelatedOptions = {
+ buttons: true,
+ height: true,
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true,
+ width: true
+ },
+ resizableRelatedOptions = {
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true
+ };
+
+$.widget( "ui.dialog", {
+ version: "1.10.0",
+ options: {
+ appendTo: "body",
+ autoOpen: true,
+ buttons: [],
+ closeOnEscape: true,
+ closeText: "close",
+ dialogClass: "",
+ draggable: true,
+ hide: null,
+ height: "auto",
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 150,
+ minWidth: 150,
+ modal: false,
+ position: {
+ my: "center",
+ at: "center",
+ of: window,
+ collision: "fit",
+ // Ensure the titlebar is always visible
+ using: function( pos ) {
+ var topOffset = $( this ).css( pos ).offset().top;
+ if ( topOffset < 0 ) {
+ $( this ).css( "top", pos.top - topOffset );
+ }
+ }
+ },
+ resizable: true,
+ show: null,
+ title: null,
+ width: 300,
+
+ // callbacks
+ beforeClose: null,
+ close: null,
+ drag: null,
+ dragStart: null,
+ dragStop: null,
+ focus: null,
+ open: null,
+ resize: null,
+ resizeStart: null,
+ resizeStop: null
+ },
+
+ _create: function() {
+ this.originalCss = {
+ display: this.element[0].style.display,
+ width: this.element[0].style.width,
+ minHeight: this.element[0].style.minHeight,
+ maxHeight: this.element[0].style.maxHeight,
+ height: this.element[0].style.height
+ };
+ this.originalPosition = {
+ parent: this.element.parent(),
+ index: this.element.parent().children().index( this.element )
+ };
+ this.originalTitle = this.element.attr("title");
+ this.options.title = this.options.title || this.originalTitle;
+
+ this._createWrapper();
+
+ this.element
+ .show()
+ .removeAttr("title")
+ .addClass("ui-dialog-content ui-widget-content")
+ .appendTo( this.uiDialog );
+
+ this._createTitlebar();
+ this._createButtonPane();
+
+ if ( this.options.draggable && $.fn.draggable ) {
+ this._makeDraggable();
+ }
+ if ( this.options.resizable && $.fn.resizable ) {
+ this._makeResizable();
+ }
+
+ this._isOpen = false;
+ },
+
+ _init: function() {
+ if ( this.options.autoOpen ) {
+ this.open();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+ if ( element && (element.jquery || element.nodeType) ) {
+ return $( element );
+ }
+ return this.document.find( element || "body" ).eq( 0 );
+ },
+
+ _destroy: function() {
+ var next,
+ originalPosition = this.originalPosition;
+
+ this._destroyOverlay();
+
+ this.element
+ .removeUniqueId()
+ .removeClass("ui-dialog-content ui-widget-content")
+ .css( this.originalCss )
+ // Without detaching first, the following becomes really slow
+ .detach();
+
+ this.uiDialog.stop( true, true ).remove();
+
+ if ( this.originalTitle ) {
+ this.element.attr( "title", this.originalTitle );
+ }
+
+ next = originalPosition.parent.children().eq( originalPosition.index );
+ // Don't try to place the dialog next to itself (#8613)
+ if ( next.length && next[0] !== this.element[0] ) {
+ next.before( this.element );
+ } else {
+ originalPosition.parent.append( this.element );
+ }
+ },
+
+ widget: function() {
+ return this.uiDialog;
+ },
+
+ disable: $.noop,
+ enable: $.noop,
+
+ close: function( event ) {
+ var that = this;
+
+ if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+ return;
+ }
+
+ this._isOpen = false;
+ this._destroyOverlay();
+
+ if ( !this.opener.filter(":focusable").focus().length ) {
+ // Hiding a focused element doesn't trigger blur in WebKit
+ // so in case we have nothing to focus on, explicitly blur the active element
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
+ $( this.document[0].activeElement ).blur();
+ }
+
+ this._hide( this.uiDialog, this.options.hide, function() {
+ that._trigger( "close", event );
+ });
+ },
+
+ isOpen: function() {
+ return this._isOpen;
+ },
+
+ moveToTop: function() {
+ this._moveToTop();
+ },
+
+ _moveToTop: function( event, silent ) {
+ var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
+ if ( moved && !silent ) {
+ this._trigger( "focus", event );
+ }
+ return moved;
+ },
+
+ open: function() {
+ if ( this._isOpen ) {
+ if ( this._moveToTop() ) {
+ this._focusTabbable();
+ }
+ return;
+ }
+
+ this.opener = $( this.document[0].activeElement );
+
+ this._size();
+ this._position();
+ this._createOverlay();
+ this._moveToTop( null, true );
+ this._show( this.uiDialog, this.options.show );
+
+ this._focusTabbable();
+
+ this._isOpen = true;
+ this._trigger("open");
+ this._trigger("focus");
+ },
+
+ _focusTabbable: function() {
+ // Set focus to the first match:
+ // 1. First element inside the dialog matching [autofocus]
+ // 2. Tabbable element inside the content element
+ // 3. Tabbable element inside the buttonpane
+ // 4. The close button
+ // 5. The dialog itself
+ var hasFocus = this.element.find("[autofocus]");
+ if ( !hasFocus.length ) {
+ hasFocus = this.element.find(":tabbable");
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogButtonPane.find(":tabbable");
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialog;
+ }
+ hasFocus.eq( 0 ).focus();
+ },
+
+ _keepFocus: function( event ) {
+ function checkFocus() {
+ var activeElement = this.document[0].activeElement,
+ isActive = this.uiDialog[0] === activeElement ||
+ $.contains( this.uiDialog[0], activeElement );
+ if ( !isActive ) {
+ this._focusTabbable();
+ }
+ }
+ event.preventDefault();
+ checkFocus.call( this );
+ // support: IE
+ // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+ // so we check again later
+ this._delay( checkFocus );
+ },
+
+ _createWrapper: function() {
+ this.uiDialog = $("<div>")
+ .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+ this.options.dialogClass )
+ .hide()
+ .attr({
+ // Setting tabIndex makes the div focusable
+ tabIndex: -1,
+ role: "dialog"
+ })
+ .appendTo( this._appendTo() );
+
+ this._on( this.uiDialog, {
+ keydown: function( event ) {
+ if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE ) {
+ event.preventDefault();
+ this.close( event );
+ return;
+ }
+
+ // prevent tabbing out of dialogs
+ if ( event.keyCode !== $.ui.keyCode.TAB ) {
+ return;
+ }
+ var tabbables = this.uiDialog.find(":tabbable"),
+ first = tabbables.filter(":first"),
+ last = tabbables.filter(":last");
+
+ if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+ first.focus( 1 );
+ event.preventDefault();
+ } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+ last.focus( 1 );
+ event.preventDefault();
+ }
+ },
+ mousedown: function( event ) {
+ if ( this._moveToTop( event ) ) {
+ this._focusTabbable();
+ }
+ }
+ });
+
+ // We assume that any existing aria-describedby attribute means
+ // that the dialog content is marked up properly
+ // otherwise we brute force the content as the description
+ if ( !this.element.find("[aria-describedby]").length ) {
+ this.uiDialog.attr({
+ "aria-describedby": this.element.uniqueId().attr("id")
+ });
+ }
+ },
+
+ _createTitlebar: function() {
+ var uiDialogTitle;
+
+ this.uiDialogTitlebar = $("<div>")
+ .addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+ .prependTo( this.uiDialog );
+ this._on( this.uiDialogTitlebar, {
+ mousedown: function( event ) {
+ // Don't prevent click on close button (#8838)
+ // Focusing a dialog that is partially scrolled out of view
+ // causes the browser to scroll it into view, preventing the click event
+ if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
+ // Dialog isn't getting focus when dragging (#8063)
+ this.uiDialog.focus();
+ }
+ }
+ });
+
+ this.uiDialogTitlebarClose = $("<button></button>")
+ .button({
+ label: this.options.closeText,
+ icons: {
+ primary: "ui-icon-closethick"
+ },
+ text: false
+ })
+ .addClass("ui-dialog-titlebar-close")
+ .appendTo( this.uiDialogTitlebar );
+ this._on( this.uiDialogTitlebarClose, {
+ click: function( event ) {
+ event.preventDefault();
+ this.close( event );
+ }
+ });
+
+ uiDialogTitle = $("<span>")
+ .uniqueId()
+ .addClass("ui-dialog-title")
+ .prependTo( this.uiDialogTitlebar );
+ this._title( uiDialogTitle );
+
+ this.uiDialog.attr({
+ "aria-labelledby": uiDialogTitle.attr("id")
+ });
+ },
+
+ _title: function( title ) {
+ if ( !this.options.title ) {
+ title.html("&#160;");
+ }
+ title.text( this.options.title );
+ },
+
+ _createButtonPane: function() {
+ this.uiDialogButtonPane = $("<div>")
+ .addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+
+ this.uiButtonSet = $("<div>")
+ .addClass("ui-dialog-buttonset")
+ .appendTo( this.uiDialogButtonPane );
+
+ this._createButtons();
+ },
+
+ _createButtons: function() {
+ var that = this,
+ buttons = this.options.buttons;
+
+ // if we already have a button pane, remove it
+ this.uiDialogButtonPane.remove();
+ this.uiButtonSet.empty();
+
+ if ( $.isEmptyObject( buttons ) ) {
+ this.uiDialog.removeClass("ui-dialog-buttons");
+ return;
+ }
+
+ $.each( buttons, function( name, props ) {
+ var click, buttonOptions;
+ props = $.isFunction( props ) ?
+ { click: props, text: name } :
+ props;
+ // Default to a non-submitting button
+ props = $.extend( { type: "button" }, props );
+ // Change the context for the click callback to be the main element
+ click = props.click;
+ props.click = function() {
+ click.apply( that.element[0], arguments );
+ };
+ buttonOptions = {
+ icons: props.icons,
+ text: props.showText
+ };
+ delete props.icons;
+ delete props.showText;
+ $( "<button></button>", props )
+ .button( buttonOptions )
+ .appendTo( that.uiButtonSet );
+ });
+ this.uiDialog.addClass("ui-dialog-buttons");
+ this.uiDialogButtonPane.appendTo( this.uiDialog );
+ },
+
+ _makeDraggable: function() {
+ var that = this,
+ options = this.options;
+
+ function filteredUi( ui ) {
+ return {
+ position: ui.position,
+ offset: ui.offset
+ };
+ }
+
+ this.uiDialog.draggable({
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+ handle: ".ui-dialog-titlebar",
+ containment: "document",
+ start: function( event, ui ) {
+ $( this ).addClass("ui-dialog-dragging");
+ that._trigger( "dragStart", event, filteredUi( ui ) );
+ },
+ drag: function( event, ui ) {
+ that._trigger( "drag", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ options.position = [
+ ui.position.left - that.document.scrollLeft(),
+ ui.position.top - that.document.scrollTop()
+ ];
+ $( this ).removeClass("ui-dialog-dragging");
+ that._trigger( "dragStop", event, filteredUi( ui ) );
+ }
+ });
+ },
+
+ _makeResizable: function() {
+ var that = this,
+ options = this.options,
+ handles = options.resizable,
+ // .ui-resizable has position: relative defined in the stylesheet
+ // but dialogs have to use absolute or fixed positioning
+ position = this.uiDialog.css("position"),
+ resizeHandles = typeof handles === "string" ?
+ handles :
+ "n,e,s,w,se,sw,ne,nw";
+
+ function filteredUi( ui ) {
+ return {
+ originalPosition: ui.originalPosition,
+ originalSize: ui.originalSize,
+ position: ui.position,
+ size: ui.size
+ };
+ }
+
+ this.uiDialog.resizable({
+ cancel: ".ui-dialog-content",
+ containment: "document",
+ alsoResize: this.element,
+ maxWidth: options.maxWidth,
+ maxHeight: options.maxHeight,
+ minWidth: options.minWidth,
+ minHeight: this._minHeight(),
+ handles: resizeHandles,
+ start: function( event, ui ) {
+ $( this ).addClass("ui-dialog-resizing");
+ that._trigger( "resizeStart", event, filteredUi( ui ) );
+ },
+ resize: function( event, ui ) {
+ that._trigger( "resize", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ options.height = $( this ).height();
+ options.width = $( this ).width();
+ $( this ).removeClass("ui-dialog-resizing");
+ that._trigger( "resizeStop", event, filteredUi( ui ) );
+ }
+ })
+ .css( "position", position );
+ },
+
+ _minHeight: function() {
+ var options = this.options;
+
+ return options.height === "auto" ?
+ options.minHeight :
+ Math.min( options.minHeight, options.height );
+ },
+
+ _position: function() {
+ // Need to show the dialog to get the actual offset in the position plugin
+ var isVisible = this.uiDialog.is(":visible");
+ if ( !isVisible ) {
+ this.uiDialog.show();
+ }
+ this.uiDialog.position( this.options.position );
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ },
+
+ _setOptions: function( options ) {
+ var that = this,
+ resize = false,
+ resizableOptions = {};
+
+ $.each( options, function( key, value ) {
+ that._setOption( key, value );
+
+ if ( key in sizeRelatedOptions ) {
+ resize = true;
+ }
+ if ( key in resizableRelatedOptions ) {
+ resizableOptions[ key ] = value;
+ }
+ });
+
+ if ( resize ) {
+ this._size();
+ this._position();
+ }
+ if ( this.uiDialog.is(":data(ui-resizable)") ) {
+ this.uiDialog.resizable( "option", resizableOptions );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ /*jshint maxcomplexity:15*/
+ var isDraggable, isResizable,
+ uiDialog = this.uiDialog;
+
+ if ( key === "dialogClass" ) {
+ uiDialog
+ .removeClass( this.options.dialogClass )
+ .addClass( value );
+ }
+
+ if ( key === "disabled" ) {
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.uiDialog.appendTo( this._appendTo() );
+ }
+
+ if ( key === "buttons" ) {
+ this._createButtons();
+ }
+
+ if ( key === "closeText" ) {
+ this.uiDialogTitlebarClose.button({
+ // Ensure that we always pass a string
+ label: "" + value
+ });
+ }
+
+ if ( key === "draggable" ) {
+ isDraggable = uiDialog.is(":data(ui-draggable)");
+ if ( isDraggable && !value ) {
+ uiDialog.draggable("destroy");
+ }
+
+ if ( !isDraggable && value ) {
+ this._makeDraggable();
+ }
+ }
+
+ if ( key === "position" ) {
+ this._position();
+ }
+
+ if ( key === "resizable" ) {
+ // currently resizable, becoming non-resizable
+ isResizable = uiDialog.is(":data(ui-resizable)");
+ if ( isResizable && !value ) {
+ uiDialog.resizable("destroy");
+ }
+
+ // currently resizable, changing handles
+ if ( isResizable && typeof value === "string" ) {
+ uiDialog.resizable( "option", "handles", value );
+ }
+
+ // currently non-resizable, becoming resizable
+ if ( !isResizable && value !== false ) {
+ this._makeResizable();
+ }
+ }
+
+ if ( key === "title" ) {
+ this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
+ }
+ },
+
+ _size: function() {
+ // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+ // divs will both have width and height set, so we need to reset them
+ var nonContentHeight, minContentHeight, maxContentHeight,
+ options = this.options;
+
+ // Reset content sizing
+ this.element.show().css({
+ width: "auto",
+ minHeight: 0,
+ maxHeight: "none",
+ height: 0
+ });
+
+ if ( options.minWidth > options.width ) {
+ options.width = options.minWidth;
+ }
+
+ // reset wrapper sizing
+ // determine the height of all the non-content elements
+ nonContentHeight = this.uiDialog.css({
+ height: "auto",
+ width: options.width
+ })
+ .outerHeight();
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+ maxContentHeight = typeof options.maxHeight === "number" ?
+ Math.max( 0, options.maxHeight - nonContentHeight ) :
+ "none";
+
+ if ( options.height === "auto" ) {
+ this.element.css({
+ minHeight: minContentHeight,
+ maxHeight: maxContentHeight,
+ height: "auto"
+ });
+ } else {
+ this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+ }
+
+ if (this.uiDialog.is(":data(ui-resizable)") ) {
+ this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+ }
+ },
+
+ _createOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ if ( !$.ui.dialog.overlayInstances ) {
+ // Prevent use of anchors and inputs.
+ // We use a delay in case the overlay is created from an
+ // event that we're going to be cancelling. (#2804)
+ this._delay(function() {
+ // Handle .dialog().dialog("close") (#4065)
+ if ( $.ui.dialog.overlayInstances ) {
+ this._on( this.document, {
+ focusin: function( event ) {
+ if ( !$( event.target ).closest(".ui-dialog").length ) {
+ event.preventDefault();
+ $(".ui-dialog:visible:last .ui-dialog-content")
+ .data("ui-dialog")._focusTabbable();
+ }
+ }
+ });
+ }
+ });
+ }
+
+ this.overlay = $("<div>")
+ .addClass("ui-widget-overlay ui-front")
+ .appendTo( this.document[0].body );
+ this._on( this.overlay, {
+ mousedown: "_keepFocus"
+ });
+ $.ui.dialog.overlayInstances++;
+ },
+
+ _destroyOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ $.ui.dialog.overlayInstances--;
+ if ( !$.ui.dialog.overlayInstances ) {
+ this._off( this.document, "focusin" );
+ }
+ this.overlay.remove();
+ }
+});
+
+$.ui.dialog.overlayInstances = 0;
+
+// DEPRECATED
+if ( $.uiBackCompat !== false ) {
+ // position option with array notation
+ // just override with old implementation
+ $.widget( "ui.dialog", $.ui.dialog, {
+ _position: function() {
+ var position = this.options.position,
+ myAt = [],
+ offset = [ 0, 0 ],
+ isVisible;
+
+ if ( position ) {
+ if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+ myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
+ if ( myAt.length === 1 ) {
+ myAt[1] = myAt[0];
+ }
+
+ $.each( [ "left", "top" ], function( i, offsetPosition ) {
+ if ( +myAt[ i ] === myAt[ i ] ) {
+ offset[ i ] = myAt[ i ];
+ myAt[ i ] = offsetPosition;
+ }
+ });
+
+ position = {
+ my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+ myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+ at: myAt.join(" ")
+ };
+ }
+
+ position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
+ } else {
+ position = $.ui.dialog.prototype.options.position;
+ }
+
+ // need to show the dialog to get the actual offset in the position plugin
+ isVisible = this.uiDialog.is(":visible");
+ if ( !isVisible ) {
+ this.uiDialog.show();
+ }
+ this.uiDialog.position( position );
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ }
+ });
+}
+
+}( jQuery ) );
+(function( $, undefined ) {
+
+$.widget( "ui.menu", {
+ version: "1.10.0",
+ defaultElement: "<ul>",
+ delay: 300,
+ options: {
+ icons: {
+ submenu: "ui-icon-carat-1-e"
+ },
+ menus: "ul",
+ position: {
+ my: "left top",
+ at: "right top"
+ },
+ role: "menu",
+
+ // callbacks
+ blur: null,
+ focus: null,
+ select: null
+ },
+
+ _create: function() {
+ this.activeMenu = this.element;
+ // flag used to prevent firing of the click handler
+ // as the event bubbles up through nested menus
+ this.mouseHandled = false;
+ this.element
+ .uniqueId()
+ .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+ .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+ .attr({
+ role: this.options.role,
+ tabIndex: 0
+ })
+ // need to catch all clicks on disabled menu
+ // not possible through _on
+ .bind( "click" + this.eventNamespace, $.proxy(function( event ) {
+ if ( this.options.disabled ) {
+ event.preventDefault();
+ }
+ }, this ));
+
+ if ( this.options.disabled ) {
+ this.element
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ }
+
+ this._on({
+ // Prevent focus from sticking to links inside menu after clicking
+ // them (focus should always stay on UL during navigation).
+ "mousedown .ui-menu-item > a": function( event ) {
+ event.preventDefault();
+ },
+ "click .ui-state-disabled > a": function( event ) {
+ event.preventDefault();
+ },
+ "click .ui-menu-item:has(a)": function( event ) {
+ var target = $( event.target ).closest( ".ui-menu-item" );
+ if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+ this.mouseHandled = true;
+
+ this.select( event );
+ // Open submenu on click
+ if ( target.has( ".ui-menu" ).length ) {
+ this.expand( event );
+ } else if ( !this.element.is( ":focus" ) ) {
+ // Redirect focus to the menu
+ this.element.trigger( "focus", [ true ] );
+
+ // If the active item is on the top level, let it stay active.
+ // Otherwise, blur the active item since it is no longer visible.
+ if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+ clearTimeout( this.timer );
+ }
+ }
+ }
+ },
+ "mouseenter .ui-menu-item": function( event ) {
+ var target = $( event.currentTarget );
+ // Remove ui-state-active class from siblings of the newly focused menu item
+ // to avoid a jump caused by adjacent elements both having a class with a border
+ target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
+ this.focus( event, target );
+ },
+ mouseleave: "collapseAll",
+ "mouseleave .ui-menu": "collapseAll",
+ focus: function( event, keepActiveItem ) {
+ // If there's already an active item, keep it active
+ // If not, activate the first item
+ var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+
+ if ( !keepActiveItem ) {
+ this.focus( event, item );
+ }
+ },
+ blur: function( event ) {
+ this._delay(function() {
+ if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+ this.collapseAll( event );
+ }
+ });
+ },
+ keydown: "_keydown"
+ });
+
+ this.refresh();
+
+ // Clicks outside of a menu collapse any open menus
+ this._on( this.document, {
+ click: function( event ) {
+ if ( !$( event.target ).closest( ".ui-menu" ).length ) {
+ this.collapseAll( event );
+ }
+
+ // Reset the mouseHandled flag
+ this.mouseHandled = false;
+ }
+ });
+ },
+
+ _destroy: function() {
+ // Destroy (sub)menus
+ this.element
+ .removeAttr( "aria-activedescendant" )
+ .find( ".ui-menu" ).addBack()
+ .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .show();
+
+ // Destroy menu items
+ this.element.find( ".ui-menu-item" )
+ .removeClass( "ui-menu-item" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-disabled" )
+ .children( "a" )
+ .removeUniqueId()
+ .removeClass( "ui-corner-all ui-state-hover" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-haspopup" )
+ .children().each( function() {
+ var elem = $( this );
+ if ( elem.data( "ui-menu-submenu-carat" ) ) {
+ elem.remove();
+ }
+ });
+
+ // Destroy menu dividers
+ this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+ },
+
+ _keydown: function( event ) {
+ /*jshint maxcomplexity:20*/
+ var match, prev, character, skip, regex,
+ preventDefault = true;
+
+ function escape( value ) {
+ return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.PAGE_UP:
+ this.previousPage( event );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ this.nextPage( event );
+ break;
+ case $.ui.keyCode.HOME:
+ this._move( "first", "first", event );
+ break;
+ case $.ui.keyCode.END:
+ this._move( "last", "last", event );
+ break;
+ case $.ui.keyCode.UP:
+ this.previous( event );
+ break;
+ case $.ui.keyCode.DOWN:
+ this.next( event );
+ break;
+ case $.ui.keyCode.LEFT:
+ this.collapse( event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+ this.expand( event );
+ }
+ break;
+ case $.ui.keyCode.ENTER:
+ case $.ui.keyCode.SPACE:
+ this._activate( event );
+ break;
+ case $.ui.keyCode.ESCAPE:
+ this.collapse( event );
+ break;
+ default:
+ preventDefault = false;
+ prev = this.previousFilter || "";
+ character = String.fromCharCode( event.keyCode );
+ skip = false;
+
+ clearTimeout( this.filterTimer );
+
+ if ( character === prev ) {
+ skip = true;
+ } else {
+ character = prev + character;
+ }
+
+ regex = new RegExp( "^" + escape( character ), "i" );
+ match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+ return regex.test( $( this ).children( "a" ).text() );
+ });
+ match = skip && match.index( this.active.next() ) !== -1 ?
+ this.active.nextAll( ".ui-menu-item" ) :
+ match;
+
+ // If no matches on the current filter, reset to the last character pressed
+ // to move down the menu to the first item that starts with that character
+ if ( !match.length ) {
+ character = String.fromCharCode( event.keyCode );
+ regex = new RegExp( "^" + escape( character ), "i" );
+ match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+ return regex.test( $( this ).children( "a" ).text() );
+ });
+ }
+
+ if ( match.length ) {
+ this.focus( event, match );
+ if ( match.length > 1 ) {
+ this.previousFilter = character;
+ this.filterTimer = this._delay(function() {
+ delete this.previousFilter;
+ }, 1000 );
+ } else {
+ delete this.previousFilter;
+ }
+ } else {
+ delete this.previousFilter;
+ }
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ },
+
+ _activate: function( event ) {
+ if ( !this.active.is( ".ui-state-disabled" ) ) {
+ if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
+ this.expand( event );
+ } else {
+ this.select( event );
+ }
+ }
+ },
+
+ refresh: function() {
+ var menus,
+ icon = this.options.icons.submenu,
+ submenus = this.element.find( this.options.menus );
+
+ // Initialize nested menus
+ submenus.filter( ":not(.ui-menu)" )
+ .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+ .hide()
+ .attr({
+ role: this.options.role,
+ "aria-hidden": "true",
+ "aria-expanded": "false"
+ })
+ .each(function() {
+ var menu = $( this ),
+ item = menu.prev( "a" ),
+ submenuCarat = $( "<span>" )
+ .addClass( "ui-menu-icon ui-icon " + icon )
+ .data( "ui-menu-submenu-carat", true );
+
+ item
+ .attr( "aria-haspopup", "true" )
+ .prepend( submenuCarat );
+ menu.attr( "aria-labelledby", item.attr( "id" ) );
+ });
+
+ menus = submenus.add( this.element );
+
+ // Don't refresh list items that are already adapted
+ menus.children( ":not(.ui-menu-item):has(a)" )
+ .addClass( "ui-menu-item" )
+ .attr( "role", "presentation" )
+ .children( "a" )
+ .uniqueId()
+ .addClass( "ui-corner-all" )
+ .attr({
+ tabIndex: -1,
+ role: this._itemRole()
+ });
+
+ // Initialize unlinked menu-items containing spaces and/or dashes only as dividers
+ menus.children( ":not(.ui-menu-item)" ).each(function() {
+ var item = $( this );
+ // hyphen, em dash, en dash
+ if ( !/[^\-—–\s]/.test( item.text() ) ) {
+ item.addClass( "ui-widget-content ui-menu-divider" );
+ }
+ });
+
+ // Add aria-disabled attribute to any disabled menu item
+ menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+ // If the active item has been removed, blur the menu
+ if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ this.blur();
+ }
+ },
+
+ _itemRole: function() {
+ return {
+ menu: "menuitem",
+ listbox: "option"
+ }[ this.options.role ];
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.element.find( ".ui-menu-icon" )
+ .removeClass( this.options.icons.submenu )
+ .addClass( value.submenu );
+ }
+ this._super( key, value );
+ },
+
+ focus: function( event, item ) {
+ var nested, focused;
+ this.blur( event, event && event.type === "focus" );
+
+ this._scrollIntoView( item );
+
+ this.active = item.first();
+ focused = this.active.children( "a" ).addClass( "ui-state-focus" );
+ // Only update aria-activedescendant if there's a role
+ // otherwise we assume focus is managed elsewhere
+ if ( this.options.role ) {
+ this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+ }
+
+ // Highlight active parent menu item, if any
+ this.active
+ .parent()
+ .closest( ".ui-menu-item" )
+ .children( "a:first" )
+ .addClass( "ui-state-active" );
+
+ if ( event && event.type === "keydown" ) {
+ this._close();
+ } else {
+ this.timer = this._delay(function() {
+ this._close();
+ }, this.delay );
+ }
+
+ nested = item.children( ".ui-menu" );
+ if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
+ this._startOpening(nested);
+ }
+ this.activeMenu = item.parent();
+
+ this._trigger( "focus", event, { item: item } );
+ },
+
+ _scrollIntoView: function( item ) {
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+ if ( this._hasScroll() ) {
+ borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+ paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+ scroll = this.activeMenu.scrollTop();
+ elementHeight = this.activeMenu.height();
+ itemHeight = item.height();
+
+ if ( offset < 0 ) {
+ this.activeMenu.scrollTop( scroll + offset );
+ } else if ( offset + itemHeight > elementHeight ) {
+ this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+ }
+ }
+ },
+
+ blur: function( event, fromFocus ) {
+ if ( !fromFocus ) {
+ clearTimeout( this.timer );
+ }
+
+ if ( !this.active ) {
+ return;
+ }
+
+ this.active.children( "a" ).removeClass( "ui-state-focus" );
+ this.active = null;
+
+ this._trigger( "blur", event, { item: this.active } );
+ },
+
+ _startOpening: function( submenu ) {
+ clearTimeout( this.timer );
+
+ // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+ // shift in the submenu position when mousing over the carat icon
+ if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+ return;
+ }
+
+ this.timer = this._delay(function() {
+ this._close();
+ this._open( submenu );
+ }, this.delay );
+ },
+
+ _open: function( submenu ) {
+ var position = $.extend({
+ of: this.active
+ }, this.options.position );
+
+ clearTimeout( this.timer );
+ this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+ .hide()
+ .attr( "aria-hidden", "true" );
+
+ submenu
+ .show()
+ .removeAttr( "aria-hidden" )
+ .attr( "aria-expanded", "true" )
+ .position( position );
+ },
+
+ collapseAll: function( event, all ) {
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ // If we were passed an event, look for the submenu that contains the event
+ var currentMenu = all ? this.element :
+ $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+ // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+ if ( !currentMenu.length ) {
+ currentMenu = this.element;
+ }
+
+ this._close( currentMenu );
+
+ this.blur( event );
+ this.activeMenu = currentMenu;
+ }, this.delay );
+ },
+
+ // With no arguments, closes the currently active menu - if nothing is active
+ // it closes all menus. If passed an argument, it will search for menus BELOW
+ _close: function( startMenu ) {
+ if ( !startMenu ) {
+ startMenu = this.active ? this.active.parent() : this.element;
+ }
+
+ startMenu
+ .find( ".ui-menu" )
+ .hide()
+ .attr( "aria-hidden", "true" )
+ .attr( "aria-expanded", "false" )
+ .end()
+ .find( "a.ui-state-active" )
+ .removeClass( "ui-state-active" );
+ },
+
+ collapse: function( event ) {
+ var newItem = this.active &&
+ this.active.parent().closest( ".ui-menu-item", this.element );
+ if ( newItem && newItem.length ) {
+ this._close();
+ this.focus( event, newItem );
+ }
+ },
+
+ expand: function( event ) {
+ var newItem = this.active &&
+ this.active
+ .children( ".ui-menu " )
+ .children( ".ui-menu-item" )
+ .first();
+
+ if ( newItem && newItem.length ) {
+ this._open( newItem.parent() );
+
+ // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+ this._delay(function() {
+ this.focus( event, newItem );
+ });
+ }
+ },
+
+ next: function( event ) {
+ this._move( "next", "first", event );
+ },
+
+ previous: function( event ) {
+ this._move( "prev", "last", event );
+ },
+
+ isFirstItem: function() {
+ return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+ },
+
+ isLastItem: function() {
+ return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+ },
+
+ _move: function( direction, filter, event ) {
+ var next;
+ if ( this.active ) {
+ if ( direction === "first" || direction === "last" ) {
+ next = this.active
+ [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+ .eq( -1 );
+ } else {
+ next = this.active
+ [ direction + "All" ]( ".ui-menu-item" )
+ .eq( 0 );
+ }
+ }
+ if ( !next || !next.length || !this.active ) {
+ next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
+ }
+
+ this.focus( event, next );
+ },
+
+ nextPage: function( event ) {
+ var item, base, height;
+
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isLastItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.nextAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base - height < 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.children( ".ui-menu-item" )
+ [ !this.active ? "first" : "last" ]() );
+ }
+ },
+
+ previousPage: function( event ) {
+ var item, base, height;
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isFirstItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.prevAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base + height > 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+ }
+ },
+
+ _hasScroll: function() {
+ return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+ },
+
+ select: function( event ) {
+ // TODO: It should never be possible to not have an active item at this
+ // point, but the tests don't trigger mouseenter before click.
+ this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+ var ui = { item: this.active };
+ if ( !this.active.has( ".ui-menu" ).length ) {
+ this.collapseAll( event, true );
+ }
+ this._trigger( "select", event, ui );
+ }
+});
+
+}( jQuery ));
+(function( $, undefined ) {
+
+$.widget( "ui.progressbar", {
+ version: "1.10.0",
+ options: {
+ max: 100,
+ value: 0,
+
+ change: null,
+ complete: null
+ },
+
+ min: 0,
+
+ _create: function() {
+ // Constrain initial value
+ this.oldValue = this.options.value = this._constrainedValue();
+
+ this.element
+ .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .attr({
+ // Only set static values, aria-valuenow and aria-valuemax are
+ // set inside _refreshValue()
+ role: "progressbar",
+ "aria-valuemin": this.min
+ });
+
+ this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+ .appendTo( this.element );
+
+ this._refreshValue();
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+
+ this.valueDiv.remove();
+ },
+
+ value: function( newValue ) {
+ if ( newValue === undefined ) {
+ return this.options.value;
+ }
+
+ this.options.value = this._constrainedValue( newValue );
+ this._refreshValue();
+ },
+
+ _constrainedValue: function( newValue ) {
+ if ( newValue === undefined ) {
+ newValue = this.options.value;
+ }
+
+ this.indeterminate = newValue === false;
+
+ // sanitize value
+ if ( typeof newValue !== "number" ) {
+ newValue = 0;
+ }
+
+ return this.indeterminate ? false :
+ Math.min( this.options.max, Math.max( this.min, newValue ) );
+ },
+
+ _setOptions: function( options ) {
+ // Ensure "value" option is set after other values (like max)
+ var value = options.value;
+ delete options.value;
+
+ this._super( options );
+
+ this.options.value = this._constrainedValue( value );
+ this._refreshValue();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "max" ) {
+ // Don't allow a max less than min
+ value = Math.max( this.min, value );
+ }
+
+ this._super( key, value );
+ },
+
+ _percentage: function() {
+ return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+ },
+
+ _refreshValue: function() {
+ var value = this.options.value,
+ percentage = this._percentage();
+
+ this.valueDiv
+ .toggle( this.indeterminate || value > this.min )
+ .toggleClass( "ui-corner-right", value === this.options.max )
+ .width( percentage.toFixed(0) + "%" );
+
+ this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+
+ if ( this.indeterminate ) {
+ this.element.removeAttr( "aria-valuenow" );
+ if ( !this.overlayDiv ) {
+ this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+ }
+ } else {
+ this.element.attr({
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": value
+ });
+ if ( this.overlayDiv ) {
+ this.overlayDiv.remove();
+ this.overlayDiv = null;
+ }
+ }
+
+ if ( this.oldValue !== value ) {
+ this.oldValue = value;
+ this._trigger( "change" );
+ }
+ if ( value === this.options.max ) {
+ this._trigger( "complete" );
+ }
+ }
+});
+
+})( jQuery );
+(function( $, undefined ) {
+
+// number of pages in a slider
+// (how many times can you page up/down to go through the whole range)
+var numPages = 5;
+
+$.widget( "ui.slider", $.ui.mouse, {
+ version: "1.10.0",
+ widgetEventPrefix: "slide",
+
+ options: {
+ animate: false,
+ distance: 0,
+ max: 100,
+ min: 0,
+ orientation: "horizontal",
+ range: false,
+ step: 1,
+ value: 0,
+ values: null,
+
+ // callbacks
+ change: null,
+ slide: null,
+ start: null,
+ stop: null
+ },
+
+ _create: function() {
+ var i, handleCount,
+ o = this.options,
+ existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+ handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+ handles = [];
+
+ this._keySliding = false;
+ this._mouseSliding = false;
+ this._animateOff = true;
+ this._handleIndex = null;
+ this._detectOrientation();
+ this._mouseInit();
+
+ this.element
+ .addClass( "ui-slider" +
+ " ui-slider-" + this.orientation +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all");
+
+ this.range = $([]);
+
+ if ( o.range ) {
+ if ( o.range === true ) {
+ if ( !o.values ) {
+ o.values = [ this._valueMin(), this._valueMin() ];
+ } else if ( o.values.length && o.values.length !== 2 ) {
+ o.values = [ o.values[0], o.values[0] ];
+ } else if ( $.isArray( o.values ) ) {
+ o.values = o.values.slice(0);
+ }
+ }
+
+ this.range = $( "<div></div>" )
+ .appendTo( this.element )
+ .addClass( "ui-slider-range" +
+ // note: this isn't the most fittingly semantic framework class for this element,
+ // but worked best visually with a variety of themes
+ " ui-widget-header" +
+ ( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) );
+ }
+
+ handleCount = ( o.values && o.values.length ) || 1;
+
+ for ( i = existingHandles.length; i < handleCount; i++ ) {
+ handles.push( handle );
+ }
+
+ this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+
+ this.handle = this.handles.eq( 0 );
+
+ this.handles.add( this.range ).filter( "a" )
+ .click(function( event ) {
+ event.preventDefault();
+ })
+ .mouseenter(function() {
+ if ( !o.disabled ) {
+ $( this ).addClass( "ui-state-hover" );
+ }
+ })
+ .mouseleave(function() {
+ $( this ).removeClass( "ui-state-hover" );
+ })
+ .focus(function() {
+ if ( !o.disabled ) {
+ $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" );
+ $( this ).addClass( "ui-state-focus" );
+ } else {
+ $( this ).blur();
+ }
+ })
+ .blur(function() {
+ $( this ).removeClass( "ui-state-focus" );
+ });
+
+ this.handles.each(function( i ) {
+ $( this ).data( "ui-slider-handle-index", i );
+ });
+
+ this._setOption( "disabled", o.disabled );
+
+ this._on( this.handles, this._handleEvents );
+
+ this._refreshValue();
+
+ this._animateOff = false;
+ },
+
+ _destroy: function() {
+ this.handles.remove();
+ this.range.remove();
+
+ this.element
+ .removeClass( "ui-slider" +
+ " ui-slider-horizontal" +
+ " ui-slider-vertical" +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all" );
+
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function( event ) {
+ var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+ that = this,
+ o = this.options;
+
+ if ( o.disabled ) {
+ return false;
+ }
+
+ this.elementSize = {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight()
+ };
+ this.elementOffset = this.element.offset();
+
+ position = { x: event.pageX, y: event.pageY };
+ normValue = this._normValueFromMouse( position );
+ distance = this._valueMax() - this._valueMin() + 1;
+ this.handles.each(function( i ) {
+ var thisDistance = Math.abs( normValue - that.values(i) );
+ if (( distance > thisDistance ) ||
+ ( distance === thisDistance &&
+ (i === that._lastChangedValue || that.values(i) === o.min ))) {
+ distance = thisDistance;
+ closestHandle = $( this );
+ index = i;
+ }
+ });
+
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return false;
+ }
+ this._mouseSliding = true;
+
+ this._handleIndex = index;
+
+ closestHandle
+ .addClass( "ui-state-active" )
+ .focus();
+
+ offset = closestHandle.offset();
+ mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+ this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+ left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+ top: event.pageY - offset.top -
+ ( closestHandle.height() / 2 ) -
+ ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+ ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+ ( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+ };
+
+ if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+ this._slide( event, index, normValue );
+ }
+ this._animateOff = true;
+ return true;
+ },
+
+ _mouseStart: function() {
+ return true;
+ },
+
+ _mouseDrag: function( event ) {
+ var position = { x: event.pageX, y: event.pageY },
+ normValue = this._normValueFromMouse( position );
+
+ this._slide( event, this._handleIndex, normValue );
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+ this.handles.removeClass( "ui-state-active" );
+ this._mouseSliding = false;
+
+ this._stop( event, this._handleIndex );
+ this._change( event, this._handleIndex );
+
+ this._handleIndex = null;
+ this._clickOffset = null;
+ this._animateOff = false;
+
+ return false;
+ },
+
+ _detectOrientation: function() {
+ this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+ },
+
+ _normValueFromMouse: function( position ) {
+ var pixelTotal,
+ pixelMouse,
+ percentMouse,
+ valueTotal,
+ valueMouse;
+
+ if ( this.orientation === "horizontal" ) {
+ pixelTotal = this.elementSize.width;
+ pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+ } else {
+ pixelTotal = this.elementSize.height;
+ pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+ }
+
+ percentMouse = ( pixelMouse / pixelTotal );
+ if ( percentMouse > 1 ) {
+ percentMouse = 1;
+ }
+ if ( percentMouse < 0 ) {
+ percentMouse = 0;
+ }
+ if ( this.orientation === "vertical" ) {
+ percentMouse = 1 - percentMouse;
+ }
+
+ valueTotal = this._valueMax() - this._valueMin();
+ valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+ return this._trimAlignValue( valueMouse );
+ },
+
+ _start: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+ return this._trigger( "start", event, uiHash );
+ },
+
+ _slide: function( event, index, newVal ) {
+ var otherVal,
+ newValues,
+ allowed;
+
+ if ( this.options.values && this.options.values.length ) {
+ otherVal = this.values( index ? 0 : 1 );
+
+ if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+ ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+ ) {
+ newVal = otherVal;
+ }
+
+ if ( newVal !== this.values( index ) ) {
+ newValues = this.values();
+ newValues[ index ] = newVal;
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal,
+ values: newValues
+ } );
+ otherVal = this.values( index ? 0 : 1 );
+ if ( allowed !== false ) {
+ this.values( index, newVal, true );
+ }
+ }
+ } else {
+ if ( newVal !== this.value() ) {
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal
+ } );
+ if ( allowed !== false ) {
+ this.value( newVal );
+ }
+ }
+ }
+ },
+
+ _stop: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ this._trigger( "stop", event, uiHash );
+ },
+
+ _change: function( event, index ) {
+ if ( !this._keySliding && !this._mouseSliding ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ //store the last changed value index for reference when handles overlap
+ this._lastChangedValue = index;
+
+ this._trigger( "change", event, uiHash );
+ }
+ },
+
+ value: function( newValue ) {
+ if ( arguments.length ) {
+ this.options.value = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, 0 );
+ return;
+ }
+
+ return this._value();
+ },
+
+ values: function( index, newValue ) {
+ var vals,
+ newValues,
+ i;
+
+ if ( arguments.length > 1 ) {
+ this.options.values[ index ] = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, index );
+ return;
+ }
+
+ if ( arguments.length ) {
+ if ( $.isArray( arguments[ 0 ] ) ) {
+ vals = this.options.values;
+ newValues = arguments[ 0 ];
+ for ( i = 0; i < vals.length; i += 1 ) {
+ vals[ i ] = this._trimAlignValue( newValues[ i ] );
+ this._change( null, i );
+ }
+ this._refreshValue();
+ } else {
+ if ( this.options.values && this.options.values.length ) {
+ return this._values( index );
+ } else {
+ return this.value();
+ }
+ }
+ } else {
+ return this._values();
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var i,
+ valsLength = 0;
+
+ if ( $.isArray( this.options.values ) ) {
+ valsLength = this.options.values.length;
+ }
+
+ $.Widget.prototype._setOption.apply( this, arguments );
+
+ switch ( key ) {
+ case "disabled":
+ if ( value ) {
+ this.handles.filter( ".ui-state-focus" ).blur();
+ this.handles.removeClass( "ui-state-hover" );
+ this.handles.prop( "disabled", true );
+ } else {
+ this.handles.prop( "disabled", false );
+ }
+ break;
+ case "orientation":
+ this._detectOrientation();
+ this.element
+ .removeClass( "ui-slider-horizontal ui-slider-vertical" )
+ .addClass( "ui-slider-" + this.orientation );
+ this._refreshValue();
+ break;
+ case "value":
+ this._animateOff = true;
+ this._refreshValue();
+ this._change( null, 0 );
+ this._animateOff = false;
+ break;
+ case "values":
+ this._animateOff = true;
+ this._refreshValue();
+ for ( i = 0; i < valsLength; i += 1 ) {
+ this._change( null, i );
+ }
+ this._animateOff = false;
+ break;
+ case "min":
+ case "max":
+ this._animateOff = true;
+ this._refreshValue();
+ this._animateOff = false;
+ break;
+ }
+ },
+
+ //internal value getter
+ // _value() returns value trimmed by min and max, aligned by step
+ _value: function() {
+ var val = this.options.value;
+ val = this._trimAlignValue( val );
+
+ return val;
+ },
+
+ //internal values getter
+ // _values() returns array of values trimmed by min and max, aligned by step
+ // _values( index ) returns single value trimmed by min and max, aligned by step
+ _values: function( index ) {
+ var val,
+ vals,
+ i;
+
+ if ( arguments.length ) {
+ val = this.options.values[ index ];
+ val = this._trimAlignValue( val );
+
+ return val;
+ } else {
+ // .slice() creates a copy of the array
+ // this copy gets trimmed by min and max and then returned
+ vals = this.options.values.slice();
+ for ( i = 0; i < vals.length; i+= 1) {
+ vals[ i ] = this._trimAlignValue( vals[ i ] );
+ }
+
+ return vals;
+ }
+ },
+
+ // returns the step-aligned value that val is closest to, between (inclusive) min and max
+ _trimAlignValue: function( val ) {
+ if ( val <= this._valueMin() ) {
+ return this._valueMin();
+ }
+ if ( val >= this._valueMax() ) {
+ return this._valueMax();
+ }
+ var step = ( this.options.step > 0 ) ? this.options.step : 1,
+ valModStep = (val - this._valueMin()) % step,
+ alignValue = val - valModStep;
+
+ if ( Math.abs(valModStep) * 2 >= step ) {
+ alignValue += ( valModStep > 0 ) ? step : ( -step );
+ }
+
+ // Since JavaScript has problems with large floats, round
+ // the final value to 5 digits after the decimal point (see #4124)
+ return parseFloat( alignValue.toFixed(5) );
+ },
+
+ _valueMin: function() {
+ return this.options.min;
+ },
+
+ _valueMax: function() {
+ return this.options.max;
+ },
+
+ _refreshValue: function() {
+ var lastValPercent, valPercent, value, valueMin, valueMax,
+ oRange = this.options.range,
+ o = this.options,
+ that = this,
+ animate = ( !this._animateOff ) ? o.animate : false,
+ _set = {};
+
+ if ( this.options.values && this.options.values.length ) {
+ this.handles.each(function( i ) {
+ valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+ _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+ if ( that.options.range === true ) {
+ if ( that.orientation === "horizontal" ) {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ } else {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ }
+ lastValPercent = valPercent;
+ });
+ } else {
+ value = this.value();
+ valueMin = this._valueMin();
+ valueMax = this._valueMax();
+ valPercent = ( valueMax !== valueMin ) ?
+ ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+ 0;
+ _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+ if ( oRange === "min" && this.orientation === "horizontal" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "horizontal" ) {
+ this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ if ( oRange === "min" && this.orientation === "vertical" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "vertical" ) {
+ this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ },
+
+ _handleEvents: {
+ keydown: function( event ) {
+ /*jshint maxcomplexity:25*/
+ var allowed, curVal, newVal, step,
+ index = $( event.target ).data( "ui-slider-handle-index" );
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_UP:
+ case $.ui.keyCode.PAGE_DOWN:
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ event.preventDefault();
+ if ( !this._keySliding ) {
+ this._keySliding = true;
+ $( event.target ).addClass( "ui-state-active" );
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return;
+ }
+ }
+ break;
+ }
+
+ step = this.options.step;
+ if ( this.options.values && this.options.values.length ) {
+ curVal = newVal = this.values( index );
+ } else {
+ curVal = newVal = this.value();
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ newVal = this._valueMin();
+ break;
+ case $.ui.keyCode.END:
+ newVal = this._valueMax();
+ break;
+ case $.ui.keyCode.PAGE_UP:
+ newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ if ( curVal === this._valueMax() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal + step );
+ break;
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ if ( curVal === this._valueMin() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal - step );
+ break;
+ }
+
+ this._slide( event, index, newVal );
+ },
+ keyup: function( event ) {
+ var index = $( event.target ).data( "ui-slider-handle-index" );
+
+ if ( this._keySliding ) {
+ this._keySliding = false;
+ this._stop( event, index );
+ this._change( event, index );
+ $( event.target ).removeClass( "ui-state-active" );
+ }
+ }
+ }
+
+});
+
+}(jQuery));
+(function( $ ) {
+
+function modifier( fn ) {
+ return function() {
+ var previous = this.element.val();
+ fn.apply( this, arguments );
+ this._refresh();
+ if ( previous !== this.element.val() ) {
+ this._trigger( "change" );
+ }
+ };
+}
+
+$.widget( "ui.spinner", {
+ version: "1.10.0",
+ defaultElement: "<input>",
+ widgetEventPrefix: "spin",
+ options: {
+ culture: null,
+ icons: {
+ down: "ui-icon-triangle-1-s",
+ up: "ui-icon-triangle-1-n"
+ },
+ incremental: true,
+ max: null,
+ min: null,
+ numberFormat: null,
+ page: 10,
+ step: 1,
+
+ change: null,
+ spin: null,
+ start: null,
+ stop: null
+ },
+
+ _create: function() {
+ // handle string values that need to be parsed
+ this._setOption( "max", this.options.max );
+ this._setOption( "min", this.options.min );
+ this._setOption( "step", this.options.step );
+
+ // format the value, but don't constrain
+ this._value( this.element.val(), true );
+
+ this._draw();
+ this._on( this._events );
+ this._refresh();
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ });
+ },
+
+ _getCreateOptions: function() {
+ var options = {},
+ element = this.element;
+
+ $.each( [ "min", "max", "step" ], function( i, option ) {
+ var value = element.attr( option );
+ if ( value !== undefined && value.length ) {
+ options[ option ] = value;
+ }
+ });
+
+ return options;
+ },
+
+ _events: {
+ keydown: function( event ) {
+ if ( this._start( event ) && this._keydown( event ) ) {
+ event.preventDefault();
+ }
+ },
+ keyup: "_stop",
+ focus: function() {
+ this.previous = this.element.val();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ this._refresh();
+ if ( this.previous !== this.element.val() ) {
+ this._trigger( "change", event );
+ }
+ },
+ mousewheel: function( event, delta ) {
+ if ( !delta ) {
+ return;
+ }
+ if ( !this.spinning && !this._start( event ) ) {
+ return false;
+ }
+
+ this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+ clearTimeout( this.mousewheelTimer );
+ this.mousewheelTimer = this._delay(function() {
+ if ( this.spinning ) {
+ this._stop( event );
+ }
+ }, 100 );
+ event.preventDefault();
+ },
+ "mousedown .ui-spinner-button": function( event ) {
+ var previous;
+
+ // We never want the buttons to have focus; whenever the user is
+ // interacting with the spinner, the focus should be on the input.
+ // If the input is focused then this.previous is properly set from
+ // when the input first received focus. If the input is not focused
+ // then we need to set this.previous based on the value before spinning.
+ previous = this.element[0] === this.document[0].activeElement ?
+ this.previous : this.element.val();
+ function checkFocus() {
+ var isActive = this.element[0] === this.document[0].activeElement;
+ if ( !isActive ) {
+ this.element.focus();
+ this.previous = previous;
+ // support: IE
+ // IE sets focus asynchronously, so we need to check if focus
+ // moved off of the input because the user clicked on the button.
+ this._delay(function() {
+ this.previous = previous;
+ });
+ }
+ }
+
+ // ensure focus is on (or stays on) the text field
+ event.preventDefault();
+ checkFocus.call( this );
+
+ // support: IE
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ // and check (again) if focus moved off of the input.
+ this.cancelBlur = true;
+ this._delay(function() {
+ delete this.cancelBlur;
+ checkFocus.call( this );
+ });
+
+ if ( this._start( event ) === false ) {
+ return;
+ }
+
+ this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+ },
+ "mouseup .ui-spinner-button": "_stop",
+ "mouseenter .ui-spinner-button": function( event ) {
+ // button will add ui-state-active if mouse was down while mouseleave and kept down
+ if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+ return;
+ }
+
+ if ( this._start( event ) === false ) {
+ return false;
+ }
+ this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+ },
+ // TODO: do we really want to consider this a stop?
+ // shouldn't we just stop the repeater and wait until mouseup before
+ // we trigger the stop event?
+ "mouseleave .ui-spinner-button": "_stop"
+ },
+
+ _draw: function() {
+ var uiSpinner = this.uiSpinner = this.element
+ .addClass( "ui-spinner-input" )
+ .attr( "autocomplete", "off" )
+ .wrap( this._uiSpinnerHtml() )
+ .parent()
+ // add buttons
+ .append( this._buttonHtml() );
+
+ this.element.attr( "role", "spinbutton" );
+
+ // button bindings
+ this.buttons = uiSpinner.find( ".ui-spinner-button" )
+ .attr( "tabIndex", -1 )
+ .button()
+ .removeClass( "ui-corner-all" );
+
+ // IE 6 doesn't understand height: 50% for the buttons
+ // unless the wrapper has an explicit height
+ if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+ uiSpinner.height() > 0 ) {
+ uiSpinner.height( uiSpinner.height() );
+ }
+
+ // disable spinner if element was already disabled
+ if ( this.options.disabled ) {
+ this.disable();
+ }
+ },
+
+ _keydown: function( event ) {
+ var options = this.options,
+ keyCode = $.ui.keyCode;
+
+ switch ( event.keyCode ) {
+ case keyCode.UP:
+ this._repeat( null, 1, event );
+ return true;
+ case keyCode.DOWN:
+ this._repeat( null, -1, event );
+ return true;
+ case keyCode.PAGE_UP:
+ this._repeat( null, options.page, event );
+ return true;
+ case keyCode.PAGE_DOWN:
+ this._repeat( null, -options.page, event );
+ return true;
+ }
+
+ return false;
+ },
+
+ _uiSpinnerHtml: function() {
+ return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+ },
+
+ _buttonHtml: function() {
+ return "" +
+ "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+ "<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+ "</a>" +
+ "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+ "<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+ "</a>";
+ },
+
+ _start: function( event ) {
+ if ( !this.spinning && this._trigger( "start", event ) === false ) {
+ return false;
+ }
+
+ if ( !this.counter ) {
+ this.counter = 1;
+ }
+ this.spinning = true;
+ return true;
+ },
+
+ _repeat: function( i, steps, event ) {
+ i = i || 500;
+
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ this._repeat( 40, steps, event );
+ }, i );
+
+ this._spin( steps * this.options.step, event );
+ },
+
+ _spin: function( step, event ) {
+ var value = this.value() || 0;
+
+ if ( !this.counter ) {
+ this.counter = 1;
+ }
+
+ value = this._adjustValue( value + step * this._increment( this.counter ) );
+
+ if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+ this._value( value );
+ this.counter++;
+ }
+ },
+
+ _increment: function( i ) {
+ var incremental = this.options.incremental;
+
+ if ( incremental ) {
+ return $.isFunction( incremental ) ?
+ incremental( i ) :
+ Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+ }
+
+ return 1;
+ },
+
+ _precision: function() {
+ var precision = this._precisionOf( this.options.step );
+ if ( this.options.min !== null ) {
+ precision = Math.max( precision, this._precisionOf( this.options.min ) );
+ }
+ return precision;
+ },
+
+ _precisionOf: function( num ) {
+ var str = num.toString(),
+ decimal = str.indexOf( "." );
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _adjustValue: function( value ) {
+ var base, aboveMin,
+ options = this.options;
+
+ // make sure we're at a valid step
+ // - find out where we are relative to the base (min or 0)
+ base = options.min !== null ? options.min : 0;
+ aboveMin = value - base;
+ // - round to the nearest step
+ aboveMin = Math.round(aboveMin / options.step) * options.step;
+ // - rounding is based on 0, so adjust back to our base
+ value = base + aboveMin;
+
+ // fix precision from bad JS floating point math
+ value = parseFloat( value.toFixed( this._precision() ) );
+
+ // clamp the value
+ if ( options.max !== null && value > options.max) {
+ return options.max;
+ }
+ if ( options.min !== null && value < options.min ) {
+ return options.min;
+ }
+
+ return value;
+ },
+
+ _stop: function( event ) {
+ if ( !this.spinning ) {
+ return;
+ }
+
+ clearTimeout( this.timer );
+ clearTimeout( this.mousewheelTimer );
+ this.counter = 0;
+ this.spinning = false;
+ this._trigger( "stop", event );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "culture" || key === "numberFormat" ) {
+ var prevValue = this._parse( this.element.val() );
+ this.options[ key ] = value;
+ this.element.val( this._format( prevValue ) );
+ return;
+ }
+
+ if ( key === "max" || key === "min" || key === "step" ) {
+ if ( typeof value === "string" ) {
+ value = this._parse( value );
+ }
+ }
+ if ( key === "icons" ) {
+ this.buttons.first().find( ".ui-icon" )
+ .removeClass( this.options.icons.up )
+ .addClass( value.up );
+ this.buttons.last().find( ".ui-icon" )
+ .removeClass( this.options.icons.down )
+ .addClass( value.down );
+ }
+
+ this._super( key, value );
+
+ if ( key === "disabled" ) {
+ if ( value ) {
+ this.element.prop( "disabled", true );
+ this.buttons.button( "disable" );
+ } else {
+ this.element.prop( "disabled", false );
+ this.buttons.button( "enable" );
+ }
+ }
+ },
+
+ _setOptions: modifier(function( options ) {
+ this._super( options );
+ this._value( this.element.val() );
+ }),
+
+ _parse: function( val ) {
+ if ( typeof val === "string" && val !== "" ) {
+ val = window.Globalize && this.options.numberFormat ?
+ Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+ }
+ return val === "" || isNaN( val ) ? null : val;
+ },
+
+ _format: function( value ) {
+ if ( value === "" ) {
+ return "";
+ }
+ return window.Globalize && this.options.numberFormat ?
+ Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+ value;
+ },
+
+ _refresh: function() {
+ this.element.attr({
+ "aria-valuemin": this.options.min,
+ "aria-valuemax": this.options.max,
+ // TODO: what should we do with values that can't be parsed?
+ "aria-valuenow": this._parse( this.element.val() )
+ });
+ },
+
+ // update the value without triggering change
+ _value: function( value, allowAny ) {
+ var parsed;
+ if ( value !== "" ) {
+ parsed = this._parse( value );
+ if ( parsed !== null ) {
+ if ( !allowAny ) {
+ parsed = this._adjustValue( parsed );
+ }
+ value = this._format( parsed );
+ }
+ }
+ this.element.val( value );
+ this._refresh();
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-spinner-input" )
+ .prop( "disabled", false )
+ .removeAttr( "autocomplete" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+ this.uiSpinner.replaceWith( this.element );
+ },
+
+ stepUp: modifier(function( steps ) {
+ this._stepUp( steps );
+ }),
+ _stepUp: function( steps ) {
+ if ( this._start() ) {
+ this._spin( (steps || 1) * this.options.step );
+ this._stop();
+ }
+ },
+
+ stepDown: modifier(function( steps ) {
+ this._stepDown( steps );
+ }),
+ _stepDown: function( steps ) {
+ if ( this._start() ) {
+ this._spin( (steps || 1) * -this.options.step );
+ this._stop();
+ }
+ },
+
+ pageUp: modifier(function( pages ) {
+ this._stepUp( (pages || 1) * this.options.page );
+ }),
+
+ pageDown: modifier(function( pages ) {
+ this._stepDown( (pages || 1) * this.options.page );
+ }),
+
+ value: function( newVal ) {
+ if ( !arguments.length ) {
+ return this._parse( this.element.val() );
+ }
+ modifier( this._value ).call( this, newVal );
+ },
+
+ widget: function() {
+ return this.uiSpinner;
+ }
+});
+
+}( jQuery ) );
+(function( $, undefined ) {
+
+var tabId = 0,
+ rhash = /#.*$/;
+
+function getNextTabId() {
+ return ++tabId;
+}
+
+function isLocal( anchor ) {
+ return anchor.hash.length > 1 &&
+ decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
+ decodeURIComponent( location.href.replace( rhash, "" ) );
+}
+
+$.widget( "ui.tabs", {
+ version: "1.10.0",
+ delay: 300,
+ options: {
+ active: null,
+ collapsible: false,
+ event: "click",
+ heightStyle: "content",
+ hide: null,
+ show: null,
+
+ // callbacks
+ activate: null,
+ beforeActivate: null,
+ beforeLoad: null,
+ load: null
+ },
+
+ _create: function() {
+ var that = this,
+ options = this.options;
+
+ this.running = false;
+
+ this.element
+ .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+ .toggleClass( "ui-tabs-collapsible", options.collapsible )
+ // Prevent users from focusing disabled tabs via click
+ .delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
+ if ( $( this ).is( ".ui-state-disabled" ) ) {
+ event.preventDefault();
+ }
+ })
+ // support: IE <9
+ // Preventing the default action in mousedown doesn't prevent IE
+ // from focusing the element, so if the anchor gets focused, blur.
+ // We don't have to worry about focusing the previously focused
+ // element since clicking on a non-focusable element should focus
+ // the body anyway.
+ .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+ if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+ this.blur();
+ }
+ });
+
+ this._processTabs();
+ options.active = this._initialActive();
+
+ // Take disabling tabs via class attribute from HTML
+ // into account and update option properly.
+ if ( $.isArray( options.disabled ) ) {
+ options.disabled = $.unique( options.disabled.concat(
+ $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+ return that.tabs.index( li );
+ })
+ ) ).sort();
+ }
+
+ // check for length avoids error when initializing empty list
+ if ( this.options.active !== false && this.anchors.length ) {
+ this.active = this._findActive( options.active );
+ } else {
+ this.active = $();
+ }
+
+ this._refresh();
+
+ if ( this.active.length ) {
+ this.load( options.active );
+ }
+ },
+
+ _initialActive: function() {
+ var active = this.options.active,
+ collapsible = this.options.collapsible,
+ locationHash = location.hash.substring( 1 );
+
+ if ( active === null ) {
+ // check the fragment identifier in the URL
+ if ( locationHash ) {
+ this.tabs.each(function( i, tab ) {
+ if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+ active = i;
+ return false;
+ }
+ });
+ }
+
+ // check for a tab marked active via a class
+ if ( active === null ) {
+ active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+ }
+
+ // no active tab, set to false
+ if ( active === null || active === -1 ) {
+ active = this.tabs.length ? 0 : false;
+ }
+ }
+
+ // handle numbers: negative, out of range
+ if ( active !== false ) {
+ active = this.tabs.index( this.tabs.eq( active ) );
+ if ( active === -1 ) {
+ active = collapsible ? false : 0;
+ }
+ }
+
+ // don't allow collapsible: false and active: false
+ if ( !collapsible && active === false && this.anchors.length ) {
+ active = 0;
+ }
+
+ return active;
+ },
+
+ _getCreateEventData: function() {
+ return {
+ tab: this.active,
+ panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+ };
+ },
+
+ _tabKeydown: function( event ) {
+ /*jshint maxcomplexity:15*/
+ var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+ selectedIndex = this.tabs.index( focusedTab ),
+ goingForward = true;
+
+ if ( this._handlePageNav( event ) ) {
+ return;
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ selectedIndex++;
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.LEFT:
+ goingForward = false;
+ selectedIndex--;
+ break;
+ case $.ui.keyCode.END:
+ selectedIndex = this.anchors.length - 1;
+ break;
+ case $.ui.keyCode.HOME:
+ selectedIndex = 0;
+ break;
+ case $.ui.keyCode.SPACE:
+ // Activate only, no collapsing
+ event.preventDefault();
+ clearTimeout( this.activating );
+ this._activate( selectedIndex );
+ return;
+ case $.ui.keyCode.ENTER:
+ // Toggle (cancel delayed activation, allow collapsing)
+ event.preventDefault();
+ clearTimeout( this.activating );
+ // Determine if we should collapse or activate
+ this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+ return;
+ default:
+ return;
+ }
+
+ // Focus the appropriate tab, based on which key was pressed
+ event.preventDefault();
+ clearTimeout( this.activating );
+ selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+
+ // Navigating with control key will prevent automatic activation
+ if ( !event.ctrlKey ) {
+ // Update aria-selected immediately so that AT think the tab is already selected.
+ // Otherwise AT may confuse the user by stating that they need to activate the tab,
+ // but the tab will already be activated by the time the announcement finishes.
+ focusedTab.attr( "aria-selected", "false" );
+ this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+
+ this.activating = this._delay(function() {
+ this.option( "active", selectedIndex );
+ }, this.delay );
+ }
+ },
+
+ _panelKeydown: function( event ) {
+ if ( this._handlePageNav( event ) ) {
+ return;
+ }
+
+ // Ctrl+up moves focus to the current tab
+ if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+ event.preventDefault();
+ this.active.focus();
+ }
+ },
+
+ // Alt+page up/down moves focus to the previous/next tab (and activates)
+ _handlePageNav: function( event ) {
+ if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+ this._activate( this._focusNextTab( this.options.active - 1, false ) );
+ return true;
+ }
+ if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+ this._activate( this._focusNextTab( this.options.active + 1, true ) );
+ return true;
+ }
+ },
+
+ _findNextTab: function( index, goingForward ) {
+ var lastTabIndex = this.tabs.length - 1;
+
+ function constrain() {
+ if ( index > lastTabIndex ) {
+ index = 0;
+ }
+ if ( index < 0 ) {
+ index = lastTabIndex;
+ }
+ return index;
+ }
+
+ while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+ index = goingForward ? index + 1 : index - 1;
+ }
+
+ return index;
+ },
+
+ _focusNextTab: function( index, goingForward ) {
+ index = this._findNextTab( index, goingForward );
+ this.tabs.eq( index ).focus();
+ return index;
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "disabled" ) {
+ // don't use the widget factory's disabled handling
+ this._setupDisabled( value );
+ return;
+ }
+
+ this._super( key, value);
+
+ if ( key === "collapsible" ) {
+ this.element.toggleClass( "ui-tabs-collapsible", value );
+ // Setting collapsible: false while collapsed; open first panel
+ if ( !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+ }
+
+ if ( key === "event" ) {
+ this._setupEvents( value );
+ }
+
+ if ( key === "heightStyle" ) {
+ this._setupHeightStyle( value );
+ }
+ },
+
+ _tabId: function( tab ) {
+ return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
+ },
+
+ _sanitizeSelector: function( hash ) {
+ return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+ },
+
+ refresh: function() {
+ var options = this.options,
+ lis = this.tablist.children( ":has(a[href])" );
+
+ // get disabled tabs from class attribute from HTML
+ // this will get converted to a boolean if needed in _refresh()
+ options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+ return lis.index( tab );
+ });
+
+ this._processTabs();
+
+ // was collapsed or no tabs
+ if ( options.active === false || !this.anchors.length ) {
+ options.active = false;
+ this.active = $();
+ // was active, but active tab is gone
+ } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+ // all remaining tabs are disabled
+ if ( this.tabs.length === options.disabled.length ) {
+ options.active = false;
+ this.active = $();
+ // activate previous tab
+ } else {
+ this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+ }
+ // was active, active tab still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.tabs.index( this.active );
+ }
+
+ this._refresh();
+ },
+
+ _refresh: function() {
+ this._setupDisabled( this.options.disabled );
+ this._setupEvents( this.options.event );
+ this._setupHeightStyle( this.options.heightStyle );
+
+ this.tabs.not( this.active ).attr({
+ "aria-selected": "false",
+ tabIndex: -1
+ });
+ this.panels.not( this._getPanelForTab( this.active ) )
+ .hide()
+ .attr({
+ "aria-expanded": "false",
+ "aria-hidden": "true"
+ });
+
+ // Make sure one tab is in the tab order
+ if ( !this.active.length ) {
+ this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active
+ .addClass( "ui-tabs-active ui-state-active" )
+ .attr({
+ "aria-selected": "true",
+ tabIndex: 0
+ });
+ this._getPanelForTab( this.active )
+ .show()
+ .attr({
+ "aria-expanded": "true",
+ "aria-hidden": "false"
+ });
+ }
+ },
+
+ _processTabs: function() {
+ var that = this;
+
+ this.tablist = this._getList()
+ .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+ .attr( "role", "tablist" );
+
+ this.tabs = this.tablist.find( "> li:has(a[href])" )
+ .addClass( "ui-state-default ui-corner-top" )
+ .attr({
+ role: "tab",
+ tabIndex: -1
+ });
+
+ this.anchors = this.tabs.map(function() {
+ return $( "a", this )[ 0 ];
+ })
+ .addClass( "ui-tabs-anchor" )
+ .attr({
+ role: "presentation",
+ tabIndex: -1
+ });
+
+ this.panels = $();
+
+ this.anchors.each(function( i, anchor ) {
+ var selector, panel, panelId,
+ anchorId = $( anchor ).uniqueId().attr( "id" ),
+ tab = $( anchor ).closest( "li" ),
+ originalAriaControls = tab.attr( "aria-controls" );
+
+ // inline tab
+ if ( isLocal( anchor ) ) {
+ selector = anchor.hash;
+ panel = that.element.find( that._sanitizeSelector( selector ) );
+ // remote tab
+ } else {
+ panelId = that._tabId( tab );
+ selector = "#" + panelId;
+ panel = that.element.find( selector );
+ if ( !panel.length ) {
+ panel = that._createPanel( panelId );
+ panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+ }
+ panel.attr( "aria-live", "polite" );
+ }
+
+ if ( panel.length) {
+ that.panels = that.panels.add( panel );
+ }
+ if ( originalAriaControls ) {
+ tab.data( "ui-tabs-aria-controls", originalAriaControls );
+ }
+ tab.attr({
+ "aria-controls": selector.substring( 1 ),
+ "aria-labelledby": anchorId
+ });
+ panel.attr( "aria-labelledby", anchorId );
+ });
+
+ this.panels
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .attr( "role", "tabpanel" );
+ },
+
+ // allow overriding how to find the list for rare usage scenarios (#7715)
+ _getList: function() {
+ return this.element.find( "ol,ul" ).eq( 0 );
+ },
+
+ _createPanel: function( id ) {
+ return $( "<div>" )
+ .attr( "id", id )
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .data( "ui-tabs-destroy", true );
+ },
+
+ _setupDisabled: function( disabled ) {
+ if ( $.isArray( disabled ) ) {
+ if ( !disabled.length ) {
+ disabled = false;
+ } else if ( disabled.length === this.anchors.length ) {
+ disabled = true;
+ }
+ }
+
+ // disable tabs
+ for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+ if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+ $( li )
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ } else {
+ $( li )
+ .removeClass( "ui-state-disabled" )
+ .removeAttr( "aria-disabled" );
+ }
+ }
+
+ this.options.disabled = disabled;
+ },
+
+ _setupEvents: function( event ) {
+ var events = {
+ click: function( event ) {
+ event.preventDefault();
+ }
+ };
+ if ( event ) {
+ $.each( event.split(" "), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ });
+ }
+
+ this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+ this._on( this.anchors, events );
+ this._on( this.tabs, { keydown: "_tabKeydown" } );
+ this._on( this.panels, { keydown: "_panelKeydown" } );
+
+ this._focusable( this.tabs );
+ this._hoverable( this.tabs );
+ },
+
+ _setupHeightStyle: function( heightStyle ) {
+ var maxHeight,
+ parent = this.element.parent();
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ maxHeight -= this.element.outerHeight() - this.element.height();
+
+ this.element.siblings( ":visible" ).each(function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ });
+
+ this.element.children().not( this.panels ).each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.panels.each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.panels.each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+ }).height( maxHeight );
+ }
+ },
+
+ _eventHandler: function( event ) {
+ var options = this.options,
+ active = this.active,
+ anchor = $( event.currentTarget ),
+ tab = anchor.closest( "li" ),
+ clickedIsActive = tab[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : this._getPanelForTab( tab ),
+ toHide = !active.length ? $() : this._getPanelForTab( active ),
+ eventData = {
+ oldTab: active,
+ oldPanel: toHide,
+ newTab: collapsing ? $() : tab,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if ( tab.hasClass( "ui-state-disabled" ) ||
+ // tab is already loading
+ tab.hasClass( "ui-tabs-loading" ) ||
+ // can't switch durning an animation
+ this.running ||
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.tabs.index( tab );
+
+ this.active = clickedIsActive ? $() : tab;
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+
+ if ( !toHide.length && !toShow.length ) {
+ $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+ }
+
+ if ( toShow.length ) {
+ this.load( this.tabs.index( tab ), event );
+ }
+ this._toggle( event, eventData );
+ },
+
+ // handles show/hide for selecting tabs
+ _toggle: function( event, eventData ) {
+ var that = this,
+ toShow = eventData.newPanel,
+ toHide = eventData.oldPanel;
+
+ this.running = true;
+
+ function complete() {
+ that.running = false;
+ that._trigger( "activate", event, eventData );
+ }
+
+ function show() {
+ eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+
+ if ( toShow.length && that.options.show ) {
+ that._show( toShow, that.options.show, complete );
+ } else {
+ toShow.show();
+ complete();
+ }
+ }
+
+ // start out by hiding, then showing, then completing
+ if ( toHide.length && this.options.hide ) {
+ this._hide( toHide, this.options.hide, function() {
+ eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+ show();
+ });
+ } else {
+ eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+ toHide.hide();
+ show();
+ }
+
+ toHide.attr({
+ "aria-expanded": "false",
+ "aria-hidden": "true"
+ });
+ eventData.oldTab.attr( "aria-selected", "false" );
+ // If we're switching tabs, remove the old tab from the tab order.
+ // If we're opening from collapsed state, remove the previous tab from the tab order.
+ // If we're collapsing, then keep the collapsing tab in the tab order.
+ if ( toShow.length && toHide.length ) {
+ eventData.oldTab.attr( "tabIndex", -1 );
+ } else if ( toShow.length ) {
+ this.tabs.filter(function() {
+ return $( this ).attr( "tabIndex" ) === 0;
+ })
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow.attr({
+ "aria-expanded": "true",
+ "aria-hidden": "false"
+ });
+ eventData.newTab.attr({
+ "aria-selected": "true",
+ tabIndex: 0
+ });
+ },
+
+ _activate: function( index ) {
+ var anchor,
+ active = this._findActive( index );
+
+ // trying to activate the already active panel
+ if ( active[ 0 ] === this.active[ 0 ] ) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the current active header
+ if ( !active.length ) {
+ active = this.active;
+ }
+
+ anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+ this._eventHandler({
+ target: anchor,
+ currentTarget: anchor,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function( index ) {
+ return index === false ? $() : this.tabs.eq( index );
+ },
+
+ _getIndex: function( index ) {
+ // meta-function to give users option to provide a href string instead of a numerical index.
+ if ( typeof index === "string" ) {
+ index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+ }
+
+ return index;
+ },
+
+ _destroy: function() {
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+
+ this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+
+ this.tablist
+ .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+ .removeAttr( "role" );
+
+ this.anchors
+ .removeClass( "ui-tabs-anchor" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeUniqueId();
+
+ this.tabs.add( this.panels ).each(function() {
+ if ( $.data( this, "ui-tabs-destroy" ) ) {
+ $( this ).remove();
+ } else {
+ $( this )
+ .removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+ "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-live" )
+ .removeAttr( "aria-busy" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "role" );
+ }
+ });
+
+ this.tabs.each(function() {
+ var li = $( this ),
+ prev = li.data( "ui-tabs-aria-controls" );
+ if ( prev ) {
+ li
+ .attr( "aria-controls", prev )
+ .removeData( "ui-tabs-aria-controls" );
+ } else {
+ li.removeAttr( "aria-controls" );
+ }
+ });
+
+ this.panels.show();
+
+ if ( this.options.heightStyle !== "content" ) {
+ this.panels.css( "height", "" );
+ }
+ },
+
+ enable: function( index ) {
+ var disabled = this.options.disabled;
+ if ( disabled === false ) {
+ return;
+ }
+
+ if ( index === undefined ) {
+ disabled = false;
+ } else {
+ index = this._getIndex( index );
+ if ( $.isArray( disabled ) ) {
+ disabled = $.map( disabled, function( num ) {
+ return num !== index ? num : null;
+ });
+ } else {
+ disabled = $.map( this.tabs, function( li, num ) {
+ return num !== index ? num : null;
+ });
+ }
+ }
+ this._setupDisabled( disabled );
+ },
+
+ disable: function( index ) {
+ var disabled = this.options.disabled;
+ if ( disabled === true ) {
+ return;
+ }
+
+ if ( index === undefined ) {
+ disabled = true;
+ } else {
+ index = this._getIndex( index );
+ if ( $.inArray( index, disabled ) !== -1 ) {
+ return;
+ }
+ if ( $.isArray( disabled ) ) {
+ disabled = $.merge( [ index ], disabled ).sort();
+ } else {
+ disabled = [ index ];
+ }
+ }
+ this._setupDisabled( disabled );
+ },
+
+ load: function( index, event ) {
+ index = this._getIndex( index );
+ var that = this,
+ tab = this.tabs.eq( index ),
+ anchor = tab.find( ".ui-tabs-anchor" ),
+ panel = this._getPanelForTab( tab ),
+ eventData = {
+ tab: tab,
+ panel: panel
+ };
+
+ // not remote
+ if ( isLocal( anchor[ 0 ] ) ) {
+ return;
+ }
+
+ this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+
+ // support: jQuery <1.8
+ // jQuery <1.8 returns false if the request is canceled in beforeSend,
+ // but as of 1.8, $.ajax() always returns a jqXHR object.
+ if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+ tab.addClass( "ui-tabs-loading" );
+ panel.attr( "aria-busy", "true" );
+
+ this.xhr
+ .success(function( response ) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function() {
+ panel.html( response );
+ that._trigger( "load", event, eventData );
+ }, 1 );
+ })
+ .complete(function( jqXHR, status ) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function() {
+ if ( status === "abort" ) {
+ that.panels.stop( false, true );
+ }
+
+ tab.removeClass( "ui-tabs-loading" );
+ panel.removeAttr( "aria-busy" );
+
+ if ( jqXHR === that.xhr ) {
+ delete that.xhr;
+ }
+ }, 1 );
+ });
+ }
+ },
+
+ _ajaxSettings: function( anchor, event, eventData ) {
+ var that = this;
+ return {
+ url: anchor.attr( "href" ),
+ beforeSend: function( jqXHR, settings ) {
+ return that._trigger( "beforeLoad", event,
+ $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+ }
+ };
+ },
+
+ _getPanelForTab: function( tab ) {
+ var id = $( tab ).attr( "aria-controls" );
+ return this.element.find( this._sanitizeSelector( "#" + id ) );
+ }
+});
+
+})( jQuery );
+(function( $ ) {
+
+var increments = 0;
+
+function addDescribedBy( elem, id ) {
+ var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+ describedby.push( id );
+ elem
+ .data( "ui-tooltip-id", id )
+ .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+}
+
+function removeDescribedBy( elem ) {
+ var id = elem.data( "ui-tooltip-id" ),
+ describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+ index = $.inArray( id, describedby );
+ if ( index !== -1 ) {
+ describedby.splice( index, 1 );
+ }
+
+ elem.removeData( "ui-tooltip-id" );
+ describedby = $.trim( describedby.join( " " ) );
+ if ( describedby ) {
+ elem.attr( "aria-describedby", describedby );
+ } else {
+ elem.removeAttr( "aria-describedby" );
+ }
+}
+
+$.widget( "ui.tooltip", {
+ version: "1.10.0",
+ options: {
+ content: function() {
+ // support: IE<9, Opera in jQuery <1.7
+ // .text() can't accept undefined, so coerce to a string
+ var title = $( this ).attr( "title" ) || "";
+ // Escape title, since we're going from an attribute to raw HTML
+ return $( "<a>" ).text( title ).html();
+ },
+ hide: true,
+ // Disabled elements have inconsistent behavior across browsers (#8661)
+ items: "[title]:not([disabled])",
+ position: {
+ my: "left top+15",
+ at: "left bottom",
+ collision: "flipfit flip"
+ },
+ show: true,
+ tooltipClass: null,
+ track: false,
+
+ // callbacks
+ close: null,
+ open: null
+ },
+
+ _create: function() {
+ this._on({
+ mouseover: "open",
+ focusin: "open"
+ });
+
+ // IDs of generated tooltips, needed for destroy
+ this.tooltips = {};
+ // IDs of parent tooltips where we removed the title attribute
+ this.parents = {};
+
+ if ( this.options.disabled ) {
+ this._disable();
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var that = this;
+
+ if ( key === "disabled" ) {
+ this[ value ? "_disable" : "_enable" ]();
+ this.options[ key ] = value;
+ // disable element style changes
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "content" ) {
+ $.each( this.tooltips, function( id, element ) {
+ that._updateContent( element );
+ });
+ }
+ },
+
+ _disable: function() {
+ var that = this;
+
+ // close open tooltips
+ $.each( this.tooltips, function( id, element ) {
+ var event = $.Event( "blur" );
+ event.target = event.currentTarget = element[0];
+ that.close( event, true );
+ });
+
+ // remove title attributes to prevent native tooltips
+ this.element.find( this.options.items ).addBack().each(function() {
+ var element = $( this );
+ if ( element.is( "[title]" ) ) {
+ element
+ .data( "ui-tooltip-title", element.attr( "title" ) )
+ .attr( "title", "" );
+ }
+ });
+ },
+
+ _enable: function() {
+ // restore title attributes
+ this.element.find( this.options.items ).addBack().each(function() {
+ var element = $( this );
+ if ( element.data( "ui-tooltip-title" ) ) {
+ element.attr( "title", element.data( "ui-tooltip-title" ) );
+ }
+ });
+ },
+
+ open: function( event ) {
+ var that = this,
+ target = $( event ? event.target : this.element )
+ // we need closest here due to mouseover bubbling,
+ // but always pointing at the same event target
+ .closest( this.options.items );
+
+ // No element to show a tooltip for or the tooltip is already open
+ if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+ return;
+ }
+
+ if ( target.attr( "title" ) ) {
+ target.data( "ui-tooltip-title", target.attr( "title" ) );
+ }
+
+ target.data( "ui-tooltip-open", true );
+
+ // kill parent tooltips, custom or native, for hover
+ if ( event && event.type === "mouseover" ) {
+ target.parents().each(function() {
+ var parent = $( this ),
+ blurEvent;
+ if ( parent.data( "ui-tooltip-open" ) ) {
+ blurEvent = $.Event( "blur" );
+ blurEvent.target = blurEvent.currentTarget = this;
+ that.close( blurEvent, true );
+ }
+ if ( parent.attr( "title" ) ) {
+ parent.uniqueId();
+ that.parents[ this.id ] = {
+ element: this,
+ title: parent.attr( "title" )
+ };
+ parent.attr( "title", "" );
+ }
+ });
+ }
+
+ this._updateContent( target, event );
+ },
+
+ _updateContent: function( target, event ) {
+ var content,
+ contentOption = this.options.content,
+ that = this,
+ eventType = event ? event.type : null;
+
+ if ( typeof contentOption === "string" ) {
+ return this._open( event, target, contentOption );
+ }
+
+ content = contentOption.call( target[0], function( response ) {
+ // ignore async response if tooltip was closed already
+ if ( !target.data( "ui-tooltip-open" ) ) {
+ return;
+ }
+ // IE may instantly serve a cached response for ajax requests
+ // delay this call to _open so the other call to _open runs first
+ that._delay(function() {
+ // jQuery creates a special event for focusin when it doesn't
+ // exist natively. To improve performance, the native event
+ // object is reused and the type is changed. Therefore, we can't
+ // rely on the type being correct after the event finished
+ // bubbling, so we set it back to the previous value. (#8740)
+ if ( event ) {
+ event.type = eventType;
+ }
+ this._open( event, target, response );
+ });
+ });
+ if ( content ) {
+ this._open( event, target, content );
+ }
+ },
+
+ _open: function( event, target, content ) {
+ var tooltip, events, delayedShow,
+ positionOption = $.extend( {}, this.options.position );
+
+ if ( !content ) {
+ return;
+ }
+
+ // Content can be updated multiple times. If the tooltip already
+ // exists, then just update the content and bail.
+ tooltip = this._find( target );
+ if ( tooltip.length ) {
+ tooltip.find( ".ui-tooltip-content" ).html( content );
+ return;
+ }
+
+ // if we have a title, clear it to prevent the native tooltip
+ // we have to check first to avoid defining a title if none exists
+ // (we don't want to cause an element to start matching [title])
+ //
+ // We use removeAttr only for key events, to allow IE to export the correct
+ // accessible attributes. For mouse events, set to empty string to avoid
+ // native tooltip showing up (happens only when removing inside mouseover).
+ if ( target.is( "[title]" ) ) {
+ if ( event && event.type === "mouseover" ) {
+ target.attr( "title", "" );
+ } else {
+ target.removeAttr( "title" );
+ }
+ }
+
+ tooltip = this._tooltip( target );
+ addDescribedBy( target, tooltip.attr( "id" ) );
+ tooltip.find( ".ui-tooltip-content" ).html( content );
+
+ function position( event ) {
+ positionOption.of = event;
+ if ( tooltip.is( ":hidden" ) ) {
+ return;
+ }
+ tooltip.position( positionOption );
+ }
+ if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+ this._on( this.document, {
+ mousemove: position
+ });
+ // trigger once to override element-relative positioning
+ position( event );
+ } else {
+ tooltip.position( $.extend({
+ of: target
+ }, this.options.position ) );
+ }
+
+ tooltip.hide();
+
+ this._show( tooltip, this.options.show );
+ // Handle tracking tooltips that are shown with a delay (#8644). As soon
+ // as the tooltip is visible, position the tooltip using the most recent
+ // event.
+ if ( this.options.show && this.options.show.delay ) {
+ delayedShow = this.delayedShow = setInterval(function() {
+ if ( tooltip.is( ":visible" ) ) {
+ position( positionOption.of );
+ clearInterval( delayedShow );
+ }
+ }, $.fx.interval );
+ }
+
+ this._trigger( "open", event, { tooltip: tooltip } );
+
+ events = {
+ keyup: function( event ) {
+ if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+ var fakeEvent = $.Event(event);
+ fakeEvent.currentTarget = target[0];
+ this.close( fakeEvent, true );
+ }
+ },
+ remove: function() {
+ this._removeTooltip( tooltip );
+ }
+ };
+ if ( !event || event.type === "mouseover" ) {
+ events.mouseleave = "close";
+ }
+ if ( !event || event.type === "focusin" ) {
+ events.focusout = "close";
+ }
+ this._on( true, target, events );
+ },
+
+ close: function( event ) {
+ var that = this,
+ target = $( event ? event.currentTarget : this.element ),
+ tooltip = this._find( target );
+
+ // disabling closes the tooltip, so we need to track when we're closing
+ // to avoid an infinite loop in case the tooltip becomes disabled on close
+ if ( this.closing ) {
+ return;
+ }
+
+ // Clear the interval for delayed tracking tooltips
+ clearInterval( this.delayedShow );
+
+ // only set title if we had one before (see comment in _open())
+ if ( target.data( "ui-tooltip-title" ) ) {
+ target.attr( "title", target.data( "ui-tooltip-title" ) );
+ }
+
+ removeDescribedBy( target );
+
+ tooltip.stop( true );
+ this._hide( tooltip, this.options.hide, function() {
+ that._removeTooltip( $( this ) );
+ });
+
+ target.removeData( "ui-tooltip-open" );
+ this._off( target, "mouseleave focusout keyup" );
+ // Remove 'remove' binding only on delegated targets
+ if ( target[0] !== this.element[0] ) {
+ this._off( target, "remove" );
+ }
+ this._off( this.document, "mousemove" );
+
+ if ( event && event.type === "mouseleave" ) {
+ $.each( this.parents, function( id, parent ) {
+ $( parent.element ).attr( "title", parent.title );
+ delete that.parents[ id ];
+ });
+ }
+
+ this.closing = true;
+ this._trigger( "close", event, { tooltip: tooltip } );
+ this.closing = false;
+ },
+
+ _tooltip: function( element ) {
+ var id = "ui-tooltip-" + increments++,
+ tooltip = $( "<div>" )
+ .attr({
+ id: id,
+ role: "tooltip"
+ })
+ .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+ ( this.options.tooltipClass || "" ) );
+ $( "<div>" )
+ .addClass( "ui-tooltip-content" )
+ .appendTo( tooltip );
+ tooltip.appendTo( this.document[0].body );
+ this.tooltips[ id ] = element;
+ return tooltip;
+ },
+
+ _find: function( target ) {
+ var id = target.data( "ui-tooltip-id" );
+ return id ? $( "#" + id ) : $();
+ },
+
+ _removeTooltip: function( tooltip ) {
+ tooltip.remove();
+ delete this.tooltips[ tooltip.attr( "id" ) ];
+ },
+
+ _destroy: function() {
+ var that = this;
+
+ // close open tooltips
+ $.each( this.tooltips, function( id, element ) {
+ // Delegate to close method to handle common cleanup
+ var event = $.Event( "blur" );
+ event.target = event.currentTarget = element[0];
+ that.close( event, true );
+
+ // Remove immediately; destroying an open tooltip doesn't use the
+ // hide animation
+ $( "#" + id ).remove();
+
+ // Restore the title
+ if ( element.data( "ui-tooltip-title" ) ) {
+ element.attr( "title", element.data( "ui-tooltip-title" ) );
+ element.removeData( "ui-tooltip-title" );
+ }
+ });
+ }
+});
+
+}( jQuery ) );
+;(jQuery.effects || (function($, undefined) {
+
+var dataSpace = "ui-effects-";
+
+$.effects = {
+ effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
+ *
+ * Copyright 2013 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Wed Jan 16 08:47:09 2013 -0600
+ */
+(function( jQuery, undefined ) {
+
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+ // plusequals test for += 100 -= 100
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+ // a set of RE's that can match strings and generate color tuples.
+ stringParsers = [{
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ],
+ execResult[ 3 ],
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ] * 2.55,
+ execResult[ 2 ] * 2.55,
+ execResult[ 3 ] * 2.55,
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ space: "hsla",
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ] / 100,
+ execResult[ 3 ] / 100,
+ execResult[ 4 ]
+ ];
+ }
+ }],
+
+ // jQuery.Color( )
+ color = jQuery.Color = function( color, green, blue, alpha ) {
+ return new jQuery.Color.fn.parse( color, green, blue, alpha );
+ },
+ spaces = {
+ rgba: {
+ props: {
+ red: {
+ idx: 0,
+ type: "byte"
+ },
+ green: {
+ idx: 1,
+ type: "byte"
+ },
+ blue: {
+ idx: 2,
+ type: "byte"
+ }
+ }
+ },
+
+ hsla: {
+ props: {
+ hue: {
+ idx: 0,
+ type: "degrees"
+ },
+ saturation: {
+ idx: 1,
+ type: "percent"
+ },
+ lightness: {
+ idx: 2,
+ type: "percent"
+ }
+ }
+ }
+ },
+ propTypes = {
+ "byte": {
+ floor: true,
+ max: 255
+ },
+ "percent": {
+ max: 1
+ },
+ "degrees": {
+ mod: 360,
+ floor: true
+ }
+ },
+ support = color.support = {},
+
+ // element for support tests
+ supportElem = jQuery( "<p>" )[ 0 ],
+
+ // colors = jQuery.Color.names
+ colors,
+
+ // local aliases of functions called often
+ each = jQuery.each;
+
+// determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+ space.cache = "_" + spaceName;
+ space.props.alpha = {
+ idx: 3,
+ type: "percent",
+ def: 1
+ };
+});
+
+function clamp( value, prop, allowEmpty ) {
+ var type = propTypes[ prop.type ] || {};
+
+ if ( value == null ) {
+ return (allowEmpty || !prop.def) ? null : prop.def;
+ }
+
+ // ~~ is an short way of doing floor for positive numbers
+ value = type.floor ? ~~value : parseFloat( value );
+
+ // IE will pass in empty strings as value for alpha,
+ // which will hit this case
+ if ( isNaN( value ) ) {
+ return prop.def;
+ }
+
+ if ( type.mod ) {
+ // we add mod before modding to make sure that negatives values
+ // get converted properly: -10 -> 350
+ return (value + type.mod) % type.mod;
+ }
+
+ // for now all property types without mod have min and max
+ return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+ var inst = color(),
+ rgba = inst._rgba = [];
+
+ string = string.toLowerCase();
+
+ each( stringParsers, function( i, parser ) {
+ var parsed,
+ match = parser.re.exec( string ),
+ values = match && parser.parse( match ),
+ spaceName = parser.space || "rgba";
+
+ if ( values ) {
+ parsed = inst[ spaceName ]( values );
+
+ // if this was an rgba parse the assignment might happen twice
+ // oh well....
+ inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+ rgba = inst._rgba = parsed._rgba;
+
+ // exit each( stringParsers ) here because we matched
+ return false;
+ }
+ });
+
+ // Found a stringParser that handled it
+ if ( rgba.length ) {
+
+ // if this came from a parsed string, force "transparent" when alpha is 0
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+ if ( rgba.join() === "0,0,0,0" ) {
+ jQuery.extend( rgba, colors.transparent );
+ }
+ return inst;
+ }
+
+ // named colors
+ return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+ parse: function( red, green, blue, alpha ) {
+ if ( red === undefined ) {
+ this._rgba = [ null, null, null, null ];
+ return this;
+ }
+ if ( red.jquery || red.nodeType ) {
+ red = jQuery( red ).css( green );
+ green = undefined;
+ }
+
+ var inst = this,
+ type = jQuery.type( red ),
+ rgba = this._rgba = [];
+
+ // more than 1 argument specified - assume ( red, green, blue, alpha )
+ if ( green !== undefined ) {
+ red = [ red, green, blue, alpha ];
+ type = "array";
+ }
+
+ if ( type === "string" ) {
+ return this.parse( stringParse( red ) || colors._default );
+ }
+
+ if ( type === "array" ) {
+ each( spaces.rgba.props, function( key, prop ) {
+ rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+ });
+ return this;
+ }
+
+ if ( type === "object" ) {
+ if ( red instanceof color ) {
+ each( spaces, function( spaceName, space ) {
+ if ( red[ space.cache ] ) {
+ inst[ space.cache ] = red[ space.cache ].slice();
+ }
+ });
+ } else {
+ each( spaces, function( spaceName, space ) {
+ var cache = space.cache;
+ each( space.props, function( key, prop ) {
+
+ // if the cache doesn't exist, and we know how to convert
+ if ( !inst[ cache ] && space.to ) {
+
+ // if the value was null, we don't need to copy it
+ // if the key was alpha, we don't need to copy it either
+ if ( key === "alpha" || red[ key ] == null ) {
+ return;
+ }
+ inst[ cache ] = space.to( inst._rgba );
+ }
+
+ // this is the only case where we allow nulls for ALL properties.
+ // call clamp with alwaysAllowEmpty
+ inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+ });
+
+ // everything defined but alpha?
+ if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+ // use the default of 1
+ inst[ cache ][ 3 ] = 1;
+ if ( space.from ) {
+ inst._rgba = space.from( inst[ cache ] );
+ }
+ }
+ });
+ }
+ return this;
+ }
+ },
+ is: function( compare ) {
+ var is = color( compare ),
+ same = true,
+ inst = this;
+
+ each( spaces, function( _, space ) {
+ var localCache,
+ isCache = is[ space.cache ];
+ if (isCache) {
+ localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+ each( space.props, function( _, prop ) {
+ if ( isCache[ prop.idx ] != null ) {
+ same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+ return same;
+ }
+ });
+ }
+ return same;
+ });
+ return same;
+ },
+ _space: function() {
+ var used = [],
+ inst = this;
+ each( spaces, function( spaceName, space ) {
+ if ( inst[ space.cache ] ) {
+ used.push( spaceName );
+ }
+ });
+ return used.pop();
+ },
+ transition: function( other, distance ) {
+ var end = color( other ),
+ spaceName = end._space(),
+ space = spaces[ spaceName ],
+ startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+ start = startColor[ space.cache ] || space.to( startColor._rgba ),
+ result = start.slice();
+
+ end = end[ space.cache ];
+ each( space.props, function( key, prop ) {
+ var index = prop.idx,
+ startValue = start[ index ],
+ endValue = end[ index ],
+ type = propTypes[ prop.type ] || {};
+
+ // if null, don't override start value
+ if ( endValue === null ) {
+ return;
+ }
+ // if null - use end
+ if ( startValue === null ) {
+ result[ index ] = endValue;
+ } else {
+ if ( type.mod ) {
+ if ( endValue - startValue > type.mod / 2 ) {
+ startValue += type.mod;
+ } else if ( startValue - endValue > type.mod / 2 ) {
+ startValue -= type.mod;
+ }
+ }
+ result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+ }
+ });
+ return this[ spaceName ]( result );
+ },
+ blend: function( opaque ) {
+ // if we are already opaque - return ourself
+ if ( this._rgba[ 3 ] === 1 ) {
+ return this;
+ }
+
+ var rgb = this._rgba.slice(),
+ a = rgb.pop(),
+ blend = color( opaque )._rgba;
+
+ return color( jQuery.map( rgb, function( v, i ) {
+ return ( 1 - a ) * blend[ i ] + a * v;
+ }));
+ },
+ toRgbaString: function() {
+ var prefix = "rgba(",
+ rgba = jQuery.map( this._rgba, function( v, i ) {
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
+ });
+
+ if ( rgba[ 3 ] === 1 ) {
+ rgba.pop();
+ prefix = "rgb(";
+ }
+
+ return prefix + rgba.join() + ")";
+ },
+ toHslaString: function() {
+ var prefix = "hsla(",
+ hsla = jQuery.map( this.hsla(), function( v, i ) {
+ if ( v == null ) {
+ v = i > 2 ? 1 : 0;
+ }
+
+ // catch 1 and 2
+ if ( i && i < 3 ) {
+ v = Math.round( v * 100 ) + "%";
+ }
+ return v;
+ });
+
+ if ( hsla[ 3 ] === 1 ) {
+ hsla.pop();
+ prefix = "hsl(";
+ }
+ return prefix + hsla.join() + ")";
+ },
+ toHexString: function( includeAlpha ) {
+ var rgba = this._rgba.slice(),
+ alpha = rgba.pop();
+
+ if ( includeAlpha ) {
+ rgba.push( ~~( alpha * 255 ) );
+ }
+
+ return "#" + jQuery.map( rgba, function( v ) {
+
+ // default to 0 when nulls exist
+ v = ( v || 0 ).toString( 16 );
+ return v.length === 1 ? "0" + v : v;
+ }).join("");
+ },
+ toString: function() {
+ return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+ }
+});
+color.fn.parse.prototype = color.fn;
+
+// hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+
+function hue2rgb( p, q, h ) {
+ h = ( h + 1 ) % 1;
+ if ( h * 6 < 1 ) {
+ return p + (q - p) * h * 6;
+ }
+ if ( h * 2 < 1) {
+ return q;
+ }
+ if ( h * 3 < 2 ) {
+ return p + (q - p) * ((2/3) - h) * 6;
+ }
+ return p;
+}
+
+spaces.hsla.to = function ( rgba ) {
+ if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+ return [ null, null, null, rgba[ 3 ] ];
+ }
+ var r = rgba[ 0 ] / 255,
+ g = rgba[ 1 ] / 255,
+ b = rgba[ 2 ] / 255,
+ a = rgba[ 3 ],
+ max = Math.max( r, g, b ),
+ min = Math.min( r, g, b ),
+ diff = max - min,
+ add = max + min,
+ l = add * 0.5,
+ h, s;
+
+ if ( min === max ) {
+ h = 0;
+ } else if ( r === max ) {
+ h = ( 60 * ( g - b ) / diff ) + 360;
+ } else if ( g === max ) {
+ h = ( 60 * ( b - r ) / diff ) + 120;
+ } else {
+ h = ( 60 * ( r - g ) / diff ) + 240;
+ }
+
+ // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+ // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+ if ( diff === 0 ) {
+ s = 0;
+ } else if ( l <= 0.5 ) {
+ s = diff / add;
+ } else {
+ s = diff / ( 2 - add );
+ }
+ return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function ( hsla ) {
+ if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+ return [ null, null, null, hsla[ 3 ] ];
+ }
+ var h = hsla[ 0 ] / 360,
+ s = hsla[ 1 ],
+ l = hsla[ 2 ],
+ a = hsla[ 3 ],
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+ p = 2 * l - q;
+
+ return [
+ Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+ Math.round( hue2rgb( p, q, h ) * 255 ),
+ Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+ a
+ ];
+};
+
+
+each( spaces, function( spaceName, space ) {
+ var props = space.props,
+ cache = space.cache,
+ to = space.to,
+ from = space.from;
+
+ // makes rgba() and hsla()
+ color.fn[ spaceName ] = function( value ) {
+
+ // generate a cache for this space if it doesn't exist
+ if ( to && !this[ cache ] ) {
+ this[ cache ] = to( this._rgba );
+ }
+ if ( value === undefined ) {
+ return this[ cache ].slice();
+ }
+
+ var ret,
+ type = jQuery.type( value ),
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
+ local = this[ cache ].slice();
+
+ each( props, function( key, prop ) {
+ var val = arr[ type === "object" ? key : prop.idx ];
+ if ( val == null ) {
+ val = local[ prop.idx ];
+ }
+ local[ prop.idx ] = clamp( val, prop );
+ });
+
+ if ( from ) {
+ ret = color( from( local ) );
+ ret[ cache ] = local;
+ return ret;
+ } else {
+ return color( local );
+ }
+ };
+
+ // makes red() green() blue() alpha() hue() saturation() lightness()
+ each( props, function( key, prop ) {
+ // alpha is included in more than one space
+ if ( color.fn[ key ] ) {
+ return;
+ }
+ color.fn[ key ] = function( value ) {
+ var vtype = jQuery.type( value ),
+ fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+ local = this[ fn ](),
+ cur = local[ prop.idx ],
+ match;
+
+ if ( vtype === "undefined" ) {
+ return cur;
+ }
+
+ if ( vtype === "function" ) {
+ value = value.call( this, cur );
+ vtype = jQuery.type( value );
+ }
+ if ( value == null && prop.empty ) {
+ return this;
+ }
+ if ( vtype === "string" ) {
+ match = rplusequals.exec( value );
+ if ( match ) {
+ value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+ }
+ }
+ local[ prop.idx ] = value;
+ return this[ fn ]( local );
+ };
+ });
+});
+
+// add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+color.hook = function( hook ) {
+ var hooks = hook.split( " " );
+ each( hooks, function( i, hook ) {
+ jQuery.cssHooks[ hook ] = {
+ set: function( elem, value ) {
+ var parsed, curElem,
+ backgroundColor = "";
+
+ if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+ value = color( parsed || value );
+ if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+ while (
+ (backgroundColor === "" || backgroundColor === "transparent") &&
+ curElem && curElem.style
+ ) {
+ try {
+ backgroundColor = jQuery.css( curElem, "backgroundColor" );
+ curElem = curElem.parentNode;
+ } catch ( e ) {
+ }
+ }
+
+ value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+ backgroundColor :
+ "_default" );
+ }
+
+ value = value.toRgbaString();
+ }
+ try {
+ elem.style[ hook ] = value;
+ } catch( e ) {
+ // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+ }
+ }
+ };
+ jQuery.fx.step[ hook ] = function( fx ) {
+ if ( !fx.colorInit ) {
+ fx.start = color( fx.elem, hook );
+ fx.end = color( fx.end );
+ fx.colorInit = true;
+ }
+ jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+ };
+ });
+
+};
+
+color.hook( stepHooks );
+
+jQuery.cssHooks.borderColor = {
+ expand: function( value ) {
+ var expanded = {};
+
+ each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+ expanded[ "border" + part + "Color" ] = value;
+ });
+ return expanded;
+ }
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+ // 4.1. Basic color keywords
+ aqua: "#00ffff",
+ black: "#000000",
+ blue: "#0000ff",
+ fuchsia: "#ff00ff",
+ gray: "#808080",
+ green: "#008000",
+ lime: "#00ff00",
+ maroon: "#800000",
+ navy: "#000080",
+ olive: "#808000",
+ purple: "#800080",
+ red: "#ff0000",
+ silver: "#c0c0c0",
+ teal: "#008080",
+ white: "#ffffff",
+ yellow: "#ffff00",
+
+ // 4.2.3. "transparent" color keyword
+ transparent: [ null, null, null, 0 ],
+
+ _default: "#ffffff"
+};
+
+})( jQuery );
+
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+(function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+
+$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+ $.fx.step[ prop ] = function( fx ) {
+ if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+ jQuery.style( fx.elem, prop, fx.end );
+ fx.setAttr = true;
+ }
+ };
+});
+
+function getElementStyles( elem ) {
+ var key, len,
+ style = elem.ownerDocument.defaultView ?
+ elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+ elem.currentStyle,
+ styles = {};
+
+ if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+ len = style.length;
+ while ( len-- ) {
+ key = style[ len ];
+ if ( typeof style[ key ] === "string" ) {
+ styles[ $.camelCase( key ) ] = style[ key ];
+ }
+ }
+ // support: Opera, IE <9
+ } else {
+ for ( key in style ) {
+ if ( typeof style[ key ] === "string" ) {
+ styles[ key ] = style[ key ];
+ }
+ }
+ }
+
+ return styles;
+}
+
+
+function styleDifference( oldStyle, newStyle ) {
+ var diff = {},
+ name, value;
+
+ for ( name in newStyle ) {
+ value = newStyle[ name ];
+ if ( oldStyle[ name ] !== value ) {
+ if ( !shorthandStyles[ name ] ) {
+ if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+ diff[ name ] = value;
+ }
+ }
+ }
+ }
+
+ return diff;
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+ var o = $.speed( duration, easing, callback );
+
+ return this.queue( function() {
+ var animated = $( this ),
+ baseClass = animated.attr( "class" ) || "",
+ applyClassChange,
+ allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+
+ // map the animated objects to store the original styles.
+ allAnimations = allAnimations.map(function() {
+ var el = $( this );
+ return {
+ el: el,
+ start: getElementStyles( this )
+ };
+ });
+
+ // apply class change
+ applyClassChange = function() {
+ $.each( classAnimationActions, function(i, action) {
+ if ( value[ action ] ) {
+ animated[ action + "Class" ]( value[ action ] );
+ }
+ });
+ };
+ applyClassChange();
+
+ // map all animated objects again - calculate new styles and diff
+ allAnimations = allAnimations.map(function() {
+ this.end = getElementStyles( this.el[ 0 ] );
+ this.diff = styleDifference( this.start, this.end );
+ return this;
+ });
+
+ // apply original class
+ animated.attr( "class", baseClass );
+
+ // map all animated objects again - this time collecting a promise
+ allAnimations = allAnimations.map(function() {
+ var styleInfo = this,
+ dfd = $.Deferred(),
+ opts = $.extend({}, o, {
+ queue: false,
+ complete: function() {
+ dfd.resolve( styleInfo );
+ }
+ });
+
+ this.el.animate( this.diff, opts );
+ return dfd.promise();
+ });
+
+ // once all animations have completed:
+ $.when.apply( $, allAnimations.get() ).done(function() {
+
+ // set the final class
+ applyClassChange();
+
+ // for each animated element,
+ // clear all css properties that were animated
+ $.each( arguments, function() {
+ var el = this.el;
+ $.each( this.diff, function(key) {
+ el.css( key, "" );
+ });
+ });
+
+ // this is guarnteed to be there if you use jQuery.speed()
+ // it also handles dequeuing the next anim...
+ o.complete.call( animated[ 0 ] );
+ });
+ });
+};
+
+$.fn.extend({
+ _addClass: $.fn.addClass,
+ addClass: function( classNames, speed, easing, callback ) {
+ return speed ?
+ $.effects.animateClass.call( this,
+ { add: classNames }, speed, easing, callback ) :
+ this._addClass( classNames );
+ },
+
+ _removeClass: $.fn.removeClass,
+ removeClass: function( classNames, speed, easing, callback ) {
+ return speed ?
+ $.effects.animateClass.call( this,
+ { remove: classNames }, speed, easing, callback ) :
+ this._removeClass( classNames );
+ },
+
+ _toggleClass: $.fn.toggleClass,
+ toggleClass: function( classNames, force, speed, easing, callback ) {
+ if ( typeof force === "boolean" || force === undefined ) {
+ if ( !speed ) {
+ // without speed parameter
+ return this._toggleClass( classNames, force );
+ } else {
+ return $.effects.animateClass.call( this,
+ (force ? { add: classNames } : { remove: classNames }),
+ speed, easing, callback );
+ }
+ } else {
+ // without force parameter
+ return $.effects.animateClass.call( this,
+ { toggle: classNames }, force, speed, easing );
+ }
+ },
+
+ switchClass: function( remove, add, speed, easing, callback) {
+ return $.effects.animateClass.call( this, {
+ add: add,
+ remove: remove
+ }, speed, easing, callback );
+ }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+(function() {
+
+$.extend( $.effects, {
+ version: "1.10.0",
+
+ // Saves a set of properties in a data storage
+ save: function( element, set ) {
+ for( var i=0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+ }
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function( element, set ) {
+ var val, i;
+ for( i=0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ val = element.data( dataSpace + set[ i ] );
+ // support: jQuery 1.6.2
+ // http://bugs.jquery.com/ticket/9917
+ // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+ // We can't differentiate between "" and 0 here, so we just assume
+ // empty string since it's likely to be a more common value...
+ if ( val === undefined ) {
+ val = "";
+ }
+ element.css( set[ i ], val );
+ }
+ }
+ },
+
+ setMode: function( el, mode ) {
+ if (mode === "toggle") {
+ mode = el.is( ":hidden" ) ? "show" : "hide";
+ }
+ return mode;
+ },
+
+ // Translates a [top,left] array into a baseline value
+ // this should be a little more flexible in the future to handle a string & hash
+ getBaseline: function( origin, original ) {
+ var y, x;
+ switch ( origin[ 0 ] ) {
+ case "top": y = 0; break;
+ case "middle": y = 0.5; break;
+ case "bottom": y = 1; break;
+ default: y = origin[ 0 ] / original.height;
+ }
+ switch ( origin[ 1 ] ) {
+ case "left": x = 0; break;
+ case "center": x = 0.5; break;
+ case "right": x = 1; break;
+ default: x = origin[ 1 ] / original.width;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function( element ) {
+
+ // if the element is already wrapped, return it
+ if ( element.parent().is( ".ui-effects-wrapper" )) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ "float": element.css( "float" )
+ },
+ wrapper = $( "<div></div>" )
+ .addClass( "ui-effects-wrapper" )
+ .css({
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ }),
+ // Store the size in case width/height are defined in % - Fixes #5245
+ size = {
+ width: element.width(),
+ height: element.height()
+ },
+ active = document.activeElement;
+
+ // support: Firefox
+ // Firefox incorrectly exposes anonymous content
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+ try {
+ active.id;
+ } catch( e ) {
+ active = document.body;
+ }
+
+ element.wrap( wrapper );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if ( element.css( "position" ) === "static" ) {
+ wrapper.css({ position: "relative" });
+ element.css({ position: "relative" });
+ } else {
+ $.extend( props, {
+ position: element.css( "position" ),
+ zIndex: element.css( "z-index" )
+ });
+ $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+ props[ pos ] = element.css( pos );
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+ props[ pos ] = "auto";
+ }
+ });
+ element.css({
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ });
+ }
+ element.css(size);
+
+ return wrapper.css( props ).show();
+ },
+
+ removeWrapper: function( element ) {
+ var active = document.activeElement;
+
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+ element.parent().replaceWith( element );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+ }
+
+
+ return element;
+ },
+
+ setTransition: function( element, list, factor, value ) {
+ value = value || {};
+ $.each( list, function( i, x ) {
+ var unit = element.cssUnit( x );
+ if ( unit[ 0 ] > 0 ) {
+ value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+ }
+ });
+ return value;
+ }
+});
+
+// return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+ // allow passing all options as the first parameter
+ if ( $.isPlainObject( effect ) ) {
+ options = effect;
+ effect = effect.effect;
+ }
+
+ // convert to an object
+ effect = { effect: effect };
+
+ // catch (effect, null, ...)
+ if ( options == null ) {
+ options = {};
+ }
+
+ // catch (effect, callback)
+ if ( $.isFunction( options ) ) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+
+ // catch (effect, speed, ?)
+ if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+
+ // catch (effect, options, callback)
+ if ( $.isFunction( speed ) ) {
+ callback = speed;
+ speed = null;
+ }
+
+ // add options to effect
+ if ( options ) {
+ $.extend( effect, options );
+ }
+
+ speed = speed || options.duration;
+ effect.duration = $.fx.off ? 0 :
+ typeof speed === "number" ? speed :
+ speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+ $.fx.speeds._default;
+
+ effect.complete = callback || options.complete;
+
+ return effect;
+}
+
+function standardSpeed( speed ) {
+ // valid standard speeds
+ if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
+ return true;
+ }
+
+ // invalid strings - treat as "normal" speed
+ return typeof speed === "string" && !$.effects.effect[ speed ];
+}
+
+$.fn.extend({
+ effect: function( /* effect, options, speed, callback */ ) {
+ var args = _normalizeArguments.apply( this, arguments ),
+ mode = args.mode,
+ queue = args.queue,
+ effectMethod = $.effects.effect[ args.effect ];
+
+ if ( $.fx.off || !effectMethod ) {
+ // delegate to the original method (e.g., .show()) if possible
+ if ( mode ) {
+ return this[ mode ]( args.duration, args.complete );
+ } else {
+ return this.each( function() {
+ if ( args.complete ) {
+ args.complete.call( this );
+ }
+ });
+ }
+ }
+
+ function run( next ) {
+ var elem = $( this ),
+ complete = args.complete,
+ mode = args.mode;
+
+ function done() {
+ if ( $.isFunction( complete ) ) {
+ complete.call( elem[0] );
+ }
+ if ( $.isFunction( next ) ) {
+ next();
+ }
+ }
+
+ // if the element is hiddden and mode is hide,
+ // or element is visible and mode is show
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+ done();
+ } else {
+ effectMethod.call( elem[0], args, done );
+ }
+ }
+
+ return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+ },
+
+ _show: $.fn.show,
+ show: function( speed ) {
+ if ( standardSpeed( speed ) ) {
+ return this._show.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "show";
+ return this.effect.call( this, args );
+ }
+ },
+
+ _hide: $.fn.hide,
+ hide: function( speed ) {
+ if ( standardSpeed( speed ) ) {
+ return this._hide.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "hide";
+ return this.effect.call( this, args );
+ }
+ },
+
+ // jQuery core overloads toggle and creates _toggle
+ __toggle: $.fn.toggle,
+ toggle: function( speed ) {
+ if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
+ return this.__toggle.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "toggle";
+ return this.effect.call( this, args );
+ }
+ },
+
+ // helper functions
+ cssUnit: function(key) {
+ var style = this.css( key ),
+ val = [];
+
+ $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+ if ( style.indexOf( unit ) > 0 ) {
+ val = [ parseFloat( style ), unit ];
+ }
+ });
+ return val;
+ }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+(function() {
+
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+ baseEasings[ name ] = function( p ) {
+ return Math.pow( p, i + 2 );
+ };
+});
+
+$.extend( baseEasings, {
+ Sine: function ( p ) {
+ return 1 - Math.cos( p * Math.PI / 2 );
+ },
+ Circ: function ( p ) {
+ return 1 - Math.sqrt( 1 - p * p );
+ },
+ Elastic: function( p ) {
+ return p === 0 || p === 1 ? p :
+ -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+ },
+ Back: function( p ) {
+ return p * p * ( 3 * p - 2 );
+ },
+ Bounce: function ( p ) {
+ var pow2,
+ bounce = 4;
+
+ while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+ return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+ }
+});
+
+$.each( baseEasings, function( name, easeIn ) {
+ $.easing[ "easeIn" + name ] = easeIn;
+ $.easing[ "easeOut" + name ] = function( p ) {
+ return 1 - easeIn( 1 - p );
+ };
+ $.easing[ "easeInOut" + name ] = function( p ) {
+ return p < 0.5 ?
+ easeIn( p * 2 ) / 2 :
+ 1 - easeIn( p * -2 + 2 ) / 2;
+ };
+});
+
+})();
+
+})(jQuery));
+(function( $, undefined ) {
+
+var rvertical = /up|down|vertical/,
+ rpositivemotion = /up|left|vertical|horizontal/;
+
+$.effects.effect.blind = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ direction = o.direction || "up",
+ vertical = rvertical.test( direction ),
+ ref = vertical ? "height" : "width",
+ ref2 = vertical ? "top" : "left",
+ motion = rpositivemotion.test( direction ),
+ animation = {},
+ show = mode === "show",
+ wrapper, distance, margin;
+
+ // if already wrapped, the wrapper's properties are my property. #6245
+ if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+ $.effects.save( el.parent(), props );
+ } else {
+ $.effects.save( el, props );
+ }
+ el.show();
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ distance = wrapper[ ref ]();
+ margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+
+ animation[ ref ] = show ? distance : 0;
+ if ( !motion ) {
+ el
+ .css( vertical ? "bottom" : "right", 0 )
+ .css( vertical ? "top" : "left", "auto" )
+ .css({ position: "absolute" });
+
+ animation[ ref2 ] = show ? margin : distance + margin;
+ }
+
+ // start at 0 if we are showing
+ if ( show ) {
+ wrapper.css( ref, 0 );
+ if ( ! motion ) {
+ wrapper.css( ref2, margin + distance );
+ }
+ }
+
+ // Animate
+ wrapper.animate( animation, {
+ duration: o.duration,
+ easing: o.easing,
+ queue: false,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.bounce = function( o, done ) {
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+
+ // defaults:
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ hide = mode === "hide",
+ show = mode === "show",
+ direction = o.direction || "up",
+ distance = o.distance,
+ times = o.times || 5,
+
+ // number of internal animations
+ anims = times * 2 + ( show || hide ? 1 : 0 ),
+ speed = o.duration / anims,
+ easing = o.easing,
+
+ // utility:
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ),
+ i,
+ upAnim,
+ downAnim,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ // Avoid touching opacity to prevent clearType and PNG issues in IE
+ if ( show || hide ) {
+ props.push( "opacity" );
+ }
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el ); // Create Wrapper
+
+ // default distance for the BIGGEST bounce is the outer Distance / 3
+ if ( !distance ) {
+ distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+ }
+
+ if ( show ) {
+ downAnim = { opacity: 1 };
+ downAnim[ ref ] = 0;
+
+ // if we are showing, force opacity 0 and set the initial position
+ // then do the "first" animation
+ el.css( "opacity", 0 )
+ .css( ref, motion ? -distance * 2 : distance * 2 )
+ .animate( downAnim, speed, easing );
+ }
+
+ // start at the smallest distance if we are hiding
+ if ( hide ) {
+ distance = distance / Math.pow( 2, times - 1 );
+ }
+
+ downAnim = {};
+ downAnim[ ref ] = 0;
+ // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+ for ( i = 0; i < times; i++ ) {
+ upAnim = {};
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate( upAnim, speed, easing )
+ .animate( downAnim, speed, easing );
+
+ distance = hide ? distance * 2 : distance / 2;
+ }
+
+ // Last Bounce when Hiding
+ if ( hide ) {
+ upAnim = { opacity: 0 };
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate( upAnim, speed, easing );
+ }
+
+ el.queue(function() {
+ if ( hide ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ el.dequeue();
+
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.clip = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ direction = o.direction || "vertical",
+ vert = direction === "vertical",
+ size = vert ? "height" : "width",
+ position = vert ? "top" : "left",
+ animation = {},
+ wrapper, animate, distance;
+
+ // Save & Show
+ $.effects.save( el, props );
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+ animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+ distance = animate[ size ]();
+
+ // Shift
+ if ( show ) {
+ animate.css( size, 0 );
+ animate.css( position, distance / 2 );
+ }
+
+ // Create Animation Object:
+ animation[ size ] = show ? distance : 0;
+ animation[ position ] = show ? 0 : distance / 2;
+
+ // Animate
+ animate.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( !show ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.drop = function( o, done ) {
+
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+ animation = {
+ opacity: show ? 1 : 0
+ },
+ distance;
+
+ // Adjust
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+
+ distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+
+ if ( show ) {
+ el
+ .css( "opacity", 0 )
+ .css( ref, motion === "pos" ? -distance : distance );
+ }
+
+ // Animation
+ animation[ ref ] = ( show ?
+ ( motion === "pos" ? "+=" : "-=" ) :
+ ( motion === "pos" ? "-=" : "+=" ) ) +
+ distance;
+
+ // Animate
+ el.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.explode = function( o, done ) {
+
+ var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+ cells = rows,
+ el = $( this ),
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+
+ // show and then visibility:hidden the element before calculating offset
+ offset = el.show().css( "visibility", "hidden" ).offset(),
+
+ // width and height of a piece
+ width = Math.ceil( el.outerWidth() / cells ),
+ height = Math.ceil( el.outerHeight() / rows ),
+ pieces = [],
+
+ // loop
+ i, j, left, top, mx, my;
+
+ // children animate complete:
+ function childComplete() {
+ pieces.push( this );
+ if ( pieces.length === rows * cells ) {
+ animComplete();
+ }
+ }
+
+ // clone the element for each row and cell.
+ for( i = 0; i < rows ; i++ ) { // ===>
+ top = offset.top + i * height;
+ my = i - ( rows - 1 ) / 2 ;
+
+ for( j = 0; j < cells ; j++ ) { // |||
+ left = offset.left + j * width;
+ mx = j - ( cells - 1 ) / 2 ;
+
+ // Create a clone of the now hidden main element that will be absolute positioned
+ // within a wrapper div off the -left and -top equal to size of our pieces
+ el
+ .clone()
+ .appendTo( "body" )
+ .wrap( "<div></div>" )
+ .css({
+ position: "absolute",
+ visibility: "visible",
+ left: -j * width,
+ top: -i * height
+ })
+
+ // select the wrapper - make it overflow: hidden and absolute positioned based on
+ // where the original was located +left and +top equal to the size of pieces
+ .parent()
+ .addClass( "ui-effects-explode" )
+ .css({
+ position: "absolute",
+ overflow: "hidden",
+ width: width,
+ height: height,
+ left: left + ( show ? mx * width : 0 ),
+ top: top + ( show ? my * height : 0 ),
+ opacity: show ? 0 : 1
+ }).animate({
+ left: left + ( show ? 0 : mx * width ),
+ top: top + ( show ? 0 : my * height ),
+ opacity: show ? 1 : 0
+ }, o.duration || 500, o.easing, childComplete );
+ }
+ }
+
+ function animComplete() {
+ el.css({
+ visibility: "visible"
+ });
+ $( pieces ).remove();
+ if ( !show ) {
+ el.hide();
+ }
+ done();
+ }
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.fade = function( o, done ) {
+ var el = $( this ),
+ mode = $.effects.setMode( el, o.mode || "toggle" );
+
+ el.animate({
+ opacity: mode
+ }, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: done
+ });
+};
+
+})( jQuery );
+(function( $, undefined ) {
+
+$.effects.effect.fold = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ hide = mode === "hide",
+ size = o.size || 15,
+ percent = /([0-9]+)%/.exec( size ),
+ horizFirst = !!o.horizFirst,
+ widthFirst = show !== horizFirst,
+ ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+ duration = o.duration / 2,
+ wrapper, distance,
+ animation1 = {},
+ animation2 = {};
+
+ $.effects.save( el, props );
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+ distance = widthFirst ?
+ [ wrapper.width(), wrapper.height() ] :
+ [ wrapper.height(), wrapper.width() ];
+
+ if ( percent ) {
+ size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+ }
+ if ( show ) {
+ wrapper.css( horizFirst ? {
+ height: 0,
+ width: size
+ } : {
+ height: size,
+ width: 0
+ });
+ }
+
+ // Animation
+ animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+ animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+
+ // Animate
+ wrapper
+ .animate( animation1, duration, o.easing )
+ .animate( animation2, duration, o.easing, function() {
+ if ( hide ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.highlight = function( o, done ) {
+ var elem = $( this ),
+ props = [ "backgroundImage", "backgroundColor", "opacity" ],
+ mode = $.effects.setMode( elem, o.mode || "show" ),
+ animation = {
+ backgroundColor: elem.css( "backgroundColor" )
+ };
+
+ if (mode === "hide") {
+ animation.opacity = 0;
+ }
+
+ $.effects.save( elem, props );
+
+ elem
+ .show()
+ .css({
+ backgroundImage: "none",
+ backgroundColor: o.color || "#ffff99"
+ })
+ .animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ elem.hide();
+ }
+ $.effects.restore( elem, props );
+ done();
+ }
+ });
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.pulsate = function( o, done ) {
+ var elem = $( this ),
+ mode = $.effects.setMode( elem, o.mode || "show" ),
+ show = mode === "show",
+ hide = mode === "hide",
+ showhide = ( show || mode === "hide" ),
+
+ // showing or hiding leaves of the "last" animation
+ anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+ duration = o.duration / anims,
+ animateTo = 0,
+ queue = elem.queue(),
+ queuelen = queue.length,
+ i;
+
+ if ( show || !elem.is(":visible")) {
+ elem.css( "opacity", 0 ).show();
+ animateTo = 1;
+ }
+
+ // anims - 1 opacity "toggles"
+ for ( i = 1; i < anims; i++ ) {
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing );
+ animateTo = 1 - animateTo;
+ }
+
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing);
+
+ elem.queue(function() {
+ if ( hide ) {
+ elem.hide();
+ }
+ done();
+ });
+
+ // We just queued up "anims" animations, we need to put them next in the queue
+ if ( queuelen > 1 ) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ elem.dequeue();
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.puff = function( o, done ) {
+ var elem = $( this ),
+ mode = $.effects.setMode( elem, o.mode || "hide" ),
+ hide = mode === "hide",
+ percent = parseInt( o.percent, 10 ) || 150,
+ factor = percent / 100,
+ original = {
+ height: elem.height(),
+ width: elem.width(),
+ outerHeight: elem.outerHeight(),
+ outerWidth: elem.outerWidth()
+ };
+
+ $.extend( o, {
+ effect: "scale",
+ queue: false,
+ fade: true,
+ mode: mode,
+ complete: done,
+ percent: hide ? percent : 100,
+ from: hide ?
+ original :
+ {
+ height: original.height * factor,
+ width: original.width * factor,
+ outerHeight: original.outerHeight * factor,
+ outerWidth: original.outerWidth * factor
+ }
+ });
+
+ elem.effect( o );
+};
+
+$.effects.effect.scale = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ options = $.extend( true, {}, o ),
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ percent = parseInt( o.percent, 10 ) ||
+ ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+ direction = o.direction || "both",
+ origin = o.origin,
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ },
+ factor = {
+ y: direction !== "horizontal" ? (percent / 100) : 1,
+ x: direction !== "vertical" ? (percent / 100) : 1
+ };
+
+ // We are going to pass this effect to the size effect:
+ options.effect = "size";
+ options.queue = false;
+ options.complete = done;
+
+ // Set default origin and restore for show/hide
+ if ( mode !== "effect" ) {
+ options.origin = origin || ["middle","center"];
+ options.restore = true;
+ }
+
+ options.from = o.from || ( mode === "show" ? {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ } : original );
+ options.to = {
+ height: original.height * factor.y,
+ width: original.width * factor.x,
+ outerHeight: original.outerHeight * factor.y,
+ outerWidth: original.outerWidth * factor.x
+ };
+
+ // Fade option to support puff
+ if ( options.fade ) {
+ if ( mode === "show" ) {
+ options.from.opacity = 0;
+ options.to.opacity = 1;
+ }
+ if ( mode === "hide" ) {
+ options.from.opacity = 1;
+ options.to.opacity = 0;
+ }
+ }
+
+ // Animate
+ el.effect( options );
+
+};
+
+$.effects.effect.size = function( o, done ) {
+
+ // Create element
+ var original, baseline, factor,
+ el = $( this ),
+ props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+
+ // Always restore
+ props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+
+ // Copy for children
+ props2 = [ "width", "height", "overflow" ],
+ cProps = [ "fontSize" ],
+ vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+ hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+ // Set options
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ restore = o.restore || mode !== "effect",
+ scale = o.scale || "both",
+ origin = o.origin || [ "middle", "center" ],
+ position = el.css( "position" ),
+ props = restore ? props0 : props1,
+ zero = {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ };
+
+ if ( mode === "show" ) {
+ el.show();
+ }
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ };
+
+ if ( o.mode === "toggle" && mode === "show" ) {
+ el.from = o.to || zero;
+ el.to = o.from || original;
+ } else {
+ el.from = o.from || ( mode === "show" ? zero : original );
+ el.to = o.to || ( mode === "hide" ? zero : original );
+ }
+
+ // Set scaling factor
+ factor = {
+ from: {
+ y: el.from.height / original.height,
+ x: el.from.width / original.width
+ },
+ to: {
+ y: el.to.height / original.height,
+ x: el.to.width / original.width
+ }
+ };
+
+ // Scale the css box
+ if ( scale === "box" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ props = props.concat( vProps );
+ el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+ el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ props = props.concat( hProps );
+ el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+ el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+ }
+ }
+
+ // Scale the content
+ if ( scale === "content" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ props = props.concat( cProps ).concat( props2 );
+ el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+ el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+ }
+ }
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+ el.css( "overflow", "hidden" ).css( el.from );
+
+ // Adjust
+ if (origin) { // Calculate baseline shifts
+ baseline = $.effects.getBaseline( origin, original );
+ el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+ el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+ el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+ el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+ }
+ el.css( el.from ); // set top & left
+
+ // Animate
+ if ( scale === "content" || scale === "both" ) { // Scale the children
+
+ // Add margins/font-size
+ vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+ hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+ props2 = props0.concat(vProps).concat(hProps);
+
+ el.find( "*[width]" ).each( function(){
+ var child = $( this ),
+ c_original = {
+ height: child.height(),
+ width: child.width(),
+ outerHeight: child.outerHeight(),
+ outerWidth: child.outerWidth()
+ };
+ if (restore) {
+ $.effects.save(child, props2);
+ }
+
+ child.from = {
+ height: c_original.height * factor.from.y,
+ width: c_original.width * factor.from.x,
+ outerHeight: c_original.outerHeight * factor.from.y,
+ outerWidth: c_original.outerWidth * factor.from.x
+ };
+ child.to = {
+ height: c_original.height * factor.to.y,
+ width: c_original.width * factor.to.x,
+ outerHeight: c_original.height * factor.to.y,
+ outerWidth: c_original.width * factor.to.x
+ };
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+ child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+ child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+ }
+
+ // Animate children
+ child.css( child.from );
+ child.animate( child.to, o.duration, o.easing, function() {
+
+ // Restore children
+ if ( restore ) {
+ $.effects.restore( child, props2 );
+ }
+ });
+ });
+ }
+
+ // Animate
+ el.animate( el.to, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( el.to.opacity === 0 ) {
+ el.css( "opacity", el.from.opacity );
+ }
+ if( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ if ( !restore ) {
+
+ // we need to calculate our new positioning based on the scaling
+ if ( position === "static" ) {
+ el.css({
+ position: "relative",
+ top: el.to.top,
+ left: el.to.left
+ });
+ } else {
+ $.each([ "top", "left" ], function( idx, pos ) {
+ el.css( pos, function( _, str ) {
+ var val = parseInt( str, 10 ),
+ toRef = idx ? el.to.left : el.to.top;
+
+ // if original was "auto", recalculate the new value from wrapper
+ if ( str === "auto" ) {
+ return toRef + "px";
+ }
+
+ return val + toRef + "px";
+ });
+ });
+ }
+ }
+
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.shake = function( o, done ) {
+
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ direction = o.direction || "left",
+ distance = o.distance || 20,
+ times = o.times || 3,
+ anims = times * 2 + 1,
+ speed = Math.round(o.duration/anims),
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ animation = {},
+ animation1 = {},
+ animation2 = {},
+ i,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+
+ // Animation
+ animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+ animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+ animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+ // Animate
+ el.animate( animation, speed, o.easing );
+
+ // Shakes
+ for ( i = 1; i < times; i++ ) {
+ el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+ }
+ el
+ .animate( animation1, speed, o.easing )
+ .animate( animation, speed / 2, o.easing )
+ .queue(function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ el.dequeue();
+
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.slide = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+ mode = $.effects.setMode( el, o.mode || "show" ),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ distance,
+ animation = {};
+
+ // Adjust
+ $.effects.save( el, props );
+ el.show();
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+
+ $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ if ( show ) {
+ el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+ }
+
+ // Animation
+ animation[ ref ] = ( show ?
+ ( positiveMotion ? "+=" : "-=") :
+ ( positiveMotion ? "-=" : "+=")) +
+ distance;
+
+ // Animate
+ el.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.effects.effect.transfer = function( o, done ) {
+ var elem = $( this ),
+ target = $( o.to ),
+ targetFixed = target.css( "position" ) === "fixed",
+ body = $("body"),
+ fixTop = targetFixed ? body.scrollTop() : 0,
+ fixLeft = targetFixed ? body.scrollLeft() : 0,
+ endPosition = target.offset(),
+ animation = {
+ top: endPosition.top - fixTop ,
+ left: endPosition.left - fixLeft ,
+ height: target.innerHeight(),
+ width: target.innerWidth()
+ },
+ startPosition = elem.offset(),
+ transfer = $( "<div class='ui-effects-transfer'></div>" )
+ .appendTo( document.body )
+ .addClass( o.className )
+ .css({
+ top: startPosition.top - fixTop ,
+ left: startPosition.left - fixLeft ,
+ height: elem.innerHeight(),
+ width: elem.innerWidth(),
+ position: targetFixed ? "fixed" : "absolute"
+ })
+ .animate( animation, o.duration, o.easing, function() {
+ transfer.remove();
+ done();
+ });
+};
+
+})(jQuery);
diff --git a/core/js/jquery-ui-1.8.16.custom.min.js b/core/js/jquery-ui-1.8.16.custom.min.js
deleted file mode 100644
index eefefa8579d..00000000000
--- a/core/js/jquery-ui-1.8.16.custom.min.js
+++ /dev/null
@@ -1,761 +0,0 @@
-/*!
- * jQuery UI 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
-this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
-"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
-"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
-outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
-"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
-a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
-c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
-function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
-d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
-b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
-"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
-c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- * jquery.ui.widget.js
- */
-(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
-this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
-!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
-false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;
-this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
-this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
-_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
-false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
-10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||
-!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&
-a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
-this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
-10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
-10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
-(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!=
-"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),
-10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+
-this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&
-!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;
-if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
-b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
-526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
-c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
-h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
-false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
-this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
-c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
-this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=
-a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
-"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<
-c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
-width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&
-o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=
-p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&
-(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
-10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.mouse.js
- * jquery.ui.draggable.js
- */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.16"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parents(":not(body,html)").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);
-if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parents(":not(body,html)").unbind("scroll.droppable");
-a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
-var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
-false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
-this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
-{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
-if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},
-_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,
-{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight:
-Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=
-b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&&
-a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=
-null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||
-0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
-a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
-c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
-b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
-10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
-e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
-e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,
-step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
-e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;
-var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:
-a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-
-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,
-f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
-display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=
-e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
-d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
-"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
-!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
-return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
-b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
-a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
-e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
-c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
-this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
-toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
-var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
-_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
-if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
-this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
-this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
-this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
-this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
-d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
-0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
-a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
-this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
-""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
-this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
-{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
-document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
-10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
-this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
-var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
-this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
-f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
-this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
-a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.position.js
- */
-(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g=
-false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
-a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
-this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
-a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
-d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
-b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
-this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
-b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
-d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
-"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
-(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
-this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
-this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Button 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(b){var h,i,j,g,l=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},k=function(a){var c=a.name,e=a.form,f=b([]);if(c)f=e?b(e).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form});return f};b.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",l);if(typeof this.options.disabled!==
-"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var a=this,c=this.options,e=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!e?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){b(this).addClass("ui-state-hover");
-this===h&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||b(this).removeClass(f)}).bind("click.button",function(d){if(c.disabled){d.preventDefault();d.stopImmediatePropagation()}});this.element.bind("focus.button",function(){a.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){a.buttonElement.removeClass("ui-state-focus")});if(e){this.element.bind("change.button",function(){g||a.refresh()});this.buttonElement.bind("mousedown.button",function(d){if(!c.disabled){g=
-false;i=d.pageX;j=d.pageY}}).bind("mouseup.button",function(d){if(!c.disabled)if(i!==d.pageX||j!==d.pageY)g=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).toggleClass("ui-state-active");a.buttonElement.attr("aria-pressed",a.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).addClass("ui-state-active");a.buttonElement.attr("aria-pressed","true");
-var d=a.element[0];k(d).not(d).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;b(this).addClass("ui-state-active");h=this;b(document).one("mouseup",function(){h=null})}).bind("mouseup.button",function(){if(c.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(d){if(c.disabled)return false;if(d.keyCode==b.ui.keyCode.SPACE||
-d.keyCode==b.ui.keyCode.ENTER)b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(d){d.keyCode===b.ui.keyCode.SPACE&&b(this).click()})}this._setOption("disabled",c.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
-"radio"){var a=this.element.parents().filter(":last"),c="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(c);if(!this.buttonElement.length){a=a.length?a.siblings():this.element.siblings();this.buttonElement=a.filter(c);if(!this.buttonElement.length)this.buttonElement=a.find(c)}this.element.addClass("ui-helper-hidden-accessible");(a=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",a)}else this.buttonElement=this.element},
-widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
-b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);if(a==="disabled")c?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);if(this.type==="radio")k(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
-"true"):b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-c=b("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("<span class='ui-button-icon-primary ui-icon "+e.primary+"'></span>");e.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+e.secondary+"'></span>");if(!this.options.text){d.push(f?"ui-button-icons-only":
-"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")===
-"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
-b.Widget.prototype.destroy.call(this)}})})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.button.js
- * jquery.ui.draggable.js
- * jquery.ui.mouse.js
- * jquery.ui.position.js
- * jquery.ui.resizable.js
- */
-(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
-position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
-b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&!i.isDefaultPrevented()&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
-h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
-e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
-a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
-b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()};c.ui.dialog.maxZ+=1;
-d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
-f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
-function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
-handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
-originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",
-f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):
-[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);
-if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
-e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
-this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
-b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.16",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
-create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&!d.isDefaultPrevented()&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||
-c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&
-c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+
-"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
-g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length?
-(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i-
-m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
-return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false;
-this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
-this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
-this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
-c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
-a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
-this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):
-this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
-return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
-this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e-
-g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"},
-b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Tabs 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
-e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
-d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
-(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
-this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
-if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
-this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
-g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
-function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
-this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
--1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
-d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
-d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
-e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
-j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
-if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
-this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
-load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
-"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
-url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.16"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
-a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-;/*
- * jQuery UI Datepicker 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- * jquery.ui.core.js
- */
-(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout",
-function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
-b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.16"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
-setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,
-"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
-function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c==
-"focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():
-d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,
-b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=
-1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
-2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=
-d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=
-a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,
-"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==
-a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?
-d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);
-this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");
-b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]&&d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]);if(a=d.datepicker._get(b,"onSelect")){c=d.datepicker._formatDate(b);a.apply(b.input?b.input[0]:null,[c,b])}else d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,
-a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=
-a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
-"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode);
-return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",
-a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");c=c?c.apply(a,[a,b]):{};if(c!==false){H(b.settings,c);b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value=
-"";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);
-c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=
-true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});
-a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&
-!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),
-h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=
-this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);
-this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
-_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
-0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e["selected"+(c=="M"?
-"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);
-this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");
-if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?
-b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var D=
-o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=
-function(){if(b.charAt(q)!=a.charAt(A))throw"Unexpected literal at position "+q;q++},q=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else s();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+
-1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",
-COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:
-null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-
-(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=
-0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);
-var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;
-i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=
-Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>
-12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&
-a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
-new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
-n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,
-g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&
-a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+B+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
-B+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O=
-"";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&
-x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
-z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()==
-P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+B+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?"&#xa0;":L?'<span class="ui-state-default">'+
-r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
-"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" >";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&
-(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,
-e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" >";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+
-(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?
-a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,
-e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,
-"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;
-if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a==
-"string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Effects 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */
-jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
-d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
-f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
-[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
-0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
-d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement;
-if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});
-return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,
-arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/
-2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,
-d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,
-a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,
-d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=
-0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;
-if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,
-a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;/*
- * jQuery UI Effects Blind 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
-g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Bounce 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
-3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
-b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Clip 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
-c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Drop 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
-"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Explode 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
-0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
-e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
-;/*
- * jQuery UI Effects Fade 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Fold 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
-10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Highlight 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Pulsate 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
-a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Scale 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
-b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
-1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
-p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
-if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
-a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
-child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
-n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Shake 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
-(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Slide 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
-var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Transfer 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
-b.dequeue()})})}})(jQuery);
-; \ No newline at end of file
diff --git a/core/js/js.js b/core/js/js.js
index 95889ac8a27..ae23c955c38 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -5,6 +5,12 @@
* To the end of config/config.php to enable debug mode.
* The undefined checks fix the broken ie8 console
*/
+var oc_debug;
+var oc_webroot;
+var oc_requesttoken;
+if (typeof oc_webroot === "undefined") {
+ oc_webroot = location.pathname.substr(0, location.pathname.lastIndexOf('/'));
+}
if (oc_debug !== true || typeof console === "undefined" || typeof console.log === "undefined") {
if (!window.console) {
window.console = {};
@@ -37,14 +43,14 @@ function t(app,text, vars){
t.cache[app] = [];
}
}
- var _build = function(text, vars) {
- return text.replace(/{([^{}]*)}/g,
- function (a, b) {
- var r = vars[b];
- return typeof r === 'string' || typeof r === 'number' ? r : a;
- }
- );
- }
+ var _build = function (text, vars) {
+ return text.replace(/{([^{}]*)}/g,
+ function (a, b) {
+ var r = vars[b];
+ return typeof r === 'string' || typeof r === 'number' ? r : a;
+ }
+ );
+ };
if( typeof( t.cache[app][text] ) !== 'undefined' ){
if(typeof vars === 'object') {
return _build(t.cache[app][text], vars);
@@ -88,7 +94,7 @@ var OC={
PERMISSION_DELETE:8,
PERMISSION_SHARE:16,
webroot:oc_webroot,
- appswebroots:oc_appswebroots,
+ appswebroots:(typeof oc_appswebroots !== 'undefined') ? oc_appswebroots:false,
currentUser:(typeof oc_current_user!=='undefined')?oc_current_user:false,
coreApps:['', 'admin','log','search','settings','core','3rdparty'],
/**
@@ -101,6 +107,27 @@ var OC={
return OC.filePath(app,'',file);
},
/**
+ * Creates an url for remote use
+ * @param string $service id
+ * @return string the url
+ *
+ * Returns a url to the given service.
+ */
+ linkToRemoteBase:function(service) {
+ return OC.webroot + '/remote.php/' + service;
+ },
+ /**
+ * @brief Creates an absolute url for remote use
+ * @param string $service id
+ * @param bool $add_slash
+ * @return string the url
+ *
+ * Returns a absolute url to the given service.
+ */
+ linkToRemote:function(service) {
+ return window.location.protocol + '//' + window.location.host + OC.linkToRemoteBase(service);
+ },
+ /**
* get the absolute url for a file in an app
* @param app the id of the app
* @param type the type of the file to link to (e.g. css,img,ajax.template)
@@ -247,7 +274,7 @@ var OC={
var popup = $('#appsettings_popup');
if(popup.length == 0) {
$('body').prepend('<div class="popup hidden" id="appsettings_popup"></div>');
- popup = $('#appsettings_popup');
+ popup = $('#appsettings_popup');
popup.addClass(settings.hasClass('topright') ? 'topright' : 'bottomleft');
}
if(popup.is(':visible')) {
@@ -289,6 +316,41 @@ OC.search.lastResults={};
OC.addStyle.loaded=[];
OC.addScript.loaded=[];
+OC.Notification={
+ getDefaultNotificationFunction: null,
+ setDefault: function(callback) {
+ OC.Notification.getDefaultNotificationFunction = callback;
+ },
+ hide: function(callback) {
+ $("#notification").text('');
+ $('#notification').fadeOut('400', function(){
+ if (OC.Notification.isHidden()) {
+ if (OC.Notification.getDefaultNotificationFunction) {
+ OC.Notification.getDefaultNotificationFunction.call();
+ }
+ }
+ if (callback) {
+ callback.call();
+ }
+ });
+ },
+ showHtml: function(html) {
+ var notification = $('#notification');
+ notification.hide();
+ notification.html(html);
+ notification.fadeIn().css("display","inline");
+ },
+ show: function(text) {
+ var notification = $('#notification');
+ notification.hide();
+ notification.text(text);
+ notification.fadeIn().css("display","inline");
+ },
+ isHidden: function() {
+ return ($("#notification").text() === '');
+ }
+};
+
OC.Breadcrumb={
container:null,
crumbs:[],
@@ -298,7 +360,6 @@ OC.Breadcrumb={
}
var crumb=$('<div/>');
crumb.addClass('crumb').addClass('last');
- crumb.attr('style','background-image:url("'+OC.imagePath('core','breadcrumb')+'")');
var crumbLink=$('<a/>');
crumbLink.attr('href',link);
@@ -491,7 +552,6 @@ function object(o) {
return new F();
}
-
/**
* Fills height of window. (more precise than height: 100%;)
*/
@@ -504,6 +564,7 @@ function fillHeight(selector) {
if(selector.outerHeight() > selector.height()){
selector.css('height', height-(selector.outerHeight()-selector.height()) + 'px');
}
+ console.warn("This function is deprecated! Use CSS instead");
}
/**
@@ -519,17 +580,11 @@ function fillWindow(selector) {
if(selector.outerWidth() > selector.width()){
selector.css('width', width-(selector.outerWidth()-selector.width()) + 'px');
}
+ console.warn("This function is deprecated! Use CSS instead");
}
$(document).ready(function(){
- $(window).resize(function () {
- fillHeight($('#leftcontent'));
- fillWindow($('#content'));
- fillWindow($('#rightcontent'));
- });
- $(window).trigger('resize');
-
if(!SVGSupport()){ //replace all svg images with png images for browser that dont support svg
replaceSVG();
}else{
@@ -573,6 +628,8 @@ $(document).ready(function(){
});
// 'show password' checkbox
+ $('#password').showPassword();
+ $('#adminpass').showPassword();
$('#pass2').showPassword();
//use infield labels
@@ -613,14 +670,13 @@ $(document).ready(function(){
event.stopPropagation();
});
$(window).click(function(){//hide the settings menu when clicking outside it
- if($('body').attr("id")==="body-user"){
- $('#settings #expanddiv').slideUp();
- }
+ $('#settings #expanddiv').slideUp();
});
// all the tipsy stuff needs to be here (in reverse order) to work
$('.jp-controls .jp-previous').tipsy({gravity:'nw', fade:true, live:true});
$('.jp-controls .jp-next').tipsy({gravity:'n', fade:true, live:true});
+ $('.displayName .action').tipsy({gravity:'se', fade:true, live:true});
$('.password .action').tipsy({gravity:'se', fade:true, live:true});
$('#upload').tipsy({gravity:'w', fade:true});
$('.selectedActions a').tipsy({gravity:'s', fade:true, live:true});
diff --git a/core/js/multiselect.js b/core/js/multiselect.js
index c4fd74b0475..623c6e0f7e1 100644
--- a/core/js/multiselect.js
+++ b/core/js/multiselect.js
@@ -1,20 +1,44 @@
+/**
+ * @param 'createCallback' A function to be called when a new entry is created. Two arguments are supplied to this function:
+ * The select element used and the value of the option. If the function returns false addition will be cancelled. If it returns
+ * anything else it will be used as the value of the newly added option.
+ * @param 'createText' The placeholder text for the create action.
+ * @param 'title' The title to show if no options are selected.
+ * @param 'checked' An array containing values for options that should be checked. Any options which are already selected will be added to this array.
+ * @param 'labels' The corresponding labels to show for the checked items.
+ * @param 'oncheck' Callback function which will be called when a checkbox/radiobutton is selected. If the function returns false the input will be unchecked.
+ * @param 'onuncheck' @see 'oncheck'.
+ * @param 'singleSelect' If true radiobuttons will be used instead of checkboxes.
+ */
(function( $ ){
var multiSelectId=-1;
- $.fn.multiSelect=function(options){
+ $.fn.multiSelect=function(options) {
multiSelectId++;
var settings = {
'createCallback':false,
'createText':false,
+ 'singleSelect':false,
+ 'selectedFirst':false,
+ 'sort':true,
'title':this.attr('title'),
'checked':[],
+ 'labels':[],
'oncheck':false,
'onuncheck':false,
'minWidth': 'default;',
};
+ $(this).attr('data-msid', multiSelectId);
$.extend(settings,options);
- $.each(this.children(),function(i,option){
- if($(option).attr('selected') && settings.checked.indexOf($(option).val())==-1){
+ $.each(this.children(),function(i,option) {
+ // If the option is selected, but not in the checked array, add it.
+ if($(option).attr('selected') && settings.checked.indexOf($(option).val()) === -1) {
settings.checked.push($(option).val());
+ settings.labels.push($(option).text().trim());
+ }
+ // If the option is in the checked array but not selected, select it.
+ else if(settings.checked.indexOf($(option).val()) !== -1 && !$(option).attr('selected')) {
+ $(option).attr('selected', 'selected');
+ settings.labels.push($(option).text().trim());
}
});
var button=$('<div class="multiselect button"><span>'+settings.title+'</span><span>â–¾</span></div>');
@@ -24,24 +48,36 @@
button.selectedItems=[];
this.hide();
this.before(span);
- if(settings.minWidth=='default'){
+ if(settings.minWidth=='default') {
settings.minWidth=button.width();
}
button.css('min-width',settings.minWidth);
settings.minOuterWidth=button.outerWidth()-2;
button.data('settings',settings);
- if(settings.checked.length>0){
- button.children('span').first().text(settings.checked.join(', '));
+
+ if(!settings.singleSelect && settings.checked.length>0) {
+ button.children('span').first().text(settings.labels.join(', '));
+ } else if(settings.singleSelect) {
+ button.children('span').first().text(this.find(':selected').text());
}
+ var self = this;
+ self.menuDirection = 'down';
button.click(function(event){
var button=$(this);
- if(button.parent().children('ul').length>0){
- button.parent().children('ul').slideUp(400,function(){
- button.parent().children('ul').remove();
- button.removeClass('active');
- });
+ if(button.parent().children('ul').length>0) {
+ if(self.menuDirection === 'down') {
+ button.parent().children('ul').slideUp(400,function() {
+ button.parent().children('ul').remove();
+ button.removeClass('active down');
+ });
+ } else {
+ button.parent().children('ul').fadeOut(400,function() {
+ button.parent().children('ul').remove();
+ button.removeClass('active up');
+ });
+ }
return;
}
var lists=$('ul.multiselectoptions');
@@ -54,49 +90,69 @@
event.stopPropagation();
var options=$(this).parent().next().children();
var list=$('<ul class="multiselectoptions"/>').hide().appendTo($(this).parent());
- function createItem(element,checked){
+ var inputType = settings.singleSelect ? 'radio' : 'checkbox';
+ function createItem(element, checked){
element=$(element);
var item=element.val();
var id='ms'+multiSelectId+'-option-'+item;
- var input=$('<input type="checkbox"/>');
+ var input=$('<input type="' + inputType + '"/>');
input.attr('id',id);
+ if(settings.singleSelect) {
+ input.attr('name', 'ms'+multiSelectId+'-option');
+ }
var label=$('<label/>');
label.attr('for',id);
- label.text(item);
- if(settings.checked.indexOf(item)!=-1 || checked){
- input.attr('checked',true);
+ label.text(element.text() || item);
+ if(settings.checked.indexOf(item)!=-1 || checked) {
+ input.attr('checked', true);
}
if(checked){
- settings.checked.push(item);
+ if(settings.singleSelect) {
+ settings.checked = [item];
+ settings.labels = [item];
+ } else {
+ settings.checked.push(item);
+ settings.labels.push(item);
+ }
}
input.change(function(){
- var groupname=$(this).next().text();
- if($(this).is(':checked')){
+ var value = $(this).attr('id').substring(String('ms'+multiSelectId+'-option').length+1);
+ var label = $(this).next().text().trim();
+ if($(this).is(':checked')) {
+ if(settings.singleSelect) {
+ settings.checked = [];
+ settings.labels = [];
+ $.each(self.find('option'), function() {
+ $(this).removeAttr('selected');
+ });
+ }
element.attr('selected','selected');
- if(settings.oncheck){
- if(settings.oncheck(groupname)===false){
+ if(typeof settings.oncheck === 'function') {
+ if(settings.oncheck(value)===false) {
$(this).attr('checked', false);
return;
}
}
- settings.checked.push(groupname);
- }else{
- var index=settings.checked.indexOf(groupname);
+ settings.checked.push(value);
+ settings.labels.push(label);
+ $(this).parent().addClass('checked');
+ } else {
+ var index=settings.checked.indexOf(value);
element.attr('selected',null);
- if(settings.onuncheck){
- if(settings.onuncheck(groupname)===false){
+ if(typeof settings.onuncheck === 'function') {
+ if(settings.onuncheck(value)===false) {
$(this).attr('checked',true);
return;
}
}
+ $(this).parent().removeClass('checked');
settings.checked.splice(index,1);
+ settings.labels.splice(index,1);
}
var oldWidth=button.width();
- if(settings.checked.length>0){
- button.children('span').first().text(settings.checked.join(', '));
- }else{
- button.children('span').first().text(settings.title);
- }
+ button.children('span').first().text(settings.labels.length > 0
+ ? settings.labels.join(', ')
+ : settings.title);
var newOuterWidth=Math.max((button.outerWidth()-2),settings.minOuterWidth)+'px';
var newWidth=Math.max(button.width(),settings.minWidth);
var pos=button.position();
@@ -110,6 +166,9 @@
});
var li=$('<li></li>');
li.append(input).append(label);
+ if(input.is(':checked')) {
+ li.addClass('checked');
+ }
return li;
}
$.each(options,function(index,item){
@@ -117,13 +176,13 @@
});
button.parent().data('preventHide',false);
if(settings.createText){
- var li=$('<li>+ <em>'+settings.createText+'<em></li>');
+ var li=$('<li class="creator">+ <em>'+settings.createText+'<em></li>');
li.click(function(event){
li.empty();
var input=$('<input class="new">');
li.append(input);
input.focus();
- input.css('width',button.width());
+ input.css('width',button.innerWidth());
button.parent().data('preventHide',true);
input.keypress(function(event) {
if(event.keyCode == 13) {
@@ -132,7 +191,7 @@
var value = $(this).val();
var exists = false;
$.each(options,function(index, item) {
- if ($(item).val() == value) {
+ if ($(item).val() == value || $(item).text() == value) {
exists = true;
return false;
}
@@ -141,22 +200,39 @@
return false;
}
var li=$(this).parent();
+ var val = $(this).val()
+ var select=button.parent().next();
+ if(typeof settings.createCallback === 'function') {
+ var response = settings.createCallback(select, val);
+ if(response === false) {
+ return false;
+ } else if(typeof response !== 'undefined') {
+ val = response;
+ }
+ }
+ if(settings.singleSelect) {
+ $.each(select.find('option:selected'), function() {
+ $(this).removeAttr('selected');
+ });
+ }
$(this).remove();
li.text('+ '+settings.createText);
li.before(createItem(this));
- var select=button.parent().next();
var option=$('<option selected="selected"/>');
- option.attr('value',value);
- option.text($(this).val());
+ option.text($(this).val()).val(val).attr('selected', 'selected');
select.append(option);
- li.prev().children('input').trigger('click');
+ li.prev().children('input').prop('checked', true).trigger('change');
button.parent().data('preventHide',false);
- if(settings.createCallback){
- settings.createCallback($(this).val());
+ button.children('span').first().text(settings.labels.length > 0
+ ? settings.labels.join(', ')
+ : settings.title);
+ if(self.menuDirection === 'up') {
+ var list = li.parent();
+ list.css('top', list.position().top-li.outerHeight());
}
}
});
- input.blur(function(){
+ input.blur(function() {
event.preventDefault();
event.stopPropagation();
$(this).remove();
@@ -168,21 +244,72 @@
});
list.append(li);
}
+
+ var doSort = function(list, selector) {
+ var rows = list.find('li'+selector).get();
+
+ if(settings.sort) {
+ rows.sort(function(a, b) {
+ return $(a).text().toUpperCase().localeCompare($(b).text().toUpperCase());
+ });
+ }
+
+ $.each(rows, function(index, row) {
+ list.append(row);
+ });
+ };
+ if(settings.sort && settings.selectedFirst) {
+ doSort(list, '.checked');
+ doSort(list, ':not(.checked)');
+ } else if(settings.sort && !settings.selectedFirst) {
+ doSort(list, '');
+ }
+ list.append(list.find('li.creator'));
var pos=button.position();
- list.css('top',pos.top+button.outerHeight()-5);
- list.css('left',pos.left+3);
- list.css('width',(button.outerWidth()-2)+'px');
- list.slideDown();
- list.click(function(event){
+ if($(document).height() > (button.offset().top+button.outerHeight() + list.children().length * button.height())
+ || $(document).height()/2 > pos.top
+ ) {
+ list.css({
+ top:pos.top+button.outerHeight()-5,
+ left:pos.left+3,
+ width:(button.outerWidth()-2)+'px',
+ 'max-height':($(document).height()-(button.offset().top+button.outerHeight()+10))+'px'
+ });
+ list.addClass('down');
+ button.addClass('down');
+ list.slideDown();
+ } else {
+ list.css('max-height', $(document).height()-($(document).height()-(pos.top)+50)+'px');
+ list.css({
+ top:pos.top - list.height(),
+ left:pos.left+3,
+ width:(button.outerWidth()-2)+'px'
+
+ });
+ list.detach().insertBefore($(this));
+ list.addClass('up');
+ button.addClass('up');
+ list.fadeIn();
+ self.menuDirection = 'up';
+ }
+ list.click(function(event) {
event.stopPropagation();
});
});
- $(window).click(function(){
- if(!button.parent().data('preventHide')){
- button.parent().children('ul').slideUp(400,function(){
- button.parent().children('ul').remove();
- button.removeClass('active');
- });
+ $(window).click(function() {
+ if(!button.parent().data('preventHide')) {
+ // How can I save the effect in a var?
+ if(self.menuDirection === 'down') {
+ button.parent().children('ul').slideUp(400,function() {
+ button.parent().children('ul').remove();
+ button.removeClass('active down');
+ });
+ } else {
+ button.parent().children('ul').fadeOut(400,function() {
+ button.parent().children('ul').remove();
+ button.removeClass('active up');
+ });
+ }
}
});
diff --git a/core/js/oc-requesttoken.js b/core/js/oc-requesttoken.js
new file mode 100644
index 00000000000..f4cf286b8aa
--- /dev/null
+++ b/core/js/oc-requesttoken.js
@@ -0,0 +1,3 @@
+$(document).bind('ajaxSend', function(elm, xhr, s) {
+ xhr.setRequestHeader('requesttoken', oc_requesttoken);
+}); \ No newline at end of file
diff --git a/core/js/oc-vcategories.js b/core/js/oc-vcategories.js
index 609703f2cc9..3e75767c49c 100644
--- a/core/js/oc-vcategories.js
+++ b/core/js/oc-vcategories.js
@@ -50,7 +50,7 @@ var OCCategories= {
$('#category_dialog').remove();
},
open : function(event, ui) {
- $('#category_addinput').live('input',function() {
+ $('#category_addinput').on('input',function() {
if($(this).val().length > 0) {
$('#category_addbutton').removeAttr('disabled');
}
@@ -61,7 +61,7 @@ var OCCategories= {
$('#category_addbutton').attr('disabled', 'disabled');
return false;
});
- $('#category_addbutton').live('click',function(e) {
+ $('#category_addbutton').on('click',function(e) {
e.preventDefault();
if($('#category_addinput').val().length > 0) {
OCCategories.add($('#category_addinput').val());
diff --git a/core/js/setup.js b/core/js/setup.js
index 39fcf4a2715..2656cac2f45 100644
--- a/core/js/setup.js
+++ b/core/js/setup.js
@@ -55,8 +55,7 @@ $(document).ready(function() {
// Disable inputs
$(':submit', this).attr('disabled','disabled').val('Finishing …');
$('input', this).addClass('ui-state-disabled').attr('disabled','disabled');
- $('#selectDbType').button('disable');
- $('label.ui-button', this).addClass('ui-state-disabled').attr('aria-disabled', 'true').button('disable');
+ $('#selectDbType').buttonset('disable');
// Create the form
var form = $('<form>');
diff --git a/core/js/share.js b/core/js/share.js
index bb3ec010ff5..6d1c3954044 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -23,7 +23,10 @@ OC.Share={
} else {
var file = $('tr').filterAttr('data-file', OC.basename(item));
if (file.length > 0) {
- $(file).find('.fileactions .action').filterAttr('data-action', 'Share').find('img').attr('src', image);
+ var action = $(file).find('.fileactions .action').filterAttr('data-action', 'Share');
+ action.find('img').attr('src', image);
+ action.addClass('permanent');
+ action.html(t('core', 'Shared'));
}
var dir = $('#dir').val();
if (dir.length > 1) {
@@ -32,9 +35,12 @@ OC.Share={
// Search for possible parent folders that are shared
while (path != last) {
if (path == item) {
- var img = $('.fileactions .action').filterAttr('data-action', 'Share').find('img');
+ var action = $('.fileactions .action').filterAttr('data-action', 'Share');
+ var img = action.find('img');
if (img.attr('src') != OC.imagePath('core', 'actions/public')) {
img.attr('src', image);
+ action.addClass('permanent');
+ action.html(t('core', 'Shared'));
}
}
last = path;
@@ -48,7 +54,8 @@ OC.Share={
},
updateIcon:function(itemType, itemSource) {
if (itemType == 'file' || itemType == 'folder') {
- var filename = $('tr').filterAttr('data-id', String(itemSource)).data('file');
+ var file = $('tr').filterAttr('data-id', String(itemSource));
+ var filename = file.data('file');
if ($('#dir').val() == '/') {
itemSource = $('#dir').val() + filename;
} else {
@@ -75,6 +82,16 @@ OC.Share={
});
if (itemType != 'file' && itemType != 'folder') {
$('a.share[data-item="'+itemSource+'"]').css('background', 'url('+image+') no-repeat center');
+ } else {
+ var action = $(file).find('.fileactions .action').filterAttr('data-action', 'Share');
+ action.find('img').attr('src', image);
+ if (shares) {
+ action.addClass('permanent');
+ action.html(t('core', 'Shared'));
+ } else {
+ action.removeClass('permanent');
+ action.html(t('core', 'Share'));
+ }
}
if (shares) {
OC.Share.statuses[itemSource] = link;
@@ -148,9 +165,9 @@ OC.Share={
var html = '<div id="dropdown" class="drop" data-item-type="'+itemType+'" data-item-source="'+itemSource+'">';
if (data !== false && data.reshare !== false && data.reshare.uid_owner !== undefined) {
if (data.reshare.share_type == OC.Share.SHARE_TYPE_GROUP) {
- html += '<span class="reshare">'+t('core', 'Shared with you and the group {group} by {owner}', {group: data.reshare.share_with, owner: data.reshare.uid_owner})+'</span>';
+ html += '<span class="reshare">'+t('core', 'Shared with you and the group {group} by {owner}', {group: data.reshare.share_with, owner: data.reshare.displayname_owner})+'</span>';
} else {
- html += '<span class="reshare">'+t('core', 'Shared with you by {owner}', {owner: data.reshare.uid_owner})+'</span>';
+ html += '<span class="reshare">'+t('core', 'Shared with you by {owner}', {owner: data.reshare.displayname_owner})+'</span>';
}
html += '<br />';
}
@@ -168,10 +185,10 @@ OC.Share={
html += '<input id="linkPassText" type="password" placeholder="'+t('core', 'Password')+'" />';
html += '</div>';
html += '</div>';
- html += '<form id="emailPrivateLink" >';
- html += '<input id="email" style="display:none; width:65%;" value="" placeholder="'+t('core', 'Email link to person')+'" type="text" />';
- html += '<input id="emailButton" style="display:none; float:right;" type="submit" value="'+t('core', 'Send')+'" />';
- html += '</form>';
+ html += '<form id="emailPrivateLink" >';
+ html += '<input id="email" style="display:none; width:65%;" value="" placeholder="'+t('core', 'Email link to person')+'" type="text" />';
+ html += '<input id="emailButton" style="display:none; float:right;" type="submit" value="'+t('core', 'Send')+'" />';
+ html += '</form>';
}
html += '<div id="expiration">';
html += '<input type="checkbox" name="expirationCheckbox" id="expirationCheckbox" value="1" /><label for="expirationCheckbox">'+t('core', 'Set expiration date')+'</label>';
@@ -186,9 +203,9 @@ OC.Share={
OC.Share.showLink(share.token, share.share_with, itemSource);
} else {
if (share.collection) {
- OC.Share.addShareWith(share.share_type, share.share_with, share.permissions, possiblePermissions, share.collection);
+ OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, share.collection);
} else {
- OC.Share.addShareWith(share.share_type, share.share_with, share.permissions, possiblePermissions, false);
+ OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, false);
}
}
if (share.expiration != null) {
@@ -228,7 +245,7 @@ OC.Share={
// Default permissions are Read and Share
var permissions = OC.PERMISSION_READ | OC.PERMISSION_SHARE;
OC.Share.share(itemType, itemSource, shareType, shareWith, permissions, function() {
- OC.Share.addShareWith(shareType, shareWith, permissions, possiblePermissions);
+ OC.Share.addShareWith(shareType, shareWith, selected.item.label, permissions, possiblePermissions);
$('#shareWith').val('');
OC.Share.updateIcon(itemType, itemSource);
});
@@ -257,7 +274,7 @@ OC.Share={
}
});
},
- addShareWith:function(shareType, shareWith, permissions, possiblePermissions, collection) {
+ addShareWith:function(shareType, shareWith, shareWithDisplayName, permissions, possiblePermissions, collection) {
if (!OC.Share.itemShares[shareType]) {
OC.Share.itemShares[shareType] = [];
}
@@ -272,7 +289,7 @@ OC.Share={
if (collectionList.length > 0) {
$(collectionList).append(', '+shareWith);
} else {
- var html = '<li style="clear: both;" data-collection="'+item+'">'+t('core', 'Shared in {item} with {user}', {'item': item, user: shareWith})+'</li>';
+ var html = '<li style="clear: both;" data-collection="'+item+'">'+t('core', 'Shared in {item} with {user}', {'item': item, user: shareWithDisplayName})+'</li>';
$('#shareWithList').prepend(html);
}
} else {
@@ -295,9 +312,9 @@ OC.Share={
var html = '<li style="clear: both;" data-share-type="'+shareType+'" data-share-with="'+shareWith+'" title="' + shareWith + '">';
html += '<a href="#" class="unshare" style="display:none;"><img class="svg" alt="'+t('core', 'Unshare')+'" src="'+OC.imagePath('core', 'actions/delete')+'"/></a>';
if(shareWith.length > 14){
- html += shareWith.substr(0,11) + '...';
+ html += shareWithDisplayName.substr(0,11) + '...';
}else{
- html += shareWith;
+ html += shareWithDisplayName;
}
if (possiblePermissions & OC.PERMISSION_CREATE || possiblePermissions & OC.PERMISSION_UPDATE || possiblePermissions & OC.PERMISSION_DELETE) {
if (editChecked == '') {
@@ -356,18 +373,18 @@ OC.Share={
$('#linkPassText').attr('placeholder', t('core', 'Password protected'));
}
$('#expiration').show();
- $('#emailPrivateLink #email').show();
- $('#emailPrivateLink #emailButton').show();
+ $('#emailPrivateLink #email').show();
+ $('#emailPrivateLink #emailButton').show();
},
hideLink:function() {
$('#linkText').hide('blind');
$('#showPassword').hide();
$('#showPassword+label').hide();
$('#linkPass').hide();
- $('#emailPrivateLink #email').hide();
- $('#emailPrivateLink #emailButton').hide();
- },
- dirname:function(path) {
+ $('#emailPrivateLink #email').hide();
+ $('#emailPrivateLink #emailButton').hide();
+ },
+ dirname:function(path) {
return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
},
showExpirationDate:function(date) {
@@ -384,16 +401,16 @@ OC.Share={
$(document).ready(function() {
if(typeof monthNames != 'undefined'){
- $.datepicker.setDefaults({
- monthNames: monthNames,
- monthNamesShort: $.map(monthNames, function(v) { return v.slice(0,3)+'.'; }),
- dayNames: dayNames,
- dayNamesMin: $.map(dayNames, function(v) { return v.slice(0,2); }),
- dayNamesShort: $.map(dayNames, function(v) { return v.slice(0,3)+'.'; }),
- firstDay: firstDay
- });
- }
- $('a.share').live('click', function(event) {
+ $.datepicker.setDefaults({
+ monthNames: monthNames,
+ monthNamesShort: $.map(monthNames, function(v) { return v.slice(0,3)+'.'; }),
+ dayNames: dayNames,
+ dayNamesMin: $.map(dayNames, function(v) { return v.slice(0,2); }),
+ dayNamesShort: $.map(dayNames, function(v) { return v.slice(0,3)+'.'; }),
+ firstDay: firstDay
+ });
+ }
+ $(document).on('click', 'a.share', function(event) {
event.stopPropagation();
if ($(this).data('item-type') !== undefined && $(this).data('item') !== undefined) {
var itemType = $(this).data('item-type');
@@ -427,12 +444,12 @@ $(document).ready(function() {
}
});
- $('#shareWithList li').live('mouseenter', function(event) {
+ $(document).on('mouseenter', '#dropdown #shareWithList li', function(event) {
// Show permissions and unshare button
$(':hidden', this).filter(':not(.cruds)').show();
});
- $('#shareWithList li').live('mouseleave', function(event) {
+ $(document).on('mouseleave', '#dropdown #shareWithList li', function(event) {
// Hide permissions and unshare button
if (!$('.cruds', this).is(':visible')) {
$('a', this).hide();
@@ -445,11 +462,11 @@ $(document).ready(function() {
}
});
- $('.showCruds').live('click', function() {
+ $(document).on('click', '#dropdown .showCruds', function() {
$(this).parent().find('.cruds').toggle();
});
- $('.unshare').live('click', function() {
+ $(document).on('click', '#dropdown .unshare', function() {
var li = $(this).parent();
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
@@ -466,7 +483,7 @@ $(document).ready(function() {
});
});
- $('.permissions').live('change', function() {
+ $(document).on('change', '#dropdown .permissions', function() {
if ($(this).attr('name') == 'edit') {
var li = $(this).parent().parent()
var checkboxes = $('.permissions', li);
@@ -479,10 +496,17 @@ $(document).ready(function() {
var li = $(this).parent().parent().parent();
var checkboxes = $('.permissions', li);
// Uncheck Edit if Create, Update, and Delete are not checked
- if (!$(this).is(':checked') && !$(checkboxes).filter('input[name="create"]').is(':checked') && !$(checkboxes).filter('input[name="update"]').is(':checked') && !$(checkboxes).filter('input[name="delete"]').is(':checked')) {
+ if (!$(this).is(':checked')
+ && !$(checkboxes).filter('input[name="create"]').is(':checked')
+ && !$(checkboxes).filter('input[name="update"]').is(':checked')
+ && !$(checkboxes).filter('input[name="delete"]').is(':checked'))
+ {
$(checkboxes).filter('input[name="edit"]').attr('checked', false);
// Check Edit if Create, Update, or Delete is checked
- } else if (($(this).attr('name') == 'create' || $(this).attr('name') == 'update' || $(this).attr('name') == 'delete')) {
+ } else if (($(this).attr('name') == 'create'
+ || $(this).attr('name') == 'update'
+ || $(this).attr('name') == 'delete'))
+ {
$(checkboxes).filter('input[name="edit"]').attr('checked', true);
}
}
@@ -490,10 +514,14 @@ $(document).ready(function() {
$(checkboxes).filter(':not(input[name="edit"])').filter(':checked').each(function(index, checkbox) {
permissions |= $(checkbox).data('permissions');
});
- OC.Share.setPermissions($('#dropdown').data('item-type'), $('#dropdown').data('item-source'), $(li).data('share-type'), $(li).data('share-with'), permissions);
+ OC.Share.setPermissions($('#dropdown').data('item-type'),
+ $('#dropdown').data('item-source'),
+ $(li).data('share-type'),
+ $(li).data('share-with'),
+ permissions);
});
- $('#linkCheckbox').live('change', function() {
+ $(document).on('change', '#dropdown #linkCheckbox', function() {
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
if (this.checked) {
@@ -515,12 +543,12 @@ $(document).ready(function() {
}
});
- $('#linkText').live('click', function() {
+ $(document).on('click', '#dropdown #linkText', function() {
$(this).focus();
$(this).select();
});
- $('#showPassword').live('click', function() {
+ $(document).on('click', '#dropdown #showPassword', function() {
$('#linkPass').toggle('blind');
if (!$('#showPassword').is(':checked') ) {
var itemType = $('#dropdown').data('item-type');
@@ -531,7 +559,7 @@ $(document).ready(function() {
}
});
- $('#linkPassText').live('focusout keyup', function(event) {
+ $(document).on('focusout keyup', '#dropdown #linkPassText', function(event) {
if ( $('#linkPassText').val() != '' && (event.type == 'focusout' || event.keyCode == 13) ) {
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
@@ -543,7 +571,7 @@ $(document).ready(function() {
}
});
- $('#expirationCheckbox').live('click', function() {
+ $(document).on('click', '#dropdown #expirationCheckbox', function() {
if (this.checked) {
OC.Share.showExpirationDate('');
} else {
@@ -558,7 +586,7 @@ $(document).ready(function() {
}
});
- $('#expirationDate').live('change', function() {
+ $(document).on('change', '#dropdown #expirationDate', function() {
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
$.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'setExpirationDate', itemType: itemType, itemSource: itemSource, date: $(this).val() }, function(result) {
@@ -569,33 +597,33 @@ $(document).ready(function() {
});
- $('#emailPrivateLink').live('submit', function(event) {
- event.preventDefault();
- var link = $('#linkText').val();
- var itemType = $('#dropdown').data('item-type');
- var itemSource = $('#dropdown').data('item-source');
- var file = $('tr').filterAttr('data-id', String(itemSource)).data('file');
- var email = $('#email').val();
- if (email != '') {
- $('#email').attr('disabled', "disabled");
- $('#email').val(t('core', 'Sending ...'));
- $('#emailButton').attr('disabled', "disabled");
+ $(document).on('submit', '#dropdown #emailPrivateLink', function(event) {
+ event.preventDefault();
+ var link = $('#linkText').val();
+ var itemType = $('#dropdown').data('item-type');
+ var itemSource = $('#dropdown').data('item-source');
+ var file = $('tr').filterAttr('data-id', String(itemSource)).data('file');
+ var email = $('#email').val();
+ if (email != '') {
+ $('#email').attr('disabled', "disabled");
+ $('#email').val(t('core', 'Sending ...'));
+ $('#emailButton').attr('disabled', "disabled");
- $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'email', toaddress: email, link: link, itemType: itemType, itemSource: itemSource, file: file},
- function(result) {
- $('#email').attr('disabled', "false");
- $('#emailButton').attr('disabled', "false");
- if (result && result.status == 'success') {
- $('#email').css('font-weight', 'bold');
- $('#email').animate({ fontWeight: 'normal' }, 2000, function() {
- $(this).val('');
- }).val(t('core','Email sent'));
- } else {
- OC.dialogs.alert(result.data.message, t('core', 'Error while sharing'));
- }
- });
- }
- });
+ $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'email', toaddress: email, link: link, itemType: itemType, itemSource: itemSource, file: file},
+ function(result) {
+ $('#email').attr('disabled', "false");
+ $('#emailButton').attr('disabled', "false");
+ if (result && result.status == 'success') {
+ $('#email').css('font-weight', 'bold');
+ $('#email').animate({ fontWeight: 'normal' }, 2000, function() {
+ $(this).val('');
+ }).val(t('core','Email sent'));
+ } else {
+ OC.dialogs.alert(result.data.message, t('core', 'Error while sharing'));
+ }
+ });
+ }
+ });
});
diff --git a/core/js/update.js b/core/js/update.js
new file mode 100644
index 00000000000..8ab02bbf935
--- /dev/null
+++ b/core/js/update.js
@@ -0,0 +1,23 @@
+$(document).ready(function () {
+ var updateEventSource = new OC.EventSource(OC.webroot+'/core/ajax/update.php');
+ updateEventSource.listen('success', function(message) {
+ $('<span>').append(message).append('<br />').appendTo($('.update'));
+ });
+ updateEventSource.listen('error', function(message) {
+ $('<span>').addClass('error').append(message).append('<br />').appendTo($('.update'));
+ });
+ updateEventSource.listen('failure', function(message) {
+ $('<span>').addClass('error').append(message).append('<br />').appendTo($('.update'));
+ $('<span>')
+ .addClass('error bold')
+ .append('<br />')
+ .append(t('core', 'The update was unsuccessful. Please report this issue to the <a href="https://github.com/owncloud/core/issues" target="_blank">ownCloud community</a>.'))
+ .appendTo($('.update'));
+ });
+ updateEventSource.listen('done', function(message) {
+ $('<span>').addClass('bold').append('<br />').append(t('core', 'The update was successful. Redirecting you to ownCloud now.')).appendTo($('.update'));
+ setTimeout(function () {
+ window.location.href = OC.webroot;
+ }, 3000);
+ });
+}); \ No newline at end of file
diff --git a/core/js/visitortimezone.js b/core/js/visitortimezone.js
new file mode 100644
index 00000000000..58a1e9ea355
--- /dev/null
+++ b/core/js/visitortimezone.js
@@ -0,0 +1,4 @@
+$(document).ready(function () {
+ var visitortimezone = (-new Date().getTimezoneOffset() / 60);
+ $('#timezone-offset').val(visitortimezone);
+}); \ No newline at end of file
diff --git a/core/l10n/af_ZA.php b/core/l10n/af_ZA.php
new file mode 100644
index 00000000000..f5f27d2af58
--- /dev/null
+++ b/core/l10n/af_ZA.php
@@ -0,0 +1,33 @@
+<?php $TRANSLATIONS = array(
+"Settings" => "Instellings",
+"Password" => "Wagwoord",
+"Use the following link to reset your password: {link}" => "Gebruik die volgende skakel om jou wagwoord te herstel: {link}",
+"You will receive a link to reset your password via Email." => "Jy sal `n skakel via e-pos ontvang om jou wagwoord te herstel.",
+"Username" => "Gebruikersnaam",
+"Request reset" => "Herstel-versoek",
+"Your password was reset" => "Jou wagwoord is herstel",
+"To login page" => "Na aanteken-bladsy",
+"New password" => "Nuwe wagwoord",
+"Reset password" => "Herstel wagwoord",
+"Personal" => "Persoonlik",
+"Users" => "Gebruikers",
+"Apps" => "Toepassings",
+"Admin" => "Admin",
+"Help" => "Hulp",
+"Cloud not found" => "Wolk nie gevind",
+"Create an <strong>admin account</strong>" => "Skep `n <strong>admin-rekening</strong>",
+"Advanced" => "Gevorderd",
+"Configure the database" => "Stel databasis op",
+"will be used" => "sal gebruik word",
+"Database user" => "Databasis-gebruiker",
+"Database password" => "Databasis-wagwoord",
+"Database name" => "Databasis naam",
+"Finish setup" => "Maak opstelling klaar",
+"web services under your control" => "webdienste onder jou beheer",
+"Log out" => "Teken uit",
+"Lost your password?" => "Jou wagwoord verloor?",
+"remember" => "onthou",
+"Log in" => "Teken aan",
+"prev" => "vorige",
+"next" => "volgende"
+);
diff --git a/core/l10n/ar.php b/core/l10n/ar.php
index d33de577b3d..67514723e75 100644
--- a/core/l10n/ar.php
+++ b/core/l10n/ar.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "ألا توجد ÙØ¦Ø© Ù„Ù„Ø¥Ø¶Ø§ÙØ©ØŸ",
-"This category already exists: " => "هذه Ø§Ù„ÙØ¦Ø© موجودة مسبقاً",
"No categories selected for deletion." => "لم يتم اختيار ÙØ¦Ø© للحذÙ",
+"Sunday" => "الاحد",
+"Monday" => "الأثنين",
+"Tuesday" => "الثلاثاء",
+"Wednesday" => "الاربعاء",
+"Thursday" => "الخميس",
+"Friday" => "الجمعه",
+"Saturday" => "السبت",
+"January" => "كانون الثاني",
+"February" => "شباط",
+"March" => "آذار",
+"April" => "نيسان",
+"May" => "أيار",
+"June" => "حزيران",
+"July" => "تموز",
+"August" => "آب",
+"September" => "أيلول",
+"October" => "تشرين الاول",
+"November" => "تشرين الثاني",
+"December" => "كانون الاول",
"Settings" => "تعديلات",
"seconds ago" => "منذ ثواني",
"1 minute ago" => "منذ دقيقة",
@@ -13,6 +31,7 @@
"Yes" => "نعم",
"Ok" => "مواÙÙ‚",
"Error" => "خطأ",
+"Share" => "شارك",
"Error while sharing" => "حصل خطأ عند عملية المشاركة",
"Error while unsharing" => "حصل خطأ عند عملية إزالة المشاركة",
"Error while changing permissions" => "حصل خطأ عند عملية إعادة تعيين التصريح بالتوصل",
@@ -71,25 +90,6 @@
"Database tablespace" => "مساحة جدول قاعدة البيانات",
"Database host" => "خادم قاعدة البيانات",
"Finish setup" => "انهاء التعديلات",
-"Sunday" => "الاحد",
-"Monday" => "الأثنين",
-"Tuesday" => "الثلاثاء",
-"Wednesday" => "الاربعاء",
-"Thursday" => "الخميس",
-"Friday" => "الجمعه",
-"Saturday" => "السبت",
-"January" => "كانون الثاني",
-"February" => "شباط",
-"March" => "آذار",
-"April" => "نيسان",
-"May" => "أيار",
-"June" => "حزيران",
-"July" => "تموز",
-"August" => "آب",
-"September" => "أيلول",
-"October" => "تشرين الاول",
-"November" => "تشرين الثاني",
-"December" => "كانون الاول",
"web services under your control" => "خدمات الوب تحت تصرÙÙƒ",
"Log out" => "الخروج",
"Automatic logon rejected!" => "تم Ø±ÙØ¶ تسجيل الدخول التلقائي!",
@@ -98,10 +98,6 @@
"Lost your password?" => "هل نسيت كلمة السر؟",
"remember" => "تذكر",
"Log in" => "أدخل",
-"You are logged out." => "تم الخروج بنجاح.",
"prev" => "السابق",
-"next" => "التالي",
-"Security Warning!" => "تحذير أمان!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "الرجاء التحقق من كلمة السر. <br/>من الممكن أحياناً أن نطلب منك إعادة إدخال كلمة السر مرة أخرى.",
-"Verify" => "تحقيق"
+"next" => "التالي"
);
diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php
index a7cba523be2..f2320f1340e 100644
--- a/core/l10n/bg_BG.php
+++ b/core/l10n/bg_BG.php
@@ -8,7 +8,10 @@
"last month" => "поÑледниÑÑ‚ меÑец",
"last year" => "поÑледната година",
"years ago" => "поÑледните години",
+"Error" => "Грешка",
+"Share" => "СподелÑне",
"Password" => "Парола",
+"New password" => "Ðова парола",
"Personal" => "Лични",
"Users" => "Потребители",
"Apps" => "ПриложениÑ",
diff --git a/core/l10n/bn_BD.php b/core/l10n/bn_BD.php
index a3350761386..426b4856707 100644
--- a/core/l10n/bn_BD.php
+++ b/core/l10n/bn_BD.php
@@ -1,13 +1,34 @@
<?php $TRANSLATIONS = array(
"User %s shared a file with you" => "%s নামের বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি আপনার সাথে à¦à¦•টা ফাইল ভাগাভাগি করেছেন",
"User %s shared a folder with you" => "%s নামের বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি আপনার সাথে à¦à¦•টা ফোলà§à¦¡à¦¾à¦° ভাগাভাগি করেছেন",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s নামের বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী \"%s\" ফাইলটি আপনার সাথে ভাগাভাগি করেছেন। à¦à¦Ÿà¦¿ à¦à¦–ন à¦à¦–ানে ডাউনলোড করার জনà§à¦¯ সà§à¦²à¦­à¦ƒ %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s নামের বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী \"%s\" ফোলà§à¦¡à¦¾à¦°à¦Ÿà¦¿ আপনার সাথে ভাগাভাগি করেছেন। à¦à¦Ÿà¦¿ à¦à¦–ন à¦à¦–ানে ডাউনলোড করার জনà§à¦¯ সà§à¦²à¦­à¦ƒ %s",
"Category type not provided." => "কà§à¦¯à¦¾à¦Ÿà§‡à¦—রির ধরণটি পà§à¦°à¦¦à¦¾à¦¨ করা হয় নি।",
"No category to add?" => "যোগ করার মত কোন কà§à¦¯à¦¾à¦Ÿà§‡à¦—রি নেই ?",
-"This category already exists: " => "à¦à¦‡ কà§à¦¯à¦¾à¦Ÿà§‡à¦—রিটি বিদà§à¦¯à¦®à¦¾à¦¨à¦ƒ",
"Object type not provided." => "অবজেকà§à¦Ÿà§‡à¦° ধরণটি পà§à¦°à¦¦à¦¾à¦¨ করা হয় নি।",
+"%s ID not provided." => "%s ID পà§à¦°à¦¦à¦¾à¦¨ করা হয় নি।",
"Error adding %s to favorites." => "পà§à¦°à¦¿à§Ÿà¦¤à§‡ %s যোগ করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে।",
-"No categories selected for deletion." => "মà§à¦›à§‡ ফেলার জনà§à¦¯ কোন কà§à¦¯à¦¾à¦Ÿà§‡à¦—রি নিরà§à¦¬à¦¾à¦šà¦¨ করা হয় নি।",
+"No categories selected for deletion." => "মà§à¦›à§‡ ফেলার জনà§à¦¯ কোন কà§à¦¯à¦¾à¦Ÿà§‡à¦—রি নিরà§à¦¬à¦¾à¦šà¦¨ করা হয় নি ।",
"Error removing %s from favorites." => "পà§à¦°à¦¿à§Ÿ থেকে %s সরিয়ে ফেলতে সমসà§à¦¯à¦¾ দেখা দিয়েছে।",
+"Sunday" => "রবিবার",
+"Monday" => "সোমবার",
+"Tuesday" => "মঙà§à¦—লবার",
+"Wednesday" => "বà§à¦§à¦¬à¦¾à¦°",
+"Thursday" => "বৃহষà§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°",
+"Friday" => "শà§à¦•à§à¦°à¦¬à¦¾à¦°",
+"Saturday" => "শনিবার",
+"January" => "জানà§à§Ÿà¦¾à¦°à¦¿",
+"February" => "ফেবà§à¦°à§à§Ÿà¦¾à¦°à¦¿",
+"March" => "মারà§à¦š",
+"April" => "à¦à¦ªà§à¦°à¦¿à¦²",
+"May" => "মে",
+"June" => "জà§à¦¨",
+"July" => "জà§à¦²à¦¾à¦‡",
+"August" => "অগাষà§à¦Ÿ",
+"September" => "সেপà§à¦Ÿà§‡à¦®à§à¦¬à¦°",
+"October" => "অকà§à¦Ÿà§‹à¦¬à¦°",
+"November" => "নভেমà§à¦¬à¦°",
+"December" => "ডিসেমà§à¦¬à¦°",
"Settings" => "নিয়ামকসমূহ",
"seconds ago" => "সেকেনà§à¦¡ পূরà§à¦¬à§‡",
"1 minute ago" => "1 মিনিট পূরà§à¦¬à§‡",
@@ -22,8 +43,8 @@
"months ago" => "মাস পূরà§à¦¬à§‡",
"last year" => "গত বছর",
"years ago" => "বছর পূরà§à¦¬à§‡",
-"Choose" => "নিরà§à¦¬à¦¾à¦šà¦¨",
-"Cancel" => "বাতিল",
+"Choose" => "বেছে নিন",
+"Cancel" => "বাতির",
"No" => "না",
"Yes" => "হà§à¦¯à¦¾à¦",
"Ok" => "তথাসà§à¦¤à§",
@@ -31,91 +52,75 @@
"Error" => "সমসà§à¦¯à¦¾",
"The app name is not specified." => "অà§à¦¯à¦¾à¦ªà§‡à¦° নামটি সà§à¦¨à¦¿à¦°à§à¦¦à¦¿à¦·à§à¦Ÿ নয়।",
"The required file {file} is not installed!" => "আবশà§à¦¯à¦¿à¦• {file} টি সংসà§à¦¥à¦¾à¦ªà¦¿à¦¤ নেই !",
-"Error while sharing" => "ভাগাভাগি করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে",
-"Error while unsharing" => "ভাগাভাগি বাতিল করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে",
-"Error while changing permissions" => "অনà§à¦®à¦¤à¦¿ পরিবরà§à¦¤à¦¨ করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে",
-"Share with" => "যাদের সাথে ভাগাভাগি করবে",
-"Share with link" => "লিংক সহযোগে ভাগাভাগি",
-"Password protect" => "কূটশবà§à¦¦à¦¦à§à¦¬à¦¾à¦°à¦¾ সà§à¦°à¦•à§à¦·à¦¿à¦¤",
+"Share" => "ভাগাভাগি কর",
+"Shared" => "ভাগাভাগিকৃত",
+"Error while sharing" => "ভাগাভাগি করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে ",
+"Error while unsharing" => "ভাগাভাগি বাতিল করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে",
+"Error while changing permissions" => "অনà§à¦®à¦¤à¦¿à¦¸à¦®à§‚হ পরিবরà§à¦¤à¦¨ করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে",
+"Shared with you and the group {group} by {owner}" => "{owner} আপনার à¦à¦¬à¦‚ {group} গোষà§à¦ à§€à¦° সাথে ভাগাভাগি করেছেন",
+"Shared with you by {owner}" => "{owner} আপনার সাথে ভাগাভাগি করেছেন",
+"Share with" => "যাদের সাথে ভাগাভাগি করা হয়েছে",
+"Share with link" => "লিংকের সাথে ভাগাভাগি কর",
+"Password protect" => "কূটশবà§à¦¦ সà§à¦°à¦•à§à¦·à¦¿à¦¤",
"Password" => "কূটশবà§à¦¦",
"Email link to person" => "বà§à¦¯à¦•à§à¦¤à¦¿à¦° সাথে ই-মেইল যà§à¦•à§à¦¤ কর",
"Send" => "পাঠাও",
"Set expiration date" => "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨",
"Expiration date" => "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ",
-"Share via email:" => "ই-মেইলের মাধà§à¦¯à¦®à§‡ ভাগাভাগি করঃ",
+"Share via email:" => "ই-মেইলের মাধà§à¦¯à¦®à§‡ ভাগাভাগি করà§à¦¨à¦ƒ",
"No people found" => "কোন বà§à¦¯à¦•à§à¦¤à¦¿ খà§à¦à¦œà§‡ পাওয়া গেল না",
-"Resharing is not allowed" => "পূনরায় ভাগাভাগি করার অনà§à¦®à¦¤à¦¿ নেই",
-"Unshare" => "ভাগাভাগি বাতিল",
-"can edit" => "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করতে পারবে",
-"access control" => "অধিগমà§à¦¯à¦¤à¦¾à¦° নিয়নà§à¦¤à§à¦°à¦£",
-"create" => "তৈরি কর",
+"Resharing is not allowed" => "পূনঃরায় ভাগাভাগি অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়",
+"Shared in {item} with {user}" => "{user} à¦à¦° সাথে {item} ভাগাভাগি করা হয়েছে",
+"Unshare" => "ভাগাভাগি বাতিল কর",
+"can edit" => "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করতে পারবেন",
+"access control" => "অধিগমà§à¦¯à¦¤à¦¾ নিয়নà§à¦¤à§à¦°à¦£",
+"create" => "তৈরী করà§à¦¨",
"update" => "পরিবরà§à¦§à¦¨ কর",
"delete" => "মà§à¦›à§‡ ফেল",
"share" => "ভাগাভাগি কর",
"Password protected" => "কূটশবà§à¦¦à¦¦à§à¦¬à¦¾à¦°à¦¾ সà§à¦°à¦•à§à¦·à¦¿à¦¤",
-"Error unsetting expiration date" => "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ বাতিল করতে সমসà§à¦¯à¦¾",
-"Error setting expiration date" => "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ করতে সমসà§à¦¯à¦¾",
+"Error unsetting expiration date" => "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ বাতিল করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে",
+"Error setting expiration date" => "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে",
"Sending ..." => "পাঠানো হচà§à¦›à§‡......",
"Email sent" => "ই-মেইল পাঠানো হয়েছে",
"ownCloud password reset" => "ownCloud কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£",
-"Use the following link to reset your password: {link}" => "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£ করতে নিমà§à¦¨à§‹à¦•à§à¦¤ লিংকে কà§à¦²à¦¿à¦• করà§à¦¨:{link}",
-"You will receive a link to reset your password via Email." => "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£à§‡à¦° জনà§à¦¯ à¦à¦•টি লিংক ই-মেইলের মাধà§à¦¯à¦®à§‡ পাঠানো হয়েছে।",
+"Use the following link to reset your password: {link}" => "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পূনঃনিরà§à¦§à¦¾à¦°à¦£ করার জনà§à¦¯ নিমà§à¦¨à§‹à¦•à§à¦¤ লিংকটি বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¦ƒ {link}",
+"You will receive a link to reset your password via Email." => "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£à§‡à¦° জনà§à¦¯ à¦à¦•টি টূনঃনিরà§à¦§à¦¾à¦°à¦£ লিংকটি আপনাকে ই-মেইলে পাঠানো হয়েছে ।",
"Reset email send." => "পূনঃনিরà§à¦§à¦¾à¦°à¦£ ই-মেইল পাঠানো হয়েছে।",
"Request failed!" => "অনà§à¦°à§‹à¦§ বà§à¦¯à¦°à§à¦¥ !",
-"Username" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি",
-"Request reset" => "পূনঃনিরà§à¦§à¦¾à¦°à¦£à§‡à¦° জনà§à¦¯ অনà§à¦°à§‹à¦§",
-"Your password was reset" => "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পূনঃনিরà§à¦§à¦¾à¦°à¦£ করা হয়েছে",
-"To login page" => "পà§à¦°à¦¬à§‡à¦¶ পাতায়",
+"Username" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী",
+"Request reset" => "অনà§à¦°à§‹à¦§ পূনঃনিরà§à¦§à¦¾à¦°à¦£",
+"Your password was reset" => "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পূনঃনিরà§à¦§à¦¾à¦°à¦£ করা হয়েছে",
+"To login page" => "পà§à¦°à¦¬à§‡à¦¶ পৃষà§à¦ à¦¾à§Ÿ",
"New password" => "নতà§à¦¨ কূটশবà§à¦¦",
-"Reset password" => "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£",
+"Reset password" => "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£ কর",
"Personal" => "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত",
-"Users" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারিবৃনà§à¦¦",
+"Users" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী",
"Apps" => "অà§à¦¯à¦¾à¦ªà¦¸",
-"Admin" => "পà§à¦°à¦¶à¦¾à¦¸à¦•",
+"Admin" => "পà§à¦°à¦¶à¦¾à¦¸à¦¨",
"Help" => "সহায়িকা",
"Access forbidden" => "অধিগমনের অনà§à¦®à¦¤à¦¿ নেই",
"Cloud not found" => "কà§à¦²à¦¾à¦‰à¦¡ খà§à¦à¦œà§‡ পাওয়া গেল না",
"Edit categories" => "কà§à¦¯à¦¾à¦Ÿà§‡à¦—রি সমà§à¦ªà¦¾à¦¦à¦¨à¦¾",
"Add" => "যোগ কর",
"Security Warning" => "নিরাপতà§à¦¤à¦¾à¦œà¦¨à¦¿à¦¤ সতরà§à¦•তা",
-"Create an <strong>admin account</strong>" => "<strong>পà§à¦°à¦¶à¦¾à¦¸à¦• à¦à¦•াউনà§à¦Ÿ</strong> তৈরি কর",
+"Create an <strong>admin account</strong>" => "<strong>পà§à¦°à¦¶à¦¾à¦¸à¦• à¦à¦•াউনà§à¦Ÿ</strong> তৈরী করà§à¦¨",
"Advanced" => "সà§à¦šà¦¾à¦°à§",
-"Data folder" => "ডাটা ফোলà§à¦¡à¦¾à¦°",
-"Configure the database" => "ডাটাবেজ কনফিগার কর",
+"Data folder" => "ডাটা ফোলà§à¦¡à¦¾à¦° ",
+"Configure the database" => "ডাটাবেচ কনফিগার করà§à¦¨",
"will be used" => "বà§à¦¯à¦¬à¦¹à§ƒà¦¤ হবে",
-"Database user" => "ডাটাবেজ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি",
+"Database user" => "ডাটাবেজ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী",
"Database password" => "ডাটাবেজ কূটশবà§à¦¦",
"Database name" => "ডাটাবেজের নাম",
-"Database tablespace" => "ডাটাবেজ টেবিলসà§à¦ªà§‡à¦¸",
+"Database tablespace" => "ডাটাবেজ টেবলসà§à¦ªà§‡à¦¸",
"Database host" => "ডাটাবেজ হোসà§à¦Ÿ",
-"Finish setup" => "সেট-আপ সà§à¦¸à¦®à§à¦ªà¦¨à§à¦¨ কর",
-"Sunday" => "রবিবার",
-"Monday" => "সোমবার",
-"Tuesday" => "মঙà§à¦—লবার",
-"Wednesday" => "বà§à¦§à¦¬à¦¾à¦°",
-"Thursday" => "বৃহষà§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°",
-"Friday" => "শà§à¦•à§à¦°à¦¬à¦¾à¦°",
-"Saturday" => "শনিবার",
-"January" => "জানà§à§Ÿà¦¾à¦°à¦¿",
-"February" => "ফেবà§à¦°à§à§Ÿà¦¾à¦°à¦¿",
-"March" => "মারà§à¦š",
-"April" => "à¦à¦ªà§à¦°à¦¿à¦²",
-"May" => "মে",
-"June" => "জà§à¦¨",
-"July" => "জà§à¦²à¦¾à¦‡",
-"August" => "অগাসà§à¦Ÿ",
-"September" => "সেপà§à¦Ÿà§‡à¦®à§à¦¬à¦°",
-"October" => "অকà§à¦Ÿà§‹à¦¬à¦°",
-"November" => "নভেমà§à¦¬à¦°",
-"December" => "ডিসেমà§à¦¬à¦°",
-"web services under your control" => "ওয়েব সেবাসমূহ à¦à¦–ন আপনার হাতের মà§à¦ à§‹à§Ÿ",
+"Finish setup" => "সেটআপ সà§à¦¸à¦®à§à¦ªà¦¨à§à¦¨ কর",
+"web services under your control" => "ওয়েব সারà§à¦­à¦¿à¦¸à§‡à¦° নিয়নà§à¦¤à§à¦°à¦£ আপনার হাতের মà§à¦ à§‹à§Ÿ",
"Log out" => "পà§à¦°à¦¸à§à¦¥à¦¾à¦¨",
-"Lost your password?" => "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ হারিয়েছেন ?",
+"Lost your password?" => "কূটশবà§à¦¦ হারিয়েছেন?",
"remember" => "মনে রাখ",
"Log in" => "পà§à¦°à¦¬à§‡à¦¶",
-"You are logged out." => "আপনি পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করেছেন",
"prev" => "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€",
"next" => "পরবরà§à¦¤à§€",
-"Security Warning!" => "নিরাপতà§à¦¤à¦¾à¦¬à¦¿à¦·à§Ÿà¦• সতরà§à¦•বাণী",
-"Verify" => "যাচাই কর"
+"Updating ownCloud to version %s, this may take a while." => "%s ভারà§à¦¸à¦¨à§‡ ownCloud পরিবরà§à¦§à¦¨ করা হচà§à¦›à§‡, à¦à¦œà¦¨à§à¦¯ কিছৠসময় পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤"
);
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index c4e134cdf36..2126b96eddb 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "L'usuari %s ha compartit la carpeta \"%s\" amb vós. Està disponible per a la descàrrega a: %s",
"Category type not provided." => "No s'ha especificat el tipus de categoria.",
"No category to add?" => "No voleu afegir cap categoria?",
-"This category already exists: " => "Aquesta categoria ja existeix:",
+"This category already exists: %s" => "Aquesta categoria ja existeix: %s",
"Object type not provided." => "No s'ha proporcionat el tipus d'objecte.",
"%s ID not provided." => "No s'ha proporcionat la ID %s.",
"Error adding %s to favorites." => "Error en afegir %s als preferits.",
"No categories selected for deletion." => "No hi ha categories per eliminar.",
"Error removing %s from favorites." => "Error en eliminar %s dels preferits.",
+"Sunday" => "Diumenge",
+"Monday" => "Dilluns",
+"Tuesday" => "Dimarts",
+"Wednesday" => "Dimecres",
+"Thursday" => "Dijous",
+"Friday" => "Divendres",
+"Saturday" => "Dissabte",
+"January" => "Gener",
+"February" => "Febrer",
+"March" => "Març",
+"April" => "Abril",
+"May" => "Maig",
+"June" => "Juny",
+"July" => "Juliol",
+"August" => "Agost",
+"September" => "Setembre",
+"October" => "Octubre",
+"November" => "Novembre",
+"December" => "Desembre",
"Settings" => "Arranjament",
"seconds ago" => "segons enrere",
"1 minute ago" => "fa 1 minut",
@@ -34,6 +53,8 @@
"Error" => "Error",
"The app name is not specified." => "No s'ha especificat el nom de l'aplicació.",
"The required file {file} is not installed!" => "El fitxer requerit {file} no està instal·lat!",
+"Share" => "Comparteix",
+"Shared" => "Compartit",
"Error while sharing" => "Error en compartir",
"Error while unsharing" => "Error en deixar de compartir",
"Error while changing permissions" => "Error en canviar els permisos",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Error en establir la data d'expiració",
"Sending ..." => "Enviant...",
"Email sent" => "El correu electrónic s'ha enviat",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "L'actualització ha estat incorrecte. Comuniqueu aquest error a <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">la comunitat ownCloud</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "L'actualització ha estat correcte. Ara sou redireccionat a ownCloud.",
"ownCloud password reset" => "estableix de nou la contrasenya Owncloud",
"Use the following link to reset your password: {link}" => "Useu l'enllaç següent per restablir la contrasenya: {link}",
"You will receive a link to reset your password via Email." => "Rebreu un enllaç al correu electrònic per reiniciar la contrasenya.",
@@ -86,7 +109,8 @@
"Security Warning" => "Avís de seguretat",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No està disponible el generador de nombres aleatoris segurs, habiliteu l'extensió de PHP OpenSSL.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sense un generador de nombres aleatoris segurs un atacant podria predir els senyals per restablir la contrasenya i prendre-us el compte.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "La carpeta de dades i els fitxers provablement són accessibles des d'internet. El fitxer .htaccess que proporciona ownCloud no funciona. Us recomanem que configureu el vostre servidor web de manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de la carpeta arrel del servidor web.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Per més informació sobre com configurar correctament el servidor, mireu la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentació</a>.",
"Create an <strong>admin account</strong>" => "Crea un <strong>compte d'administrador</strong>",
"Advanced" => "Avançat",
"Data folder" => "Carpeta de dades",
@@ -98,25 +122,6 @@
"Database tablespace" => "Espai de taula de la base de dades",
"Database host" => "Ordinador central de la base de dades",
"Finish setup" => "Acaba la configuració",
-"Sunday" => "Diumenge",
-"Monday" => "Dilluns",
-"Tuesday" => "Dimarts",
-"Wednesday" => "Dimecres",
-"Thursday" => "Dijous",
-"Friday" => "Divendres",
-"Saturday" => "Dissabte",
-"January" => "Gener",
-"February" => "Febrer",
-"March" => "Març",
-"April" => "Abril",
-"May" => "Maig",
-"June" => "Juny",
-"July" => "Juliol",
-"August" => "Agost",
-"September" => "Setembre",
-"October" => "Octubre",
-"November" => "Novembre",
-"December" => "Desembre",
"web services under your control" => "controleu els vostres serveis web",
"Log out" => "Surt",
"Automatic logon rejected!" => "L'ha rebutjat l'acceditació automàtica!",
@@ -125,11 +130,8 @@
"Lost your password?" => "Heu perdut la contrasenya?",
"remember" => "recorda'm",
"Log in" => "Inici de sessió",
-"You are logged out." => "Heu tancat la sessió.",
+"Alternative Logins" => "Acreditacions alternatives",
"prev" => "anterior",
"next" => "següent",
-"Updating ownCloud to version %s, this may take a while." => "S'està actualitzant ownCloud a la versió %s, pot trigar una estona.",
-"Security Warning!" => "Avís de seguretat!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Comproveu la vostra contrasenya. <br/>Per raons de seguretat se us pot demanar escriure de nou la vostra contrasenya.",
-"Verify" => "Comprova"
+"Updating ownCloud to version %s, this may take a while." => "S'està actualitzant ownCloud a la versió %s, pot trigar una estona."
);
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index 3a15bd1ae90..331fcefd923 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Uživatel %s s vámi sdílí složku \"%s\". Můžete ji stáhnout zde: %s",
"Category type not provided." => "Nezadán typ kategorie.",
"No category to add?" => "Žádná kategorie k přidání?",
-"This category already exists: " => "Tato kategorie již existuje: ",
+"This category already exists: %s" => "Kategorie již existuje: %s",
"Object type not provided." => "Nezadán typ objektu.",
"%s ID not provided." => "Nezadáno ID %s.",
"Error adding %s to favorites." => "Chyba při přidávání %s k oblíbeným.",
"No categories selected for deletion." => "Žádné kategorie nebyly vybrány ke smazání.",
"Error removing %s from favorites." => "Chyba při odebírání %s z oblíbených.",
+"Sunday" => "Neděle",
+"Monday" => "Pondělí",
+"Tuesday" => "Úterý",
+"Wednesday" => "Středa",
+"Thursday" => "ÄŒtvrtek",
+"Friday" => "Pátek",
+"Saturday" => "Sobota",
+"January" => "Leden",
+"February" => "Únor",
+"March" => "Březen",
+"April" => "Duben",
+"May" => "Květen",
+"June" => "ÄŒerven",
+"July" => "ÄŒervenec",
+"August" => "Srpen",
+"September" => "Září",
+"October" => "Říjen",
+"November" => "Listopad",
+"December" => "Prosinec",
"Settings" => "Nastavení",
"seconds ago" => "před pár vteřinami",
"1 minute ago" => "před minutou",
@@ -34,6 +53,8 @@
"Error" => "Chyba",
"The app name is not specified." => "Není urÄen název aplikace.",
"The required file {file} is not installed!" => "Požadovaný soubor {file} není nainstalován.",
+"Share" => "Sdílet",
+"Shared" => "Sdílené",
"Error while sharing" => "Chyba při sdílení",
"Error while unsharing" => "Chyba při rušení sdílení",
"Error while changing permissions" => "Chyba při změně oprávnění",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Chyba při nastavení data vypršení platnosti",
"Sending ..." => "Odesílám...",
"Email sent" => "E-mail odeslán",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Aktualizace neproběhla úspěšně. Nahlaste prosím problém do <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">evidence chyb ownCloud</a>",
+"The update was successful. Redirecting you to ownCloud now." => "Aktualizace byla úspěšná. Přesměrovávám na ownCloud.",
"ownCloud password reset" => "Obnovení hesla pro ownCloud",
"Use the following link to reset your password: {link}" => "Heslo obnovíte použitím následujícího odkazu: {link}",
"You will receive a link to reset your password via Email." => "Bude Vám e-mailem zaslán odkaz pro obnovu hesla.",
@@ -86,7 +109,8 @@
"Security Warning" => "BezpeÄnostní upozornÄ›ní",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Není dostupný žádný bezpeÄný generátor náhodných Äísel. Povolte, prosím, rozšíření OpenSSL v PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpeÄného generátoru náhodných Äísel může útoÄník pÅ™edpovÄ›dÄ›t token pro obnovu hesla a pÅ™evzít kontrolu nad Vaším úÄtem.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Váš adresář dat a vÅ¡echny VaÅ¡e soubory jsou pravdÄ›podobnÄ› přístupné z internetu. Soubor .htaccess, který je poskytován ownCloud, nefunguje. DůraznÄ› Vám doporuÄujeme nastavit váš webový server tak, aby nebyl adresář dat přístupný, nebo pÅ™esunout adresář dat mimo koÅ™enovou složku dokumentů webového serveru.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Pro informace jak správně nastavit váš server se podívejte do <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentace</a>.",
"Create an <strong>admin account</strong>" => "VytvoÅ™it <strong>úÄet správce</strong>",
"Advanced" => "PokroÄilé",
"Data folder" => "Složka s daty",
@@ -98,25 +122,6 @@
"Database tablespace" => "Tabulkový prostor databáze",
"Database host" => "Hostitel databáze",
"Finish setup" => "DokonÄit nastavení",
-"Sunday" => "Neděle",
-"Monday" => "Pondělí",
-"Tuesday" => "Úterý",
-"Wednesday" => "Středa",
-"Thursday" => "ÄŒtvrtek",
-"Friday" => "Pátek",
-"Saturday" => "Sobota",
-"January" => "Leden",
-"February" => "Únor",
-"March" => "Březen",
-"April" => "Duben",
-"May" => "Květen",
-"June" => "ÄŒerven",
-"July" => "ÄŒervenec",
-"August" => "Srpen",
-"September" => "Září",
-"October" => "Říjen",
-"November" => "Listopad",
-"December" => "Prosinec",
"web services under your control" => "webové služby pod Vaší kontrolou",
"Log out" => "Odhlásit se",
"Automatic logon rejected!" => "Automatické přihlášení odmítnuto.",
@@ -125,11 +130,8 @@
"Lost your password?" => "Ztratili jste své heslo?",
"remember" => "zapamatovat si",
"Log in" => "Přihlásit",
-"You are logged out." => "Jste odhlášeni.",
+"Alternative Logins" => "Alternativní přihlášení",
"prev" => "předchozí",
"next" => "následující",
-"Updating ownCloud to version %s, this may take a while." => "Aktualizuji ownCloud na verzi %s, bude to chvíli trvat.",
-"Security Warning!" => "BezpeÄnostní upozornÄ›ní.",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Ověřte, prosím, své heslo. <br/>Z bezpeÄnostních důvodů můžete být obÄas požádáni o jeho opÄ›tovné zadání.",
-"Verify" => "Ověřit"
+"Updating ownCloud to version %s, this may take a while." => "Aktualizuji ownCloud na verzi %s, bude to chvíli trvat."
);
diff --git a/core/l10n/da.php b/core/l10n/da.php
index a792e1d9bae..ebe4808544b 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Bruger %s delte mappe \"%s\" med dig. Det kan hentes her: %s",
"Category type not provided." => "Kategori typen ikke er fastsat.",
"No category to add?" => "Ingen kategori at tilføje?",
-"This category already exists: " => "Denne kategori eksisterer allerede: ",
"Object type not provided." => "Object type ikke er fastsat.",
"%s ID not provided." => "%s ID ikke oplyst.",
"Error adding %s to favorites." => "Fejl ved tilføjelse af %s til favoritter.",
"No categories selected for deletion." => "Ingen kategorier valgt",
"Error removing %s from favorites." => "Fejl ved fjernelse af %s fra favoritter.",
+"Sunday" => "Søndag",
+"Monday" => "Mandag",
+"Tuesday" => "Tirsdag",
+"Wednesday" => "Onsdag",
+"Thursday" => "Torsdag",
+"Friday" => "Fredag",
+"Saturday" => "Lørdag",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "Marts",
+"April" => "April",
+"May" => "Maj",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "December",
"Settings" => "Indstillinger",
"seconds ago" => "sekunder siden",
"1 minute ago" => "1 minut siden",
@@ -34,6 +52,7 @@
"Error" => "Fejl",
"The app name is not specified." => "Den app navn er ikke angivet.",
"The required file {file} is not installed!" => "Den krævede fil {file} er ikke installeret!",
+"Share" => "Del",
"Error while sharing" => "Fejl under deling",
"Error while unsharing" => "Fejl under annullering af deling",
"Error while changing permissions" => "Fejl under justering af rettigheder",
@@ -63,6 +82,8 @@
"Error setting expiration date" => "Fejl under sætning af udløbsdato",
"Sending ..." => "Sender ...",
"Email sent" => "E-mail afsendt",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Opdateringen blev ikke udført korrekt. Rapporter venligst problemet til <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownClouds community</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Opdateringen blev udført korrekt. Du bliver nu viderestillet til ownCloud.",
"ownCloud password reset" => "Nulstil ownCloud kodeord",
"Use the following link to reset your password: {link}" => "Anvend følgende link til at nulstille din adgangskode: {link}",
"You will receive a link to reset your password via Email." => "Du vil modtage et link til at nulstille dit kodeord via email.",
@@ -86,7 +107,6 @@
"Security Warning" => "Sikkerhedsadvarsel",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ingen sikker tilfældighedsgenerator til tal er tilgængelig. Aktiver venligst OpenSSL udvidelsen.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Uden en sikker tilfældighedsgenerator til tal kan en angriber måske gætte dit gendan kodeord og overtage din konto",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Din data mappe og dine filer er muligvis tilgængelige fra internettet. .htaccess filen som ownCloud leverer virker ikke. Vi anbefaler på det kraftigste at du konfigurerer din webserver på en måske så data mappen ikke længere er tilgængelig eller at du flytter data mappen uden for webserverens dokument rod. ",
"Create an <strong>admin account</strong>" => "Opret en <strong>administratorkonto</strong>",
"Advanced" => "Avanceret",
"Data folder" => "Datamappe",
@@ -98,25 +118,6 @@
"Database tablespace" => "Database tabelplads",
"Database host" => "Databasehost",
"Finish setup" => "Afslut opsætning",
-"Sunday" => "Søndag",
-"Monday" => "Mandag",
-"Tuesday" => "Tirsdag",
-"Wednesday" => "Onsdag",
-"Thursday" => "Torsdag",
-"Friday" => "Fredag",
-"Saturday" => "Lørdag",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "Marts",
-"April" => "April",
-"May" => "Maj",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "December",
"web services under your control" => "Webtjenester under din kontrol",
"Log out" => "Log ud",
"Automatic logon rejected!" => "Automatisk login afvist!",
@@ -125,10 +126,7 @@
"Lost your password?" => "Mistet dit kodeord?",
"remember" => "husk",
"Log in" => "Log ind",
-"You are logged out." => "Du er nu logget ud.",
"prev" => "forrige",
"next" => "næste",
-"Security Warning!" => "Sikkerhedsadvarsel!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Verificer din adgangskode.<br/>Af sikkerhedsårsager kan du lejlighedsvist blive bedt om at indtaste din adgangskode igen.",
-"Verify" => "Verificer"
+"Updating ownCloud to version %s, this may take a while." => "Opdatere Owncloud til version %s, dette kan tage et stykke tid."
);
diff --git a/core/l10n/de.php b/core/l10n/de.php
index 9c80d1cb14e..d14af6639c9 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s hat eine Verzeichnis \"%s\" für Dich freigegeben. Es ist zum Download hier ferfügbar: %s",
"Category type not provided." => "Kategorie nicht angegeben.",
"No category to add?" => "Keine Kategorie hinzuzufügen?",
-"This category already exists: " => "Kategorie existiert bereits:",
"Object type not provided." => "Objekttyp nicht angegeben.",
"%s ID not provided." => "%s ID nicht angegeben.",
"Error adding %s to favorites." => "Fehler beim Hinzufügen von %s zu den Favoriten.",
"No categories selected for deletion." => "Es wurde keine Kategorien zum Löschen ausgewählt.",
"Error removing %s from favorites." => "Fehler beim Entfernen von %s von den Favoriten.",
+"Sunday" => "Sonntag",
+"Monday" => "Montag",
+"Tuesday" => "Dienstag",
+"Wednesday" => "Mittwoch",
+"Thursday" => "Donnerstag",
+"Friday" => "Freitag",
+"Saturday" => "Samstag",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "März",
+"April" => "April",
+"May" => "Mai",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "Dezember",
"Settings" => "Einstellungen",
"seconds ago" => "Gerade eben",
"1 minute ago" => "vor einer Minute",
@@ -34,6 +52,8 @@
"Error" => "Fehler",
"The app name is not specified." => "Der App-Name ist nicht angegeben.",
"The required file {file} is not installed!" => "Die benötigte Datei {file} ist nicht installiert.",
+"Share" => "Freigeben",
+"Shared" => "Freigegeben",
"Error while sharing" => "Fehler beim Freigeben",
"Error while unsharing" => "Fehler beim Aufheben der Freigabe",
"Error while changing permissions" => "Fehler beim Ändern der Rechte",
@@ -63,6 +83,8 @@
"Error setting expiration date" => "Fehler beim Setzen des Ablaufdatums",
"Sending ..." => "Sende ...",
"Email sent" => "E-Mail wurde verschickt",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud Community</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet.",
"ownCloud password reset" => "ownCloud-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" => "Nutze den nachfolgenden Link, um Dein Passwort zurückzusetzen: {link}",
"You will receive a link to reset your password via Email." => "Du erhältst einen Link per E-Mail, um Dein Passwort zurückzusetzen.",
@@ -86,7 +108,6 @@
"Security Warning" => "Sicherheitswarnung",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktiviere die PHP-Erweiterung für OpenSSL.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Konten zu übernehmen.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Dein Datenverzeichnis und deine Datein sind vielleicht vom Internet aus erreichbar. Die .htaccess Datei, die ownCloud verwendet, arbeitet nicht richtig. Wir schlagen Dir dringend vor, dass du deinen Webserver so konfigurierst, dass das Datenverzeichnis nicht länger erreichbar ist oder, dass du dein Datenverzeichnis aus dem Dokumenten-root des Webservers bewegst.",
"Create an <strong>admin account</strong>" => "<strong>Administrator-Konto</strong> anlegen",
"Advanced" => "Fortgeschritten",
"Data folder" => "Datenverzeichnis",
@@ -98,25 +119,6 @@
"Database tablespace" => "Datenbank-Tablespace",
"Database host" => "Datenbank-Host",
"Finish setup" => "Installation abschließen",
-"Sunday" => "Sonntag",
-"Monday" => "Montag",
-"Tuesday" => "Dienstag",
-"Wednesday" => "Mittwoch",
-"Thursday" => "Donnerstag",
-"Friday" => "Freitag",
-"Saturday" => "Samstag",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "März",
-"April" => "April",
-"May" => "Mai",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Dezember",
"web services under your control" => "Web-Services unter Ihrer Kontrolle",
"Log out" => "Abmelden",
"Automatic logon rejected!" => "Automatischer Login zurückgewiesen!",
@@ -125,11 +127,7 @@
"Lost your password?" => "Passwort vergessen?",
"remember" => "merken",
"Log in" => "Einloggen",
-"You are logged out." => "Du wurdest abgemeldet.",
"prev" => "Zurück",
"next" => "Weiter",
-"Updating ownCloud to version %s, this may take a while." => "Aktualisiere ownCloud auf Version %s. Dies könnte eine Weile dauern.",
-"Security Warning!" => "Sicherheitswarnung!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Bitte bestätige Dein Passwort. <br/> Aus Sicherheitsgründen wirst Du hierbei gebeten, Dein Passwort erneut einzugeben.",
-"Verify" => "Bestätigen"
+"Updating ownCloud to version %s, this may take a while." => "Aktualisiere ownCloud auf Version %s. Dies könnte eine Weile dauern."
);
diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php
index 777725b2cd6..fdebfeb6587 100644
--- a/core/l10n/de_DE.php
+++ b/core/l10n/de_DE.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s hat eine Verzeichnis \"%s\" für Sie freigegeben. Es ist zum Download hier ferfügbar: %s",
"Category type not provided." => "Kategorie nicht angegeben.",
"No category to add?" => "Keine Kategorie hinzuzufügen?",
-"This category already exists: " => "Kategorie existiert bereits:",
+"This category already exists: %s" => "Die Kategorie '%s' existiert bereits.",
"Object type not provided." => "Objekttyp nicht angegeben.",
"%s ID not provided." => "%s ID nicht angegeben.",
"Error adding %s to favorites." => "Fehler beim Hinzufügen von %s zu den Favoriten.",
"No categories selected for deletion." => "Es wurden keine Kategorien zum Löschen ausgewählt.",
"Error removing %s from favorites." => "Fehler beim Entfernen von %s von den Favoriten.",
+"Sunday" => "Sonntag",
+"Monday" => "Montag",
+"Tuesday" => "Dienstag",
+"Wednesday" => "Mittwoch",
+"Thursday" => "Donnerstag",
+"Friday" => "Freitag",
+"Saturday" => "Samstag",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "März",
+"April" => "April",
+"May" => "Mai",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "Dezember",
"Settings" => "Einstellungen",
"seconds ago" => "Gerade eben",
"1 minute ago" => "Vor 1 Minute",
@@ -34,6 +53,8 @@
"Error" => "Fehler",
"The app name is not specified." => "Der App-Name ist nicht angegeben.",
"The required file {file} is not installed!" => "Die benötigte Datei {file} ist nicht installiert.",
+"Share" => "Freigeben",
+"Shared" => "Freigegeben",
"Error while sharing" => "Fehler bei der Freigabe",
"Error while unsharing" => "Fehler bei der Aufhebung der Freigabe",
"Error while changing permissions" => "Fehler bei der Änderung der Rechte",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Fehler beim Setzen des Ablaufdatums",
"Sending ..." => "Sende ...",
"Email sent" => "Email gesendet",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud Gemeinschaft</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet.",
"ownCloud password reset" => "ownCloud-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" => "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}",
"You will receive a link to reset your password via Email." => "Sie erhalten einen Link per E-Mail, um Ihr Passwort zurückzusetzen.",
@@ -86,7 +109,6 @@
"Security Warning" => "Sicherheitshinweis",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktivieren Sie die PHP-Erweiterung für OpenSSL.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage, die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Ihr Konto zu übernehmen.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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 wahrscheinlich über das Internet erreichbar. Die von ownCloud bereitgestellte .htaccess Datei funktioniert nicht. Wir empfehlen Ihnen dringend, Ihren Webserver so zu konfigurieren, dass das Datenverzeichnis nicht mehr über das Internet erreichbar ist. Alternativ können Sie auch das Datenverzeichnis aus dem Dokumentenverzeichnis des Webservers verschieben.",
"Create an <strong>admin account</strong>" => "<strong>Administrator-Konto</strong> anlegen",
"Advanced" => "Fortgeschritten",
"Data folder" => "Datenverzeichnis",
@@ -98,25 +120,6 @@
"Database tablespace" => "Datenbank-Tablespace",
"Database host" => "Datenbank-Host",
"Finish setup" => "Installation abschließen",
-"Sunday" => "Sonntag",
-"Monday" => "Montag",
-"Tuesday" => "Dienstag",
-"Wednesday" => "Mittwoch",
-"Thursday" => "Donnerstag",
-"Friday" => "Freitag",
-"Saturday" => "Samstag",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "März",
-"April" => "April",
-"May" => "Mai",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Dezember",
"web services under your control" => "Web-Services unter Ihrer Kontrolle",
"Log out" => "Abmelden",
"Automatic logon rejected!" => "Automatische Anmeldung verweigert.",
@@ -125,11 +128,8 @@
"Lost your password?" => "Passwort vergessen?",
"remember" => "merken",
"Log in" => "Einloggen",
-"You are logged out." => "Sie wurden abgemeldet.",
+"Alternative Logins" => "Alternative Logins",
"prev" => "Zurück",
"next" => "Weiter",
-"Updating ownCloud to version %s, this may take a while." => "Aktualisiere ownCloud auf Version %s. Dies könnte eine Weile dauern.",
-"Security Warning!" => "Sicherheitshinweis!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Bitte überprüfen Sie Ihr Passwort. <br/>Aus Sicherheitsgründen werden Sie gelegentlich aufgefordert, Ihr Passwort erneut einzugeben.",
-"Verify" => "Überprüfen"
+"Updating ownCloud to version %s, this may take a while." => "Aktualisiere ownCloud auf Version %s. Dies könnte eine Weile dauern."
);
diff --git a/core/l10n/el.php b/core/l10n/el.php
index d8a5d7aef51..54720f5ecb3 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Ο χÏήστης %s διαμοιÏάστηκε τον φάκελο \"%s\" μαζί σας. Είναι διαθέσιμος για λήψη εδώ: %s",
"Category type not provided." => "Δεν δώθηκε Ï„Ïπος κατηγοÏίας.",
"No category to add?" => "Δεν έχετε κατηγοÏία να Ï€Ïοσθέσετε;",
-"This category already exists: " => "Αυτή η κατηγοÏία υπάÏχει ήδη:",
+"This category already exists: %s" => "Αυτή η κατηγοÏία υπάÏχει ήδη: %s",
"Object type not provided." => "Δεν δώθηκε Ï„Ïπος αντικειμένου.",
"%s ID not provided." => "Δεν δώθηκε η ID για %s.",
"Error adding %s to favorites." => "Σφάλμα Ï€Ïοσθήκης %s στα αγαπημένα.",
"No categories selected for deletion." => "Δεν επιλέχτηκαν κατηγοÏίες για διαγÏαφή.",
"Error removing %s from favorites." => "Σφάλμα αφαίÏεσης %s από τα αγαπημένα.",
+"Sunday" => "ΚυÏιακή",
+"Monday" => "ΔευτέÏα",
+"Tuesday" => "ΤÏίτη",
+"Wednesday" => "ΤετάÏτη",
+"Thursday" => "Πέμπτη",
+"Friday" => "ΠαÏασκευή",
+"Saturday" => "Σάββατο",
+"January" => "ΙανουάÏιος",
+"February" => "ΦεβÏουάÏιος",
+"March" => "ΜάÏτιος",
+"April" => "ΑπÏίλιος",
+"May" => "Μάϊος",
+"June" => "ΙοÏνιος",
+"July" => "ΙοÏλιος",
+"August" => "ΑÏγουστος",
+"September" => "ΣεπτέμβÏιος",
+"October" => "ΟκτώβÏιος",
+"November" => "ÎοέμβÏιος",
+"December" => "ΔεκέμβÏιος",
"Settings" => "Ρυθμίσεις",
"seconds ago" => "δευτεÏόλεπτα Ï€Ïιν",
"1 minute ago" => "1 λεπτό Ï€Ïιν",
@@ -34,6 +53,7 @@
"Error" => "Σφάλμα",
"The app name is not specified." => "Δεν καθοÏίστηκε το όνομα της εφαÏμογής.",
"The required file {file} is not installed!" => "Το απαιτοÏμενο αÏχείο {file} δεν εγκαταστάθηκε!",
+"Share" => "ΔιαμοιÏασμός",
"Error while sharing" => "Σφάλμα κατά τον διαμοιÏασμό",
"Error while unsharing" => "Σφάλμα κατά το σταμάτημα του διαμοιÏασμοÏ",
"Error while changing permissions" => "Σφάλμα κατά την αλλαγή των δικαιωμάτων",
@@ -86,7 +106,6 @@
"Security Warning" => "ΠÏοειδοποίηση Ασφαλείας",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Δεν είναι διαθέσιμο το Ï€Ïόσθετο δημιουÏγίας τυχαίων αÏιθμών ασφαλείας, παÏακαλώ ενεÏγοποιήστε το Ï€Ïόσθετο της PHP, OpenSSL.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "ΧωÏίς το Ï€Ïόσθετο δημιουÏγίας τυχαίων αÏιθμών ασφαλείας, μποÏεί να διαÏÏεÏσει ο λογαÏιασμός σας από επιθέσεις στο διαδίκτυο.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Ο κατάλογος data και τα αÏχεία σας πιθανόν να είναι διαθέσιμα στο διαδίκτυο. Το αÏχείο .htaccess που παÏέχει το ownCloud δεν δουλεÏει. Σας Ï€Ïοτείνουμε ανεπιφÏλακτα να Ïυθμίσετε το διακομιστή σας με τέτοιο Ï„Ïόπο ώστε ο κατάλογος data να μην είναι πλέον Ï€Ïοσβάσιμος ή να μετακινήσετε τον κατάλογο data έξω από τον κατάλογο του διακομιστή.",
"Create an <strong>admin account</strong>" => "ΔημιουÏγήστε έναν <strong>λογαÏιασμό διαχειÏιστή</strong>",
"Advanced" => "Για Ï€ÏοχωÏημένους",
"Data folder" => "Φάκελος δεδομένων",
@@ -98,25 +117,6 @@
"Database tablespace" => "Κενά Πινάκων Βάσης Δεδομένων",
"Database host" => "Διακομιστής βάσης δεδομένων",
"Finish setup" => "ΟλοκλήÏωση εγκατάστασης",
-"Sunday" => "ΚυÏιακή",
-"Monday" => "ΔευτέÏα",
-"Tuesday" => "ΤÏίτη",
-"Wednesday" => "ΤετάÏτη",
-"Thursday" => "Πέμπτη",
-"Friday" => "ΠαÏασκευή",
-"Saturday" => "Σάββατο",
-"January" => "ΙανουάÏιος",
-"February" => "ΦεβÏουάÏιος",
-"March" => "ΜάÏτιος",
-"April" => "ΑπÏίλιος",
-"May" => "Μάϊος",
-"June" => "ΙοÏνιος",
-"July" => "ΙοÏλιος",
-"August" => "ΑÏγουστος",
-"September" => "ΣεπτέμβÏιος",
-"October" => "ΟκτώβÏιος",
-"November" => "ÎοέμβÏιος",
-"December" => "ΔεκέμβÏιος",
"web services under your control" => "ΥπηÏεσίες web υπό τον έλεγχό σας",
"Log out" => "ΑποσÏνδεση",
"Automatic logon rejected!" => "ΑποÏÏίφθηκε η αυτόματη σÏνδεση!",
@@ -125,10 +125,7 @@
"Lost your password?" => "Ξεχάσατε το συνθηματικό σας;",
"remember" => "απομνημόνευση",
"Log in" => "Είσοδος",
-"You are logged out." => "Έχετε αποσυνδεθεί.",
"prev" => "Ï€ÏοηγοÏμενο",
"next" => "επόμενο",
-"Security Warning!" => "ΠÏοειδοποίηση Ασφαλείας!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "ΠαÏακαλώ επιβεβαιώστε το συνθηματικό σας. <br/>Για λόγους ασφαλείας μποÏεί να εÏωτάστε να εισάγετε ξανά το συνθηματικό σας.",
-"Verify" => "Επαλήθευση"
+"Updating ownCloud to version %s, this may take a while." => "ΕνημεÏώνοντας το ownCloud στην έκδοση %s,μποÏεί να πάÏει λίγο χÏόνο."
);
diff --git a/core/l10n/eo.php b/core/l10n/eo.php
index a605b27ed80..f2297bd3d97 100644
--- a/core/l10n/eo.php
+++ b/core/l10n/eo.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "La uzanto %s kunhavigis la dosierujon “%s†kun vi. Äœi elÅuteblas el tie ĉi: %s",
"Category type not provided." => "Ne proviziÄis tipon de kategorio.",
"No category to add?" => "Ĉu neniu kategorio estas aldonota?",
-"This category already exists: " => "Ĉi tiu kategorio jam ekzistas: ",
"Object type not provided." => "Ne proviziÄis tipon de objekto.",
"%s ID not provided." => "Ne proviziÄis ID-on de %s.",
"Error adding %s to favorites." => "Eraro dum aldono de %s al favoratoj.",
"No categories selected for deletion." => "Neniu kategorio elektiÄis por forigo.",
"Error removing %s from favorites." => "Eraro dum forigo de %s el favoratoj.",
+"Sunday" => "dimanĉo",
+"Monday" => "lundo",
+"Tuesday" => "mardo",
+"Wednesday" => "merkredo",
+"Thursday" => "ĵaŭdo",
+"Friday" => "vendredo",
+"Saturday" => "sabato",
+"January" => "Januaro",
+"February" => "Februaro",
+"March" => "Marto",
+"April" => "Aprilo",
+"May" => "Majo",
+"June" => "Junio",
+"July" => "Julio",
+"August" => "AÅ­gusto",
+"September" => "Septembro",
+"October" => "Oktobro",
+"November" => "Novembro",
+"December" => "Decembro",
"Settings" => "Agordo",
"seconds ago" => "sekundoj antaÅ­e",
"1 minute ago" => "antaÅ­ 1 minuto",
@@ -34,6 +52,7 @@
"Error" => "Eraro",
"The app name is not specified." => "Ne indikiÄis nomo de la aplikaĵo.",
"The required file {file} is not installed!" => "La necesa dosiero {file} ne instaliÄis!",
+"Share" => "Kunhavigi",
"Error while sharing" => "Eraro dum kunhavigo",
"Error while unsharing" => "Eraro dum malkunhavigo",
"Error while changing permissions" => "Eraro dum ÅanÄo de permesoj",
@@ -95,25 +114,6 @@
"Database tablespace" => "Datumbaza tabelospaco",
"Database host" => "Datumbaza gastigo",
"Finish setup" => "Fini la instalon",
-"Sunday" => "dimanĉo",
-"Monday" => "lundo",
-"Tuesday" => "mardo",
-"Wednesday" => "merkredo",
-"Thursday" => "ĵaŭdo",
-"Friday" => "vendredo",
-"Saturday" => "sabato",
-"January" => "Januaro",
-"February" => "Februaro",
-"March" => "Marto",
-"April" => "Aprilo",
-"May" => "Majo",
-"June" => "Junio",
-"July" => "Julio",
-"August" => "AÅ­gusto",
-"September" => "Septembro",
-"October" => "Oktobro",
-"November" => "Novembro",
-"December" => "Decembro",
"web services under your control" => "TTT-servoj sub via kontrolo",
"Log out" => "Elsaluti",
"If you did not change your password recently, your account may be compromised!" => "Se vi ne ÅanÄis vian pasvorton lastatempe, via konto eble kompromitas!",
@@ -121,10 +121,6 @@
"Lost your password?" => "Ĉu vi perdis vian pasvorton?",
"remember" => "memori",
"Log in" => "Ensaluti",
-"You are logged out." => "Vi estas elsalutita.",
"prev" => "maljena",
-"next" => "jena",
-"Security Warning!" => "Sekureca averto!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Bonvolu kontroli vian pasvorton. <br/>Pro sekureco, oni okaze povas peti al vi enigi vian pasvorton ree.",
-"Verify" => "Kontroli"
+"next" => "jena"
);
diff --git a/core/l10n/es.php b/core/l10n/es.php
index bc72944340b..6e6c56205b7 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "El usuario %s ha compartido la carpeta \"%s\" contigo. Puedes descargarla aquí: %s",
"Category type not provided." => "Tipo de categoria no proporcionado.",
"No category to add?" => "¿Ninguna categoría para añadir?",
-"This category already exists: " => "Esta categoría ya existe: ",
+"This category already exists: %s" => "Esta categoria ya existe: %s",
"Object type not provided." => "ipo de objeto no proporcionado.",
"%s ID not provided." => "%s ID no proporcionado.",
"Error adding %s to favorites." => "Error añadiendo %s a los favoritos.",
"No categories selected for deletion." => "No hay categorías seleccionadas para borrar.",
"Error removing %s from favorites." => "Error eliminando %s de los favoritos.",
+"Sunday" => "Domingo",
+"Monday" => "Lunes",
+"Tuesday" => "Martes",
+"Wednesday" => "Miércoles",
+"Thursday" => "Jueves",
+"Friday" => "Viernes",
+"Saturday" => "Sábado",
+"January" => "Enero",
+"February" => "Febrero",
+"March" => "Marzo",
+"April" => "Abril",
+"May" => "Mayo",
+"June" => "Junio",
+"July" => "Julio",
+"August" => "Agosto",
+"September" => "Septiembre",
+"October" => "Octubre",
+"November" => "Noviembre",
+"December" => "Diciembre",
"Settings" => "Ajustes",
"seconds ago" => "hace segundos",
"1 minute ago" => "hace 1 minuto",
@@ -34,6 +53,8 @@
"Error" => "Fallo",
"The app name is not specified." => "El nombre de la app no se ha especificado.",
"The required file {file} is not installed!" => "El fichero {file} requerido, no está instalado.",
+"Share" => "Compartir",
+"Shared" => "Compartido",
"Error while sharing" => "Error compartiendo",
"Error while unsharing" => "Error descompartiendo",
"Error while changing permissions" => "Error cambiando permisos",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Error estableciendo fecha de caducidad",
"Sending ..." => "Enviando...",
"Email sent" => "Correo electrónico enviado",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "La actualización ha fracasado. Por favor, informe este problema a la <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">Comunidad de ownCloud</ a>.",
+"The update was successful. Redirecting you to ownCloud now." => "La actualización se ha realizado correctamente. Redireccionando a ownCloud ahora.",
"ownCloud password reset" => "Reiniciar contraseña de ownCloud",
"Use the following link to reset your password: {link}" => "Utiliza el siguiente enlace para restablecer tu contraseña: {link}",
"You will receive a link to reset your password via Email." => "Recibirás un enlace por correo electrónico para restablecer tu contraseña",
@@ -86,7 +109,8 @@
"Security Warning" => "Advertencia de seguridad",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No está disponible un generador de números aleatorios seguro, por favor habilite la extensión OpenSSL de PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sin un generador de números aleatorios seguro un atacante podría predecir los tokens de reinicio de su contraseña y tomar control de su cuenta.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Su directorio de datos y sus archivos están probablemente accesibles desde internet. El archivo .htaccess que ownCloud provee no está funcionando. Sugerimos fuertemente que configure su servidor web de manera que el directorio de datos ya no esté accesible o mueva el directorio de datos fuera del documento raíz de su servidor web.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Su directorio de datos y sus archivos están probablemente accesibles a través de internet ya que el archivo .htaccess no está funcionando.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Para información sobre cómo configurar adecuadamente su servidor, por favor vea la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" => "Crea una <strong>cuenta de administrador</strong>",
"Advanced" => "Avanzado",
"Data folder" => "Directorio de almacenamiento",
@@ -98,25 +122,6 @@
"Database tablespace" => "Espacio de tablas de la base de datos",
"Database host" => "Host de la base de datos",
"Finish setup" => "Completar la instalación",
-"Sunday" => "Domingo",
-"Monday" => "Lunes",
-"Tuesday" => "Martes",
-"Wednesday" => "Miércoles",
-"Thursday" => "Jueves",
-"Friday" => "Viernes",
-"Saturday" => "Sábado",
-"January" => "Enero",
-"February" => "Febrero",
-"March" => "Marzo",
-"April" => "Abril",
-"May" => "Mayo",
-"June" => "Junio",
-"July" => "Julio",
-"August" => "Agosto",
-"September" => "Septiembre",
-"October" => "Octubre",
-"November" => "Noviembre",
-"December" => "Diciembre",
"web services under your control" => "servicios web bajo tu control",
"Log out" => "Salir",
"Automatic logon rejected!" => "¡Inicio de sesión automático rechazado!",
@@ -125,11 +130,8 @@
"Lost your password?" => "¿Has perdido tu contraseña?",
"remember" => "recuérdame",
"Log in" => "Entrar",
-"You are logged out." => "Has cerrado la sesión.",
+"Alternative Logins" => "Nombre de usuarios alternativos",
"prev" => "anterior",
"next" => "siguiente",
-"Updating ownCloud to version %s, this may take a while." => "Actualizando ownCloud a la versión %s, esto puede demorar un tiempo.",
-"Security Warning!" => "¡Advertencia de seguridad!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Por favor verifique su contraseña. <br/>Por razones de seguridad se le puede volver a preguntar ocasionalmente la contraseña.",
-"Verify" => "Verificar"
+"Updating ownCloud to version %s, this may take a while." => "Actualizando ownCloud a la versión %s, esto puede demorar un tiempo."
);
diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php
index 830281dabbe..819e52a7856 100644
--- a/core/l10n/es_AR.php
+++ b/core/l10n/es_AR.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "El usuario %s compartió el archivo \"%s\" con vos. Está disponible para su descarga aquí: %s",
"Category type not provided." => "Tipo de categoría no provisto. ",
"No category to add?" => "¿Ninguna categoría para añadir?",
-"This category already exists: " => "Esta categoría ya existe: ",
"Object type not provided." => "Tipo de objeto no provisto. ",
"%s ID not provided." => "%s ID no provista. ",
"Error adding %s to favorites." => "Error al agregar %s a favoritos. ",
"No categories selected for deletion." => "No hay categorías seleccionadas para borrar.",
"Error removing %s from favorites." => "Error al remover %s de favoritos. ",
+"Sunday" => "Domingo",
+"Monday" => "Lunes",
+"Tuesday" => "Martes",
+"Wednesday" => "Miércoles",
+"Thursday" => "Jueves",
+"Friday" => "Viernes",
+"Saturday" => "Sábado",
+"January" => "Enero",
+"February" => "Febrero",
+"March" => "Marzo",
+"April" => "Abril",
+"May" => "Mayo",
+"June" => "Junio",
+"July" => "Julio",
+"August" => "Agosto",
+"September" => "Septiembre",
+"October" => "Octubre",
+"November" => "Noviembre",
+"December" => "Diciembre",
"Settings" => "Ajustes",
"seconds ago" => "segundos atrás",
"1 minute ago" => "hace 1 minuto",
@@ -34,6 +52,8 @@
"Error" => "Error",
"The app name is not specified." => "El nombre de la aplicación no esta especificado.",
"The required file {file} is not installed!" => "¡El archivo requerido {file} no está instalado!",
+"Share" => "Compartir",
+"Shared" => "Compartido",
"Error while sharing" => "Error al compartir",
"Error while unsharing" => "Error en el procedimiento de ",
"Error while changing permissions" => "Error al cambiar permisos",
@@ -63,6 +83,8 @@
"Error setting expiration date" => "Error al asignar fecha de vencimiento",
"Sending ..." => "Enviando...",
"Email sent" => "Email enviado",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "La actualización no pudo ser completada. Por favor, reportá el inconveniente a la comunidad <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "La actualización fue exitosa. Estás siendo redirigido a ownCloud.",
"ownCloud password reset" => "Restablecer contraseña de ownCloud",
"Use the following link to reset your password: {link}" => "Usá este enlace para restablecer tu contraseña: {link}",
"You will receive a link to reset your password via Email." => "Vas a recibir un enlace por e-mail para restablecer tu contraseña",
@@ -86,7 +108,6 @@
"Security Warning" => "Advertencia de seguridad",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No hay disponible ningún generador de números aleatorios seguro. Por favor habilitá la extensión OpenSSL de PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sin un generador de números aleatorios seguro un atacante podría predecir los tokens de reinicio de tu contraseña y tomar control de tu cuenta.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Tu directorio de datos y tus archivos son probablemente accesibles desde internet. El archivo .htaccess provisto por ownCloud no está funcionando. Te sugerimos que configures tu servidor web de manera que el directorio de datos ya no esté accesible, o que muevas el directorio de datos afuera del directorio raíz de tu servidor web.",
"Create an <strong>admin account</strong>" => "Crear una <strong>cuenta de administrador</strong>",
"Advanced" => "Avanzado",
"Data folder" => "Directorio de almacenamiento",
@@ -98,25 +119,6 @@
"Database tablespace" => "Espacio de tablas de la base de datos",
"Database host" => "Host de la base de datos",
"Finish setup" => "Completar la instalación",
-"Sunday" => "Domingo",
-"Monday" => "Lunes",
-"Tuesday" => "Martes",
-"Wednesday" => "Miércoles",
-"Thursday" => "Jueves",
-"Friday" => "Viernes",
-"Saturday" => "Sábado",
-"January" => "Enero",
-"February" => "Febrero",
-"March" => "Marzo",
-"April" => "Abril",
-"May" => "Mayo",
-"June" => "Junio",
-"July" => "Julio",
-"August" => "Agosto",
-"September" => "Septiembre",
-"October" => "Octubre",
-"November" => "Noviembre",
-"December" => "Diciembre",
"web services under your control" => "servicios web sobre los que tenés control",
"Log out" => "Cerrar la sesión",
"Automatic logon rejected!" => "¡El inicio de sesión automático fue rechazado!",
@@ -125,10 +127,7 @@
"Lost your password?" => "¿Perdiste tu contraseña?",
"remember" => "recordame",
"Log in" => "Entrar",
-"You are logged out." => "Terminaste la sesión.",
"prev" => "anterior",
"next" => "siguiente",
-"Security Warning!" => "¡Advertencia de seguridad!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Por favor, verificá tu contraseña. <br/>Por razones de seguridad, puede ser que que te pregunte ocasionalmente la contraseña.",
-"Verify" => "Verificar"
+"Updating ownCloud to version %s, this may take a while." => "Actualizando ownCloud a la versión %s, puede domorar un rato."
);
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index b67dd13dd69..b0fc75736a0 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "Pole kategooriat, mida lisada?",
-"This category already exists: " => "See kategooria on juba olemas: ",
"No categories selected for deletion." => "Kustutamiseks pole kategooriat valitud.",
+"Sunday" => "Pühapäev",
+"Monday" => "Esmaspäev",
+"Tuesday" => "Teisipäev",
+"Wednesday" => "Kolmapäev",
+"Thursday" => "Neljapäev",
+"Friday" => "Reede",
+"Saturday" => "Laupäev",
+"January" => "Jaanuar",
+"February" => "Veebruar",
+"March" => "Märts",
+"April" => "Aprill",
+"May" => "Mai",
+"June" => "Juuni",
+"July" => "Juuli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktoober",
+"November" => "November",
+"December" => "Detsember",
"Settings" => "Seaded",
"seconds ago" => "sekundit tagasi",
"1 minute ago" => "1 minut tagasi",
@@ -19,6 +37,7 @@
"Yes" => "Jah",
"Ok" => "Ok",
"Error" => "Viga",
+"Share" => "Jaga",
"Error while sharing" => "Viga jagamisel",
"Error while unsharing" => "Viga jagamise lõpetamisel",
"Error while changing permissions" => "Viga õiguste muutmisel",
@@ -74,25 +93,6 @@
"Database tablespace" => "Andmebaasi tabeliruum",
"Database host" => "Andmebaasi host",
"Finish setup" => "Lõpeta seadistamine",
-"Sunday" => "Pühapäev",
-"Monday" => "Esmaspäev",
-"Tuesday" => "Teisipäev",
-"Wednesday" => "Kolmapäev",
-"Thursday" => "Neljapäev",
-"Friday" => "Reede",
-"Saturday" => "Laupäev",
-"January" => "Jaanuar",
-"February" => "Veebruar",
-"March" => "Märts",
-"April" => "Aprill",
-"May" => "Mai",
-"June" => "Juuni",
-"July" => "Juuli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktoober",
-"November" => "November",
-"December" => "Detsember",
"web services under your control" => "veebiteenused sinu kontrolli all",
"Log out" => "Logi välja",
"Automatic logon rejected!" => "Automaatne sisselogimine lükati tagasi!",
@@ -101,9 +101,6 @@
"Lost your password?" => "Kaotasid oma parooli?",
"remember" => "pea meeles",
"Log in" => "Logi sisse",
-"You are logged out." => "Sa oled välja loginud",
"prev" => "eelm",
-"next" => "järgm",
-"Security Warning!" => "turvahoiatus!",
-"Verify" => "Kinnita"
+"next" => "järgm"
);
diff --git a/core/l10n/eu.php b/core/l10n/eu.php
index 1a21ca34705..7dce8c53fb9 100644
--- a/core/l10n/eu.php
+++ b/core/l10n/eu.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s erabiltzaileak \"%s\" karpeta zurekin partekatu du. Hemen duzu eskuragarri: %s",
"Category type not provided." => "Kategoria mota ez da zehaztu.",
"No category to add?" => "Ez dago gehitzeko kategoriarik?",
-"This category already exists: " => "Kategoria hau dagoeneko existitzen da:",
"Object type not provided." => "Objetu mota ez da zehaztu.",
"%s ID not provided." => "%s ID mota ez da zehaztu.",
"Error adding %s to favorites." => "Errorea gertatu da %s gogokoetara gehitzean.",
"No categories selected for deletion." => "Ez da ezabatzeko kategoriarik hautatu.",
"Error removing %s from favorites." => "Errorea gertatu da %s gogokoetatik ezabatzean.",
+"Sunday" => "Igandea",
+"Monday" => "Astelehena",
+"Tuesday" => "Asteartea",
+"Wednesday" => "Asteazkena",
+"Thursday" => "Osteguna",
+"Friday" => "Ostirala",
+"Saturday" => "Larunbata",
+"January" => "Urtarrila",
+"February" => "Otsaila",
+"March" => "Martxoa",
+"April" => "Apirila",
+"May" => "Maiatza",
+"June" => "Ekaina",
+"July" => "Uztaila",
+"August" => "Abuztua",
+"September" => "Iraila",
+"October" => "Urria",
+"November" => "Azaroa",
+"December" => "Abendua",
"Settings" => "Ezarpenak",
"seconds ago" => "segundu",
"1 minute ago" => "orain dela minutu 1",
@@ -34,6 +52,8 @@
"Error" => "Errorea",
"The app name is not specified." => "App izena ez dago zehaztuta.",
"The required file {file} is not installed!" => "Beharrezkoa den {file} fitxategia ez dago instalatuta!",
+"Share" => "Elkarbanatu",
+"Shared" => "Elkarbanatuta",
"Error while sharing" => "Errore bat egon da elkarbanatzean",
"Error while unsharing" => "Errore bat egon da elkarbanaketa desegitean",
"Error while changing permissions" => "Errore bat egon da baimenak aldatzean",
@@ -63,6 +83,8 @@
"Error setting expiration date" => "Errore bat egon da muga data ezartzean",
"Sending ..." => "Bidaltzen ...",
"Email sent" => "Eposta bidalia",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Eguneraketa ez da ongi egin. Mesedez egin arazoaren txosten bat <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud komunitatearentzako</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Eguneraketa ongi egin da. Orain zure ownClouderea berbideratua izango zara.",
"ownCloud password reset" => "ownCloud-en pasahitza berrezarri",
"Use the following link to reset your password: {link}" => "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
"You will receive a link to reset your password via Email." => "Zure pashitza berrezartzeko lotura bat jasoko duzu Epostaren bidez.",
@@ -86,7 +108,6 @@
"Security Warning" => "Segurtasun abisua",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ez dago hausazko zenbaki sortzaile segururik eskuragarri, mesedez gatiu PHP OpenSSL extensioa.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Hausazko zenbaki sortzaile segururik gabe erasotzaile batek pasahitza berrezartzeko kodeak iragarri ditzake eta zure kontuaz jabetu.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Zure data karpeta eta zure fitxategiak internetetik zuzenean eskuragarri egon daitezke. ownCloudek emandako .htaccess fitxategia ez du bere lana egiten. Aholkatzen dizugu zure web zerbitzaria ongi konfiguratzea data karpeta eskuragarri ez izateko edo data karpeta web zerbitzariaren dokumentu errotik mugitzea.",
"Create an <strong>admin account</strong>" => "Sortu <strong>kudeatzaile kontu<strong> bat",
"Advanced" => "Aurreratua",
"Data folder" => "Datuen karpeta",
@@ -98,25 +119,6 @@
"Database tablespace" => "Datu basearen taula-lekua",
"Database host" => "Datubasearen hostalaria",
"Finish setup" => "Bukatu konfigurazioa",
-"Sunday" => "Igandea",
-"Monday" => "Astelehena",
-"Tuesday" => "Asteartea",
-"Wednesday" => "Asteazkena",
-"Thursday" => "Osteguna",
-"Friday" => "Ostirala",
-"Saturday" => "Larunbata",
-"January" => "Urtarrila",
-"February" => "Otsaila",
-"March" => "Martxoa",
-"April" => "Apirila",
-"May" => "Maiatza",
-"June" => "Ekaina",
-"July" => "Uztaila",
-"August" => "Abuztua",
-"September" => "Iraila",
-"October" => "Urria",
-"November" => "Azaroa",
-"December" => "Abendua",
"web services under your control" => "web zerbitzuak zure kontrolpean",
"Log out" => "Saioa bukatu",
"Automatic logon rejected!" => "Saio hasiera automatikoa ez onartuta!",
@@ -125,10 +127,7 @@
"Lost your password?" => "Galdu duzu pasahitza?",
"remember" => "gogoratu",
"Log in" => "Hasi saioa",
-"You are logged out." => "Zure saioa bukatu da.",
"prev" => "aurrekoa",
"next" => "hurrengoa",
-"Security Warning!" => "Segurtasun abisua",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Mesedez egiaztatu zure pasahitza. <br/>Segurtasun arrazoiengatik noizbehinka zure pasahitza berriz sartzea eska diezazukegu.",
-"Verify" => "Egiaztatu"
+"Updating ownCloud to version %s, this may take a while." => "ownCloud %s bertsiora eguneratzen, denbora har dezake."
);
diff --git a/core/l10n/fa.php b/core/l10n/fa.php
index 2f859dc31d2..10a57962f64 100644
--- a/core/l10n/fa.php
+++ b/core/l10n/fa.php
@@ -1,26 +1,89 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "کاربر %s یک پرونده را با شما به اشتراک گذاشته است.",
+"User %s shared a folder with you" => "کاربر %s یک پوشه را با شما به اشتراک گذاشته است.",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "کاربر %s پرونده \"%s\" را با شما به اشتراک گذاشته است. پرونده برای دانلود اینجاست : %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "کاربر %s پوشه \"%s\" را با شما به اشتراک گذاشته است. پرونده برای دانلود اینجاست : %s",
+"Category type not provided." => "نوع دسته بندی ارائه نشده است.",
"No category to add?" => "آیا گروه دیگری برای Ø§ÙØ²ÙˆØ¯Ù† ندارید",
-"This category already exists: " => "این گروه از قبل اضاÙÙ‡ شده",
+"Object type not provided." => "نوع شی ارائه نشده است.",
+"%s ID not provided." => "شناسه %s ارائه نشده است.",
+"Error adding %s to favorites." => "خطای اضاÙÙ‡ کردن %s به علاقه مندی ها.",
"No categories selected for deletion." => "هیج دسته ای برای پاک شدن انتخاب نشده است",
+"Error removing %s from favorites." => "خطای پاک کردن %s از علاقه مندی ها.",
+"Sunday" => "یکشنبه",
+"Monday" => "دوشنبه",
+"Tuesday" => "سه شنبه",
+"Wednesday" => "چهارشنبه",
+"Thursday" => "پنجشنبه",
+"Friday" => "جمعه",
+"Saturday" => "شنبه",
+"January" => "ژانویه",
+"February" => "ÙØ¨Ø±ÛŒÙ‡",
+"March" => "مارس",
+"April" => "آوریل",
+"May" => "می",
+"June" => "ژوئن",
+"July" => "جولای",
+"August" => "آگوست",
+"September" => "سپتامبر",
+"October" => "اکتبر",
+"November" => "نوامبر",
+"December" => "دسامبر",
"Settings" => "تنظیمات",
"seconds ago" => "ثانیه‌ها پیش",
"1 minute ago" => "1 دقیقه پیش",
+"{minutes} minutes ago" => "{دقیقه ها} دقیقه های پیش",
+"1 hour ago" => "1 ساعت پیش",
+"{hours} hours ago" => "{ساعت ها} ساعت ها پیش",
"today" => "امروز",
"yesterday" => "دیروز",
+"{days} days ago" => "{روزها} روزهای پیش",
"last month" => "ماه قبل",
+"{months} months ago" => "{ماه ها} ماه ها پیش",
"months ago" => "ماه‌های قبل",
"last year" => "سال قبل",
"years ago" => "سال‌های قبل",
+"Choose" => "انتخاب کردن",
"Cancel" => "منصر٠شدن",
"No" => "نه",
"Yes" => "بله",
"Ok" => "قبول",
+"The object type is not specified." => "نوع شی تعیین نشده است.",
"Error" => "خطا",
+"The app name is not specified." => "نام برنامه تعیین نشده است.",
+"The required file {file} is not installed!" => "پرونده { پرونده} درخواست شده نصب نشده است !",
+"Share" => "اشتراک‌گزاری",
+"Error while sharing" => "خطا درحال به اشتراک گذاشتن",
+"Error while unsharing" => "خطا درحال لغو اشتراک",
+"Error while changing permissions" => "خطا در حال تغییر مجوز",
+"Shared with you and the group {group} by {owner}" => "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}",
+"Shared with you by {owner}" => "به اشتراک گذاشته شده با شما توسط { دارنده}",
+"Share with" => "به اشتراک گذاشتن با",
+"Share with link" => "به اشتراک گذاشتن با پیوند",
+"Password protect" => "نگهداری کردن رمز عبور",
"Password" => "گذرواژه",
+"Email link to person" => "پیوند ایمیل برای شخص.",
+"Set expiration date" => "تنظیم تاریخ انقضا",
+"Expiration date" => "تاریخ انقضا",
+"Share via email:" => "از طریق ایمیل به اشتراک بگذارید :",
+"No people found" => "کسی ÛŒØ§ÙØª نشد",
+"Resharing is not allowed" => "اشتراک گذاری مجدد مجاز نمی باشد",
+"Shared in {item} with {user}" => "به اشتراک گذاشته شده در {بخش} با {کاربر}",
+"Unshare" => "لغو اشتراک",
+"can edit" => "می توان ویرایش کرد",
+"access control" => "کنترل دسترسی",
"create" => "ایجاد",
+"update" => "به روز",
+"delete" => "پاک کردن",
+"share" => "به اشتراک گذاشتن",
+"Password protected" => "نگهداری از رمز عبور",
+"Error unsetting expiration date" => "خطا در تنظیم نکردن تاریخ انقضا ",
+"Error setting expiration date" => "خطا در تنظیم تاریخ انقضا",
"ownCloud password reset" => "پسورد ابرهای شما تغییرکرد",
"Use the following link to reset your password: {link}" => "از لینک زیر جهت دوباره سازی پسورد Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید :\n{link}",
"You will receive a link to reset your password via Email." => "شما یک نامه الکترونیکی حاوی یک لینک جهت بازسازی گذرواژه Ø¯Ø±ÛŒØ§ÙØª خواهید کرد.",
+"Reset email send." => "تنظیم مجدد ایمیل را Ø¨ÙØ±Ø³ØªÛŒØ¯.",
+"Request failed!" => "درخواست رد شده است !",
"Username" => "شناسه",
"Request reset" => "درخواست دوباره سازی",
"Your password was reset" => "گذرواژه شما تغییرکرد",
@@ -37,6 +100,8 @@
"Edit categories" => "ویرایش گروه ها",
"Add" => "Ø§ÙØ²ÙˆØ¯Ù†",
"Security Warning" => "اخطار امنیتی",
+"No secure random number generator is available, please enable the PHP OpenSSL extension." => "هیچ مولد تصادÙÛŒ امن در دسترس نیست، Ù„Ø·ÙØ§ ÙØ±Ù…ت PHP OpenSSL را ÙØ¹Ø§Ù„ نمایید.",
+"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "بدون وجود یک تولید کننده اعداد تصادÙÛŒ امن ØŒ یک مهاجم ممکن است این قابلیت را داشته باشد Ú©Ù‡ پیشگویی کند پسوورد های راه انداز Ú¯Ø±ÙØªÙ‡ شده Ùˆ کنترلی روی حساب کاربری شما داشته باشد .",
"Create an <strong>admin account</strong>" => "Ù„Ø·ÙØ§ یک <strong> شناسه برای مدیر</strong> بسازید",
"Advanced" => "حرÙÙ‡ ای",
"Data folder" => "پوشه اطلاعاتی",
@@ -45,33 +110,17 @@
"Database user" => "شناسه پایگاه داده",
"Database password" => "پسورد پایگاه داده",
"Database name" => "نام پایگاه داده",
+"Database tablespace" => "جدول پایگاه داده",
"Database host" => "هاست پایگاه داده",
"Finish setup" => "اتمام نصب",
-"Sunday" => "یکشنبه",
-"Monday" => "دوشنبه",
-"Tuesday" => "سه شنبه",
-"Wednesday" => "چهارشنبه",
-"Thursday" => "پنجشنبه",
-"Friday" => "جمعه",
-"Saturday" => "شنبه",
-"January" => "ژانویه",
-"February" => "ÙØ¨Ø±ÛŒÙ‡",
-"March" => "مارس",
-"April" => "آوریل",
-"May" => "می",
-"June" => "ژوئن",
-"July" => "جولای",
-"August" => "آگوست",
-"September" => "سپتامبر",
-"October" => "اکتبر",
-"November" => "نوامبر",
-"December" => "دسامبر",
"web services under your control" => "سرویس وب تحت کنترل شما",
"Log out" => "خروج",
+"Automatic logon rejected!" => "ورود به سیستم اتوماتیک ردشد!",
+"If you did not change your password recently, your account may be compromised!" => "اگر شما اخیرا رمزعبور را تغییر نداده اید، حساب شما در معرض خطر می باشد !",
+"Please change your password to secure your account again." => "Ù„Ø·ÙØ§ رمز عبور خود را تغییر دهید تا مجددا حساب شما در امان باشد.",
"Lost your password?" => "آیا گذرواژه تان را به یاد نمی آورید؟",
"remember" => "بیاد آوری",
"Log in" => "ورود",
-"You are logged out." => "شما خارج شدید",
"prev" => "بازگشت",
"next" => "بعدی"
);
diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php
index 4b4a23b8c70..dedbf6723f7 100644
--- a/core/l10n/fi_FI.php
+++ b/core/l10n/fi_FI.php
@@ -1,7 +1,31 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "Käyttäjä %s jakoi tiedoston kanssasi",
+"User %s shared a folder with you" => "Käyttäjä %s jakoi kansion kanssasi",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "Käyttäjä %s jakoi tiedoston \"%s\" kanssasi. Se on ladattavissa täältä: %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Käyttäjä %s jakoi kansion \"%s\" kanssasi. Se on ladattavissa täältä: %s",
"No category to add?" => "Ei lisättävää luokkaa?",
-"This category already exists: " => "Tämä luokka on jo olemassa: ",
+"Error adding %s to favorites." => "Virhe lisätessä kohdetta %s suosikkeihin.",
"No categories selected for deletion." => "Luokkia ei valittu poistettavaksi.",
+"Error removing %s from favorites." => "Virhe poistaessa kohdetta %s suosikeista.",
+"Sunday" => "Sunnuntai",
+"Monday" => "Maanantai",
+"Tuesday" => "Tiistai",
+"Wednesday" => "Keskiviikko",
+"Thursday" => "Torstai",
+"Friday" => "Perjantai",
+"Saturday" => "Lauantai",
+"January" => "Tammikuu",
+"February" => "Helmikuu",
+"March" => "Maaliskuu",
+"April" => "Huhtikuu",
+"May" => "Toukokuu",
+"June" => "Kesäkuu",
+"July" => "Heinäkuu",
+"August" => "Elokuu",
+"September" => "Syyskuu",
+"October" => "Lokakuu",
+"November" => "Marraskuu",
+"December" => "Joulukuu",
"Settings" => "Asetukset",
"seconds ago" => "sekuntia sitten",
"1 minute ago" => "1 minuutti sitten",
@@ -24,9 +48,13 @@
"Error" => "Virhe",
"The app name is not specified." => "Sovelluksen nimeä ei ole määritelty.",
"The required file {file} is not installed!" => "Vaadittua tiedostoa {file} ei ole asennettu!",
+"Share" => "Jaa",
"Error while sharing" => "Virhe jaettaessa",
"Error while unsharing" => "Virhe jakoa peruttaessa",
"Error while changing permissions" => "Virhe oikeuksia muuttaessa",
+"Shared with you and the group {group} by {owner}" => "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta",
+"Shared with you by {owner}" => "Jaettu kanssasi käyttäjän {owner} toimesta",
+"Share with" => "Jaa",
"Share with link" => "Jaa linkillä",
"Password protect" => "Suojaa salasanalla",
"Password" => "Salasana",
@@ -49,9 +77,12 @@
"Error setting expiration date" => "Virhe päättymispäivää asettaessa",
"Sending ..." => "Lähetetään...",
"Email sent" => "Sähköposti lähetetty",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Päivitys epäonnistui. Ilmoita ongelmasta <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud-yhteisölle</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi.",
"ownCloud password reset" => "ownCloud-salasanan nollaus",
"Use the following link to reset your password: {link}" => "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
"You will receive a link to reset your password via Email." => "Saat sähköpostitse linkin nollataksesi salasanan.",
+"Reset email send." => "Salasanan nollausviesti lähetetty.",
"Request failed!" => "Pyyntö epäonnistui!",
"Username" => "Käyttäjätunnus",
"Request reset" => "Tilaus lähetetty",
@@ -69,7 +100,6 @@
"Edit categories" => "Muokkaa luokkia",
"Add" => "Lisää",
"Security Warning" => "Turvallisuusvaroitus",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Data-kansio ja tiedostot ovat ehkä saavutettavissa Internetistä. .htaccess-tiedosto, jolla kontrolloidaan pääsyä, ei toimi. Suosittelemme, että muutat web-palvelimesi asetukset niin ettei data-kansio ole enää pääsyä tai siirrät data-kansion pois web-palvelimen tiedostojen juuresta.",
"Create an <strong>admin account</strong>" => "Luo <strong>ylläpitäjän tunnus</strong>",
"Advanced" => "Lisäasetukset",
"Data folder" => "Datakansio",
@@ -81,25 +111,6 @@
"Database tablespace" => "Tietokannan taulukkotila",
"Database host" => "Tietokantapalvelin",
"Finish setup" => "Viimeistele asennus",
-"Sunday" => "Sunnuntai",
-"Monday" => "Maanantai",
-"Tuesday" => "Tiistai",
-"Wednesday" => "Keskiviikko",
-"Thursday" => "Torstai",
-"Friday" => "Perjantai",
-"Saturday" => "Lauantai",
-"January" => "Tammikuu",
-"February" => "Helmikuu",
-"March" => "Maaliskuu",
-"April" => "Huhtikuu",
-"May" => "Toukokuu",
-"June" => "Kesäkuu",
-"July" => "Heinäkuu",
-"August" => "Elokuu",
-"September" => "Syyskuu",
-"October" => "Lokakuu",
-"November" => "Marraskuu",
-"December" => "Joulukuu",
"web services under your control" => "verkkopalvelut hallinnassasi",
"Log out" => "Kirjaudu ulos",
"Automatic logon rejected!" => "Automaattinen sisäänkirjautuminen hylättiin!",
@@ -108,10 +119,7 @@
"Lost your password?" => "Unohditko salasanasi?",
"remember" => "muista",
"Log in" => "Kirjaudu sisään",
-"You are logged out." => "Olet kirjautunut ulos.",
"prev" => "edellinen",
"next" => "seuraava",
-"Security Warning!" => "Turvallisuusvaroitus!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Vahvista salasanasi. <br/>Turvallisuussyistä sinulta saatetaan ajoittain kysyä salasanasi uudelleen.",
-"Verify" => "Vahvista"
+"Updating ownCloud to version %s, this may take a while." => "Päivitetään ownCloud versioon %s, tämä saattaa kestää hetken."
);
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index 8777309d9b7..630d541b11b 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "L'utilisateur %s a partagé le dossier \"%s\" avec vous. Il est disponible au téléchargement ici : %s",
"Category type not provided." => "Type de catégorie non spécifié.",
"No category to add?" => "Pas de catégorie à ajouter ?",
-"This category already exists: " => "Cette catégorie existe déjà : ",
+"This category already exists: %s" => "Cette catégorie existe déjà : %s",
"Object type not provided." => "Type d'objet non spécifié.",
"%s ID not provided." => "L'identifiant de %s n'est pas spécifié.",
"Error adding %s to favorites." => "Erreur lors de l'ajout de %s aux favoris.",
"No categories selected for deletion." => "Aucune catégorie sélectionnée pour suppression",
"Error removing %s from favorites." => "Erreur lors de la suppression de %s des favoris.",
+"Sunday" => "Dimanche",
+"Monday" => "Lundi",
+"Tuesday" => "Mardi",
+"Wednesday" => "Mercredi",
+"Thursday" => "Jeudi",
+"Friday" => "Vendredi",
+"Saturday" => "Samedi",
+"January" => "janvier",
+"February" => "février",
+"March" => "mars",
+"April" => "avril",
+"May" => "mai",
+"June" => "juin",
+"July" => "juillet",
+"August" => "août",
+"September" => "septembre",
+"October" => "octobre",
+"November" => "novembre",
+"December" => "décembre",
"Settings" => "Paramètres",
"seconds ago" => "il y a quelques secondes",
"1 minute ago" => "il y a une minute",
@@ -34,6 +53,8 @@
"Error" => "Erreur",
"The app name is not specified." => "Le nom de l'application n'est pas spécifié.",
"The required file {file} is not installed!" => "Le fichier requis {file} n'est pas installé !",
+"Share" => "Partager",
+"Shared" => "Partagé",
"Error while sharing" => "Erreur lors de la mise en partage",
"Error while unsharing" => "Erreur lors de l'annulation du partage",
"Error while changing permissions" => "Erreur lors du changement des permissions",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Erreur lors de la spécification de la date d'expiration",
"Sending ..." => "En cours d'envoi ...",
"Email sent" => "Email envoyé",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "La mise à jour a échoué. Veuillez signaler ce problème à la <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">communauté ownCloud</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "La mise à jour a réussi. Vous êtes redirigé maintenant vers ownCloud.",
"ownCloud password reset" => "Réinitialisation de votre mot de passe Owncloud",
"Use the following link to reset your password: {link}" => "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
"You will receive a link to reset your password via Email." => "Vous allez recevoir un e-mail contenant un lien pour réinitialiser votre mot de passe.",
@@ -86,7 +109,8 @@
"Security Warning" => "Avertissement de sécurité",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Aucun générateur de nombre aléatoire sécurisé n'est disponible, veuillez activer l'extension PHP OpenSSL",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sans générateur de nombre aléatoire sécurisé, un attaquant peut être en mesure de prédire les jetons de réinitialisation du mot de passe, et ainsi prendre le contrôle de votre compte utilisateur.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Votre dossier data et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess fourni par ownCloud ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de manière à ce que le dossier data ne soit plus accessible ou bien de déplacer le dossier data en dehors du dossier racine des documents du serveur web.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Votre répertoire data est certainement accessible depuis l'internet car le fichier .htaccess ne semble pas fonctionner",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" => "Créer un <strong>compte administrateur</strong>",
"Advanced" => "Avancé",
"Data folder" => "Répertoire des données",
@@ -98,25 +122,6 @@
"Database tablespace" => "Tablespaces de la base de données",
"Database host" => "Serveur de la base de données",
"Finish setup" => "Terminer l'installation",
-"Sunday" => "Dimanche",
-"Monday" => "Lundi",
-"Tuesday" => "Mardi",
-"Wednesday" => "Mercredi",
-"Thursday" => "Jeudi",
-"Friday" => "Vendredi",
-"Saturday" => "Samedi",
-"January" => "janvier",
-"February" => "février",
-"March" => "mars",
-"April" => "avril",
-"May" => "mai",
-"June" => "juin",
-"July" => "juillet",
-"August" => "août",
-"September" => "septembre",
-"October" => "octobre",
-"November" => "novembre",
-"December" => "décembre",
"web services under your control" => "services web sous votre contrôle",
"Log out" => "Se déconnecter",
"Automatic logon rejected!" => "Connexion automatique rejetée !",
@@ -125,11 +130,8 @@
"Lost your password?" => "Mot de passe perdu ?",
"remember" => "se souvenir de moi",
"Log in" => "Connexion",
-"You are logged out." => "Vous êtes désormais déconnecté.",
+"Alternative Logins" => "Logins alternatifs",
"prev" => "précédent",
"next" => "suivant",
-"Updating ownCloud to version %s, this may take a while." => "Mise à jour en cours d'ownCloud vers la version %s, cela peut prendre du temps.",
-"Security Warning!" => "Alerte de sécurité !",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Veuillez vérifier votre mot de passe. <br/>Par sécurité il vous sera occasionnellement demandé d'entrer votre mot de passe de nouveau.",
-"Verify" => "Vérification"
+"Updating ownCloud to version %s, this may take a while." => "Mise à jour en cours d'ownCloud vers la version %s, cela peut prendre du temps."
);
diff --git a/core/l10n/gl.php b/core/l10n/gl.php
index 8daa8c6d1c4..8fd9292ce61 100644
--- a/core/l10n/gl.php
+++ b/core/l10n/gl.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "O usuario %s compartiu o cartafol «%s» con vostede. Teno dispoñíbel en: %s",
"Category type not provided." => "Non se indicou o tipo de categoría",
"No category to add?" => "Sen categoría que engadir?",
-"This category already exists: " => "Esta categoría xa existe: ",
"Object type not provided." => "Non se forneceu o tipo de obxecto.",
"%s ID not provided." => "Non se forneceu o ID %s.",
"Error adding %s to favorites." => "Produciuse un erro ao engadir %s aos favoritos.",
"No categories selected for deletion." => "Non hai categorías seleccionadas para eliminar.",
"Error removing %s from favorites." => "Produciuse un erro ao eliminar %s dos favoritos.",
+"Sunday" => "Domingo",
+"Monday" => "Luns",
+"Tuesday" => "Martes",
+"Wednesday" => "Mércores",
+"Thursday" => "Xoves",
+"Friday" => "Venres",
+"Saturday" => "Sábado",
+"January" => "xaneiro",
+"February" => "febreiro",
+"March" => "marzo",
+"April" => "abril",
+"May" => "maio",
+"June" => "xuño",
+"July" => "xullo",
+"August" => "agosto",
+"September" => "setembro",
+"October" => "outubro",
+"November" => "novembro",
+"December" => "decembro",
"Settings" => "Configuracións",
"seconds ago" => "segundos atrás",
"1 minute ago" => "hai 1 minuto",
@@ -34,6 +52,7 @@
"Error" => "Erro",
"The app name is not specified." => "Non se especificou o nome do aplicativo.",
"The required file {file} is not installed!" => "Non está instalado o ficheiro {file} que se precisa",
+"Share" => "Compartir",
"Error while sharing" => "Produciuse un erro ao compartir",
"Error while unsharing" => "Produciuse un erro ao deixar de compartir",
"Error while changing permissions" => "Produciuse un erro ao cambiar os permisos",
@@ -86,7 +105,6 @@
"Security Warning" => "Aviso de seguranza",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Non hai un xerador de números ao chou dispoñíbel. Active o engadido de OpenSSL para PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sen un xerador seguro de números ao chou podería acontecer que predicindo as cadeas de texto de reinicio de contrasinais se afagan coa súa conta.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través da Internet. O ficheiro .htaccess que fornece ownCloud non está a empregarse. Suxerimoslle que configure o seu servidor web de tal xeito que o cartafol de datos non estea accesíbel ou mova o cartafol de datos fora do directorio raíz de datos do servidor web.",
"Create an <strong>admin account</strong>" => "Crear unha <strong>contra de administrador</strong>",
"Advanced" => "Avanzado",
"Data folder" => "Cartafol de datos",
@@ -98,25 +116,6 @@
"Database tablespace" => "Táboa de espazos da base de datos",
"Database host" => "Servidor da base de datos",
"Finish setup" => "Rematar a configuración",
-"Sunday" => "Domingo",
-"Monday" => "Luns",
-"Tuesday" => "Martes",
-"Wednesday" => "Mércores",
-"Thursday" => "Xoves",
-"Friday" => "Venres",
-"Saturday" => "Sábado",
-"January" => "xaneiro",
-"February" => "febreiro",
-"March" => "marzo",
-"April" => "abril",
-"May" => "maio",
-"June" => "xuño",
-"July" => "xullo",
-"August" => "agosto",
-"September" => "setembro",
-"October" => "outubro",
-"November" => "novembro",
-"December" => "decembro",
"web services under your control" => "servizos web baixo o seu control",
"Log out" => "Desconectar",
"Automatic logon rejected!" => "Rexeitouse a entrada automática",
@@ -125,10 +124,7 @@
"Lost your password?" => "Perdeu o contrasinal?",
"remember" => "lembrar",
"Log in" => "Conectar",
-"You are logged out." => "Está desconectado",
"prev" => "anterior",
"next" => "seguinte",
-"Security Warning!" => "Advertencia de seguranza",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Verifique o seu contrasinal.<br/>Por motivos de seguranza pode que ocasionalmente se lle pregunte de novo polo seu contrasinal.",
-"Verify" => "Verificar"
+"Updating ownCloud to version %s, this may take a while." => "Actualizando ownCloud a versión %s, esto pode levar un anaco."
);
diff --git a/core/l10n/he.php b/core/l10n/he.php
index 50addbd5278..75c378ceceb 100644
--- a/core/l10n/he.php
+++ b/core/l10n/he.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "המשתמש %s שיתף ×תך ×ת התיקייה „%s“. ניתן להוריד ×ת התיקייה מכ×ן: %s",
"Category type not provided." => "סוג הקטגוריה ×œ× ×¡×•×¤×§.",
"No category to add?" => "×ין קטגוריה להוספה?",
-"This category already exists: " => "קטגוריה ×–×ת כבר קיימת: ",
"Object type not provided." => "סוג הפריט ×œ× ×¡×•×¤×§.",
"%s ID not provided." => "מזהה %s ×œ× ×¡×•×¤×§.",
"Error adding %s to favorites." => "×ירעה שגי××” בעת הוספת %s למועדפי×.",
"No categories selected for deletion." => "×œ× × ×‘×—×¨×• קטגוריות למחיקה",
"Error removing %s from favorites." => "שגי××” בהסרת %s מהמועדפי×.",
+"Sunday" => "×™×•× ×¨×שון",
+"Monday" => "×™×•× ×©× ×™",
+"Tuesday" => "×™×•× ×©×œ×™×©×™",
+"Wednesday" => "×™×•× ×¨×‘×™×¢×™",
+"Thursday" => "×™×•× ×—×ž×™×©×™",
+"Friday" => "×™×•× ×©×™×©×™",
+"Saturday" => "שבת",
+"January" => "ינו×ר",
+"February" => "פברו×ר",
+"March" => "מרץ",
+"April" => "×פריל",
+"May" => "מ××™",
+"June" => "יוני",
+"July" => "יולי",
+"August" => "×וגוסט",
+"September" => "ספטמבר",
+"October" => "×וקטובר",
+"November" => "נובמבר",
+"December" => "דצמבר",
"Settings" => "הגדרות",
"seconds ago" => "שניות",
"1 minute ago" => "לפני דקה ×חת",
@@ -34,6 +52,7 @@
"Error" => "שגי××”",
"The app name is not specified." => "×©× ×”×™×™×©×•× ×œ× ×¦×•×™×Ÿ.",
"The required file {file} is not installed!" => "הקובץ הנדרש {file} ×ינו מותקן!",
+"Share" => "שתף",
"Error while sharing" => "שגי××” במהלך השיתוף",
"Error while unsharing" => "שגי××” במהלך ביטול השיתוף",
"Error while changing permissions" => "שגי××” במהלך שינוי ההגדרות",
@@ -86,7 +105,6 @@
"Security Warning" => "×זהרת ×בטחה",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "×ין מחולל ×ž×¡×¤×¨×™× ×קר××™×™× ×ž×ובטח, × × ×œ×”×¤×¢×™×œ ×ת ההרחבה OpenSSL ב־PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "×œ×œ× ×ž×—×•×œ×œ ×ž×¡×¤×¨×™× ×קר××™×™× ×ž×ובטח תוקף יכול ×œ× ×‘× ×ת מחרוזות ×יפוס הססמה ולהשתלט על החשבון שלך.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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 כנר××” ×ינו עובד. ×נו ×ž×ž×œ×™×¦×™× ×‘×—×•× ×œ×”×’×“×™×¨ ×ת שרת ×”×ינטרנט שלך בדרך שבה תיקיית ×”× ×ª×•× ×™× ×œ× ×ª×”×™×” זמינה עוד ×ו להעביר ×ת תיקיית ×”× ×ª×•× ×™× ×ž×—×•×¥ לספריית העל של שרת ×”×ינטרנט.",
"Create an <strong>admin account</strong>" => "יצירת <strong>חשבון מנהל</strong>",
"Advanced" => "מתקד×",
"Data folder" => "תיקיית נתוני×",
@@ -98,25 +116,6 @@
"Database tablespace" => "מרחב הכתובות של מסד הנתוני×",
"Database host" => "שרת בסיס נתוני×",
"Finish setup" => "×¡×™×•× ×”×ª×§× ×”",
-"Sunday" => "×™×•× ×¨×שון",
-"Monday" => "×™×•× ×©× ×™",
-"Tuesday" => "×™×•× ×©×œ×™×©×™",
-"Wednesday" => "×™×•× ×¨×‘×™×¢×™",
-"Thursday" => "×™×•× ×—×ž×™×©×™",
-"Friday" => "×™×•× ×©×™×©×™",
-"Saturday" => "שבת",
-"January" => "ינו×ר",
-"February" => "פברו×ר",
-"March" => "מרץ",
-"April" => "×פריל",
-"May" => "מ××™",
-"June" => "יוני",
-"July" => "יולי",
-"August" => "×וגוסט",
-"September" => "ספטמבר",
-"October" => "×וקטובר",
-"November" => "נובמבר",
-"December" => "דצמבר",
"web services under your control" => "שירותי רשת בשליטתך",
"Log out" => "התנתקות",
"Automatic logon rejected!" => "בקשת הכניסה ×”×וטומטית נדחתה!",
@@ -125,10 +124,7 @@
"Lost your password?" => "שכחת ×ת ססמתך?",
"remember" => "שמירת הססמה",
"Log in" => "כניסה",
-"You are logged out." => "×œ× ×”×ª×—×‘×¨×ª.",
"prev" => "הקוד×",
"next" => "הב×",
-"Security Warning!" => "×זהרת ×בטחה!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "× × ×œ×מת ×ת הססמה שלך. <br/>מטעמי ×בטחה יתכן שתופיע בקשה להזין ×ת הססמה שוב.",
-"Verify" => "×ימות"
+"Updating ownCloud to version %s, this may take a while." => "מעדכן ×ת ownCloud ×ל ×’×¨×¡× %s, ×–×” עלול לקחת זמן מה."
);
diff --git a/core/l10n/hi.php b/core/l10n/hi.php
index 0e4f18c6cd8..d7f9fd150b0 100644
--- a/core/l10n/hi.php
+++ b/core/l10n/hi.php
@@ -12,7 +12,6 @@
"Database user" => "डेटाबेस उपयोगकरà¥à¤¤à¤¾",
"Database password" => "डेटाबेस पासवरà¥à¤¡",
"Finish setup" => "सेटअप समापà¥à¤¤ करे",
-"You are logged out." => "आप लोग आउट कर दिठगठहैं.",
"prev" => "पिछला",
"next" => "अगला"
);
diff --git a/core/l10n/hr.php b/core/l10n/hr.php
index 69bdd3a4f83..86136329d8f 100644
--- a/core/l10n/hr.php
+++ b/core/l10n/hr.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "Nemate kategorija koje možete dodati?",
-"This category already exists: " => "Ova kategorija već postoji: ",
"No categories selected for deletion." => "Nema odabranih kategorija za brisanje.",
+"Sunday" => "nedelja",
+"Monday" => "ponedeljak",
+"Tuesday" => "utorak",
+"Wednesday" => "srijeda",
+"Thursday" => "Äetvrtak",
+"Friday" => "petak",
+"Saturday" => "subota",
+"January" => "SijeÄanj",
+"February" => "VeljaÄa",
+"March" => "Ožujak",
+"April" => "Travanj",
+"May" => "Svibanj",
+"June" => "Lipanj",
+"July" => "Srpanj",
+"August" => "Kolovoz",
+"September" => "Rujan",
+"October" => "Listopad",
+"November" => "Studeni",
+"December" => "Prosinac",
"Settings" => "Postavke",
"seconds ago" => "sekundi prije",
"today" => "danas",
@@ -16,6 +34,7 @@
"Yes" => "Da",
"Ok" => "U redu",
"Error" => "Pogreška",
+"Share" => "Podijeli",
"Error while sharing" => "Greška prilikom djeljenja",
"Error while unsharing" => "GreÅ¡ka prilikom iskljuÄivanja djeljenja",
"Error while changing permissions" => "Greška prilikom promjena prava",
@@ -67,31 +86,11 @@
"Database tablespace" => "Database tablespace",
"Database host" => "Poslužitelj baze podataka",
"Finish setup" => "Završi postavljanje",
-"Sunday" => "nedelja",
-"Monday" => "ponedeljak",
-"Tuesday" => "utorak",
-"Wednesday" => "srijeda",
-"Thursday" => "Äetvrtak",
-"Friday" => "petak",
-"Saturday" => "subota",
-"January" => "SijeÄanj",
-"February" => "VeljaÄa",
-"March" => "Ožujak",
-"April" => "Travanj",
-"May" => "Svibanj",
-"June" => "Lipanj",
-"July" => "Srpanj",
-"August" => "Kolovoz",
-"September" => "Rujan",
-"October" => "Listopad",
-"November" => "Studeni",
-"December" => "Prosinac",
"web services under your control" => "web usluge pod vašom kontrolom",
"Log out" => "Odjava",
"Lost your password?" => "Izgubili ste lozinku?",
"remember" => "zapamtiti",
"Log in" => "Prijava",
-"You are logged out." => "Odjavljeni ste.",
"prev" => "prethodan",
"next" => "sljedeći"
);
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
index 1c86e8b11d6..fc71a669e89 100644
--- a/core/l10n/hu_HU.php
+++ b/core/l10n/hu_HU.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s felhasználó megosztotta ezt a mappát Önnel: %s. A mappa innen tölthető le: %s",
"Category type not provided." => "Nincs megadva a kategória típusa.",
"No category to add?" => "Nincs hozzáadandó kategória?",
-"This category already exists: " => "Ez a kategória már létezik: ",
"Object type not provided." => "Az objektum típusa nincs megadva.",
"%s ID not provided." => "%s ID nincs megadva.",
"Error adding %s to favorites." => "Nem sikerült a kedvencekhez adni ezt: %s",
"No categories selected for deletion." => "Nincs törlésre jelölt kategória",
"Error removing %s from favorites." => "Nem sikerült a kedvencekből törölni ezt: %s",
+"Sunday" => "vasárnap",
+"Monday" => "hétfő",
+"Tuesday" => "kedd",
+"Wednesday" => "szerda",
+"Thursday" => "csütörtök",
+"Friday" => "péntek",
+"Saturday" => "szombat",
+"January" => "január",
+"February" => "február",
+"March" => "március",
+"April" => "április",
+"May" => "május",
+"June" => "június",
+"July" => "július",
+"August" => "augusztus",
+"September" => "szeptember",
+"October" => "október",
+"November" => "november",
+"December" => "december",
"Settings" => "Beállítások",
"seconds ago" => "pár másodperce",
"1 minute ago" => "1 perce",
@@ -34,6 +52,7 @@
"Error" => "Hiba",
"The app name is not specified." => "Az alkalmazás neve nincs megadva.",
"The required file {file} is not installed!" => "A szükséges fájl: {file} nincs telepítve!",
+"Share" => "Megosztás",
"Error while sharing" => "Nem sikerült létrehozni a megosztást",
"Error while unsharing" => "Nem sikerült visszavonni a megosztást",
"Error while changing permissions" => "Nem sikerült módosítani a jogosultságokat",
@@ -42,7 +61,7 @@
"Share with" => "Kivel osztom meg",
"Share with link" => "Link megadásával osztom meg",
"Password protect" => "Jelszóval is védem",
-"Password" => "Jelszó (tetszőleges)",
+"Password" => "Jelszó",
"Email link to person" => "Email címre küldjük el",
"Send" => "Küldjük el",
"Set expiration date" => "Legyen lejárati idő",
@@ -86,7 +105,6 @@
"Security Warning" => "Biztonsági figyelmeztetés",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nem érhető el megfelelő véletlenszám-generátor, telepíteni kellene a PHP OpenSSL kiegészítését.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Megfelelő véletlenszám-generátor hiányában egy támadó szándékú idegen képes lehet megjósolni a jelszóvisszaállító tokent, és Ön helyett belépni.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Az adatkönytára és az itt levő fájlok valószínűleg elérhetők az internetről. Az ownCloud által beillesztett .htaccess fájl nem működik. Nagyon fontos, hogy a webszervert úgy konfigurálja, hogy az adatkönyvtár nem legyen közvetlenül kívülről elérhető, vagy az adatkönyvtárt tegye a webszerver dokumentumfáján kívülre.",
"Create an <strong>admin account</strong>" => "<strong>Rendszergazdai belépés</strong> létrehozása",
"Advanced" => "Haladó",
"Data folder" => "Adatkönyvtár",
@@ -98,25 +116,6 @@
"Database tablespace" => "Az adatbázis táblázattér (tablespace)",
"Database host" => "Adatbázis szerver",
"Finish setup" => "A beállítások befejezése",
-"Sunday" => "vasárnap",
-"Monday" => "hétfő",
-"Tuesday" => "kedd",
-"Wednesday" => "szerda",
-"Thursday" => "csütörtök",
-"Friday" => "péntek",
-"Saturday" => "szombat",
-"January" => "január",
-"February" => "február",
-"March" => "március",
-"April" => "április",
-"May" => "május",
-"June" => "június",
-"July" => "július",
-"August" => "augusztus",
-"September" => "szeptember",
-"October" => "október",
-"November" => "november",
-"December" => "december",
"web services under your control" => "webszolgáltatások saját kézben",
"Log out" => "Kilépés",
"Automatic logon rejected!" => "Az automatikus bejelentkezés sikertelen!",
@@ -125,10 +124,7 @@
"Lost your password?" => "Elfelejtette a jelszavát?",
"remember" => "emlékezzen",
"Log in" => "Bejelentkezés",
-"You are logged out." => "Kilépett.",
"prev" => "előző",
"next" => "következő",
-"Security Warning!" => "Biztonsági figyelmeztetés!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Kérjük írja be a jelszavát! <br/>Biztonsági okokból néha a bejelentkezést követően is ellenőrzésképpen meg kell adnia a jelszavát.",
-"Verify" => "Ellenőrzés"
+"Updating ownCloud to version %s, this may take a while." => "Owncloud frissítés a %s verzióra folyamatban. Kis türelmet."
);
diff --git a/core/l10n/ia.php b/core/l10n/ia.php
index 07cc118f0e6..8adc38f0bba 100644
--- a/core/l10n/ia.php
+++ b/core/l10n/ia.php
@@ -1,7 +1,26 @@
<?php $TRANSLATIONS = array(
-"This category already exists: " => "Iste categoria jam existe:",
+"Sunday" => "Dominica",
+"Monday" => "Lunedi",
+"Tuesday" => "Martedi",
+"Wednesday" => "Mercuridi",
+"Thursday" => "Jovedi",
+"Friday" => "Venerdi",
+"Saturday" => "Sabbato",
+"January" => "januario",
+"February" => "Februario",
+"March" => "Martio",
+"April" => "April",
+"May" => "Mai",
+"June" => "Junio",
+"July" => "Julio",
+"August" => "Augusto",
+"September" => "Septembre",
+"October" => "Octobre",
+"November" => "Novembre",
+"December" => "Decembre",
"Settings" => "Configurationes",
"Cancel" => "Cancellar",
+"Share" => "Compartir",
"Password" => "Contrasigno",
"ownCloud password reset" => "Reinitialisation del contrasigno de ownCLoud",
"Username" => "Nomine de usator",
@@ -28,31 +47,11 @@
"Database password" => "Contrasigno de base de datos",
"Database name" => "Nomine de base de datos",
"Database host" => "Hospite de base de datos",
-"Sunday" => "Dominica",
-"Monday" => "Lunedi",
-"Tuesday" => "Martedi",
-"Wednesday" => "Mercuridi",
-"Thursday" => "Jovedi",
-"Friday" => "Venerdi",
-"Saturday" => "Sabbato",
-"January" => "januario",
-"February" => "Februario",
-"March" => "Martio",
-"April" => "April",
-"May" => "Mai",
-"June" => "Junio",
-"July" => "Julio",
-"August" => "Augusto",
-"September" => "Septembre",
-"October" => "Octobre",
-"November" => "Novembre",
-"December" => "Decembre",
"web services under your control" => "servicios web sub tu controlo",
"Log out" => "Clauder le session",
"Lost your password?" => "Tu perdeva le contrasigno?",
"remember" => "memora",
"Log in" => "Aperir session",
-"You are logged out." => "Tu session ha essite claudite.",
"prev" => "prev",
"next" => "prox"
);
diff --git a/core/l10n/id.php b/core/l10n/id.php
index 99df16332f5..697195e7514 100644
--- a/core/l10n/id.php
+++ b/core/l10n/id.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "Tidak ada kategori yang akan ditambahkan?",
-"This category already exists: " => "Kategori ini sudah ada:",
"No categories selected for deletion." => "Tidak ada kategori terpilih untuk penghapusan.",
+"Sunday" => "minggu",
+"Monday" => "senin",
+"Tuesday" => "selasa",
+"Wednesday" => "rabu",
+"Thursday" => "kamis",
+"Friday" => "jumat",
+"Saturday" => "sabtu",
+"January" => "Januari",
+"February" => "Februari",
+"March" => "Maret",
+"April" => "April",
+"May" => "Mei",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "Agustus",
+"September" => "September",
+"October" => "Oktober",
+"November" => "Nopember",
+"December" => "Desember",
"Settings" => "Setelan",
"seconds ago" => "beberapa detik yang lalu",
"1 minute ago" => "1 menit lalu",
@@ -17,6 +35,7 @@
"Yes" => "Ya",
"Ok" => "Oke",
"Error" => "gagal",
+"Share" => "berbagi",
"Error while sharing" => "gagal ketika membagikan",
"Error while unsharing" => "gagal ketika membatalkan pembagian",
"Error while changing permissions" => "gagal ketika merubah perijinan",
@@ -73,25 +92,6 @@
"Database tablespace" => "tablespace basis data",
"Database host" => "Host database",
"Finish setup" => "Selesaikan instalasi",
-"Sunday" => "minggu",
-"Monday" => "senin",
-"Tuesday" => "selasa",
-"Wednesday" => "rabu",
-"Thursday" => "kamis",
-"Friday" => "jumat",
-"Saturday" => "sabtu",
-"January" => "Januari",
-"February" => "Februari",
-"March" => "Maret",
-"April" => "April",
-"May" => "Mei",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "Agustus",
-"September" => "September",
-"October" => "Oktober",
-"November" => "Nopember",
-"December" => "Desember",
"web services under your control" => "web service dibawah kontrol anda",
"Log out" => "Keluar",
"Automatic logon rejected!" => "login otomatis ditolak!",
@@ -100,10 +100,6 @@
"Lost your password?" => "Lupa password anda?",
"remember" => "selalu login",
"Log in" => "Masuk",
-"You are logged out." => "Anda telah keluar.",
"prev" => "sebelum",
-"next" => "selanjutnya",
-"Security Warning!" => "peringatan keamanan!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "mohon periksa kembali kata kunci anda. <br/>untuk alasan keamanan,anda akan sesekali diminta untuk memasukan kata kunci lagi.",
-"Verify" => "periksa kembali"
+"next" => "selanjutnya"
);
diff --git a/core/l10n/is.php b/core/l10n/is.php
index 53b2fe88839..997a582d228 100644
--- a/core/l10n/is.php
+++ b/core/l10n/is.php
@@ -4,13 +4,31 @@
"User %s shared the file \"%s\" with you. It is available for download here: %s" => "Notandinn %s deildi skránni \"%s\" með þér. Hægt er að hlaða henni niður hér: %s",
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Notandinn %s deildi möppunni \"%s\" með þér. Hægt er að hlaða henni niður hér: %s",
"Category type not provided." => "Flokkur ekki gefin",
-"No category to add?" => "Enginn flokkur til að <strong>bæta við</strong>?",
-"This category already exists: " => "Þessi flokkur er þegar til:",
+"No category to add?" => "Enginn flokkur til að bæta við?",
"Object type not provided." => "Tegund ekki í boði.",
"%s ID not provided." => "%s ID ekki í boði.",
"Error adding %s to favorites." => "Villa við að bæta %s við eftirlæti.",
"No categories selected for deletion." => "Enginn flokkur valinn til eyðingar.",
"Error removing %s from favorites." => "Villa við að fjarlægja %s úr eftirlæti.",
+"Sunday" => "Sunnudagur",
+"Monday" => "Mánudagur",
+"Tuesday" => "Þriðjudagur",
+"Wednesday" => "Miðvikudagur",
+"Thursday" => "Fimmtudagur",
+"Friday" => "Föstudagur",
+"Saturday" => "Laugardagur",
+"January" => "Janúar",
+"February" => "Febrúar",
+"March" => "Mars",
+"April" => "Apríl",
+"May" => "Maí",
+"June" => "Júní",
+"July" => "Júlí",
+"August" => "Ãgúst",
+"September" => "September",
+"October" => "Október",
+"November" => "Nóvember",
+"December" => "Desember",
"Settings" => "Stillingar",
"seconds ago" => "sek síðan",
"1 minute ago" => "1 min síðan",
@@ -31,9 +49,10 @@
"Yes" => "Já",
"Ok" => "Ã lagi",
"The object type is not specified." => "Tegund ekki tilgreind",
-"Error" => "<strong>Villa</strong>",
+"Error" => "Villa",
"The app name is not specified." => "Nafn forrits ekki tilgreint",
"The required file {file} is not installed!" => "Umbeðina skráin {file} ekki tiltæk!",
+"Share" => "Deila",
"Error while sharing" => "Villa við deilingu",
"Error while unsharing" => "Villa við að hætta deilingu",
"Error while changing permissions" => "Villa við að breyta aðgangsheimildum",
@@ -63,7 +82,7 @@
"Error setting expiration date" => "Villa við að setja gildistíma",
"Sending ..." => "Sendi ...",
"Email sent" => "Tölvupóstur sendur",
-"ownCloud password reset" => "endursetja ownCloud <strong>lykilorð</strong>",
+"ownCloud password reset" => "endursetja ownCloud lykilorð",
"Use the following link to reset your password: {link}" => "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
"You will receive a link to reset your password via Email." => "Þú munt fá veftengil í tölvupósti til að endursetja lykilorðið.",
"Reset email send." => "Beiðni um endursetningu send.",
@@ -78,45 +97,25 @@
"Users" => "Notendur",
"Apps" => "Forrit",
"Admin" => "Vefstjórn",
-"Help" => "Help",
+"Help" => "Hjálp",
"Access forbidden" => "Aðgangur bannaður",
-"Cloud not found" => "Skýið finnst eigi",
+"Cloud not found" => "Ský finnst ekki",
"Edit categories" => "Breyta flokkum",
"Add" => "Bæta",
"Security Warning" => "Öryggis aðvörun",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Enginn traustur slembitölugjafi í boði, vinsamlegast virkjaðu PHP OpenSSL viðbótina.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Ãn öruggs slembitölugjafa er mögulegt að sjá fyrir öryggis auðkenni til að endursetja lykilorð og komast inn á aðganginn þinn.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Gagnamappan þín er að öllum líkindum aðgengileg frá internetinu. Skráin .htaccess sem fylgir með ownCloud er ekki að virka. Við mælum eindregið með því að þú stillir vefþjóninn þannig að gagnamappan verði ekki aðgengileg frá internetinu eða færir hana út fyrir vefrótina.",
"Create an <strong>admin account</strong>" => "Útbúa <strong>vefstjóra aðgang</strong>",
"Advanced" => "Ãtarlegt",
"Data folder" => "Gagnamappa",
"Configure the database" => "Stilla gagnagrunn",
"will be used" => "verður notað",
-"Database user" => "Notandi gagnagrunns",
-"Database password" => "Lykilorð gagnagrunns",
+"Database user" => "Gagnagrunns notandi",
+"Database password" => "Gagnagrunns lykilorð",
"Database name" => "Nafn gagnagrunns",
"Database tablespace" => "Töflusvæði gagnagrunns",
"Database host" => "Netþjónn gagnagrunns",
-"Finish setup" => "Ljúka uppsetningu",
-"Sunday" => "Sunnudagur",
-"Monday" => "Mánudagur",
-"Tuesday" => "Þriðjudagur",
-"Wednesday" => "Miðvikudagur",
-"Thursday" => "Fimmtudagur",
-"Friday" => "Föstudagur",
-"Saturday" => "Laugardagur",
-"January" => "Janúar",
-"February" => "Febrúar",
-"March" => "Mars",
-"April" => "Apríl",
-"May" => "Maí",
-"June" => "Júní",
-"July" => "Júlí",
-"August" => "Ãgúst",
-"September" => "September",
-"October" => "Október",
-"November" => "Nóvember",
-"December" => "Desember",
+"Finish setup" => "Virkja uppsetningu",
"web services under your control" => "vefþjónusta undir þinni stjórn",
"Log out" => "Útskrá",
"Automatic logon rejected!" => "Sjálfvirkri innskráningu hafnað!",
@@ -125,10 +124,7 @@
"Lost your password?" => "Týndir þú lykilorðinu?",
"remember" => "muna eftir mér",
"Log in" => "<strong>Skrá inn</strong>",
-"You are logged out." => "Þú ert útskráð(ur).",
"prev" => "fyrra",
"next" => "næsta",
-"Security Warning!" => "Öryggis aðvörun!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Vinsamlegast staðfestu lykilorðið þitt.<br/>à öryggisskyni munum við biðja þig um að skipta um lykilorð af og til.",
-"Verify" => "Staðfesta"
+"Updating ownCloud to version %s, this may take a while." => "Uppfæri ownCloud í útgáfu %s, það gæti tekið smá stund."
);
diff --git a/core/l10n/it.php b/core/l10n/it.php
index 952ae4d06b6..c0109b91239 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "L'utente %s ha condiviso la cartella \"%s\" con te. È disponibile per lo scaricamento qui: %s",
"Category type not provided." => "Tipo di categoria non fornito.",
"No category to add?" => "Nessuna categoria da aggiungere?",
-"This category already exists: " => "Questa categoria esiste già: ",
+"This category already exists: %s" => "Questa categoria esiste già: %s",
"Object type not provided." => "Tipo di oggetto non fornito.",
"%s ID not provided." => "ID %s non fornito.",
"Error adding %s to favorites." => "Errore durante l'aggiunta di %s ai preferiti.",
"No categories selected for deletion." => "Nessuna categoria selezionata per l'eliminazione.",
"Error removing %s from favorites." => "Errore durante la rimozione di %s dai preferiti.",
+"Sunday" => "Domenica",
+"Monday" => "Lunedì",
+"Tuesday" => "Martedì",
+"Wednesday" => "Mercoledì",
+"Thursday" => "Giovedì",
+"Friday" => "Venerdì",
+"Saturday" => "Sabato",
+"January" => "Gennaio",
+"February" => "Febbraio",
+"March" => "Marzo",
+"April" => "Aprile",
+"May" => "Maggio",
+"June" => "Giugno",
+"July" => "Luglio",
+"August" => "Agosto",
+"September" => "Settembre",
+"October" => "Ottobre",
+"November" => "Novembre",
+"December" => "Dicembre",
"Settings" => "Impostazioni",
"seconds ago" => "secondi fa",
"1 minute ago" => "Un minuto fa",
@@ -34,6 +53,8 @@
"Error" => "Errore",
"The app name is not specified." => "Il nome dell'applicazione non è specificato.",
"The required file {file} is not installed!" => "Il file richiesto {file} non è installato!",
+"Share" => "Condividi",
+"Shared" => "Condivisi",
"Error while sharing" => "Errore durante la condivisione",
"Error while unsharing" => "Errore durante la rimozione della condivisione",
"Error while changing permissions" => "Errore durante la modifica dei permessi",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Errore durante l'impostazione della data di scadenza",
"Sending ..." => "Invio in corso...",
"Email sent" => "Messaggio inviato",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "L'aggiornamento non è riuscito. Segnala il problema alla <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">comunità di ownCloud</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "L'aggiornamento è stato effettuato correttamente. Stai per essere reindirizzato a ownCloud.",
"ownCloud password reset" => "Ripristino password di ownCloud",
"Use the following link to reset your password: {link}" => "Usa il collegamento seguente per ripristinare la password: {link}",
"You will receive a link to reset your password via Email." => "Riceverai un collegamento per ripristinare la tua password via email",
@@ -86,7 +109,8 @@
"Security Warning" => "Avviso di sicurezza",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Non è disponibile alcun generatore di numeri casuali sicuro. Abilita l'estensione OpenSSL di PHP",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebbe riuscire a individuare i token di ripristino delle password e impossessarsi del tuo account.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet. Il file .htaccess fornito da ownCloud non funziona. Ti suggeriamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o sposta tale cartella fuori dalla radice del sito.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Per informazioni su come configurare correttamente il server, vedi la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentazione</a>.",
"Create an <strong>admin account</strong>" => "Crea un <strong>account amministratore</strong>",
"Advanced" => "Avanzate",
"Data folder" => "Cartella dati",
@@ -98,38 +122,16 @@
"Database tablespace" => "Spazio delle tabelle del database",
"Database host" => "Host del database",
"Finish setup" => "Termina la configurazione",
-"Sunday" => "Domenica",
-"Monday" => "Lunedì",
-"Tuesday" => "Martedì",
-"Wednesday" => "Mercoledì",
-"Thursday" => "Giovedì",
-"Friday" => "Venerdì",
-"Saturday" => "Sabato",
-"January" => "Gennaio",
-"February" => "Febbraio",
-"March" => "Marzo",
-"April" => "Aprile",
-"May" => "Maggio",
-"June" => "Giugno",
-"July" => "Luglio",
-"August" => "Agosto",
-"September" => "Settembre",
-"October" => "Ottobre",
-"November" => "Novembre",
-"December" => "Dicembre",
"web services under your control" => "servizi web nelle tue mani",
"Log out" => "Esci",
"Automatic logon rejected!" => "Accesso automatico rifiutato.",
-"If you did not change your password recently, your account may be compromised!" => "Se non hai cambiato la password recentemente, il tuo account potrebbe essere stato compromesso.",
+"If you did not change your password recently, your account may be compromised!" => "Se non hai cambiato la password recentemente, il tuo account potrebbe essere compromesso.",
"Please change your password to secure your account again." => "Cambia la password per rendere nuovamente sicuro il tuo account.",
"Lost your password?" => "Hai perso la password?",
"remember" => "ricorda",
"Log in" => "Accedi",
-"You are logged out." => "Sei uscito.",
+"Alternative Logins" => "Accessi alternativi",
"prev" => "precedente",
"next" => "successivo",
-"Updating ownCloud to version %s, this may take a while." => "Aggiornamento di ownCloud alla versione %s in corso, potrebbe richiedere del tempo.",
-"Security Warning!" => "Avviso di sicurezza",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Verifica la tua password.<br/>Per motivi di sicurezza, potresti ricevere una richiesta di digitare nuovamente la password.",
-"Verify" => "Verifica"
+"Updating ownCloud to version %s, this may take a while." => "Aggiornamento di ownCloud alla versione %s in corso, ciò potrebbe richiedere del tempo."
);
diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php
index 46d40e2e73e..803faaf75a6 100644
--- a/core/l10n/ja_JP.php
+++ b/core/l10n/ja_JP.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "ユーザ %s ã¯ã‚ãªãŸã¨ãƒ•ォルダ \"%s\" を共有ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™: %s",
"Category type not provided." => "ã‚«ãƒ†ã‚´ãƒªã‚¿ã‚¤ãƒ—ã¯æä¾›ã•れã¦ã„ã¾ã›ã‚“。",
"No category to add?" => "追加ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªã¯ã‚りã¾ã›ã‚“ã‹ï¼Ÿ",
-"This category already exists: " => "ã“ã®ã‚«ãƒ†ã‚´ãƒªã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™: ",
+"This category already exists: %s" => "ã“ã®ã‚«ãƒ†ã‚´ãƒªã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™: %s",
"Object type not provided." => "ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚¿ã‚¤ãƒ—ã¯æä¾›ã•れã¦ã„ã¾ã›ã‚“。",
"%s ID not provided." => "%s ID ã¯æä¾›ã•れã¦ã„ã¾ã›ã‚“。",
"Error adding %s to favorites." => "ãŠæ°—ã«å…¥ã‚Šã« %s を追加エラー",
"No categories selected for deletion." => "削除ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。",
"Error removing %s from favorites." => "ãŠæ°—ã«å…¥ã‚Šã‹ã‚‰ %s ã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼",
+"Sunday" => "æ—¥",
+"Monday" => "月",
+"Tuesday" => "ç«",
+"Wednesday" => "æ°´",
+"Thursday" => "木",
+"Friday" => "金",
+"Saturday" => "土",
+"January" => "1月",
+"February" => "2月",
+"March" => "3月",
+"April" => "4月",
+"May" => "5月",
+"June" => "6月",
+"July" => "7月",
+"August" => "8月",
+"September" => "9月",
+"October" => "10月",
+"November" => "11月",
+"December" => "12月",
"Settings" => "設定",
"seconds ago" => "ç§’å‰",
"1 minute ago" => "1 分å‰",
@@ -34,6 +53,8 @@
"Error" => "エラー",
"The app name is not specified." => "アプリåãŒã—ã¦ã„ã•れã¦ã„ã¾ã›ã‚“。",
"The required file {file} is not installed!" => "å¿…è¦ãªãƒ•ァイル {file} ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“ï¼",
+"Share" => "共有",
+"Shared" => "共有中",
"Error while sharing" => "共有ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ",
"Error while unsharing" => "共有解除ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ",
"Error while changing permissions" => "権é™å¤‰æ›´ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "有効期é™ã®è¨­å®šã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ",
"Sending ..." => "é€ä¿¡ä¸­...",
"Email sent" => "メールをé€ä¿¡ã—ã¾ã—ãŸ",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "æ›´æ–°ã«æˆåŠŸã—ã¾ã—ãŸã€‚ã“ã®å•題を <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a> ã«ãƒ¬ãƒãƒ¼ãƒˆã—ã¦ãã ã•ã„。",
+"The update was successful. Redirecting you to ownCloud now." => "æ›´æ–°ã«æˆåŠŸã—ã¾ã—ãŸã€‚今ã™ãownCloudã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã€‚",
"ownCloud password reset" => "ownCloudã®ãƒ‘スワードをリセットã—ã¾ã™",
"Use the following link to reset your password: {link}" => "パスワードをリセットã™ã‚‹ã«ã¯æ¬¡ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ä¸‹ã•ã„: {link}",
"You will receive a link to reset your password via Email." => "メールã§ãƒ‘スワードをリセットã™ã‚‹ãƒªãƒ³ã‚¯ãŒå±Šãã¾ã™ã€‚",
@@ -86,7 +109,6 @@
"Security Warning" => "セキュリティ警告",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "セキュアãªä¹±æ•°ç”Ÿæˆå™¨ãŒåˆ©ç”¨å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“。PHPã®OpenSSL拡張を有効ã«ã—ã¦ä¸‹ã•ã„。",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "セキュアãªä¹±æ•°ç”Ÿæˆå™¨ãŒç„¡ã„å ´åˆã€æ”»æ’ƒè€…ã¯ãƒ‘スワードリセットã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’予測ã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ä¹—ã£å–られるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "データディレクトリã¨ãƒ•ã‚¡ã‚¤ãƒ«ãŒæã‚‰ãインターãƒãƒƒãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ownCloudãŒæä¾›ã™ã‚‹ .htaccessãƒ•ã‚¡ã‚¤ãƒ«ãŒæ©Ÿèƒ½ã—ã¦ã„ã¾ã›ã‚“。データディレクトリを全ãアクセスã§ããªã„よã†ã«ã™ã‚‹ã‹ã€ãƒ‡ãƒ¼ã‚¿ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’ウェブサーãƒã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ«ãƒ¼ãƒˆã®å¤–ã«ç½®ãよã†ã«ã‚¦ã‚§ãƒ–サーãƒã‚’設定ã™ã‚‹ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€‚ ",
"Create an <strong>admin account</strong>" => "<strong>管ç†è€…アカウント</strong>を作æˆã—ã¦ãã ã•ã„",
"Advanced" => "詳細設定",
"Data folder" => "データフォルダ",
@@ -98,25 +120,6 @@
"Database tablespace" => "データベースã®è¡¨é ˜åŸŸ",
"Database host" => "データベースã®ãƒ›ã‚¹ãƒˆå",
"Finish setup" => "セットアップを完了ã—ã¾ã™",
-"Sunday" => "æ—¥",
-"Monday" => "月",
-"Tuesday" => "ç«",
-"Wednesday" => "æ°´",
-"Thursday" => "木",
-"Friday" => "金",
-"Saturday" => "土",
-"January" => "1月",
-"February" => "2月",
-"March" => "3月",
-"April" => "4月",
-"May" => "5月",
-"June" => "6月",
-"July" => "7月",
-"August" => "8月",
-"September" => "9月",
-"October" => "10月",
-"November" => "11月",
-"December" => "12月",
"web services under your control" => "管ç†ä¸‹ã«ã‚るウェブサービス",
"Log out" => "ログアウト",
"Automatic logon rejected!" => "è‡ªå‹•ãƒ­ã‚°ã‚¤ãƒ³ã¯æ‹’å¦ã•れã¾ã—ãŸï¼",
@@ -125,11 +128,8 @@
"Lost your password?" => "パスワードを忘れã¾ã—ãŸã‹ï¼Ÿ",
"remember" => "パスワードを記憶ã™ã‚‹",
"Log in" => "ログイン",
-"You are logged out." => "ログアウトã—ã¾ã—ãŸã€‚",
+"Alternative Logins" => "代替ログイン",
"prev" => "å‰",
"next" => "次",
-"Updating ownCloud to version %s, this may take a while." => "ownCloud ã‚’ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã«æ›´æ–°ã—ã¦ã„ã¾ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ä¸‹ã•ã„。",
-"Security Warning!" => "セキュリティ警告ï¼",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "パスワードã®ç¢ºèª<br/>セキュリティ上ã®ç†ç”±ã«ã‚ˆã‚Šãƒ‘スワードã®å†å…¥åŠ›ã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚",
-"Verify" => "確èª"
+"Updating ownCloud to version %s, this may take a while." => "ownCloud ã‚’ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã«æ›´æ–°ã—ã¦ã„ã¾ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ä¸‹ã•ã„。"
);
diff --git a/core/l10n/ka_GE.php b/core/l10n/ka_GE.php
index efb3998a77e..731a3534558 100644
--- a/core/l10n/ka_GE.php
+++ b/core/l10n/ka_GE.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "áƒáƒ  áƒáƒ áƒ˜áƒ¡ კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ დáƒáƒ¡áƒáƒ›áƒáƒ¢áƒ”ბლáƒáƒ“?",
-"This category already exists: " => "კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს",
"No categories selected for deletion." => "სáƒáƒ áƒ”დáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბელი კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ áƒáƒ  áƒáƒ áƒ˜áƒ¡ áƒáƒ áƒ©áƒ”ული ",
+"Sunday" => "კვირáƒ",
+"Monday" => "áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი",
+"Tuesday" => "სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი",
+"Wednesday" => "áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი",
+"Thursday" => "ხუთშáƒáƒ‘áƒáƒ—ი",
+"Friday" => "პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი",
+"Saturday" => "შáƒáƒ‘áƒáƒ—ი",
+"January" => "იáƒáƒœáƒ•áƒáƒ áƒ˜",
+"February" => "თებერვáƒáƒšáƒ˜",
+"March" => "მáƒáƒ áƒ¢áƒ˜",
+"April" => "áƒáƒžáƒ áƒ˜áƒšáƒ˜",
+"May" => "მáƒáƒ˜áƒ¡áƒ˜",
+"June" => "ივნისი",
+"July" => "ივლისი",
+"August" => "áƒáƒ’ვისტáƒ",
+"September" => "სექტემბერი",
+"October" => "áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი",
+"November" => "ნáƒáƒ”მბერი",
+"December" => "დეკემბერი",
"Settings" => "პáƒáƒ áƒáƒ›áƒ”ტრები",
"seconds ago" => "წáƒáƒ›áƒ˜áƒ¡ წინ",
"1 minute ago" => "1 წუთის წინ",
@@ -19,6 +37,7 @@
"Yes" => "კი",
"Ok" => "დიáƒáƒ®",
"Error" => "შეცდáƒáƒ›áƒ",
+"Share" => "გáƒáƒ–იáƒáƒ áƒ”ბáƒ",
"Error while sharing" => "შეცდáƒáƒ›áƒ გáƒáƒ–იáƒáƒ áƒ”ბის დრáƒáƒ¡",
"Error while unsharing" => "შეცდáƒáƒ›áƒ გáƒáƒ–იáƒáƒ áƒ”ბის გáƒáƒ£áƒ¥áƒ›áƒ”ბის დრáƒáƒ¡",
"Error while changing permissions" => "შეცდáƒáƒ›áƒ დáƒáƒ¨áƒ•ების ცვლილების დრáƒáƒ¡",
@@ -73,34 +92,12 @@
"Database tablespace" => "ბáƒáƒ–ის ცხრილის ზáƒáƒ›áƒ",
"Database host" => "ბáƒáƒ–ის ჰáƒáƒ¡áƒ¢áƒ˜",
"Finish setup" => "კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ˜áƒ¡ დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბáƒ",
-"Sunday" => "კვირáƒ",
-"Monday" => "áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი",
-"Tuesday" => "სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი",
-"Wednesday" => "áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი",
-"Thursday" => "ხუთშáƒáƒ‘áƒáƒ—ი",
-"Friday" => "პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი",
-"Saturday" => "შáƒáƒ‘áƒáƒ—ი",
-"January" => "იáƒáƒœáƒ•áƒáƒ áƒ˜",
-"February" => "თებერვáƒáƒšáƒ˜",
-"March" => "მáƒáƒ áƒ¢áƒ˜",
-"April" => "áƒáƒžáƒ áƒ˜áƒšáƒ˜",
-"May" => "მáƒáƒ˜áƒ¡áƒ˜",
-"June" => "ივნისი",
-"July" => "ივლისი",
-"August" => "áƒáƒ’ვისტáƒ",
-"September" => "სექტემბერი",
-"October" => "áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი",
-"November" => "ნáƒáƒ”მბერი",
-"December" => "დეკემბერი",
"web services under your control" => "თქვენი კáƒáƒœáƒ¢áƒ áƒáƒšáƒ˜áƒ¡ ქვეშ მყáƒáƒ¤áƒ˜ ვებ სერვისები",
"Log out" => "გáƒáƒ›áƒáƒ¡áƒ•ლáƒ",
"Automatic logon rejected!" => "áƒáƒ•ტáƒáƒ›áƒáƒ¢áƒ£áƒ áƒ˜ შესვლრუáƒáƒ áƒ§áƒáƒ¤áƒ˜áƒšáƒ˜áƒ!",
"Lost your password?" => "დáƒáƒ’áƒáƒ•იწყდáƒáƒ— პáƒáƒ áƒáƒšáƒ˜?",
"remember" => "დáƒáƒ›áƒáƒ®áƒ¡áƒáƒ•რებáƒ",
"Log in" => "შესვლáƒ",
-"You are logged out." => "თქვენ გáƒáƒ›áƒáƒ®áƒ•ედით სისტემიდáƒáƒœ",
"prev" => "წინáƒ",
-"next" => "შემდეგი",
-"Security Warning!" => "უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის გáƒáƒ¤áƒ áƒ—ხილებáƒ!",
-"Verify" => "შემáƒáƒ¬áƒ›áƒ”ბáƒ"
+"next" => "შემდეგი"
);
diff --git a/core/l10n/ko.php b/core/l10n/ko.php
index 4b7df81fa85..172ec3e03a5 100644
--- a/core/l10n/ko.php
+++ b/core/l10n/ko.php
@@ -1,16 +1,34 @@
<?php $TRANSLATIONS = array(
-"User %s shared a file with you" => "User %s ê°€ 당신과 파ì¼ì„ 공유하였습니다.",
-"User %s shared a folder with you" => "User %s ê°€ 당신과 í´ë”를 공유하였습니다.",
-"User %s shared the file \"%s\" with you. It is available for download here: %s" => "User %s ê°€ íŒŒì¼ \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s í•  수 있습니다.",
-"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "User %s ê°€ í´ë” \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s í•  수 있습니다.",
+"User %s shared a file with you" => "%s ë‹˜ì´ íŒŒì¼ì„ 공유하였습니다",
+"User %s shared a folder with you" => "%s ë‹˜ì´ í´ë”를 공유하였습니다",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s ë‹˜ì´ íŒŒì¼ \"%s\"ì„(를) 공유하였습니다. 여기ì—서 다운로드할 수 있습니다: %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s ë‹˜ì´ í´ë” \"%s\"ì„(를) 공유하였습니다. 여기ì—서 다운로드할 수 있습니다: %s",
"Category type not provided." => "분류 형ì‹ì´ 제공ë˜ì§€ 않았습니다.",
"No category to add?" => "추가할 분류가 없습니까?",
-"This category already exists: " => "ì´ ë¶„ë¥˜ëŠ” ì´ë¯¸ 존재합니다:",
"Object type not provided." => "ê°ì²´ 형ì‹ì´ 제공ë˜ì§€ 않았습니다.",
"%s ID not provided." => "%s IDê°€ 제공ë˜ì§€ 않았습니다.",
"Error adding %s to favorites." => "ì±…ê°ˆí”¼ì— %sì„(를) 추가할 수 없었습니다.",
"No categories selected for deletion." => "삭제할 분류를 ì„ íƒí•˜ì§€ 않았습니다.",
"Error removing %s from favorites." => "책갈피ì—서 %sì„(를) 삭제할 수 없었습니다.",
+"Sunday" => "ì¼ìš”ì¼",
+"Monday" => "월요ì¼",
+"Tuesday" => "화요ì¼",
+"Wednesday" => "수요ì¼",
+"Thursday" => "목요ì¼",
+"Friday" => "금요ì¼",
+"Saturday" => "토요ì¼",
+"January" => "1ì›”",
+"February" => "2ì›”",
+"March" => "3ì›”",
+"April" => "4ì›”",
+"May" => "5ì›”",
+"June" => "6ì›”",
+"July" => "7ì›”",
+"August" => "8ì›”",
+"September" => "9ì›”",
+"October" => "10ì›”",
+"November" => "11ì›”",
+"December" => "12ì›”",
"Settings" => "설정",
"seconds ago" => "ì´ˆ ì „",
"1 minute ago" => "1ë¶„ ì „",
@@ -34,6 +52,8 @@
"Error" => "오류",
"The app name is not specified." => "앱 ì´ë¦„ì´ ì§€ì •ë˜ì§€ 않았습니다.",
"The required file {file} is not installed!" => "필요한 íŒŒì¼ {file}ì´(ê°€) 설치ë˜ì§€ 않았습니다!",
+"Share" => "공유",
+"Shared" => "공유ë¨",
"Error while sharing" => "공유하는 중 오류 ë°œìƒ",
"Error while unsharing" => "공유 해제하는 중 오류 ë°œìƒ",
"Error while changing permissions" => "권한 변경하는 중 오류 ë°œìƒ",
@@ -63,6 +83,8 @@
"Error setting expiration date" => "만료 날짜 설정 오류",
"Sending ..." => "전송 중...",
"Email sent" => "ì´ë©”ì¼ ë°œì†¡ë¨",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "ì—…ë°ì´íŠ¸ê°€ 실패하였습니다. ì´ ë¬¸ì œë¥¼ <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud 커뮤니티</a>ì— ë³´ê³ í•´ 주십시오.",
+"The update was successful. Redirecting you to ownCloud now." => "ì—…ë°ì´íŠ¸ê°€ 성공하였습니다. ownCloud로 ëŒì•„갑니다.",
"ownCloud password reset" => "ownCloud 암호 재설정",
"Use the following link to reset your password: {link}" => "ë‹¤ìŒ ë§í¬ë¥¼ 사용하여 암호를 재설정할 수 있습니다: {link}",
"You will receive a link to reset your password via Email." => "ì´ë©”ì¼ë¡œ 암호 재설정 ë§í¬ë¥¼ 보냈습니다.",
@@ -86,7 +108,6 @@
"Security Warning" => "보안 경고",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "안전한 난수 ìƒì„±ê¸°ë¥¼ 사용할 수 없습니다. PHPì˜ OpenSSL í™•ìž¥ì„ í™œì„±í™”í•´ 주십시오.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "안전한 난수 ìƒì„±ê¸°ë¥¼ 사용하지 않으면 공격ìžê°€ 암호 초기화 토í°ì„ 추측하여 ê³„ì •ì„ íƒˆì·¨í•  수 있습니다.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "ë°ì´í„° 디렉터리와 파ì¼ì„ ì¸í„°ë„·ì—서 접근할 수 있는 것 같습니다. ownCloudì—서 제공한 .htaccess 파ì¼ì´ ìž‘ë™í•˜ì§€ 않습니다. 웹 서버를 다시 설정하여 ë°ì´í„° ë””ë ‰í„°ë¦¬ì— ì ‘ê·¼í•  수 ì—†ë„ë¡ í•˜ê±°ë‚˜ 문서 루트 바깥쪽으로 옮기는 ê²ƒì„ ì¶”ì²œí•©ë‹ˆë‹¤.",
"Create an <strong>admin account</strong>" => "<strong>ê´€ë¦¬ìž ê³„ì •</strong> 만들기",
"Advanced" => "고급",
"Data folder" => "ë°ì´í„° í´ë”",
@@ -98,25 +119,6 @@
"Database tablespace" => "ë°ì´í„°ë² ì´ìФ í…Œì´ë¸” 공간",
"Database host" => "ë°ì´í„°ë² ì´ìФ 호스트",
"Finish setup" => "설치 완료",
-"Sunday" => "ì¼ìš”ì¼",
-"Monday" => "월요ì¼",
-"Tuesday" => "화요ì¼",
-"Wednesday" => "수요ì¼",
-"Thursday" => "목요ì¼",
-"Friday" => "금요ì¼",
-"Saturday" => "토요ì¼",
-"January" => "1ì›”",
-"February" => "2ì›”",
-"March" => "3ì›”",
-"April" => "4ì›”",
-"May" => "5ì›”",
-"June" => "6ì›”",
-"July" => "7ì›”",
-"August" => "8ì›”",
-"September" => "9ì›”",
-"October" => "10ì›”",
-"November" => "11ì›”",
-"December" => "12ì›”",
"web services under your control" => "내가 관리하는 웹 서비스",
"Log out" => "로그아웃",
"Automatic logon rejected!" => "ìžë™ 로그ì¸ì´ ê±°ë¶€ë˜ì—ˆìŠµë‹ˆë‹¤!",
@@ -125,11 +127,7 @@
"Lost your password?" => "암호를 잊으셨습니까?",
"remember" => "기억하기",
"Log in" => "로그ì¸",
-"You are logged out." => "로그아웃ë˜ì—ˆìŠµë‹ˆë‹¤.",
"prev" => "ì´ì „",
"next" => "다ìŒ",
-"Updating ownCloud to version %s, this may take a while." => "ownCloud 를 버젼 %s로 ì—…ë°ì´íЏ 하는 중, ì‹œê°„ì´ ì†Œìš”ë©ë‹ˆë‹¤.",
-"Security Warning!" => "보안 경고!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "암호를 확ì¸í•´ 주십시오.<br/>보안ìƒì˜ ì´ìœ ë¡œ 종종 암호를 물어볼 것입니다.",
-"Verify" => "확ì¸"
+"Updating ownCloud to version %s, this may take a while." => "ownCloud를 버전 %s(으)로 ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. 잠시 기다려 주십시오."
);
diff --git a/core/l10n/lb.php b/core/l10n/lb.php
index 7a1c462ffd1..11137f27aa2 100644
--- a/core/l10n/lb.php
+++ b/core/l10n/lb.php
@@ -1,15 +1,45 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "Keng Kategorie fir bäizesetzen?",
-"This category already exists: " => "Des Kategorie existéiert schonn:",
"No categories selected for deletion." => "Keng Kategorien ausgewielt fir ze läschen.",
+"Sunday" => "Sonndes",
+"Monday" => "Méindes",
+"Tuesday" => "Dënschdes",
+"Wednesday" => "Mëttwoch",
+"Thursday" => "Donneschdes",
+"Friday" => "Freides",
+"Saturday" => "Samschdes",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "Mäerz",
+"April" => "Abrëll",
+"May" => "Mee",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "Dezember",
"Settings" => "Astellungen",
+"1 hour ago" => "vrun 1 Stonn",
+"{hours} hours ago" => "vru {hours} Stonnen",
+"last month" => "Läschte Mount",
+"{months} months ago" => "vru {months} Méint",
+"months ago" => "Méint hier",
+"last year" => "Läscht Joer",
+"years ago" => "Joren hier",
+"Choose" => "Auswielen",
"Cancel" => "Ofbriechen",
"No" => "Nee",
"Yes" => "Jo",
"Ok" => "OK",
"Error" => "Fehler",
+"Share" => "Deelen",
"Password" => "Passwuert",
+"Unshare" => "Net méi deelen",
"create" => "erstellen",
+"delete" => "läschen",
+"share" => "deelen",
"ownCloud password reset" => "ownCloud Passwuert reset",
"Use the following link to reset your password: {link}" => "Benotz folgende Link fir däi Passwuert ze reseten: {link}",
"You will receive a link to reset your password via Email." => "Du kriss en Link fir däin Passwuert nei ze setzen via Email geschéckt.",
@@ -30,7 +60,7 @@
"Add" => "Bäisetzen",
"Security Warning" => "Sécherheets Warnung",
"Create an <strong>admin account</strong>" => "En <strong>Admin Account</strong> uleeën",
-"Advanced" => "Advanced",
+"Advanced" => "Avancéiert",
"Data folder" => "Daten Dossier",
"Configure the database" => "Datebank konfiguréieren",
"will be used" => "wärt benotzt ginn",
@@ -40,31 +70,11 @@
"Database tablespace" => "Datebank Tabelle-Gréisst",
"Database host" => "Datebank Server",
"Finish setup" => "Installatioun ofschléissen",
-"Sunday" => "Sonndes",
-"Monday" => "Méindes",
-"Tuesday" => "Dënschdes",
-"Wednesday" => "Mëttwoch",
-"Thursday" => "Donneschdes",
-"Friday" => "Freides",
-"Saturday" => "Samschdes",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "Mäerz",
-"April" => "Abrëll",
-"May" => "Mee",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Dezember",
"web services under your control" => "Web Servicer ënnert denger Kontroll",
"Log out" => "Ausloggen",
"Lost your password?" => "Passwuert vergiess?",
"remember" => "verhalen",
"Log in" => "Log dech an",
-"You are logged out." => "Du bass ausgeloggt.",
"prev" => "zeréck",
"next" => "weider"
);
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 9c5c8f90c5e..563fd8884b0 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "NepridÄ—site jokios kategorijos?",
-"This category already exists: " => "Tokia kategorija jau yra:",
"No categories selected for deletion." => "Trynimui nepasirinkta jokia kategorija.",
+"Sunday" => "Sekmadienis",
+"Monday" => "Pirmadienis",
+"Tuesday" => "Antradienis",
+"Wednesday" => "TreÄiadienis",
+"Thursday" => "Ketvirtadienis",
+"Friday" => "Penktadienis",
+"Saturday" => "Šeštadienis",
+"January" => "Sausis",
+"February" => "Vasaris",
+"March" => "Kovas",
+"April" => "Balandis",
+"May" => "Gegužė",
+"June" => "Birželis",
+"July" => "Liepa",
+"August" => "Rugpjūtis",
+"September" => "RugsÄ—jis",
+"October" => "Spalis",
+"November" => "Lapkritis",
+"December" => "Gruodis",
"Settings" => "Nustatymai",
"seconds ago" => "prieš sekundę",
"1 minute ago" => "Prieš 1 minutę",
@@ -19,6 +37,7 @@
"Yes" => "Taip",
"Ok" => "Gerai",
"Error" => "Klaida",
+"Share" => "Dalintis",
"Error while sharing" => "Klaida, dalijimosi metu",
"Error while unsharing" => "Klaida, kai atšaukiamas dalijimasis",
"Error while changing permissions" => "Klaida, keiÄiant privilegijas",
@@ -65,7 +84,6 @@
"Security Warning" => "Saugumo pranešimas",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Saugaus atsitiktinių skaiÄių generatoriaus nÄ—ra, praÅ¡ome įjungti PHP OpenSSL modulį.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Be saugaus atsitiktinių skaiÄių generatoriaus, piktavaliai gali atspÄ—ti JÅ«sų slaptažodį ir pasisavinti paskyrÄ….",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Jūsų duomenų aplankalas ir Jūsų failai turbūt yra pasiekiami per internetą. Failas .htaccess, kuris duodamas, neveikia. Mes rekomenduojame susitvarkyti savo nustatymsu taip, kad failai nebūtų pasiekiami per internetą, arba persikelti juos kitur.",
"Create an <strong>admin account</strong>" => "Sukurti <strong>administratoriaus paskyrÄ…</strong>",
"Advanced" => "Išplėstiniai",
"Data folder" => "Duomenų katalogas",
@@ -77,25 +95,6 @@
"Database tablespace" => "Duomenų bazės loginis saugojimas",
"Database host" => "Duomenų bazės serveris",
"Finish setup" => "Baigti diegimÄ…",
-"Sunday" => "Sekmadienis",
-"Monday" => "Pirmadienis",
-"Tuesday" => "Antradienis",
-"Wednesday" => "TreÄiadienis",
-"Thursday" => "Ketvirtadienis",
-"Friday" => "Penktadienis",
-"Saturday" => "Šeštadienis",
-"January" => "Sausis",
-"February" => "Vasaris",
-"March" => "Kovas",
-"April" => "Balandis",
-"May" => "Gegužė",
-"June" => "Birželis",
-"July" => "Liepa",
-"August" => "Rugpjūtis",
-"September" => "RugsÄ—jis",
-"October" => "Spalis",
-"November" => "Lapkritis",
-"December" => "Gruodis",
"web services under your control" => "jūsų valdomos web paslaugos",
"Log out" => "Atsijungti",
"Automatic logon rejected!" => "Automatinis prisijungimas atmestas!",
@@ -104,10 +103,6 @@
"Lost your password?" => "Pamiršote slaptažodį?",
"remember" => "prisiminti",
"Log in" => "Prisijungti",
-"You are logged out." => "Jūs atsijungėte.",
"prev" => "atgal",
-"next" => "kitas",
-"Security Warning!" => "Saugumo pranešimas!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Prašome patvirtinti savo vartotoją.<br/>Dėl saugumo, slaptažodžio patvirtinimas bus reikalaujamas įvesti kas kiek laiko.",
-"Verify" => "Patvirtinti"
+"next" => "kitas"
);
diff --git a/core/l10n/lv.php b/core/l10n/lv.php
index 5543c7a56d6..78be7df9aaf 100644
--- a/core/l10n/lv.php
+++ b/core/l10n/lv.php
@@ -1,10 +1,96 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "LietotÄjs %s ar jums dalÄ«jÄs ar datni.",
+"User %s shared a folder with you" => "LietotÄjs %s ar jums dalÄ«jÄs ar mapi.",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "LietotÄjs %s ar jums dalÄ«jÄs ar datni “%sâ€. To var lejupielÄdÄ“t Å¡eit — %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "LietotÄjs %s ar jums dalÄ«jÄs ar mapi “%sâ€. To var lejupielÄdÄ“t Å¡eit — %s",
+"Category type not provided." => "Kategorijas tips nav norÄdÄ«ts.",
+"No category to add?" => "Nav kategoriju, ko pievienot?",
+"This category already exists: %s" => "Å Äda kategorija jau eksistÄ“ — %s",
+"Object type not provided." => "Objekta tips nav norÄdÄ«ts.",
+"%s ID not provided." => "%s ID nav norÄdÄ«ts.",
+"Error adding %s to favorites." => "Kļūda, pievienojot %s izlasei.",
+"No categories selected for deletion." => "Neviena kategorija nav izvēlēta dzēšanai",
+"Error removing %s from favorites." => "Kļūda, izņemot %s no izlases.",
+"Sunday" => "Svētdiena",
+"Monday" => "Pirmdiena",
+"Tuesday" => "Otrdiena",
+"Wednesday" => "Trešdiena",
+"Thursday" => "Ceturtdiena",
+"Friday" => "Piektdiena",
+"Saturday" => "Sestdiena",
+"January" => "JanvÄris",
+"February" => "FebruÄris",
+"March" => "Marts",
+"April" => "Aprīlis",
+"May" => "Maijs",
+"June" => "Jūnijs",
+"July" => "Jūlijs",
+"August" => "Augusts",
+"September" => "Septembris",
+"October" => "Oktobris",
+"November" => "Novembris",
+"December" => "Decembris",
"Settings" => "Iestatījumi",
-"Error" => "Kļūme",
+"seconds ago" => "sekundes atpakaļ",
+"1 minute ago" => "pirms 1 minūtes",
+"{minutes} minutes ago" => "pirms {minutes} minūtēm",
+"1 hour ago" => "pirms 1 stundas",
+"{hours} hours ago" => "pirms {hours} stundÄm",
+"today" => "šodien",
+"yesterday" => "vakar",
+"{days} days ago" => "pirms {days} dienÄm",
+"last month" => "pagÄjuÅ¡ajÄ mÄ“nesÄ«",
+"{months} months ago" => "pirms {months} mēnešiem",
+"months ago" => "mēnešus atpakaļ",
+"last year" => "gÄjuÅ¡ajÄ gadÄ",
+"years ago" => "gadus atpakaļ",
+"Choose" => "Izvēlieties",
+"Cancel" => "Atcelt",
+"No" => "NÄ“",
+"Yes" => "JÄ",
+"Ok" => "Labi",
+"The object type is not specified." => "Nav norÄdÄ«ts objekta tips.",
+"Error" => "Kļūda",
+"The app name is not specified." => "Nav norÄdÄ«ts lietotnes nosaukums.",
+"The required file {file} is not installed!" => "PieprasÄ«tÄ datne {file} nav instalÄ“ta!",
+"Share" => "Dalīties",
+"Shared" => "Kopīgs",
+"Error while sharing" => "Kļūda, daloties",
+"Error while unsharing" => "Kļūda, beidzot dalīties",
+"Error while changing permissions" => "Kļūda, mainot atļaujas",
+"Shared with you and the group {group} by {owner}" => "{owner} dalÄ«jÄs ar jums un grupu {group}",
+"Shared with you by {owner}" => "{owner} dalÄ«jÄs ar jums",
+"Share with" => "Dalīties ar",
+"Share with link" => "Dalīties ar saiti",
+"Password protect" => "AizsargÄt ar paroli",
"Password" => "Parole",
-"Unshare" => "PÄrtraukt lÄ«dzdalīšanu",
-"Use the following link to reset your password: {link}" => "Izmantojiet šo linku lai mainītu paroli",
+"Email link to person" => "Sūtīt saiti personai pa e-pastu",
+"Send" => "Sūtīt",
+"Set expiration date" => "Iestaties termiņa datumu",
+"Expiration date" => "Termiņa datums",
+"Share via email:" => "Dalīties, izmantojot e-pastu:",
+"No people found" => "Nav atrastu cilvēku",
+"Resharing is not allowed" => "AtkÄrtota dalīšanÄs nav atļauta",
+"Shared in {item} with {user}" => "DalÄ«jÄs ar {item} ar {user}",
+"Unshare" => "Beigt dalīties",
+"can edit" => "var rediģēt",
+"access control" => "piekļuves vadība",
+"create" => "izveidot",
+"update" => "atjauninÄt",
+"delete" => "dzēst",
+"share" => "dalīties",
+"Password protected" => "AizsargÄts ar paroli",
+"Error unsetting expiration date" => "Kļūda, noņemot termiņa datumu",
+"Error setting expiration date" => "Kļūda, iestatot termiņa datumu",
+"Sending ..." => "Sūta...",
+"Email sent" => "Vēstule nosūtīta",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "AtjauninÄÅ¡ana beidzÄs nesekmÄ«gi. LÅ«dzu, ziņojiet par Å¡o problÄ“mu <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud kopienai</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "AtjauninÄÅ¡ana beidzÄs sekmÄ«gi. Tagad pÄrsÅ«ta jÅ«s uz ownCloud.",
+"ownCloud password reset" => "ownCloud paroles maiņa",
+"Use the following link to reset your password: {link}" => "Izmantojiet šo saiti, lai mainītu paroli: {link}",
"You will receive a link to reset your password via Email." => "JÅ«s savÄ epastÄ saņemsiet interneta saiti, caur kuru varÄ“siet atjaunot paroli.",
+"Reset email send." => "Atstatīt e-pasta sūtīšanu.",
+"Request failed!" => "PieprasÄ«jums neizdevÄs!",
"Username" => "LietotÄjvÄrds",
"Request reset" => "Pieprasīt paroles maiņu",
"Your password was reset" => "Jūsu parole tika nomainīta",
@@ -13,24 +99,39 @@
"Reset password" => "Mainīt paroli",
"Personal" => "Personīgi",
"Users" => "LietotÄji",
-"Apps" => "AplikÄcijas",
+"Apps" => "Lietotnes",
"Admin" => "Administrators",
"Help" => "Palīdzība",
+"Access forbidden" => "Pieeja ir liegta",
"Cloud not found" => "MÄkonis netika atrasts",
+"Edit categories" => "Rediģēt kategoriju",
+"Add" => "Pievienot",
"Security Warning" => "BrÄ«dinÄjums par drošību",
+"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nav pieejams droÅ¡s nejauÅ¡u skaitļu Ä£enerators. LÅ«dzu, aktivÄ“jiet PHP OpenSSL paplaÅ¡inÄjumu.",
+"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez droÅ¡a nejauÅ¡u skaitļu Ä£eneratora uzbrucÄ“js var paredzÄ“t paroļu atjaunoÅ¡anas marÄ·ierus un pÄrņem jÅ«su kontu.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "VisticamÄk, jÅ«su datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Lai uzzinÄtu, kÄ pareizi jÄkonfigurÄ“ Å¡is serveris, skatiet <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentÄciju</a>.",
+"Create an <strong>admin account</strong>" => "Izveidot <strong>administratora kontu</strong>",
+"Advanced" => "PaplaÅ¡inÄti",
"Data folder" => "Datu mape",
-"Configure the database" => "NokonfigurÄ“t datubÄzi",
+"Configure the database" => "KonfigurÄ“t datubÄzi",
"will be used" => "tiks izmantots",
"Database user" => "DatubÄzes lietotÄjs",
"Database password" => "DatubÄzes parole",
"Database name" => "DatubÄzes nosaukums",
-"Database host" => "DatubÄzes mÄjvieta",
-"Finish setup" => "Pabeigt uzstÄdÄ«jumus",
-"Log out" => "Izlogoties",
+"Database tablespace" => "DatubÄzes tabulas telpa",
+"Database host" => "DatubÄzes serveris",
+"Finish setup" => "Pabeigt iestatīšanu",
+"web services under your control" => "jÅ«su vadÄ«bÄ esoÅ¡ie tÄ«mekļa servisi",
+"Log out" => "Izrakstīties",
+"Automatic logon rejected!" => "AutomÄtiskÄ ierakstīšanÄs ir noraidÄ«ta!",
+"If you did not change your password recently, your account may be compromised!" => "Ja neesat pÄ“dÄ“jÄ laikÄ mainÄ«jis paroli, iespÄ“jams, ka jÅ«su konts ir kompromitÄ“ts.",
+"Please change your password to secure your account again." => "LÅ«dzu, nomainiet savu paroli, lai atkal nodroÅ¡inÄtu savu kontu.",
"Lost your password?" => "AizmirsÄt paroli?",
"remember" => "atcerēties",
-"Log in" => "Ielogoties",
-"You are logged out." => "Jūs esat veiksmīgi izlogojies.",
+"Log in" => "Ierakstīties",
+"Alternative Logins" => "AlternatÄ«vÄs pieteikÅ¡anÄs",
"prev" => "iepriekšējÄ",
-"next" => "nÄkamÄ"
+"next" => "nÄkamÄ",
+"Updating ownCloud to version %s, this may take a while." => "Atjaunina ownCloud uz versiju %s. Tas var aizņemt kÄdu laiciņu."
);
diff --git a/core/l10n/mk.php b/core/l10n/mk.php
index 401baf6efa0..d9da7669004 100644
--- a/core/l10n/mk.php
+++ b/core/l10n/mk.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "КориÑникот %s ја Ñподели папката „%s“ Ñо ВаÑ. ДоÑтапна е за преземање тука: %s",
"Category type not provided." => "Ðе беше доÑтавен тип на категорија.",
"No category to add?" => "Ðема категорија да Ñе додаде?",
-"This category already exists: " => "Оваа категорија веќе поÑтои:",
"Object type not provided." => "Ðе беше доÑтавен тип на објект.",
"%s ID not provided." => "%s ID не беше доÑтавено.",
"Error adding %s to favorites." => "Грешка при додавање %s во омилени.",
"No categories selected for deletion." => "Ðе е одбрана категорија за бришење.",
"Error removing %s from favorites." => "Грешка при бришење на %s од омилени.",
+"Sunday" => "Ðедела",
+"Monday" => "Понеделник",
+"Tuesday" => "Вторник",
+"Wednesday" => "Среда",
+"Thursday" => "Четврток",
+"Friday" => "Петок",
+"Saturday" => "Сабота",
+"January" => "Јануари",
+"February" => "Февруари",
+"March" => "Март",
+"April" => "Ðприл",
+"May" => "Мај",
+"June" => "Јуни",
+"July" => "Јули",
+"August" => "ÐвгуÑÑ‚",
+"September" => "Септември",
+"October" => "Октомври",
+"November" => "Ðоември",
+"December" => "Декември",
"Settings" => "ПоÑтавки",
"seconds ago" => "пред Ñекунди",
"1 minute ago" => "пред 1 минута",
@@ -34,6 +52,7 @@
"Error" => "Грешка",
"The app name is not specified." => "Името на апликацијата не е Ñпецифицирано.",
"The required file {file} is not installed!" => "Задолжителната датотека {file} не е инÑталирана!",
+"Share" => "Сподели",
"Error while sharing" => "Грешка при Ñподелување",
"Error while unsharing" => "Грешка при прекин на Ñподелување",
"Error while changing permissions" => "Грешка при промена на привилегии",
@@ -86,7 +105,6 @@
"Security Warning" => "БезбедноÑно предупредување",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ðе е доÑтапен безбеден генератор на Ñлучајни броеви, Ве молам озвоможете го OpenSSL PHP додатокот.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без Ñигурен генератор на Ñлучајни броеви напаѓач може да ги предвиди жетоните за реÑетирање на лозинка и да преземе контрола врз Вашата Ñметка. ",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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 не фунционира. Силно препорачуваме да го иÑконфигурирате вашиот Ñервер за вашата папка Ñо податоци не е доÑтапна преку интернетт или премеÑтете ја надвор од коренот на веб Ñерверот.",
"Create an <strong>admin account</strong>" => "Ðаправете <strong>админиÑтраторÑка Ñметка</strong>",
"Advanced" => "Ðапредно",
"Data folder" => "Фолдер Ñо податоци",
@@ -98,25 +116,6 @@
"Database tablespace" => "Табела во базата на податоци",
"Database host" => "Сервер Ñо база",
"Finish setup" => "Заврши го подеÑувањето",
-"Sunday" => "Ðедела",
-"Monday" => "Понеделник",
-"Tuesday" => "Вторник",
-"Wednesday" => "Среда",
-"Thursday" => "Четврток",
-"Friday" => "Петок",
-"Saturday" => "Сабота",
-"January" => "Јануари",
-"February" => "Февруари",
-"March" => "Март",
-"April" => "Ðприл",
-"May" => "Мај",
-"June" => "Јуни",
-"July" => "Јули",
-"August" => "ÐвгуÑÑ‚",
-"September" => "Септември",
-"October" => "Октомври",
-"November" => "Ðоември",
-"December" => "Декември",
"web services under your control" => "веб ÑервиÑи под Ваша контрола",
"Log out" => "Одјава",
"Automatic logon rejected!" => "Одбиена автоматÑка најава!",
@@ -125,10 +124,6 @@
"Lost your password?" => "Ја заборавивте лозинката?",
"remember" => "запамти",
"Log in" => "Ðајава",
-"You are logged out." => "Одјавени Ñте.",
"prev" => "претходно",
-"next" => "Ñледно",
-"Security Warning!" => "БезбедноÑно предупредување.",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Ве молам потврдете ја вашата лозинка. <br />Од безбедноÑни причини од време на време може да биде побарано да ја внеÑете вашата лозинка повторно.",
-"Verify" => "Потврди"
+"next" => "Ñледно"
);
diff --git a/core/l10n/ms_MY.php b/core/l10n/ms_MY.php
index 56a79572ef7..af51079b570 100644
--- a/core/l10n/ms_MY.php
+++ b/core/l10n/ms_MY.php
@@ -1,13 +1,32 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "Tiada kategori untuk di tambah?",
-"This category already exists: " => "Kategori ini telah wujud",
"No categories selected for deletion." => "tiada kategori dipilih untuk penghapusan",
+"Sunday" => "Ahad",
+"Monday" => "Isnin",
+"Tuesday" => "Selasa",
+"Wednesday" => "Rabu",
+"Thursday" => "Khamis",
+"Friday" => "Jumaat",
+"Saturday" => "Sabtu",
+"January" => "Januari",
+"February" => "Februari",
+"March" => "Mac",
+"April" => "April",
+"May" => "Mei",
+"June" => "Jun",
+"July" => "Julai",
+"August" => "Ogos",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "Disember",
"Settings" => "Tetapan",
"Cancel" => "Batal",
"No" => "Tidak",
"Yes" => "Ya",
"Ok" => "Ok",
"Error" => "Ralat",
+"Share" => "Kongsi",
"Password" => "Kata laluan",
"ownCloud password reset" => "Set semula kata lalaun ownCloud",
"Use the following link to reset your password: {link}" => "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}",
@@ -38,31 +57,11 @@
"Database name" => "Nama pangkalan data",
"Database host" => "Hos pangkalan data",
"Finish setup" => "Setup selesai",
-"Sunday" => "Ahad",
-"Monday" => "Isnin",
-"Tuesday" => "Selasa",
-"Wednesday" => "Rabu",
-"Thursday" => "Khamis",
-"Friday" => "Jumaat",
-"Saturday" => "Sabtu",
-"January" => "Januari",
-"February" => "Februari",
-"March" => "Mac",
-"April" => "April",
-"May" => "Mei",
-"June" => "Jun",
-"July" => "Julai",
-"August" => "Ogos",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Disember",
"web services under your control" => "Perkhidmatan web di bawah kawalan anda",
"Log out" => "Log keluar",
"Lost your password?" => "Hilang kata laluan?",
"remember" => "ingat",
"Log in" => "Log masuk",
-"You are logged out." => "Anda telah log keluar.",
"prev" => "sebelum",
"next" => "seterus"
);
diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php
index 4069e297a7b..340625449ee 100644
--- a/core/l10n/nb_NO.php
+++ b/core/l10n/nb_NO.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "Ingen kategorier å legge til?",
-"This category already exists: " => "Denne kategorien finnes allerede:",
"No categories selected for deletion." => "Ingen kategorier merket for sletting.",
+"Sunday" => "Søndag",
+"Monday" => "Mandag",
+"Tuesday" => "Tirsdag",
+"Wednesday" => "Onsdag",
+"Thursday" => "Torsdag",
+"Friday" => "Fredag",
+"Saturday" => "Lørdag",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "Mars",
+"April" => "April",
+"May" => "Mai",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "Desember",
"Settings" => "Innstillinger",
"seconds ago" => "sekunder siden",
"1 minute ago" => "1 minutt siden",
@@ -22,6 +40,7 @@
"Yes" => "Ja",
"Ok" => "Ok",
"Error" => "Feil",
+"Share" => "Del",
"Error while sharing" => "Feil under deling",
"Share with" => "Del med",
"Share with link" => "Del med link",
@@ -73,25 +92,6 @@
"Database tablespace" => "Database tabellområde",
"Database host" => "Databasevert",
"Finish setup" => "Fullfør oppsetting",
-"Sunday" => "Søndag",
-"Monday" => "Mandag",
-"Tuesday" => "Tirsdag",
-"Wednesday" => "Onsdag",
-"Thursday" => "Torsdag",
-"Friday" => "Fredag",
-"Saturday" => "Lørdag",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "Mars",
-"April" => "April",
-"May" => "Mai",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Desember",
"web services under your control" => "nettjenester under din kontroll",
"Log out" => "Logg ut",
"Automatic logon rejected!" => "Automatisk pålogging avvist!",
@@ -100,9 +100,6 @@
"Lost your password?" => "Mistet passordet ditt?",
"remember" => "husk",
"Log in" => "Logg inn",
-"You are logged out." => "Du er logget ut",
"prev" => "forrige",
-"next" => "neste",
-"Security Warning!" => "Sikkerhetsadvarsel!",
-"Verify" => "Verifiser"
+"next" => "neste"
);
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index 726dbf20161..1dc8a9ca3be 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Gebruiker %s deelde de map \"%s\" met u. De map is hier beschikbaar voor download: %s",
"Category type not provided." => "Categorie type niet opgegeven.",
"No category to add?" => "Geen categorie toevoegen?",
-"This category already exists: " => "Deze categorie bestaat al.",
"Object type not provided." => "Object type niet opgegeven.",
"%s ID not provided." => "%s ID niet opgegeven.",
"Error adding %s to favorites." => "Toevoegen van %s aan favorieten is mislukt.",
"No categories selected for deletion." => "Geen categorie geselecteerd voor verwijdering.",
"Error removing %s from favorites." => "Verwijderen %s van favorieten is mislukt.",
+"Sunday" => "Zondag",
+"Monday" => "Maandag",
+"Tuesday" => "Dinsdag",
+"Wednesday" => "Woensdag",
+"Thursday" => "Donderdag",
+"Friday" => "Vrijdag",
+"Saturday" => "Zaterdag",
+"January" => "januari",
+"February" => "februari",
+"March" => "maart",
+"April" => "april",
+"May" => "mei",
+"June" => "juni",
+"July" => "juli",
+"August" => "augustus",
+"September" => "september",
+"October" => "oktober",
+"November" => "november",
+"December" => "december",
"Settings" => "Instellingen",
"seconds ago" => "seconden geleden",
"1 minute ago" => "1 minuut geleden",
@@ -34,6 +52,8 @@
"Error" => "Fout",
"The app name is not specified." => "De app naam is niet gespecificeerd.",
"The required file {file} is not installed!" => "Het vereiste bestand {file} is niet geïnstalleerd!",
+"Share" => "Delen",
+"Shared" => "Gedeeld",
"Error while sharing" => "Fout tijdens het delen",
"Error while unsharing" => "Fout tijdens het stoppen met delen",
"Error while changing permissions" => "Fout tijdens het veranderen van permissies",
@@ -63,6 +83,8 @@
"Error setting expiration date" => "Fout tijdens het instellen van de vervaldatum",
"Sending ..." => "Versturen ...",
"Email sent" => "E-mail verzonden",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "De update is niet geslaagd. Meld dit probleem aan bij de <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "De update is geslaagd. U wordt teruggeleid naar uw eigen ownCloud.",
"ownCloud password reset" => "ownCloud wachtwoord herstellen",
"Use the following link to reset your password: {link}" => "Gebruik de volgende link om je wachtwoord te resetten: {link}",
"You will receive a link to reset your password via Email." => "U ontvangt een link om uw wachtwoord opnieuw in te stellen via e-mail.",
@@ -86,7 +108,6 @@
"Security Warning" => "Beveiligingswaarschuwing",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Er kon geen willekeurig nummer worden gegenereerd. Zet de PHP OpenSSL extentie aan.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Zonder random nummer generator is het mogelijk voor een aanvaller om de reset tokens van wachtwoorden te voorspellen. Dit kan leiden tot het inbreken op uw account.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Uw data is waarschijnlijk toegankelijk vanaf net internet. Het .htaccess bestand dat ownCloud levert werkt niet goed. U wordt aangeraden om de configuratie van uw webserver zodanig aan te passen dat de data folders niet meer publiekelijk toegankelijk zijn. U kunt ook de data folder verplaatsen naar een folder buiten de webserver document folder.",
"Create an <strong>admin account</strong>" => "Maak een <strong>beheerdersaccount</strong> aan",
"Advanced" => "Geavanceerd",
"Data folder" => "Gegevensmap",
@@ -98,25 +119,6 @@
"Database tablespace" => "Database tablespace",
"Database host" => "Database server",
"Finish setup" => "Installatie afronden",
-"Sunday" => "Zondag",
-"Monday" => "Maandag",
-"Tuesday" => "Dinsdag",
-"Wednesday" => "Woensdag",
-"Thursday" => "Donderdag",
-"Friday" => "Vrijdag",
-"Saturday" => "Zaterdag",
-"January" => "januari",
-"February" => "februari",
-"March" => "maart",
-"April" => "april",
-"May" => "mei",
-"June" => "juni",
-"July" => "juli",
-"August" => "augustus",
-"September" => "september",
-"October" => "oktober",
-"November" => "november",
-"December" => "december",
"web services under your control" => "Webdiensten in eigen beheer",
"Log out" => "Afmelden",
"Automatic logon rejected!" => "Automatische aanmelding geweigerd!",
@@ -125,11 +127,8 @@
"Lost your password?" => "Uw wachtwoord vergeten?",
"remember" => "onthoud gegevens",
"Log in" => "Meld je aan",
-"You are logged out." => "U bent afgemeld.",
+"Alternative Logins" => "Alternatieve inlogs",
"prev" => "vorige",
"next" => "volgende",
-"Updating ownCloud to version %s, this may take a while." => "Updaten ownCloud naar versie %s, dit kan even duren.",
-"Security Warning!" => "Beveiligingswaarschuwing!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Verifieer uw wachtwoord!<br/>Om veiligheidsredenen wordt u regelmatig gevraagd uw wachtwoord in te geven.",
-"Verify" => "Verifieer"
+"Updating ownCloud to version %s, this may take a while." => "Updaten ownCloud naar versie %s, dit kan even duren."
);
diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php
index e62e0dea730..61b2baffbf2 100644
--- a/core/l10n/nn_NO.php
+++ b/core/l10n/nn_NO.php
@@ -1,4 +1,23 @@
<?php $TRANSLATIONS = array(
+"Sunday" => "Søndag",
+"Monday" => "MÃ¥ndag",
+"Tuesday" => "Tysdag",
+"Wednesday" => "Onsdag",
+"Thursday" => "Torsdag",
+"Friday" => "Fredag",
+"Saturday" => "Laurdag",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "Mars",
+"April" => "April",
+"May" => "Mai",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "Desember",
"Settings" => "Innstillingar",
"Cancel" => "Kanseller",
"Error" => "Feil",
@@ -28,31 +47,11 @@
"Database name" => "Databasenamn",
"Database host" => "Databasetenar",
"Finish setup" => "Fullfør oppsettet",
-"Sunday" => "Søndag",
-"Monday" => "MÃ¥ndag",
-"Tuesday" => "Tysdag",
-"Wednesday" => "Onsdag",
-"Thursday" => "Torsdag",
-"Friday" => "Fredag",
-"Saturday" => "Laurdag",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "Mars",
-"April" => "April",
-"May" => "Mai",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Desember",
"web services under your control" => "Vev tjenester under din kontroll",
"Log out" => "Logg ut",
"Lost your password?" => "Gløymt passordet?",
"remember" => "hugs",
"Log in" => "Logg inn",
-"You are logged out." => "Du er logga ut.",
"prev" => "førre",
"next" => "neste"
);
diff --git a/core/l10n/oc.php b/core/l10n/oc.php
index 1ae67063572..abd5f5736af 100644
--- a/core/l10n/oc.php
+++ b/core/l10n/oc.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "Pas de categoria d'ajustar ?",
-"This category already exists: " => "La categoria exista ja :",
"No categories selected for deletion." => "Pas de categorias seleccionadas per escafar.",
+"Sunday" => "Dimenge",
+"Monday" => "Diluns",
+"Tuesday" => "Dimarç",
+"Wednesday" => "Dimecres",
+"Thursday" => "Dijòus",
+"Friday" => "Divendres",
+"Saturday" => "Dissabte",
+"January" => "Genièr",
+"February" => "Febrièr",
+"March" => "Març",
+"April" => "Abril",
+"May" => "Mai",
+"June" => "Junh",
+"July" => "Julhet",
+"August" => "Agost",
+"September" => "Septembre",
+"October" => "Octobre",
+"November" => "Novembre",
+"December" => "Decembre",
"Settings" => "Configuracion",
"seconds ago" => "segonda a",
"1 minute ago" => "1 minuta a",
@@ -17,6 +35,7 @@
"Yes" => "Ã’c",
"Ok" => "D'accòrdi",
"Error" => "Error",
+"Share" => "Parteja",
"Error while sharing" => "Error al partejar",
"Error while unsharing" => "Error al non partejar",
"Error while changing permissions" => "Error al cambiar permissions",
@@ -69,31 +88,11 @@
"Database tablespace" => "Espandi de taula de basa de donadas",
"Database host" => "Ã’ste de basa de donadas",
"Finish setup" => "Configuracion acabada",
-"Sunday" => "Dimenge",
-"Monday" => "Diluns",
-"Tuesday" => "Dimarç",
-"Wednesday" => "Dimecres",
-"Thursday" => "Dijòus",
-"Friday" => "Divendres",
-"Saturday" => "Dissabte",
-"January" => "Genièr",
-"February" => "Febrièr",
-"March" => "Març",
-"April" => "Abril",
-"May" => "Mai",
-"June" => "Junh",
-"July" => "Julhet",
-"August" => "Agost",
-"September" => "Septembre",
-"October" => "Octobre",
-"November" => "Novembre",
-"December" => "Decembre",
"web services under your control" => "Services web jos ton contraròtle",
"Log out" => "Sortida",
"Lost your password?" => "L'as perdut lo senhal ?",
"remember" => "bremba-te",
"Log in" => "Dintrada",
-"You are logged out." => "Sias pas dintra (t/ada)",
"prev" => "dariièr",
"next" => "venent"
);
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index 5758afc09ba..682289326dd 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Uzytkownik %s wspóldzieli folder \"%s\" z toba. Jest dostepny tutaj: %s",
"Category type not provided." => "Typ kategorii nie podany.",
"No category to add?" => "Brak kategorii",
-"This category already exists: " => "Ta kategoria już istnieje",
"Object type not provided." => "Typ obiektu nie podany.",
"%s ID not provided." => "%s ID nie podany.",
"Error adding %s to favorites." => "Błąd dodania %s do ulubionych.",
"No categories selected for deletion." => "Nie ma kategorii zaznaczonych do usunięcia.",
"Error removing %s from favorites." => "Błąd usunięcia %s z ulubionych.",
+"Sunday" => "Niedziela",
+"Monday" => "Poniedziałek",
+"Tuesday" => "Wtorek",
+"Wednesday" => "Åšroda",
+"Thursday" => "Czwartek",
+"Friday" => "PiÄ…tek",
+"Saturday" => "Sobota",
+"January" => "Styczeń",
+"February" => "Luty",
+"March" => "Marzec",
+"April" => "Kwiecień",
+"May" => "Maj",
+"June" => "Czerwiec",
+"July" => "Lipiec",
+"August" => "Sierpień",
+"September" => "Wrzesień",
+"October" => "Październik",
+"November" => "Listopad",
+"December" => "Grudzień",
"Settings" => "Ustawienia",
"seconds ago" => "sekund temu",
"1 minute ago" => "1 minute temu",
@@ -34,6 +52,8 @@
"Error" => "Błąd",
"The app name is not specified." => "Nazwa aplikacji nie jest określona.",
"The required file {file} is not installed!" => "Żądany plik {file} nie jest zainstalowany!",
+"Share" => "Udostępnij",
+"Shared" => "Udostępniono",
"Error while sharing" => "Błąd podczas współdzielenia",
"Error while unsharing" => "Błąd podczas zatrzymywania współdzielenia",
"Error while changing permissions" => "Błąd przy zmianie uprawnień",
@@ -86,7 +106,6 @@
"Security Warning" => "Ostrzeżenie o zabezpieczeniach",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Niedostępny bezpieczny generator liczb losowych, należy włączyć rozszerzenie OpenSSL w PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpiecznego generatora liczb losowych, osoba atakująca może być w stanie przewidzieć resetujące hasło tokena i przejąć kontrolę nad swoim kontem.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Katalog danych (data) i pliki są prawdopodobnie dostępnego z Internetu. Sprawdź plik .htaccess oraz konfigurację serwera (hosta). Sugerujemy, skonfiguruj swój serwer w taki sposób, żeby dane katalogu nie były dostępne lub przenieść katalog danych spoza głównego dokumentu webserwera.",
"Create an <strong>admin account</strong>" => "Tworzenie <strong>konta administratora</strong>",
"Advanced" => "Zaawansowane",
"Data folder" => "Katalog danych",
@@ -98,25 +117,6 @@
"Database tablespace" => "Obszar tabel bazy danych",
"Database host" => "Komputer bazy danych",
"Finish setup" => "Zakończ konfigurowanie",
-"Sunday" => "Niedziela",
-"Monday" => "Poniedziałek",
-"Tuesday" => "Wtorek",
-"Wednesday" => "Åšroda",
-"Thursday" => "Czwartek",
-"Friday" => "PiÄ…tek",
-"Saturday" => "Sobota",
-"January" => "Styczeń",
-"February" => "Luty",
-"March" => "Marzec",
-"April" => "Kwiecień",
-"May" => "Maj",
-"June" => "Czerwiec",
-"July" => "Lipiec",
-"August" => "Sierpień",
-"September" => "Wrzesień",
-"October" => "Październik",
-"November" => "Listopad",
-"December" => "Grudzień",
"web services under your control" => "usługi internetowe pod kontrolą",
"Log out" => "Wylogowuje użytkownika",
"Automatic logon rejected!" => "Automatyczne logowanie odrzucone!",
@@ -125,11 +125,7 @@
"Lost your password?" => "Nie pamiętasz hasła?",
"remember" => "Zapamiętanie",
"Log in" => "Zaloguj",
-"You are logged out." => "Wylogowano użytkownika.",
"prev" => "wstecz",
"next" => "naprzód",
-"Updating ownCloud to version %s, this may take a while." => "Aktualizowanie ownCloud do wersji %s, może to potrwać chwilę.",
-"Security Warning!" => "Ostrzeżenie o zabezpieczeniach!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Sprawdź swoje hasło.<br/>Ze względów bezpieczeństwa możesz zostać czasami poproszony o wprowadzenie hasła ponownie.",
-"Verify" => "Zweryfikowane"
+"Updating ownCloud to version %s, this may take a while." => "Aktualizowanie ownCloud do wersji %s, może to potrwać chwilę."
);
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index f28b0035995..0d440f4c9d3 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -1,12 +1,34 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "O usuário %s compartilhou um arquivo com você",
+"User %s shared a folder with you" => "O usuário %s compartilhou uma pasta com você",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "O usuário %s compartilhou com você o arquivo \"%s\", que está disponível para download em: %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "O usuário %s compartilhou com você a pasta \"%s\", que está disponível para download em: %s",
"Category type not provided." => "Tipo de categoria não fornecido.",
"No category to add?" => "Nenhuma categoria adicionada?",
-"This category already exists: " => "Essa categoria já existe",
"Object type not provided." => "tipo de objeto não fornecido.",
"%s ID not provided." => "%s ID não fornecido(s).",
"Error adding %s to favorites." => "Erro ao adicionar %s aos favoritos.",
"No categories selected for deletion." => "Nenhuma categoria selecionada para deletar.",
"Error removing %s from favorites." => "Erro ao remover %s dos favoritos.",
+"Sunday" => "Domingo",
+"Monday" => "Segunda-feira",
+"Tuesday" => "Terça-feira",
+"Wednesday" => "Quarta-feira",
+"Thursday" => "Quinta-feira",
+"Friday" => "Sexta-feira",
+"Saturday" => "Sábado",
+"January" => "Janeiro",
+"February" => "Fevereiro",
+"March" => "Março",
+"April" => "Abril",
+"May" => "Maio",
+"June" => "Junho",
+"July" => "Julho",
+"August" => "Agosto",
+"September" => "Setembro",
+"October" => "Outubro",
+"November" => "Novembro",
+"December" => "Dezembro",
"Settings" => "Configurações",
"seconds ago" => "segundos atrás",
"1 minute ago" => "1 minuto atrás",
@@ -30,6 +52,8 @@
"Error" => "Erro",
"The app name is not specified." => "O nome do app não foi especificado.",
"The required file {file} is not installed!" => "O arquivo {file} necessário não está instalado!",
+"Share" => "Compartilhar",
+"Shared" => "Compartilhados",
"Error while sharing" => "Erro ao compartilhar",
"Error while unsharing" => "Erro ao descompartilhar",
"Error while changing permissions" => "Erro ao mudar permissões",
@@ -39,6 +63,8 @@
"Share with link" => "Compartilhar com link",
"Password protect" => "Proteger com senha",
"Password" => "Senha",
+"Email link to person" => "Enviar link por e-mail",
+"Send" => "Enviar",
"Set expiration date" => "Definir data de expiração",
"Expiration date" => "Data de expiração",
"Share via email:" => "Compartilhar via e-mail:",
@@ -55,6 +81,10 @@
"Password protected" => "Protegido com senha",
"Error unsetting expiration date" => "Erro ao remover data de expiração",
"Error setting expiration date" => "Erro ao definir data de expiração",
+"Sending ..." => "Enviando ...",
+"Email sent" => "E-mail enviado",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "A atualização falhou. Por favor, relate este problema para a <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">comunidade ownCloud</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "A atualização teve êxito. Você será redirecionado ao ownCloud agora.",
"ownCloud password reset" => "Redefinir senha ownCloud",
"Use the following link to reset your password: {link}" => "Use o seguinte link para redefinir sua senha: {link}",
"You will receive a link to reset your password via Email." => "Você receberá um link para redefinir sua senha via e-mail.",
@@ -78,7 +108,6 @@
"Security Warning" => "Aviso de Segurança",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nenhum gerador de número aleatório de segurança disponível. Habilite a extensão OpenSSL do PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sem um gerador de número aleatório de segurança, um invasor pode ser capaz de prever os símbolos de redefinição de senhas e assumir sua conta.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Seu diretório de dados e seus arquivos estão, provavelmente, acessíveis a partir da internet. O .htaccess que o ownCloud fornece não está funcionando. Nós sugerimos que você configure o seu servidor web de uma forma que o diretório de dados esteja mais acessível ou que você mova o diretório de dados para fora da raiz do servidor web.",
"Create an <strong>admin account</strong>" => "Criar uma <strong>conta</strong> de <strong>administrador</strong>",
"Advanced" => "Avançado",
"Data folder" => "Pasta de dados",
@@ -90,25 +119,6 @@
"Database tablespace" => "Espaço de tabela do banco de dados",
"Database host" => "Banco de dados do host",
"Finish setup" => "Concluir configuração",
-"Sunday" => "Domingo",
-"Monday" => "Segunda-feira",
-"Tuesday" => "Terça-feira",
-"Wednesday" => "Quarta-feira",
-"Thursday" => "Quinta-feira",
-"Friday" => "Sexta-feira",
-"Saturday" => "Sábado",
-"January" => "Janeiro",
-"February" => "Fevereiro",
-"March" => "Março",
-"April" => "Abril",
-"May" => "Maio",
-"June" => "Junho",
-"July" => "Julho",
-"August" => "Agosto",
-"September" => "Setembro",
-"October" => "Outubro",
-"November" => "Novembro",
-"December" => "Dezembro",
"web services under your control" => "web services sob seu controle",
"Log out" => "Sair",
"Automatic logon rejected!" => "Entrada Automática no Sistema Rejeitada!",
@@ -117,10 +127,7 @@
"Lost your password?" => "Esqueçeu sua senha?",
"remember" => "lembrete",
"Log in" => "Log in",
-"You are logged out." => "Você está desconectado.",
"prev" => "anterior",
"next" => "próximo",
-"Security Warning!" => "Aviso de Segurança!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Por favor, verifique a sua senha.<br />Por motivos de segurança, você deverá ser solicitado a muda-la ocasionalmente.",
-"Verify" => "Verificar"
+"Updating ownCloud to version %s, this may take a while." => "Atualizando ownCloud para a versão %s, isto pode levar algum tempo."
);
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index d09344fe140..1a17161ae5a 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -5,15 +5,34 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "O utilizador %s partilhou a pasta \"%s\" consigo. Está disponível para download aqui: %s",
"Category type not provided." => "Tipo de categoria não fornecido",
"No category to add?" => "Nenhuma categoria para adicionar?",
-"This category already exists: " => "Esta categoria já existe:",
+"This category already exists: %s" => "A categoria já existe: %s",
"Object type not provided." => "Tipo de objecto não fornecido",
"%s ID not provided." => "ID %s não fornecido",
"Error adding %s to favorites." => "Erro a adicionar %s aos favoritos",
-"No categories selected for deletion." => "Nenhuma categoria seleccionar para eliminar",
+"No categories selected for deletion." => "Nenhuma categoria seleccionada para apagar",
"Error removing %s from favorites." => "Erro a remover %s dos favoritos.",
+"Sunday" => "Domingo",
+"Monday" => "Segunda",
+"Tuesday" => "Terça",
+"Wednesday" => "Quarta",
+"Thursday" => "Quinta",
+"Friday" => "Sexta",
+"Saturday" => "Sábado",
+"January" => "Janeiro",
+"February" => "Fevereiro",
+"March" => "Março",
+"April" => "Abril",
+"May" => "Maio",
+"June" => "Junho",
+"July" => "Julho",
+"August" => "Agosto",
+"September" => "Setembro",
+"October" => "Outubro",
+"November" => "Novembro",
+"December" => "Dezembro",
"Settings" => "Definições",
"seconds ago" => "Minutos atrás",
-"1 minute ago" => "Falta 1 minuto",
+"1 minute ago" => "Há 1 minuto",
"{minutes} minutes ago" => "{minutes} minutos atrás",
"1 hour ago" => "Há 1 hora",
"{hours} hours ago" => "Há {hours} horas atrás",
@@ -34,6 +53,8 @@
"Error" => "Erro",
"The app name is not specified." => "O nome da aplicação não foi especificado",
"The required file {file} is not installed!" => "O ficheiro necessário {file} não está instalado!",
+"Share" => "Partilhar",
+"Shared" => "Partilhado",
"Error while sharing" => "Erro ao partilhar",
"Error while unsharing" => "Erro ao deixar de partilhar",
"Error while changing permissions" => "Erro ao mudar permissões",
@@ -62,7 +83,9 @@
"Error unsetting expiration date" => "Erro ao retirar a data de expiração",
"Error setting expiration date" => "Erro ao aplicar a data de expiração",
"Sending ..." => "A Enviar...",
-"Email sent" => "E-mail enviado com sucesso!",
+"Email sent" => "E-mail enviado",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "A actualização falhou. Por favor reporte este incidente seguindo este link <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.",
"ownCloud password reset" => "Reposição da password ownCloud",
"Use the following link to reset your password: {link}" => "Use o seguinte endereço para repor a sua password: {link}",
"You will receive a link to reset your password via Email." => "Vai receber um endereço para repor a sua password",
@@ -71,7 +94,7 @@
"Username" => "Utilizador",
"Request reset" => "Pedir reposição",
"Your password was reset" => "A sua password foi reposta",
-"To login page" => "Para a página de conexão",
+"To login page" => "Para a página de entrada",
"New password" => "Nova password",
"Reset password" => "Repor password",
"Personal" => "Pessoal",
@@ -86,7 +109,8 @@
"Security Warning" => "Aviso de Segurança",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Não existe nenhum gerador seguro de números aleatórios, por favor, active a extensão OpenSSL no PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sem nenhum gerador seguro de números aleatórios, uma pessoa mal intencionada pode prever a sua password, reiniciar as seguranças adicionais e tomar conta da sua conta. ",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" => "Criar uma <strong>conta administrativa</strong>",
"Advanced" => "Avançado",
"Data folder" => "Pasta de dados",
@@ -96,40 +120,18 @@
"Database password" => "Password da base de dados",
"Database name" => "Nome da base de dados",
"Database tablespace" => "Tablespace da base de dados",
-"Database host" => "Host da base de dados",
+"Database host" => "Anfitrião da base de dados",
"Finish setup" => "Acabar instalação",
-"Sunday" => "Domingo",
-"Monday" => "Segunda",
-"Tuesday" => "Terça",
-"Wednesday" => "Quarta",
-"Thursday" => "Quinta",
-"Friday" => "Sexta",
-"Saturday" => "Sábado",
-"January" => "Janeiro",
-"February" => "Fevereiro",
-"March" => "Março",
-"April" => "Abril",
-"May" => "Maio",
-"June" => "Junho",
-"July" => "Julho",
-"August" => "Agosto",
-"September" => "Setembro",
-"October" => "Outubro",
-"November" => "Novembro",
-"December" => "Dezembro",
"web services under your control" => "serviços web sob o seu controlo",
"Log out" => "Sair",
"Automatic logon rejected!" => "Login automático rejeitado!",
"If you did not change your password recently, your account may be compromised!" => "Se não mudou a sua palavra-passe recentemente, a sua conta pode ter sido comprometida!",
"Please change your password to secure your account again." => "Por favor mude a sua palavra-passe para assegurar a sua conta de novo.",
-"Lost your password?" => "Esqueceu a sua password?",
+"Lost your password?" => "Esqueceu-se da sua password?",
"remember" => "lembrar",
"Log in" => "Entrar",
-"You are logged out." => "Estás desconetado.",
+"Alternative Logins" => "Contas de acesso alternativas",
"prev" => "anterior",
"next" => "seguinte",
-"Updating ownCloud to version %s, this may take a while." => "A Actualizar o ownCloud para a versão %s, esta operação pode demorar.",
-"Security Warning!" => "Aviso de Segurança!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Por favor verifique a sua palavra-passe. <br/>Por razões de segurança, pode ser-lhe perguntada, ocasionalmente, a sua palavra-passe de novo.",
-"Verify" => "Verificar"
+"Updating ownCloud to version %s, this may take a while." => "A actualizar o ownCloud para a versão %s, esta operação pode demorar."
);
diff --git a/core/l10n/ro.php b/core/l10n/ro.php
index 1c58e5fe2be..da9f1a7da94 100644
--- a/core/l10n/ro.php
+++ b/core/l10n/ro.php
@@ -1,18 +1,45 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "Utilizatorul %s a partajat un fișier cu tine",
+"User %s shared a folder with you" => "Utilizatorul %s a partajat un dosar cu tine",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "Utilizatorul %s a partajat fișierul \"%s\" cu tine. Îl poți descărca de aici: %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Utilizatorul %s a partajat dosarul \"%s\" cu tine. Îl poți descărca de aici: %s ",
"Category type not provided." => "Tipul de categorie nu este prevazut",
"No category to add?" => "Nici o categorie de adăugat?",
-"This category already exists: " => "Această categorie deja există:",
"Object type not provided." => "Tipul obiectului nu este prevazut",
+"%s ID not provided." => "ID-ul %s nu a fost introdus",
+"Error adding %s to favorites." => "Eroare la adăugarea %s la favorite",
"No categories selected for deletion." => "Nici o categorie selectată pentru ștergere.",
+"Error removing %s from favorites." => "Eroare la ștergerea %s din favorite",
+"Sunday" => "Duminică",
+"Monday" => "Luni",
+"Tuesday" => "Marți",
+"Wednesday" => "Miercuri",
+"Thursday" => "Joi",
+"Friday" => "Vineri",
+"Saturday" => "Sâmbătă",
+"January" => "Ianuarie",
+"February" => "Februarie",
+"March" => "Martie",
+"April" => "Aprilie",
+"May" => "Mai",
+"June" => "Iunie",
+"July" => "Iulie",
+"August" => "August",
+"September" => "Septembrie",
+"October" => "Octombrie",
+"November" => "Noiembrie",
+"December" => "Decembrie",
"Settings" => "Configurări",
"seconds ago" => "secunde în urmă",
"1 minute ago" => "1 minut în urmă",
"{minutes} minutes ago" => "{minutes} minute in urma",
"1 hour ago" => "Acum o ora",
+"{hours} hours ago" => "{hours} ore în urmă",
"today" => "astăzi",
"yesterday" => "ieri",
"{days} days ago" => "{days} zile in urma",
"last month" => "ultima lună",
+"{months} months ago" => "{months} luni în urmă",
"months ago" => "luni în urmă",
"last year" => "ultimul an",
"years ago" => "ani în urmă",
@@ -21,7 +48,11 @@
"No" => "Nu",
"Yes" => "Da",
"Ok" => "Ok",
+"The object type is not specified." => "Tipul obiectului nu a fost specificat",
"Error" => "Eroare",
+"The app name is not specified." => "Numele aplicației nu a fost specificat",
+"The required file {file} is not installed!" => "Fișierul obligatoriu {file} nu este instalat!",
+"Share" => "Partajează",
"Error while sharing" => "Eroare la partajare",
"Error while unsharing" => "Eroare la anularea partajării",
"Error while changing permissions" => "Eroare la modificarea permisiunilor",
@@ -31,6 +62,8 @@
"Share with link" => "Partajare cu legătură",
"Password protect" => "Protejare cu parolă",
"Password" => "Parola",
+"Email link to person" => "Expediază legătura prin poșta electronică",
+"Send" => "Expediază",
"Set expiration date" => "Specifică data expirării",
"Expiration date" => "Data expirării",
"Share via email:" => "Distribuie prin email:",
@@ -47,6 +80,8 @@
"Password protected" => "Protejare cu parolă",
"Error unsetting expiration date" => "Eroare la anularea datei de expirare",
"Error setting expiration date" => "Eroare la specificarea datei de expirare",
+"Sending ..." => "Se expediază...",
+"Email sent" => "Mesajul a fost expediat",
"ownCloud password reset" => "Resetarea parolei ownCloud ",
"Use the following link to reset your password: {link}" => "Folosește următorul link pentru a reseta parola: {link}",
"You will receive a link to reset your password via Email." => "Vei primi un mesaj prin care vei putea reseta parola via email",
@@ -70,7 +105,6 @@
"Security Warning" => "Avertisment de securitate",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Generatorul de numere pentru securitate nu este disponibil, va rog activati extensia PHP OpenSSL",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Fara generatorul pentru numere de securitate , un atacator poate afla parola si reseta contul tau",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Directorul tău de date și fișierele tale probabil sunt accesibile prin internet. Fișierul .htaccess oferit de ownCloud nu funcționează. Îți recomandăm să configurezi server-ul tău web într-un mod în care directorul de date să nu mai fie accesibil sau mută directorul de date în afara directorului root al server-ului web.",
"Create an <strong>admin account</strong>" => "Crează un <strong>cont de administrator</strong>",
"Advanced" => "Avansat",
"Data folder" => "Director date",
@@ -82,25 +116,6 @@
"Database tablespace" => "Tabela de spațiu a bazei de date",
"Database host" => "Bază date",
"Finish setup" => "Finalizează instalarea",
-"Sunday" => "Duminică",
-"Monday" => "Luni",
-"Tuesday" => "Marți",
-"Wednesday" => "Miercuri",
-"Thursday" => "Joi",
-"Friday" => "Vineri",
-"Saturday" => "Sâmbătă",
-"January" => "Ianuarie",
-"February" => "Februarie",
-"March" => "Martie",
-"April" => "Aprilie",
-"May" => "Mai",
-"June" => "Iunie",
-"July" => "Iulie",
-"August" => "August",
-"September" => "Septembrie",
-"October" => "Octombrie",
-"November" => "Noiembrie",
-"December" => "Decembrie",
"web services under your control" => "servicii web controlate de tine",
"Log out" => "Ieșire",
"Automatic logon rejected!" => "Logare automata respinsa",
@@ -109,10 +124,7 @@
"Lost your password?" => "Ai uitat parola?",
"remember" => "amintește",
"Log in" => "Autentificare",
-"You are logged out." => "Ai ieșit",
"prev" => "precedentul",
"next" => "următorul",
-"Security Warning!" => "Advertisment de Securitate",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Te rog verifica parola. <br/>Pentru securitate va poate fi cerut ocazional introducerea parolei din nou",
-"Verify" => "Verifica"
+"Updating ownCloud to version %s, this may take a while." => "Actualizăm ownCloud la versiunea %s, aceasta poate dura câteva momente."
);
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index 4db2a2f06fd..b9c00c6691c 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Пользователь %s открыл вам доÑтуп к папке \"%s\". Она доÑтупна Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ здеÑÑŒ: %s",
"Category type not provided." => "Тип категории не предоÑтавлен",
"No category to add?" => "Ðет категорий Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ?",
-"This category already exists: " => "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует: ",
+"This category already exists: %s" => "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует: %s",
"Object type not provided." => "Тип объекта не предоÑтавлен",
"%s ID not provided." => "ID %s не предоÑтавлен",
"Error adding %s to favorites." => "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ %s в избранное",
"No categories selected for deletion." => "Ðет категорий Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ.",
"Error removing %s from favorites." => "Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ %s из избранного",
+"Sunday" => "ВоÑкреÑенье",
+"Monday" => "Понедельник",
+"Tuesday" => "Вторник",
+"Wednesday" => "Среда",
+"Thursday" => "Четверг",
+"Friday" => "ПÑтница",
+"Saturday" => "Суббота",
+"January" => "Январь",
+"February" => "Февраль",
+"March" => "Март",
+"April" => "Ðпрель",
+"May" => "Май",
+"June" => "Июнь",
+"July" => "Июль",
+"August" => "ÐвгуÑÑ‚",
+"September" => "СентÑбрь",
+"October" => "ОктÑбрь",
+"November" => "ÐоÑбрь",
+"December" => "Декабрь",
"Settings" => "ÐаÑтройки",
"seconds ago" => "неÑколько Ñекунд назад",
"1 minute ago" => "1 минуту назад",
@@ -34,6 +53,8 @@
"Error" => "Ошибка",
"The app name is not specified." => "Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ указано",
"The required file {file} is not installed!" => "Ðеобходимый файл {file} не уÑтановлен!",
+"Share" => "Открыть доÑтуп",
+"Shared" => "Общие",
"Error while sharing" => "Ошибка при открытии доÑтупа",
"Error while unsharing" => "Ошибка при закрытии доÑтупа",
"Error while changing permissions" => "Ошибка при Ñмене разрешений",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Ошибка при уÑтановке Ñрока доÑтупа",
"Sending ..." => "ОтправлÑетÑÑ ...",
"Email sent" => "ПиÑьмо отправлено",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "При обновлении произошла ошибка. ПожалуйÑта Ñообщите об Ñтом в <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud ÑообщеÑтво</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Обновление прошло уÑпешно. ПеренаправлÑемÑÑ Ð² Ваш ownCloud...",
"ownCloud password reset" => "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ ",
"Use the following link to reset your password: {link}" => "ИÑпользуйте Ñледующую ÑÑылку чтобы ÑброÑить пароль: {link}",
"You will receive a link to reset your password via Email." => "Ðа ваш Ð°Ð´Ñ€ÐµÑ Email выÑлана ÑÑылка Ð´Ð»Ñ ÑброÑа паролÑ.",
@@ -86,7 +109,8 @@
"Security Warning" => "Предупреждение безопаÑноÑти",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ðет доÑтупного защищенного генератора Ñлучайных чиÑел, пожалуйÑта, включите раÑширение PHP OpenSSL.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без защищенного генератора Ñлучайных чиÑел злоумышленник может предугадать токены ÑброÑа Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸ завладеть Вашей учетной запиÑью.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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, не работает. Мы наÑтоÑтельно рекомендуем Вам наÑтроить вебÑервер таким образом, чтобы каталоги данных больше не были доÑтупны, или перемеÑтить их за пределы корневого каталога документов веб-Ñервера.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ваша папка Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и файлы возможно доÑтупны из интернета потому что файл .htaccess не работает.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Ð”Ð»Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ как правильно наÑтроить Ваш Ñервер, пожалйÑта заглÑните в <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">документацию</a>.",
"Create an <strong>admin account</strong>" => "Создать <strong>учётную запиÑÑŒ админиÑтратора</strong>",
"Advanced" => "Дополнительно",
"Data folder" => "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸",
@@ -98,25 +122,6 @@
"Database tablespace" => "Табличое проÑтранÑтво базы данных",
"Database host" => "ХоÑÑ‚ базы данных",
"Finish setup" => "Завершить уÑтановку",
-"Sunday" => "ВоÑкреÑенье",
-"Monday" => "Понедельник",
-"Tuesday" => "Вторник",
-"Wednesday" => "Среда",
-"Thursday" => "Четверг",
-"Friday" => "ПÑтница",
-"Saturday" => "Суббота",
-"January" => "Январь",
-"February" => "Февраль",
-"March" => "Март",
-"April" => "Ðпрель",
-"May" => "Май",
-"June" => "Июнь",
-"July" => "Июль",
-"August" => "ÐвгуÑÑ‚",
-"September" => "СентÑбрь",
-"October" => "ОктÑбрь",
-"November" => "ÐоÑбрь",
-"December" => "Декабрь",
"web services under your control" => "Сетевые Ñлужбы под твоим контролем",
"Log out" => "Выйти",
"Automatic logon rejected!" => "ÐвтоматичеÑкий вход в ÑиÑтему отключен!",
@@ -125,10 +130,8 @@
"Lost your password?" => "Забыли пароль?",
"remember" => "запомнить",
"Log in" => "Войти",
-"You are logged out." => "Вы вышли.",
+"Alternative Logins" => "Ðльтернативные имена пользователÑ",
"prev" => "пред",
"next" => "Ñлед",
-"Security Warning!" => "Предупреждение безопаÑноÑти!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "ПожалуйÑта, проверьте Ñвой ​​пароль. <br/>По ÑоображениÑм безопаÑноÑти, Вам иногда придетÑÑ Ð²Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ñвой пароль Ñнова.",
-"Verify" => "Подтвердить"
+"Updating ownCloud to version %s, this may take a while." => "ПроизводитÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ðµ ownCloud до верÑии %s. Это может занÑть некоторое времÑ."
);
diff --git a/core/l10n/ru_RU.php b/core/l10n/ru_RU.php
index c18fe245c9e..86e068c6c8d 100644
--- a/core/l10n/ru_RU.php
+++ b/core/l10n/ru_RU.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Пользователь %s открыл Вам доÑтуп к папке \"%s\". Она доÑтупена Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ здеÑÑŒ: %s",
"Category type not provided." => "Тип категории не предоÑтавлен.",
"No category to add?" => "Ðет категории Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ?",
-"This category already exists: " => "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует:",
+"This category already exists: %s" => "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует: %s",
"Object type not provided." => "Тип объекта не предоÑтавлен.",
"%s ID not provided." => "%s ID не предоÑтавлен.",
"Error adding %s to favorites." => "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ %s в избранное.",
"No categories selected for deletion." => "Ðет категорий, выбранных Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ.",
"Error removing %s from favorites." => "Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ %s из избранного.",
+"Sunday" => "ВоÑкреÑенье",
+"Monday" => "Понедельник",
+"Tuesday" => "Вторник",
+"Wednesday" => "Среда",
+"Thursday" => "Четверг",
+"Friday" => "ПÑтница",
+"Saturday" => "Суббота",
+"January" => "Январь",
+"February" => "Февраль",
+"March" => "Март",
+"April" => "Ðпрель",
+"May" => "Май",
+"June" => "Июнь",
+"July" => "Июль",
+"August" => "ÐвгуÑÑ‚",
+"September" => "СентÑбрь",
+"October" => "ОктÑбрь",
+"November" => "ÐоÑбрь",
+"December" => "Декабрь",
"Settings" => "ÐаÑтройки",
"seconds ago" => "Ñекунд назад",
"1 minute ago" => " 1 минуту назад",
@@ -34,6 +53,8 @@
"Error" => "Ошибка",
"The app name is not specified." => "Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ указано.",
"The required file {file} is not installed!" => "Требуемый файл {файл} не уÑтановлен!",
+"Share" => "Сделать общим",
+"Shared" => "Опубликовано",
"Error while sharing" => "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа",
"Error while unsharing" => "Ошибка Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа",
"Error while changing permissions" => "Ошибка при изменении прав доÑтупа",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Ошибка при уÑтановке даты иÑÑ‚ÐµÑ‡ÐµÐ½Ð¸Ñ Ñрока дейÑтвиÑ",
"Sending ..." => "Отправка ...",
"Email sent" => "ПиÑьмо отправлено",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Обновление прошло неудачно. ПожалуйÑта, Ñообщите об Ñтом результате в <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Обновление прошло уÑпешно. Ðемедленное перенаправление Ð’Ð°Ñ Ð½Ð° ownCloud.",
"ownCloud password reset" => "Переназначение паролÑ",
"Use the following link to reset your password: {link}" => "ВоÑпользуйтеÑÑŒ Ñледующей ÑÑылкой Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ: {link}",
"You will receive a link to reset your password via Email." => "Ð’Ñ‹ получите ÑÑылку Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ð¾ Ñлектронной почте.",
@@ -86,7 +109,8 @@
"Security Warning" => "Предупреждение ÑиÑтемы безопаÑноÑти",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ðет доÑтупного защищенного генератора Ñлучайных чиÑел, пожалуйÑта, включите раÑширение PHP OpenSSL.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без защищенного генератора Ñлучайных чиÑел злоумышленник может Ñпрогнозировать пароль, ÑброÑить учетные данные и завладеть Вашим аккаунтом.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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, не работает. Мы наÑтоÑтельно рекомендуем Вам наÑтроить вебÑервер таким образом, чтобы каталоги данных больше не были доÑтупны, или перемеÑтить их за пределы корневого каталога документов веб-Ñервера.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ваша папка Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и файлы возможно доÑтупны из интернета потому что файл .htaccess не работает.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Ð”Ð»Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ как правильно наÑтроить Ваш Ñервер, пожалйÑта заглÑните в <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">документацию</a>.",
"Create an <strong>admin account</strong>" => "Создать <strong>admin account</strong>",
"Advanced" => "РаÑширенный",
"Data folder" => "Папка данных",
@@ -98,25 +122,6 @@
"Database tablespace" => "Ð¢Ð°Ð±Ð»Ð¸Ñ‡Ð½Ð°Ñ Ð¾Ð±Ð»Ð°Ñть базы данных",
"Database host" => "Сервер базы данных",
"Finish setup" => "Завершение наÑтройки",
-"Sunday" => "ВоÑкреÑенье",
-"Monday" => "Понедельник",
-"Tuesday" => "Вторник",
-"Wednesday" => "Среда",
-"Thursday" => "Четверг",
-"Friday" => "ПÑтница",
-"Saturday" => "Суббота",
-"January" => "Январь",
-"February" => "Февраль",
-"March" => "Март",
-"April" => "Ðпрель",
-"May" => "Май",
-"June" => "Июнь",
-"July" => "Июль",
-"August" => "ÐвгуÑÑ‚",
-"September" => "СентÑбрь",
-"October" => "ОктÑбрь",
-"November" => "ÐоÑбрь",
-"December" => "Декабрь",
"web services under your control" => "веб-ÑервиÑÑ‹ под Вашим контролем",
"Log out" => "Выйти",
"Automatic logon rejected!" => "ÐвтоматичеÑкий вход в ÑиÑтему отклонен!",
@@ -125,10 +130,8 @@
"Lost your password?" => "Забыли пароль?",
"remember" => "запомнить",
"Log in" => "Войти",
-"You are logged out." => "Ð’Ñ‹ вышли из ÑиÑтемы.",
+"Alternative Logins" => "Ðльтернативные Имена",
"prev" => "предыдущий",
"next" => "Ñледующий",
-"Security Warning!" => "Предупреждение ÑиÑтемы безопаÑноÑти!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "ПожалуйÑта, проверьте Ñвой ​​пароль. <br/>По ÑоображениÑм безопаÑноÑти Вам может быть иногда предложено ввеÑти пароль еще раз.",
-"Verify" => "Проверить"
+"Updating ownCloud to version %s, this may take a while." => "Обновление ownCloud до верÑии %s, Ñто может занÑть некоторое времÑ."
);
diff --git a/core/l10n/si_LK.php b/core/l10n/si_LK.php
index 35b0df3188c..eaafca2f3f6 100644
--- a/core/l10n/si_LK.php
+++ b/core/l10n/si_LK.php
@@ -1,5 +1,24 @@
<?php $TRANSLATIONS = array(
"No categories selected for deletion." => "මක෠දà·à¶¸à·“ම සඳහ෠ප්â€à¶»à·€à¶»à·Šà¶œà¶ºà¶±à·Š à¶­à·à¶»à· නොමà·à¶­.",
+"Sunday" => "ඉරිදà·",
+"Monday" => "සඳුදà·",
+"Tuesday" => "අඟහරුවà·à¶¯à·",
+"Wednesday" => "බදà·à¶¯à·",
+"Thursday" => "à¶¶à·Šâ€à¶»à·„ස්පතින්දà·",
+"Friday" => "සිකුරà·à¶¯à·",
+"Saturday" => "සෙනසුරà·à¶¯à·",
+"January" => "ජනවà·à¶»à·’",
+"February" => "පෙබරවà·à¶»à·’",
+"March" => "මà·à¶»à·Šà¶­à·”",
+"April" => "à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š",
+"May" => "මà·à¶ºà·’",
+"June" => "ජූනි",
+"July" => "ජූලි",
+"August" => "à¶…à¶œà·à·ƒà·Šà¶­à·”",
+"September" => "à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š",
+"October" => "ඔක්තà·à¶¶à¶»à·Š",
+"November" => "නොවà·à¶¸à·Šà¶¶à¶»à·Š",
+"December" => "දෙසà·à¶¸à·Šà¶¶à¶»à·Š",
"Settings" => "à·ƒà·à¶šà·ƒà·”ම්",
"seconds ago" => "තත්පරයන්ට පෙර",
"1 minute ago" => "1 මිනිත්තුවකට පෙර",
@@ -15,6 +34,7 @@
"Yes" => "ඔව්",
"Ok" => "හරි",
"Error" => "දà·à·‚යක්",
+"Share" => "බෙද෠හද෠ගන්න",
"Share with" => "බෙදà·à¶œà¶±à·Šà¶±",
"Share with link" => "යොමුවක් මඟින් බෙදà·à¶œà¶±à·Šà¶±",
"Password protect" => "මුර පදයකින් ආරක්à·à·à¶šà¶»à¶±à·Šà¶±",
@@ -51,7 +71,6 @@
"Add" => "එක් කරන්න",
"Security Warning" => "ආරක්ෂක නිවේදනයක්",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "ආරක්ෂිත අහඹු සංඛ්â€à¶ºà· à¶‹à¶­à·Šà¶´à·à¶¯à¶šà¶ºà¶šà·Š නොමà·à¶­à·’ නම් ඔබගේ ගිණුමට පහරදෙන අයකුට à¶‘à·„à·’ මුරපද යළි පිහිටුවීමට à¶…à·€à·à·Šâ€à¶º à¶§à·à¶šà¶± පහසුවෙන් සොයà·à¶œà·™à¶± ඔබගේ ගිණුම à¶´à·à·„à·à¶»à¶œà¶­ à·„à·à¶š.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "ඔබගේ දත්ත ඩිරෙක්ටරිය හ෠ගොනුවලට අන්තර්ජà·à¶½à¶ºà·™à¶±à·Š පිවිසිය à·„à·à¶š. ownCloud සපය෠ඇති .htaccess ගොනුව à¶šà·Šâ€à¶»à·’යà·à¶šà¶»à¶±à·Šà¶±à·š à¶±à·à¶­. à¶…à¶´à·’ තරයේ කිය෠සිටිනුයේ නම්, මෙම දත්ත හ෠ගොනු එසේ පිවිසීමට නොහà·à¶šà·’ වන ලෙස ඔබේ වෙබ් සේවà·à¶¯à·à¶ºà¶šà¶ºà· වින්â€à¶ºà·à·ƒ කරන ලෙස හ෠එම ඩිරෙක්ටරිය වෙබ් මූලයෙන් à¶´à·’à¶§à¶­à¶§ ගෙනයන ලෙසය.",
"Advanced" => "දියුණු/උසස්",
"Data folder" => "දත්ත à·†à·à¶½à·Šà¶©à¶»à¶º",
"Configure the database" => "දත්ත සමුදà·à¶º à·„à·à¶©à¶œà·à·ƒà·“ම",
@@ -61,31 +80,11 @@
"Database name" => "දත්තගබඩà·à·€à·š නම",
"Database host" => "දත්තගබඩ෠සේවà·à¶¯à·à¶ºà¶šà¶ºà·",
"Finish setup" => "ස්ථà·à¶´à¶±à¶º කිරීම අවසන් කරන්න",
-"Sunday" => "ඉරිදà·",
-"Monday" => "සඳුදà·",
-"Tuesday" => "අඟහරුවà·à¶¯à·",
-"Wednesday" => "බදà·à¶¯à·",
-"Thursday" => "à¶¶à·Šâ€à¶»à·„ස්පතින්දà·",
-"Friday" => "සිකුරà·à¶¯à·",
-"Saturday" => "සෙනසුරà·à¶¯à·",
-"January" => "ජනවà·à¶»à·’",
-"February" => "පෙබරවà·à¶»à·’",
-"March" => "මà·à¶»à·Šà¶­à·”",
-"April" => "à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š",
-"May" => "මà·à¶ºà·’",
-"June" => "ජූනි",
-"July" => "ජූලි",
-"August" => "à¶…à¶œà·à·ƒà·Šà¶­à·”",
-"September" => "à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š",
-"October" => "ඔක්තà·à¶¶à¶»à·Š",
-"November" => "නොවà·à¶¸à·Šà¶¶à¶»à·Š",
-"December" => "දෙසà·à¶¸à·Šà¶¶à¶»à·Š",
"web services under your control" => "ඔබට à¶´à·à¶½à¶±à¶º à¶šà·… à·„à·à¶šà·’ වෙබ් සේවà·à·€à¶±à·Š",
"Log out" => "නික්මීම",
"Lost your password?" => "මුරපදය අමතකද?",
"remember" => "මතක à¶­à¶¶à·à¶œà¶±à·Šà¶±",
"Log in" => "à¶´à·Šâ€à¶»à·€à·šà·à·€à¶±à·Šà¶±",
-"You are logged out." => "ඔබ නික්මී ඇත.",
"prev" => "පෙර",
"next" => "à¶Šà·…à¶Ÿ"
);
diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php
index 162d94e8242..ef0b7c26ce3 100644
--- a/core/l10n/sk_SK.php
+++ b/core/l10n/sk_SK.php
@@ -1,12 +1,35 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "Používateľ %s zdieľa s Vami súbor",
+"User %s shared a folder with you" => "Používateľ %s zdieľa s Vami adresár",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "Používateľ %s zdieľa s Vami súbor \"%s\". Môžete si ho stiahnuť tu: %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Používateľ %s zdieľa s Vami adresár \"%s\". Môžete si ho stiahnuť tu: %s",
"Category type not provided." => "Neposkytnutý kategorický typ.",
"No category to add?" => "Žiadna kategória pre pridanie?",
-"This category already exists: " => "Táto kategória už existuje:",
+"This category already exists: %s" => "Kategéria: %s už existuje.",
"Object type not provided." => "Neposkytnutý typ objektu.",
"%s ID not provided." => "%s ID neposkytnuté.",
"Error adding %s to favorites." => "Chyba pri pridávaní %s do obľúbených položiek.",
"No categories selected for deletion." => "Neboli vybrané žiadne kategórie pre odstránenie.",
"Error removing %s from favorites." => "Chyba pri odstraňovaní %s z obľúbených položiek.",
+"Sunday" => "Nedeľa",
+"Monday" => "Pondelok",
+"Tuesday" => "Utorok",
+"Wednesday" => "Streda",
+"Thursday" => "Å tvrtok",
+"Friday" => "Piatok",
+"Saturday" => "Sobota",
+"January" => "Január",
+"February" => "Február",
+"March" => "Marec",
+"April" => "Apríl",
+"May" => "Máj",
+"June" => "Jún",
+"July" => "Júl",
+"August" => "August",
+"September" => "September",
+"October" => "Október",
+"November" => "November",
+"December" => "December",
"Settings" => "Nastavenia",
"seconds ago" => "pred sekundami",
"1 minute ago" => "pred minútou",
@@ -30,6 +53,8 @@
"Error" => "Chyba",
"The app name is not specified." => "Nešpecifikované meno aplikácie.",
"The required file {file} is not installed!" => "Požadovaný súbor {file} nie je inštalovaný!",
+"Share" => "Zdieľaj",
+"Shared" => "Zdieľané",
"Error while sharing" => "Chyba poÄas zdieľania",
"Error while unsharing" => "Chyba poÄas ukonÄenia zdieľania",
"Error while changing permissions" => "Chyba poÄas zmeny oprávnení",
@@ -39,10 +64,12 @@
"Share with link" => "Zdieľať cez odkaz",
"Password protect" => "Chrániť heslom",
"Password" => "Heslo",
+"Email link to person" => "Odoslať odkaz osobe e-mailom",
+"Send" => "Odoslať",
"Set expiration date" => "Nastaviť dátum expirácie",
"Expiration date" => "Dátum expirácie",
"Share via email:" => "Zdieľať cez e-mail:",
-"No people found" => "Užívateľ nenájdený",
+"No people found" => "Používateľ nenájdený",
"Resharing is not allowed" => "Zdieľanie už zdieľanej položky nie je povolené",
"Shared in {item} with {user}" => "Zdieľané v {item} s {user}",
"Unshare" => "Zrušiť zdieľanie",
@@ -55,6 +82,10 @@
"Password protected" => "Chránené heslom",
"Error unsetting expiration date" => "Chyba pri odstraňovaní dátumu vypršania platnosti",
"Error setting expiration date" => "Chyba pri nastavení dátumu vypršania platnosti",
+"Sending ..." => "Odosielam ...",
+"Email sent" => "Email odoslaný",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Aktualizácia nebola úspešná. Problém nahláste na <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Aktualizácia bola úspešná. Presmerovávam na ownCloud.",
"ownCloud password reset" => "Obnovenie hesla pre ownCloud",
"Use the following link to reset your password: {link}" => "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
"You will receive a link to reset your password via Email." => "Odkaz pre obnovenie hesla obdržíte e-mailom.",
@@ -78,7 +109,8 @@
"Security Warning" => "BezpeÄnostné varovanie",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nie je dostupný žiadny bezpeÄný generátor náhodných Äísel, prosím, povoľte rozšírenie OpenSSL v PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpeÄného generátora náhodných Äísel môže útoÄník predpovedaÅ¥ token pre obnovu hesla a prevziaÅ¥ kontrolu nad vaším kontom.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Váš prieÄinok s dátami a VaÅ¡e súbory sú pravdepodobne dostupné z internetu. .htaccess súbor dodávaný s inÅ¡taláciou ownCloud nespĺňa úlohu. Dôrazne Vám doporuÄujeme nakonfigurovaÅ¥ webserver takým spôsobom, aby dáta v prieÄinku neboli verejné, alebo presuňte dáta mimo Å¡truktúry prieÄinkov webservera.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Váš prieÄinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Pre informácie, ako správne nastaviť Váš server sa pozrite do <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentácie</a>.",
"Create an <strong>admin account</strong>" => "VytvoriÅ¥ <strong>administrátorský úÄet</strong>",
"Advanced" => "PokroÄilé",
"Data folder" => "PrieÄinok dát",
@@ -90,25 +122,6 @@
"Database tablespace" => "Tabuľkový priestor databázy",
"Database host" => "Server databázy",
"Finish setup" => "DokonÄiÅ¥ inÅ¡taláciu",
-"Sunday" => "Nedeľa",
-"Monday" => "Pondelok",
-"Tuesday" => "Utorok",
-"Wednesday" => "Streda",
-"Thursday" => "Å tvrtok",
-"Friday" => "Piatok",
-"Saturday" => "Sobota",
-"January" => "Január",
-"February" => "Február",
-"March" => "Marec",
-"April" => "Apríl",
-"May" => "Máj",
-"June" => "Jún",
-"July" => "Júl",
-"August" => "August",
-"September" => "September",
-"October" => "Október",
-"November" => "November",
-"December" => "December",
"web services under your control" => "webové služby pod vašou kontrolou",
"Log out" => "Odhlásiť",
"Automatic logon rejected!" => "Automatické prihlásenie bolo zamietnuté!",
@@ -117,10 +130,8 @@
"Lost your password?" => "Zabudli ste heslo?",
"remember" => "zapamätať",
"Log in" => "Prihlásiť sa",
-"You are logged out." => "Ste odhlásený.",
+"Alternative Logins" => "Altrnatívne loginy",
"prev" => "späť",
"next" => "Äalej",
-"Security Warning!" => "BezpeÄnostné varovanie!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Prosím, overte svoje heslo. <br />Z bezpeÄnostných dôvodov môžete byÅ¥ obÄas požiadaný o jeho opätovné zadanie.",
-"Verify" => "Overenie"
+"Updating ownCloud to version %s, this may take a while." => "Aktualizujem ownCloud na verziu %s, môže to chvíľu trvať."
);
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index 0ee2eb03b3c..2b5b02191ec 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Uporanik %s je dal mapo \"%s\" v souporabo z vami. Prenesete je lahko tukaj: %s",
"Category type not provided." => "Vrsta kategorije ni podana.",
"No category to add?" => "Ni kategorije za dodajanje?",
-"This category already exists: " => "Ta kategorija že obstaja:",
"Object type not provided." => "Vrsta predmeta ni podana.",
"%s ID not provided." => "%s ID ni podan.",
"Error adding %s to favorites." => "Napaka pri dodajanju %s med priljubljene.",
"No categories selected for deletion." => "Za izbris ni izbrana nobena kategorija.",
"Error removing %s from favorites." => "Napaka pri odstranjevanju %s iz priljubljenih.",
+"Sunday" => "nedelja",
+"Monday" => "ponedeljek",
+"Tuesday" => "torek",
+"Wednesday" => "sreda",
+"Thursday" => "Äetrtek",
+"Friday" => "petek",
+"Saturday" => "sobota",
+"January" => "januar",
+"February" => "februar",
+"March" => "marec",
+"April" => "april",
+"May" => "maj",
+"June" => "junij",
+"July" => "julij",
+"August" => "avgust",
+"September" => "september",
+"October" => "oktober",
+"November" => "november",
+"December" => "december",
"Settings" => "Nastavitve",
"seconds ago" => "pred nekaj sekundami",
"1 minute ago" => "pred minuto",
@@ -34,6 +52,7 @@
"Error" => "Napaka",
"The app name is not specified." => "Ime aplikacije ni podano.",
"The required file {file} is not installed!" => "Zahtevana datoteka {file} ni nameÅ¡Äena!",
+"Share" => "Souporaba",
"Error while sharing" => "Napaka med souporabo",
"Error while unsharing" => "Napaka med odstranjevanjem souporabe",
"Error while changing permissions" => "Napaka med spreminjanjem dovoljenj",
@@ -86,7 +105,6 @@
"Security Warning" => "Varnostno opozorilo",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Na voljo ni varnega generatorja nakljuÄnih Å¡tevil. Prosimo, Äe omogoÄite PHP OpenSSL razÅ¡iritev.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Brez varnega generatorja nakljuÄnih Å¡tevil lahko napadalec napove žetone za ponastavitev gesla, kar mu omogoÄa, da prevzame vaÅ¡ ​​raÄun.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Trenutno je dostop do podatkovne mape in datotek najverjetneje omogoÄen vsem uporabnikom na omrežju. Datoteka .htaccess, vkljuÄena v ownCloud namreÄ ni omogoÄena. MoÄno priporoÄamo nastavitev spletnega strežnika tako, da mapa podatkov ne bo javno dostopna ali pa, da jo prestavite ven iz korenske mape spletnega strežnika.",
"Create an <strong>admin account</strong>" => "Ustvari <strong>skrbniÅ¡ki raÄun</strong>",
"Advanced" => "Napredne možnosti",
"Data folder" => "Mapa s podatki",
@@ -98,25 +116,6 @@
"Database tablespace" => "Razpredelnica podatkovne zbirke",
"Database host" => "Gostitelj podatkovne zbirke",
"Finish setup" => "DokonÄaj namestitev",
-"Sunday" => "nedelja",
-"Monday" => "ponedeljek",
-"Tuesday" => "torek",
-"Wednesday" => "sreda",
-"Thursday" => "Äetrtek",
-"Friday" => "petek",
-"Saturday" => "sobota",
-"January" => "januar",
-"February" => "februar",
-"March" => "marec",
-"April" => "april",
-"May" => "maj",
-"June" => "junij",
-"July" => "julij",
-"August" => "avgust",
-"September" => "september",
-"October" => "oktober",
-"November" => "november",
-"December" => "december",
"web services under your control" => "spletne storitve pod vašim nadzorom",
"Log out" => "Odjava",
"Automatic logon rejected!" => "Samodejno prijavljanje je zavrnjeno!",
@@ -125,10 +124,6 @@
"Lost your password?" => "Ali ste pozabili geslo?",
"remember" => "Zapomni si me",
"Log in" => "Prijava",
-"You are logged out." => "Sta odjavljeni.",
"prev" => "nazaj",
-"next" => "naprej",
-"Security Warning!" => "Varnostno opozorilo!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Prosimo, Äe preverite vaÅ¡e geslo. Iz varnostnih razlogov vas lahko obÄasno prosimo, da ga ponovno vnesete.",
-"Verify" => "Preveri"
+"next" => "naprej"
);
diff --git a/core/l10n/sr.php b/core/l10n/sr.php
index 406b92ff83f..557cb6a8aba 100644
--- a/core/l10n/sr.php
+++ b/core/l10n/sr.php
@@ -1,12 +1,32 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "КориÑник %s дели Ñа вама датотеку",
+"User %s shared a folder with you" => "КориÑник %s дели Ñа вама директоријум",
"Category type not provided." => "Ð’Ñ€Ñта категорије није унет.",
"No category to add?" => "Додати још неку категорију?",
-"This category already exists: " => "Категорија већ поÑтоји:",
"Object type not provided." => "Ð’Ñ€Ñта објекта није унета.",
"%s ID not provided." => "%s ИД ниÑу унети.",
"Error adding %s to favorites." => "Грешка приликом додавања %s у омиљене.",
"No categories selected for deletion." => "Ðи једна категорија није означена за бриÑање.",
"Error removing %s from favorites." => "Грешка приликом уклањања %s из омиљених",
+"Sunday" => "Ðедеља",
+"Monday" => "Понедељак",
+"Tuesday" => "Уторак",
+"Wednesday" => "Среда",
+"Thursday" => "Четвртак",
+"Friday" => "Петак",
+"Saturday" => "Субота",
+"January" => "Јануар",
+"February" => "Фебруар",
+"March" => "Март",
+"April" => "Ðприл",
+"May" => "Мај",
+"June" => "Јун",
+"July" => "Јул",
+"August" => "ÐвгуÑÑ‚",
+"September" => "Септембар",
+"October" => "Октобар",
+"November" => "Ðовембар",
+"December" => "Децембар",
"Settings" => "Подешавања",
"seconds ago" => "пре неколико Ñекунди",
"1 minute ago" => "пре 1 минут",
@@ -30,6 +50,7 @@
"Error" => "Грешка",
"The app name is not specified." => "Име програма није унето.",
"The required file {file} is not installed!" => "Потребна датотека {file} није инÑталирана.",
+"Share" => "Дељење",
"Error while sharing" => "Грешка у дељењу",
"Error while unsharing" => "Грешка код иÑкључења дељења",
"Error while changing permissions" => "Грешка код промене дозвола",
@@ -39,6 +60,7 @@
"Share with link" => "Подели линк",
"Password protect" => "Заштићено лозинком",
"Password" => "Лозинка",
+"Send" => "Пошаљи",
"Set expiration date" => "ПоÑтави датум иÑтека",
"Expiration date" => "Датум иÑтека",
"Share via email:" => "Подели поштом:",
@@ -55,6 +77,8 @@
"Password protected" => "Заштићено лозинком",
"Error unsetting expiration date" => "Грешка код поништавања датума иÑтека",
"Error setting expiration date" => "Грешка код поÑтављања датума иÑтека",
+"Sending ..." => "Шаљем...",
+"Email sent" => "Порука је поÑлата",
"ownCloud password reset" => "Поништавање лозинке за ownCloud",
"Use the following link to reset your password: {link}" => "Овом везом реÑетујте Ñвоју лозинку: {link}",
"You will receive a link to reset your password via Email." => "Добићете везу за реÑетовање лозинке путем е-поште.",
@@ -78,7 +102,6 @@
"Security Warning" => "СигурноÑно упозорење",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Поуздан генератор Ñлучајних бројева није доÑтупан, предлажемо да укључите PHP проширење OpenSSL.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без поузданог генератора Ñлучајнох бројева нападач лако може предвидети лозинку за поништавање кључа шифровања и отети вам налог.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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 не функционише. Саветујемо вам да подеÑите веб Ñервер тако да директоријум Ñа подацима не буде изложен или да га премеÑтите изван коренÑког директоријума веб Ñервера.",
"Create an <strong>admin account</strong>" => "Ðаправи <strong>админиÑтративни налог</strong>",
"Advanced" => "Ðапредно",
"Data folder" => "Фацикла података",
@@ -90,25 +113,6 @@
"Database tablespace" => "Радни проÑтор базе података",
"Database host" => "Домаћин базе",
"Finish setup" => "Заврши подешавање",
-"Sunday" => "Ðедеља",
-"Monday" => "Понедељак",
-"Tuesday" => "Уторак",
-"Wednesday" => "Среда",
-"Thursday" => "Четвртак",
-"Friday" => "Петак",
-"Saturday" => "Субота",
-"January" => "Јануар",
-"February" => "Фебруар",
-"March" => "Март",
-"April" => "Ðприл",
-"May" => "Мај",
-"June" => "Јун",
-"July" => "Јул",
-"August" => "ÐвгуÑÑ‚",
-"September" => "Септембар",
-"October" => "Октобар",
-"November" => "Ðовембар",
-"December" => "Децембар",
"web services under your control" => "веб ÑервиÑи под контролом",
"Log out" => "Одјава",
"Automatic logon rejected!" => "ÐутоматÑка пријава је одбијена!",
@@ -117,10 +121,7 @@
"Lost your password?" => "Изгубили Ñте лозинку?",
"remember" => "упамти",
"Log in" => "Пријава",
-"You are logged out." => "Одјављени Ñте.",
"prev" => "претходно",
"next" => "Ñледеће",
-"Security Warning!" => "СигурноÑно упозорење!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Потврдите лозинку. <br />Из ÑигурноÑних разлога затрежићемо вам да два пута унеÑете лозинку.",
-"Verify" => "Потврди"
+"Updating ownCloud to version %s, this may take a while." => "Ðадоградња ownCloud-а на верзију %s, Ñачекајте тренутак."
);
diff --git a/core/l10n/sr@latin.php b/core/l10n/sr@latin.php
index af48a845720..ec3eab34e29 100644
--- a/core/l10n/sr@latin.php
+++ b/core/l10n/sr@latin.php
@@ -1,4 +1,23 @@
<?php $TRANSLATIONS = array(
+"Sunday" => "Nedelja",
+"Monday" => "Ponedeljak",
+"Tuesday" => "Utorak",
+"Wednesday" => "Sreda",
+"Thursday" => "ÄŒetvrtak",
+"Friday" => "Petak",
+"Saturday" => "Subota",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "Mart",
+"April" => "April",
+"May" => "Maj",
+"June" => "Jun",
+"July" => "Jul",
+"August" => "Avgust",
+"September" => "Septembar",
+"October" => "Oktobar",
+"November" => "Novembar",
+"December" => "Decembar",
"Settings" => "Podešavanja",
"Cancel" => "Otkaži",
"Password" => "Lozinka",
@@ -24,29 +43,9 @@
"Database name" => "Ime baze",
"Database host" => "Domaćin baze",
"Finish setup" => "Završi podešavanje",
-"Sunday" => "Nedelja",
-"Monday" => "Ponedeljak",
-"Tuesday" => "Utorak",
-"Wednesday" => "Sreda",
-"Thursday" => "ÄŒetvrtak",
-"Friday" => "Petak",
-"Saturday" => "Subota",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "Mart",
-"April" => "April",
-"May" => "Maj",
-"June" => "Jun",
-"July" => "Jul",
-"August" => "Avgust",
-"September" => "Septembar",
-"October" => "Oktobar",
-"November" => "Novembar",
-"December" => "Decembar",
"Log out" => "Odjava",
"Lost your password?" => "Izgubili ste lozinku?",
"remember" => "upamti",
-"You are logged out." => "Odjavljeni ste.",
"prev" => "prethodno",
"next" => "sledeće"
);
diff --git a/core/l10n/sv.php b/core/l10n/sv.php
index 7020e4b28d6..ff0006ee19b 100644
--- a/core/l10n/sv.php
+++ b/core/l10n/sv.php
@@ -5,12 +5,31 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Användare %s delade mappen \"%s\" med dig. Den finns att ladda ner här: %s",
"Category type not provided." => "Kategorityp inte angiven.",
"No category to add?" => "Ingen kategori att lägga till?",
-"This category already exists: " => "Denna kategori finns redan:",
+"This category already exists: %s" => "Denna kategori finns redan: %s",
"Object type not provided." => "Objekttyp inte angiven.",
"%s ID not provided." => "%s ID inte angiven.",
"Error adding %s to favorites." => "Fel vid tillägg av %s till favoriter.",
"No categories selected for deletion." => "Inga kategorier valda för radering.",
"Error removing %s from favorites." => "Fel vid borttagning av %s från favoriter.",
+"Sunday" => "Söndag",
+"Monday" => "MÃ¥ndag",
+"Tuesday" => "Tisdag",
+"Wednesday" => "Onsdag",
+"Thursday" => "Torsdag",
+"Friday" => "Fredag",
+"Saturday" => "Lördag",
+"January" => "Januari",
+"February" => "Februari",
+"March" => "Mars",
+"April" => "April",
+"May" => "Maj",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "Augusti",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "December",
"Settings" => "Inställningar",
"seconds ago" => "sekunder sedan",
"1 minute ago" => "1 minut sedan",
@@ -34,6 +53,8 @@
"Error" => "Fel",
"The app name is not specified." => " Namnet på appen är inte specificerad.",
"The required file {file} is not installed!" => "Den nödvändiga filen {file} är inte installerad!",
+"Share" => "Dela",
+"Shared" => "Delad",
"Error while sharing" => "Fel vid delning",
"Error while unsharing" => "Fel när delning skulle avslutas",
"Error while changing permissions" => "Fel vid ändring av rättigheter",
@@ -63,6 +84,8 @@
"Error setting expiration date" => "Fel vid sättning av utgångsdatum",
"Sending ..." => "Skickar ...",
"Email sent" => "E-post skickat",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Uppdateringen misslyckades. Rapportera detta problem till <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud-gemenskapen</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Uppdateringen lyckades. Du omdirigeras nu till OwnCloud",
"ownCloud password reset" => "ownCloud lösenordsåterställning",
"Use the following link to reset your password: {link}" => "Använd följande länk för att återställa lösenordet: {link}",
"You will receive a link to reset your password via Email." => "Du får en länk att återställa ditt lösenord via e-post.",
@@ -86,7 +109,8 @@
"Security Warning" => "Säkerhetsvarning",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ingen säker slumptalsgenerator finns tillgänglig. Du bör aktivera PHP OpenSSL-tillägget.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Utan en säker slumptalsgenerator kan angripare få möjlighet att förutsäga lösenordsåterställningar och ta över ditt konto.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Din datakatalog och dina filer är förmodligen tillgängliga från Internet. Den .htaccess-fil som ownCloud tillhandahåller fungerar inte. Vi rekommenderar starkt att du konfigurerar webbservern så att datakatalogen inte längre är tillgänglig eller att du flyttar datakatalogen utanför webbserverns dokument-root.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "För information hur man korrekt konfigurera servern, var god se <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" => "Skapa ett <strong>administratörskonto</strong>",
"Advanced" => "Avancerat",
"Data folder" => "Datamapp",
@@ -98,25 +122,6 @@
"Database tablespace" => "Databas tabellutrymme",
"Database host" => "Databasserver",
"Finish setup" => "Avsluta installation",
-"Sunday" => "Söndag",
-"Monday" => "MÃ¥ndag",
-"Tuesday" => "Tisdag",
-"Wednesday" => "Onsdag",
-"Thursday" => "Torsdag",
-"Friday" => "Fredag",
-"Saturday" => "Lördag",
-"January" => "Januari",
-"February" => "Februari",
-"March" => "Mars",
-"April" => "April",
-"May" => "Maj",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "Augusti",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "December",
"web services under your control" => "webbtjänster under din kontroll",
"Log out" => "Logga ut",
"Automatic logon rejected!" => "Automatisk inloggning inte tillåten!",
@@ -125,11 +130,8 @@
"Lost your password?" => "Glömt ditt lösenord?",
"remember" => "kom ihåg",
"Log in" => "Logga in",
-"You are logged out." => "Du är utloggad.",
+"Alternative Logins" => "Alternativa inloggningar",
"prev" => "föregående",
"next" => "nästa",
-"Updating ownCloud to version %s, this may take a while." => "Uppdaterar ownCloud till version %s, detta kan ta en stund.",
-"Security Warning!" => "Säkerhetsvarning!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Bekräfta ditt lösenord. <br/>Av säkerhetsskäl kan du ibland bli ombedd att ange ditt lösenord igen.",
-"Verify" => "Verifiera"
+"Updating ownCloud to version %s, this may take a while." => "Uppdaterar ownCloud till version %s, detta kan ta en stund."
);
diff --git a/core/l10n/ta_LK.php b/core/l10n/ta_LK.php
index 9a432d11c9b..f7ad09fbc7e 100644
--- a/core/l10n/ta_LK.php
+++ b/core/l10n/ta_LK.php
@@ -1,12 +1,30 @@
<?php $TRANSLATIONS = array(
"Category type not provided." => "பிரிவ௠வகைகள௠வழஙà¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ",
"No category to add?" => "சேரà¯à®ªà¯à®ªà®¤à®±à¯à®•ான வகைகள௠இலà¯à®²à¯ˆà®¯à®¾?",
-"This category already exists: " => "இநà¯à®¤ வகை à®à®±à¯à®•னவே உளà¯à®³à®¤à¯:",
"Object type not provided." => "பொரà¯à®³à¯ வகை வழஙà¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ",
"%s ID not provided." => "%s ID வழஙà¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ",
"Error adding %s to favorites." => "விரà¯à®ªà¯à®ªà®™à¯à®•ளà¯à®•à¯à®•௠%s ஠சேரà¯à®ªà¯à®ªà®¤à®¿à®²à¯ வழà¯",
"No categories selected for deletion." => "நீகà¯à®•à¯à®µà®¤à®±à¯à®•௠எநà¯à®¤à®ªà¯ பிரிவà¯à®®à¯ தெரிவà¯à®šà¯†à®¯à¯à®¯à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ.",
"Error removing %s from favorites." => "விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ %s ஠அகறà¯à®±à¯à®µà®¤à®¿à®²à¯ வழà¯.உஇஇ",
+"Sunday" => "ஞாயிறà¯à®±à¯à®•à¯à®•ிழமை",
+"Monday" => "திஙà¯à®•டà¯à®•ிழமை",
+"Tuesday" => "செவà¯à®µà®¾à®¯à¯à®•à¯à®•ிழமை",
+"Wednesday" => "பà¯à®¤à®©à¯à®•ிழமை",
+"Thursday" => "வியாழகà¯à®•ிழமை",
+"Friday" => "வெளà¯à®³à®¿à®•à¯à®•ிழமை",
+"Saturday" => "சனிகà¯à®•ிழமை",
+"January" => "தை",
+"February" => "மாசி",
+"March" => "பஙà¯à®•à¯à®©à®¿",
+"April" => "சிதà¯à®¤à®¿à®°à¯ˆ",
+"May" => "வைகாசி",
+"June" => "ஆனி",
+"July" => "ஆடி",
+"August" => "ஆவணி",
+"September" => "பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿",
+"October" => "à®à®ªà¯à®ªà®šà®¿",
+"November" => "காரà¯à®¤à¯à®¤à®¿à®•ை",
+"December" => "மாரà¯à®•ழி",
"Settings" => "அமைபà¯à®ªà¯à®•ளà¯",
"seconds ago" => "செகà¯à®•னà¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯",
"1 minute ago" => "1 நிமிடதà¯à®¤à®¿à®±à¯à®•௠மà¯à®©à¯ ",
@@ -30,6 +48,7 @@
"Error" => "வழà¯",
"The app name is not specified." => "செயலி பெயர௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ.",
"The required file {file} is not installed!" => "தேவைபà¯à®ªà®Ÿà¯à®Ÿ கோபà¯à®ªà¯ {கோபà¯à®ªà¯} நிறà¯à®µà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ!",
+"Share" => "பகிரà¯à®µà¯",
"Error while sharing" => "பகிரà¯à®®à¯ போதான வழà¯",
"Error while unsharing" => "பகிராமல௠உளà¯à®³à®ªà¯à®ªà¯‹à®¤à®¾à®© வழà¯",
"Error while changing permissions" => "அனà¯à®®à®¤à®¿à®•ள௠மாறà¯à®®à¯à®ªà¯‹à®¤à®¾à®© வழà¯",
@@ -78,7 +97,6 @@
"Security Warning" => "பாதà¯à®•ாபà¯à®ªà¯ எசà¯à®šà®°à®¿à®•à¯à®•ை",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ எணà¯à®£à®¿à®•à¯à®•ை பாதà¯à®•ாபà¯à®ªà®¾à®© பà¯à®±à®ªà¯à®ªà®¾à®•à¯à®•ி / உணà¯à®Ÿà®¾à®•à¯à®•ிகள௠இலà¯à®²à¯ˆ, தயவà¯à®šà¯†à®¯à¯à®¤à¯ PHP OpenSSL நீடà¯à®šà®¿à®¯à¯ˆ இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•. ",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "பாதà¯à®•ாபà¯à®ªà®¾à®© சீரறà¯à®± எணà¯à®£à®¿à®•à¯à®•ையான பà¯à®±à®ªà¯à®ªà®¾à®•à¯à®•ி இலà¯à®²à¯ˆà®¯à¯†à®©à®¿à®©à¯, தாகà¯à®•à¯à®©à®°à®¾à®²à¯ கடவà¯à®šà¯à®šà¯Šà®²à¯ மீளமைபà¯à®ªà¯ அடையாளவிலà¯à®²à¯ˆà®•ள௠மà¯à®©à¯à®®à¯Šà®´à®¿à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கணகà¯à®•ை கைபà¯à®ªà®±à¯à®±à®²à®¾à®®à¯.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ தரவ௠அடைவ௠மறà¯à®±à¯à®®à¯ உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கோபà¯à®ªà¯à®•à¯à®•ளை பெரà¯à®®à¯à®ªà®¾à®²à¯à®®à¯ இணையதà¯à®¤à®¿à®©à¯‚டாக அணà¯à®•லாமà¯. ownCloud இனால௠வழஙà¯à®•பà¯à®ªà®Ÿà¯à®•ினà¯à®± .htaccess கோபà¯à®ªà¯ வேலை செயà¯à®¯à®µà®¿à®²à¯à®²à¯ˆ. தரவ௠அடைவை நீணà¯à®Ÿ நேரதà¯à®¤à®¿à®±à¯à®•௠அணà¯à®•கà¯à®•ூடியதாக உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ வலைய சேவையகதà¯à®¤à¯ˆ தகவமைகà¯à®•à¯à®®à®¾à®±à¯ நாஙà¯à®•ள௠உறà¯à®¤à®¿à®¯à®¾à®• கூறà¯à®•ிறோம௠அலà¯à®²à®¤à¯ தரவ௠அடைவை வலைய சேவையக மூல ஆவணதà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வெளியே அகறà¯à®±à¯à®•. ",
"Create an <strong>admin account</strong>" => "<strong> நிரà¯à®µà®¾à®• கணகà¯à®•ொனà¯à®±à¯ˆ </strong> உரà¯à®µà®¾à®•à¯à®•à¯à®•",
"Advanced" => "மேமà¯à®ªà®Ÿà¯à®Ÿ",
"Data folder" => "தரவ௠கோபà¯à®ªà¯à®±à¯ˆ",
@@ -90,25 +108,6 @@
"Database tablespace" => "தரவà¯à®¤à¯à®¤à®³ அடà¯à®Ÿà®µà®£à¯ˆ",
"Database host" => "தரவà¯à®¤à¯à®¤à®³ ஓமà¯à®ªà¯à®©à®°à¯",
"Finish setup" => "அமைபà¯à®ªà¯ˆ à®®à¯à®Ÿà®¿à®•à¯à®•",
-"Sunday" => "ஞாயிறà¯à®±à¯à®•à¯à®•ிழமை",
-"Monday" => "திஙà¯à®•டà¯à®•ிழமை",
-"Tuesday" => "செவà¯à®µà®¾à®¯à¯à®•à¯à®•ிழமை",
-"Wednesday" => "பà¯à®¤à®©à¯à®•ிழமை",
-"Thursday" => "வியாழகà¯à®•ிழமை",
-"Friday" => "வெளà¯à®³à®¿à®•à¯à®•ிழமை",
-"Saturday" => "சனிகà¯à®•ிழமை",
-"January" => "தை",
-"February" => "மாசி",
-"March" => "பஙà¯à®•à¯à®©à®¿",
-"April" => "சிதà¯à®¤à®¿à®°à¯ˆ",
-"May" => "வைகாசி",
-"June" => "ஆனி",
-"July" => "ஆடி",
-"August" => "ஆவணி",
-"September" => "பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿",
-"October" => "à®à®ªà¯à®ªà®šà®¿",
-"November" => "காரà¯à®¤à¯à®¤à®¿à®•ை",
-"December" => "மாரà¯à®•ழி",
"web services under your control" => "உஙà¯à®•ள௠கடà¯à®Ÿà¯à®ªà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®©à¯ கீழ௠இணைய சேவைகளà¯",
"Log out" => "விடà¯à®ªà®¤à®¿à®•ை செயà¯à®•",
"Automatic logon rejected!" => "தனà¯à®©à®¿à®šà¯à®šà¯ˆà®¯à®¾à®© பà¯à®•à¯à®ªà®¤à®¿à®•ை நிராகரிபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯!",
@@ -117,10 +116,6 @@
"Lost your password?" => "உஙà¯à®•ள௠கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ தொலைதà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà¯€à®°à¯à®•ளா?",
"remember" => "ஞாபகபà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•",
"Log in" => "பà¯à®•à¯à®ªà®¤à®¿à®•ை",
-"You are logged out." => "நீஙà¯à®•ள௠விடà¯à®ªà®¤à®¿à®•ை செயà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà¯€à®°à¯à®•ளà¯.",
"prev" => "à®®à¯à®¨à¯à®¤à¯ˆà®¯",
-"next" => "அடà¯à®¤à¯à®¤à¯",
-"Security Warning!" => "பாதà¯à®•ாபà¯à®ªà¯ எசà¯à®šà®°à®¿à®•à¯à®•ை!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•. <br/> பாதà¯à®•ாபà¯à®ªà¯ காரணஙà¯à®•ளà¯à®•à¯à®•ாக நீஙà¯à®•ள௠எபà¯à®ªà¯‹à®¤à®¾à®µà®¤à¯ உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ மீணà¯à®Ÿà¯à®®à¯ நà¯à®´à¯ˆà®•à¯à®• கேடà¯à®•பà¯à®ªà®Ÿà¯à®µà¯€à®°à¯à®•ளà¯.",
-"Verify" => "உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯"
+"next" => "அடà¯à®¤à¯à®¤à¯"
);
diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php
index e254ccf259f..e5295cee103 100644
--- a/core/l10n/th_TH.php
+++ b/core/l10n/th_TH.php
@@ -1,12 +1,34 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "ผู้ใช้งาน %s ได้à¹à¸Šà¸£à¹Œà¹„ฟล์ให้à¸à¸±à¸šà¸„ุณ",
+"User %s shared a folder with you" => "ผู้ใช้งาน %s ได้à¹à¸Šà¸£à¹Œà¹‚ฟลเดอร์ให้à¸à¸±à¸šà¸„ุณ",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "ผู้ใช้งาน %s ได้à¹à¸Šà¸£à¹Œà¹„ฟล์ \"%s\" ให้à¸à¸±à¸šà¸„ุณ à¹à¸¥à¸°à¸„ุณสามารถสามารถดาวน์โหลดไฟล์ดังà¸à¸¥à¹ˆà¸²à¸§à¹„ด้จาà¸à¸—ี่นี่: %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "ผู้ใช้งาน %s ได้à¹à¸Šà¸£à¹Œà¹‚ฟลเดอร์ \"%s\" ให้à¸à¸±à¸šà¸„ุณ à¹à¸¥à¸°à¸„ุณสามารถดาวน์โหลดโฟลเดอร์ดังà¸à¸¥à¹ˆà¸²à¸§à¹„ด้จาà¸à¸—ี่นี่: %s",
"Category type not provided." => "ยังไม่ได้ระบุชนิดของหมวดหมู่",
"No category to add?" => "ไม่มีหมวดหมู่ที่ต้องà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡?",
-"This category already exists: " => "หมวดหมู่นี้มีอยู่à¹à¸¥à¹‰à¸§: ",
"Object type not provided." => "ชนิดของวัตถุยังไม่ได้ถูà¸à¸£à¸°à¸šà¸¸",
"%s ID not provided." => "ยังไม่ได้ระบุรหัส %s",
"Error adding %s to favorites." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡ %s เข้าไปยังรายà¸à¸²à¸£à¹‚ปรด",
"No categories selected for deletion." => "ยังไม่ได้เลือà¸à¸«à¸¡à¸§à¸”หมู่ที่ต้องà¸à¸²à¸£à¸¥à¸š",
"Error removing %s from favorites." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¥à¸š %s ออà¸à¸ˆà¸²à¸à¸£à¸²à¸¢à¸à¸²à¸£à¹‚ปรด",
+"Sunday" => "วันอาทิตย์",
+"Monday" => "วันจันทร์",
+"Tuesday" => "วันอังคาร",
+"Wednesday" => "วันพุธ",
+"Thursday" => "วันพฤหัสบดี",
+"Friday" => "วันศุà¸à¸£à¹Œ",
+"Saturday" => "วันเสาร์",
+"January" => "มà¸à¸£à¸²à¸„ม",
+"February" => "à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ",
+"March" => "มีนาคม",
+"April" => "เมษายน",
+"May" => "พฤษภาคม",
+"June" => "มิถุนายน",
+"July" => "à¸à¸£à¸à¸à¸²à¸„ม",
+"August" => "สิงหาคม",
+"September" => "à¸à¸±à¸™à¸¢à¸²à¸¢à¸™",
+"October" => "ตุลาคม",
+"November" => "พฤศจิà¸à¸²à¸¢à¸™",
+"December" => "ธันวาคม",
"Settings" => "ตั้งค่า",
"seconds ago" => "วินาที à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰",
"1 minute ago" => "1 นาทีà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰",
@@ -30,6 +52,8 @@
"Error" => "พบข้อผิดพลาด",
"The app name is not specified." => "ชื่อของà¹à¸­à¸›à¸¢à¸±à¸‡à¹„ม่ได้รับà¸à¸²à¸£à¸£à¸°à¸šà¸¸à¸Šà¸·à¹ˆà¸­",
"The required file {file} is not installed!" => "ไฟล์ {file} ซึ่งเป็นไฟล์ที่จำเป็นต้องได้รับà¸à¸²à¸£à¸•ิดตั้งไว้à¸à¹ˆà¸­à¸™ ยังไม่ได้ถูà¸à¸•ิดตั้ง",
+"Share" => "à¹à¸Šà¸£à¹Œ",
+"Shared" => "à¹à¸Šà¸£à¹Œà¹à¸¥à¹‰à¸§",
"Error while sharing" => "เà¸à¸´à¸”ข้อผิดพลาดในระหว่างà¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล",
"Error while unsharing" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล",
"Error while changing permissions" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน",
@@ -39,6 +63,8 @@
"Share with link" => "à¹à¸Šà¸£à¹Œà¸”้วยลิงà¸à¹Œ",
"Password protect" => "ใส่รหัสผ่านไว้",
"Password" => "รหัสผ่าน",
+"Email link to person" => "ส่งลิงà¸à¹Œà¹ƒà¸«à¹‰à¸—างอีเมล",
+"Send" => "ส่ง",
"Set expiration date" => "à¸à¸³à¸«à¸™à¸”วันที่หมดอายุ",
"Expiration date" => "วันที่หมดอายุ",
"Share via email:" => "à¹à¸Šà¸£à¹Œà¸œà¹ˆà¸²à¸™à¸—างอีเมล",
@@ -55,6 +81,10 @@
"Password protected" => "ใส่รหัสผ่านไว้",
"Error unsetting expiration date" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•ั้งค่าวันที่หมดอายุ",
"Error setting expiration date" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸•ั้งค่าวันที่หมดอายุ",
+"Sending ..." => "à¸à¸³à¸¥à¸±à¸‡à¸ªà¹ˆà¸‡...",
+"Email sent" => "ส่งอีเมล์à¹à¸¥à¹‰à¸§",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "à¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทไม่เป็นผลสำเร็จ à¸à¸£à¸¸à¸“าà¹à¸ˆà¹‰à¸‡à¸›à¸±à¸à¸«à¸²à¸—ี่เà¸à¸´à¸”ขึ้นไปยัง <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">คอมมูนิตี้ผู้ใช้งาน ownCloud</a>",
+"The update was successful. Redirecting you to ownCloud now." => "à¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทเสร็จเรียบร้อยà¹à¸¥à¹‰à¸§ à¸à¸³à¸¥à¸±à¸‡à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹€à¸ªà¹‰à¸™à¸—างไปที่ ownCloud อยู่ในขณะนี้",
"ownCloud password reset" => "รีเซ็ตรหัสผ่าน ownCloud",
"Use the following link to reset your password: {link}" => "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
"You will receive a link to reset your password via Email." => "คุณจะได้รับลิงค์เพื่อà¸à¸³à¸«à¸™à¸”รหัสผ่านใหม่ทางอีเมล์",
@@ -78,7 +108,6 @@
"Security Warning" => "คำเตือนเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸„วามปลอดภัย",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "ยังไม่มีตัวสร้างหมายเลขà¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™, à¸à¸£à¸¸à¸“าเปิดใช้งานส่วนเสริม PHP OpenSSL",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "หาà¸à¸›à¸£à¸²à¸¨à¸ˆà¸²à¸à¸•ัวสร้างหมายเลขà¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¸—ี่ช่วยป้องà¸à¸±à¸™à¸„วามปลอดภัย ผู้บุà¸à¸£à¸¸à¸à¸­à¸²à¸ˆà¸ªà¸²à¸¡à¸²à¸£à¸–ที่จะคาดคะเนรหัสยืนยันà¸à¸²à¸£à¹€à¸‚้าถึงเพื่อรีเซ็ตรหัสผ่าน à¹à¸¥à¸°à¹€à¸­à¸²à¸šà¸±à¸à¸Šà¸µà¸‚องคุณไปเป็นของตนเองได้",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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 มีให้ไม่สามารถทำงานได้อย่างเหมาะสม เราขอà¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¸„ุณà¸à¸³à¸«à¸™à¸”ค่าเว็บเซิร์ฟเวอร์ใหม่ในรูปà¹à¸šà¸šà¸—ี่ไดเร็à¸à¸—อรี่เà¸à¹‡à¸šà¸‚้อมูลไม่สามารถเข้าถึงได้อีà¸à¸•่อไป หรือคุณได้ย้ายไดเร็à¸à¸—อรี่ที่ใช้เà¸à¹‡à¸šà¸‚้อมูลไปอยู่ภายนอà¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡ root ของเว็บเซิร์ฟเวอร์à¹à¸¥à¹‰à¸§",
"Create an <strong>admin account</strong>" => "สร้าง <strong>บัà¸à¸Šà¸µà¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸š</strong>",
"Advanced" => "ขั้นสูง",
"Data folder" => "โฟลเดอร์เà¸à¹‡à¸šà¸‚้อมูล",
@@ -90,25 +119,6 @@
"Database tablespace" => "พื้นที่ตารางในà¸à¸²à¸™à¸‚้อมูล",
"Database host" => "Database host",
"Finish setup" => "ติดตั้งเรียบร้อยà¹à¸¥à¹‰à¸§",
-"Sunday" => "วันอาทิตย์",
-"Monday" => "วันจันทร์",
-"Tuesday" => "วันอังคาร",
-"Wednesday" => "วันพุธ",
-"Thursday" => "วันพฤหัสบดี",
-"Friday" => "วันศุà¸à¸£à¹Œ",
-"Saturday" => "วันเสาร์",
-"January" => "มà¸à¸£à¸²à¸„ม",
-"February" => "à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ",
-"March" => "มีนาคม",
-"April" => "เมษายน",
-"May" => "พฤษภาคม",
-"June" => "มิถุนายน",
-"July" => "à¸à¸£à¸à¸à¸²à¸„ม",
-"August" => "สิงหาคม",
-"September" => "à¸à¸±à¸™à¸¢à¸²à¸¢à¸™",
-"October" => "ตุลาคม",
-"November" => "พฤศจิà¸à¸²à¸¢à¸™",
-"December" => "ธันวาคม",
"web services under your control" => "web services under your control",
"Log out" => "ออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š",
"Automatic logon rejected!" => "à¸à¸²à¸£à¹€à¸‚้าสู่ระบบอัตโนมัติถูà¸à¸›à¸à¸´à¹€à¸ªà¸˜à¹à¸¥à¹‰à¸§",
@@ -117,10 +127,7 @@
"Lost your password?" => "ลืมรหัสผ่าน?",
"remember" => "จำรหัสผ่าน",
"Log in" => "เข้าสู่ระบบ",
-"You are logged out." => "คุณออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸šà¹€à¸£à¸µà¸¢à¸šà¸£à¹‰à¸­à¸¢à¹à¸¥à¹‰à¸§",
"prev" => "à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²",
"next" => "ถัดไป",
-"Security Warning!" => "คำเตือนเพื่อความปลอดภัย!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "à¸à¸£à¸¸à¸“ายืนยันรหัสผ่านของคุณ <br/> เพื่อความปลอดภัย คุณจะถูà¸à¸‚อให้à¸à¸£à¸­à¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸­à¸µà¸à¸„รั้ง",
-"Verify" => "ยืนยัน"
+"Updating ownCloud to version %s, this may take a while." => "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹€à¸”ท ownCloud ไปเป็นรุ่น %s, à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่"
);
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
index 86036e5ebd1..201b511647c 100644
--- a/core/l10n/tr.php
+++ b/core/l10n/tr.php
@@ -1,9 +1,34 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "%s kullanıcısı sizinle bir dosyayı paylaştı",
+"User %s shared a folder with you" => "%s kullanıcısı sizinle bir dizini paylaştı",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s kullanıcısı \"%s\" dosyasını sizinle paylaştı. %s adresinden indirilebilir",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s kullanıcısı \"%s\" dizinini sizinle paylaştı. %s adresinden indirilebilir",
"Category type not provided." => "Kategori türü desteklenmemektedir.",
"No category to add?" => "Eklenecek kategori yok?",
-"This category already exists: " => "Bu kategori zaten mevcut: ",
"Object type not provided." => "Nesne türü desteklenmemektedir.",
+"%s ID not provided." => "%s ID belirtilmedi.",
+"Error adding %s to favorites." => "%s favorilere eklenirken hata oluÅŸtu",
"No categories selected for deletion." => "Silmek için bir kategori seçilmedi",
+"Error removing %s from favorites." => "%s favorilere çıkarılırken hata oluştu",
+"Sunday" => "Pazar",
+"Monday" => "Pazartesi",
+"Tuesday" => "Salı",
+"Wednesday" => "Çarşamba",
+"Thursday" => "PerÅŸembe",
+"Friday" => "Cuma",
+"Saturday" => "Cumartesi",
+"January" => "Ocak",
+"February" => "Åžubat",
+"March" => "Mart",
+"April" => "Nisan",
+"May" => "Mayıs",
+"June" => "Haziran",
+"July" => "Temmuz",
+"August" => "AÄŸustos",
+"September" => "Eylül",
+"October" => "Ekim",
+"November" => "Kasım",
+"December" => "Aralık",
"Settings" => "Ayarlar",
"seconds ago" => "saniye önce",
"1 minute ago" => "1 dakika önce",
@@ -25,18 +50,26 @@
"Ok" => "Tamam",
"The object type is not specified." => "Nesne türü belirtilmemiş.",
"Error" => "Hata",
+"The app name is not specified." => "uygulama adı belirtilmedi.",
+"The required file {file} is not installed!" => "İhtiyaç duyulan {file} dosyası kurulu değil.",
+"Share" => "PaylaÅŸ",
"Error while sharing" => "Paylaşım sırasında hata ",
+"Error while unsharing" => "Paylaşım iptal ediliyorken hata",
"Error while changing permissions" => "İzinleri değiştirirken hata oluştu",
+"Shared with you and the group {group} by {owner}" => " {owner} tarafından sizinle ve {group} ile paylaştırılmış",
+"Shared with you by {owner}" => "{owner} trafından sizinle paylaştırıldı",
"Share with" => "ile PaylaÅŸ",
"Share with link" => "Bağlantı ile paylaş",
"Password protect" => "Şifre korunması",
"Password" => "Parola",
+"Email link to person" => "KiÅŸiye e-posta linki",
"Send" => "Gönder",
"Set expiration date" => "Son kullanma tarihini ayarla",
"Expiration date" => "Son kullanım tarihi",
"Share via email:" => "Eposta ile paylaÅŸ",
"No people found" => "Kişi bulunamadı",
"Resharing is not allowed" => "Tekrar paylaÅŸmaya izin verilmiyor",
+"Shared in {item} with {user}" => " {item} içinde {user} ile paylaşılanlarlar",
"Unshare" => "Paylaşılmayan",
"can edit" => "düzenleyebilir",
"access control" => "erişim kontrolü",
@@ -45,6 +78,8 @@
"delete" => "sil",
"share" => "paylaÅŸ",
"Password protected" => "Paralo korumalı",
+"Error unsetting expiration date" => "Geçerlilik tarihi tanımlama kaldırma hatası",
+"Error setting expiration date" => "Geçerlilik tarihi tanımlama hatası",
"Sending ..." => "Gönderiliyor...",
"Email sent" => "Eposta gönderildi",
"ownCloud password reset" => "ownCloud parola sıfırlama",
@@ -68,6 +103,8 @@
"Edit categories" => "Kategorileri düzenle",
"Add" => "Ekle",
"Security Warning" => "Güvenlik Uyarisi",
+"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Güvenli rasgele sayı üreticisi bulunamadı. Lütfen PHP OpenSSL eklentisini etkinleştirin.",
+"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Güvenli rasgele sayı üreticisi olmadan saldırganlar parola sıfırlama simgelerini tahmin edip hesabınızı ele geçirebilir.",
"Create an <strong>admin account</strong>" => "Bir <strong>yönetici hesabı</strong> oluşturun",
"Advanced" => "GeliÅŸmiÅŸ",
"Data folder" => "Veri klasörü",
@@ -79,34 +116,15 @@
"Database tablespace" => "Veritabanı tablo alanı",
"Database host" => "Veritabanı sunucusu",
"Finish setup" => "Kurulumu tamamla",
-"Sunday" => "Pazar",
-"Monday" => "Pazartesi",
-"Tuesday" => "Salı",
-"Wednesday" => "Çarşamba",
-"Thursday" => "PerÅŸembe",
-"Friday" => "Cuma",
-"Saturday" => "Cumartesi",
-"January" => "Ocak",
-"February" => "Åžubat",
-"March" => "Mart",
-"April" => "Nisan",
-"May" => "Mayıs",
-"June" => "Haziran",
-"July" => "Temmuz",
-"August" => "AÄŸustos",
-"September" => "Eylül",
-"October" => "Ekim",
-"November" => "Kasım",
-"December" => "Aralık",
"web services under your control" => "kontrolünüzdeki web servisleri",
"Log out" => "Çıkış yap",
"Automatic logon rejected!" => "Otomatik oturum açma reddedildi!",
+"If you did not change your password recently, your account may be compromised!" => "Yakın zamanda parolanızı değiştirmedi iseniz hesabınız riske girebilir.",
+"Please change your password to secure your account again." => "Hesabınızı korumak için lütfen parolanızı değiştirin.",
"Lost your password?" => "Parolanızı mı unuttunuz?",
"remember" => "hatırla",
"Log in" => "GiriÅŸ yap",
-"You are logged out." => "Çıkış yaptınız.",
"prev" => "önceki",
"next" => "sonraki",
-"Security Warning!" => "Güvenlik Uyarısı!",
-"Verify" => "DoÄŸrula"
+"Updating ownCloud to version %s, this may take a while." => "Owncloud %s versiyonuna güncelleniyor. Biraz zaman alabilir."
);
diff --git a/core/l10n/uk.php b/core/l10n/uk.php
index 180d2a5c6bd..7eab365a39d 100644
--- a/core/l10n/uk.php
+++ b/core/l10n/uk.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "КориÑтувач %s поділивÑÑ Ñ‚ÐµÐºÐ¾ÑŽ \"%s\" з вами. Він доÑтупний Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð²Ñ–Ð´Ñи: %s",
"Category type not provided." => "Ðе вказано тип категорії.",
"No category to add?" => "ВідÑутні категорії Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ?",
-"This category already exists: " => "Ð¦Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ñ–Ñ Ð²Ð¶Ðµ Ñ–Ñнує: ",
"Object type not provided." => "Ðе вказано тип об'єкту.",
"%s ID not provided." => "%s ID не вказано.",
"Error adding %s to favorites." => "Помилка при додаванні %s до обраного.",
"No categories selected for deletion." => "Жодної категорії не обрано Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ.",
"Error removing %s from favorites." => "Помилка при видалені %s із обраного.",
+"Sunday" => "ÐеділÑ",
+"Monday" => "Понеділок",
+"Tuesday" => "Вівторок",
+"Wednesday" => "Середа",
+"Thursday" => "Четвер",
+"Friday" => "П'ÑтницÑ",
+"Saturday" => "Субота",
+"January" => "Січень",
+"February" => "Лютий",
+"March" => "Березень",
+"April" => "Квітень",
+"May" => "Травень",
+"June" => "Червень",
+"July" => "Липень",
+"August" => "Серпень",
+"September" => "ВереÑень",
+"October" => "Жовтень",
+"November" => "ЛиÑтопад",
+"December" => "Грудень",
"Settings" => "ÐалаштуваннÑ",
"seconds ago" => "Ñекунди тому",
"1 minute ago" => "1 хвилину тому",
@@ -34,6 +52,8 @@
"Error" => "Помилка",
"The app name is not specified." => "Ðе визначено ім'Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸.",
"The required file {file} is not installed!" => "Ðеобхідний файл {file} не вÑтановлено!",
+"Share" => "ПоділитиÑÑ",
+"Shared" => "Опубліковано",
"Error while sharing" => "Помилка під Ñ‡Ð°Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ—",
"Error while unsharing" => "Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ð¼Ñ–Ð½Ð¸ публікації",
"Error while changing permissions" => "Помилка при зміні повноважень",
@@ -63,6 +83,8 @@
"Error setting expiration date" => "Помилка при вÑтановленні терміна дії",
"Sending ..." => "ÐадÑиланнÑ...",
"Email sent" => "Ел. пошта надіÑлана",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð»Ð¾ÑÑŒ неуÑпішно. Будь лаÑка, повідомте про цю проблему в <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">Ñпільноті ownCloud</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð»Ð¾ÑÑŒ уÑпішно. ПеренаправлÑємо Ð²Ð°Ñ Ð½Ð° ownCloud.",
"ownCloud password reset" => "ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ ownCloud",
"Use the following link to reset your password: {link}" => "ВикориÑтовуйте наÑтупне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ: {link}",
"You will receive a link to reset your password via Email." => "Ви отримаєте поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ паролю на Ел. пошту.",
@@ -86,7 +108,6 @@
"Security Warning" => "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ небезпеку",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Ðе доÑтупний безпечний генератор випадкових чиÑел, будь лаÑка, активуйте PHP OpenSSL додаток.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без безпечного генератора випадкових чиÑел зловмиÑник може визначити токени ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñ– заволодіти Вашим обліковим запиÑом.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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 за межі кореневого каталогу документів веб-Ñервера.",
"Create an <strong>admin account</strong>" => "Створити <strong>обліковий Ð·Ð°Ð¿Ð¸Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтратора</strong>",
"Advanced" => "Додатково",
"Data folder" => "Каталог даних",
@@ -98,25 +119,6 @@
"Database tablespace" => "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð±Ð°Ð·Ð¸ даних",
"Database host" => "ХоÑÑ‚ бази даних",
"Finish setup" => "Завершити налаштуваннÑ",
-"Sunday" => "ÐеділÑ",
-"Monday" => "Понеділок",
-"Tuesday" => "Вівторок",
-"Wednesday" => "Середа",
-"Thursday" => "Четвер",
-"Friday" => "П'ÑтницÑ",
-"Saturday" => "Субота",
-"January" => "Січень",
-"February" => "Лютий",
-"March" => "Березень",
-"April" => "Квітень",
-"May" => "Травень",
-"June" => "Червень",
-"July" => "Липень",
-"August" => "Серпень",
-"September" => "ВереÑень",
-"October" => "Жовтень",
-"November" => "ЛиÑтопад",
-"December" => "Грудень",
"web services under your control" => "веб-ÑÐµÑ€Ð²Ñ–Ñ Ð¿Ñ–Ð´ вашим контролем",
"Log out" => "Вихід",
"Automatic logon rejected!" => "Ðвтоматичний вхід в ÑиÑтему відхилений!",
@@ -125,10 +127,8 @@
"Lost your password?" => "Забули пароль?",
"remember" => "запам'Ñтати",
"Log in" => "Вхід",
-"You are logged out." => "Ви вийшли з ÑиÑтеми.",
+"Alternative Logins" => "Ðльтернативні Логіни",
"prev" => "попередній",
"next" => "наÑтупний",
-"Security Warning!" => "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ небезпеку!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Будь лаÑка, повторно введіть Ñвій пароль. <br/>З питань безпеки, Вам інколи доведетьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ вводити Ñвій пароль.",
-"Verify" => "Підтвердити"
+"Updating ownCloud to version %s, this may take a while." => "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ownCloud до верÑÑ–Ñ— %s, це може зайнÑти деÑкий чаÑ."
);
diff --git a/core/l10n/vi.php b/core/l10n/vi.php
index 38e909d3f4e..0c4b197322e 100644
--- a/core/l10n/vi.php
+++ b/core/l10n/vi.php
@@ -1,12 +1,35 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "%s chia sẻ tập tin này cho bạn",
+"User %s shared a folder with you" => "%s chia sẻ thư mục này cho bạn",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "Ngưá»i dùng %s chia sẻ tập tin \"%s\" cho bạn .Bạn có thể tải tại đây : %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Ngưá»i dùng %s chia sẻ thư mục \"%s\" cho bạn .Bạn có thể tải tại đây : %s",
"Category type not provided." => "Kiểu hạng mục không được cung cấp.",
"No category to add?" => "Không có danh mục được thêm?",
-"This category already exists: " => "Danh mục này đã được tạo :",
+"This category already exists: %s" => "Danh mục này đã tồn tại: %s",
"Object type not provided." => "Loại đối tượng không được cung cấp.",
"%s ID not provided." => "%s ID không được cung cấp.",
"Error adding %s to favorites." => "Lỗi thêm %s vào mục yêu thích.",
"No categories selected for deletion." => "Không có thể loại nào được chá»n để xóa.",
"Error removing %s from favorites." => "Lỗi xóa %s từ mục yêu thích.",
+"Sunday" => "Chủ nhật",
+"Monday" => "Thứ 2",
+"Tuesday" => "Thứ 3",
+"Wednesday" => "Thứ 4",
+"Thursday" => "Thứ 5",
+"Friday" => "Thứ ",
+"Saturday" => "Thứ 7",
+"January" => "Tháng 1",
+"February" => "Tháng 2",
+"March" => "Tháng 3",
+"April" => "Tháng 4",
+"May" => "Tháng 5",
+"June" => "Tháng 6",
+"July" => "Tháng 7",
+"August" => "Tháng 8",
+"September" => "Tháng 9",
+"October" => "Tháng 10",
+"November" => "Tháng 11",
+"December" => "Tháng 12",
"Settings" => "Cài đặt",
"seconds ago" => "vài giây trước",
"1 minute ago" => "1 phút trước",
@@ -30,6 +53,8 @@
"Error" => "Lá»—i",
"The app name is not specified." => "Tên ứng dụng không được chỉ định.",
"The required file {file} is not installed!" => "Tập tin cần thiết {file} không được cài đặt!",
+"Share" => "Chia sẻ",
+"Shared" => "ÄÆ°á»£c chia sẻ",
"Error while sharing" => "Lỗi trong quá trình chia sẻ",
"Error while unsharing" => "Lỗi trong quá trình gỡ chia sẻ",
"Error while changing permissions" => "Lá»—i trong quá trình phân quyá»n",
@@ -39,6 +64,8 @@
"Share with link" => "Chia sẻ với liên kết",
"Password protect" => "Mật khẩu bảo vệ",
"Password" => "Mật khẩu",
+"Email link to person" => "Liên kết email tới cá nhân",
+"Send" => "Gởi",
"Set expiration date" => "Äặt ngày kết thúc",
"Expiration date" => "Ngày kết thúc",
"Share via email:" => "Chia sẻ thông qua email",
@@ -55,6 +82,10 @@
"Password protected" => "Mật khẩu bảo vệ",
"Error unsetting expiration date" => "Lỗi không thiết lập ngày kết thúc",
"Error setting expiration date" => "Lỗi cấu hình ngày kết thúc",
+"Sending ..." => "Äang gởi ...",
+"Email sent" => "Email đã được gửi",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Cập nhật không thành công . Vui lòng thông báo đến <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\"> Cộng đồng ownCloud </a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.",
"ownCloud password reset" => "Khôi phục mật khẩu Owncloud ",
"Use the following link to reset your password: {link}" => "Dùng đưá»ng dẫn sau để khôi phục lại mật khẩu : {link}",
"You will receive a link to reset your password via Email." => "Vui lòng kiểm tra Email để khôi phục lại mật khẩu.",
@@ -78,7 +109,8 @@
"Security Warning" => "Cảnh bảo bảo mật",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Không an toàn ! chức năng random number generator đã có sẵn ,vui lòng bật PHP OpenSSL extension.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Nếu không có random number generator , Hacker có thể thiết lập lại mật khẩu và chiếm tài khoản của bạn.",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "Thư mục dữ liệu và những tập tin của bạn có thể dễ dàng bị truy cập từ mạng. Tập tin .htaccess do ownCloud cung cấp không hoạt động. Chúng tôi đỠnghị bạn nên cấu hình lại máy chủ web để thư mục dữ liệu không còn bị truy cập hoặc bạn nên di chuyển thư mục dữ liệu ra bên ngoài thư mục gốc của máy chủ.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Äể biết thêm cách cấu hình máy chá»§ cá»§a bạn, xin xem <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">tài liệu</a>.",
"Create an <strong>admin account</strong>" => "Tạo một <strong>tài khoản quản trị</strong>",
"Advanced" => "Nâng cao",
"Data folder" => "Thư mục dữ liệu",
@@ -90,25 +122,6 @@
"Database tablespace" => "Cơ sở dữ liệu tablespace",
"Database host" => "Database host",
"Finish setup" => "Cài đặt hoàn tất",
-"Sunday" => "Chủ nhật",
-"Monday" => "Thứ 2",
-"Tuesday" => "Thứ 3",
-"Wednesday" => "Thứ 4",
-"Thursday" => "Thứ 5",
-"Friday" => "Thứ ",
-"Saturday" => "Thứ 7",
-"January" => "Tháng 1",
-"February" => "Tháng 2",
-"March" => "Tháng 3",
-"April" => "Tháng 4",
-"May" => "Tháng 5",
-"June" => "Tháng 6",
-"July" => "Tháng 7",
-"August" => "Tháng 8",
-"September" => "Tháng 9",
-"October" => "Tháng 10",
-"November" => "Tháng 11",
-"December" => "Tháng 12",
"web services under your control" => "các dịch vụ web dưới sự kiểm soát của bạn",
"Log out" => "Äăng xuất",
"Automatic logon rejected!" => "Tự động đăng nhập đã bị từ chối !",
@@ -117,10 +130,8 @@
"Lost your password?" => "Bạn quên mật khẩu ?",
"remember" => "ghi nhá»›",
"Log in" => "Äăng nhập",
-"You are logged out." => "Bạn đã đăng xuất.",
+"Alternative Logins" => "Äăng nhập khác",
"prev" => "Lùi lại",
"next" => "Kế tiếp",
-"Security Warning!" => "Cảnh báo bảo mật !",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "Vui lòng xác nhận mật khẩu của bạn. <br/> Vì lý do bảo mật thỉnh thoảng bạn có thể được yêu cầu nhập lại mật khẩu.",
-"Verify" => "Kiểm tra"
+"Updating ownCloud to version %s, this may take a while." => "Cập nhật ownCloud lên phiên bản %s, có thể sẽ mất thá»i gian"
);
diff --git a/core/l10n/zh_CN.GB2312.php b/core/l10n/zh_CN.GB2312.php
index a785a36afcc..57f0e96378c 100644
--- a/core/l10n/zh_CN.GB2312.php
+++ b/core/l10n/zh_CN.GB2312.php
@@ -1,7 +1,25 @@
<?php $TRANSLATIONS = array(
"No category to add?" => "没有分类添加了?",
-"This category already exists: " => "这个分类已ç»å­˜åœ¨äº†:",
"No categories selected for deletion." => "没有选者è¦åˆ é™¤çš„分类.",
+"Sunday" => "星期天",
+"Monday" => "星期一",
+"Tuesday" => "星期二",
+"Wednesday" => "星期三",
+"Thursday" => "星期四",
+"Friday" => "星期五",
+"Saturday" => "星期六",
+"January" => "一月",
+"February" => "二月",
+"March" => "三月",
+"April" => "四月",
+"May" => "五月",
+"June" => "六月",
+"July" => "七月",
+"August" => "八月",
+"September" => "乿œˆ",
+"October" => "åæœˆ",
+"November" => "å一月",
+"December" => "å二月",
"Settings" => "设置",
"seconds ago" => "ç§’å‰",
"1 minute ago" => "1 分钟å‰",
@@ -19,6 +37,7 @@
"Yes" => "是",
"Ok" => "好的",
"Error" => "错误",
+"Share" => "分享",
"Error while sharing" => "分享出错",
"Error while unsharing" => "å–æ¶ˆåˆ†äº«å‡ºé”™",
"Error while changing permissions" => "å˜æ›´æƒé™å‡ºé”™",
@@ -67,7 +86,6 @@
"Security Warning" => "安全警告",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "æ²¡æœ‰å®‰å…¨éšæœºç ç”Ÿæˆå™¨ï¼Œè¯·å¯ç”¨ PHP OpenSSL 扩展。",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "æ²¡æœ‰å®‰å…¨éšæœºç ç”Ÿæˆå™¨ï¼Œé»‘客å¯ä»¥é¢„测密ç é‡ç½®ä»¤ç‰Œå¹¶æŽ¥ç®¡ä½ çš„账户。",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "æ‚¨çš„æ•°æ®æ–‡ä»¶å¤¹å’Œæ‚¨çš„æ–‡ä»¶æˆ–许能够从互è”网访问。ownCloud æä¾›çš„ .htaccesss 文件未其作用。我们强烈建议您é…置网络æœåŠ¡å™¨ä»¥ä½¿æ•°æ®æ–‡ä»¶å¤¹ä¸èƒ½ä»Žäº’è”ç½‘è®¿é—®ï¼Œæˆ–å°†ç§»åŠ¨æ•°æ®æ–‡ä»¶å¤¹ç§»å‡ºç½‘络æœåŠ¡å™¨æ–‡æ¡£æ ¹ç›®å½•ã€‚",
"Create an <strong>admin account</strong>" => "建立一个 <strong>管ç†å¸æˆ·</strong>",
"Advanced" => "进阶",
"Data folder" => "æ•°æ®å­˜æ”¾æ–‡ä»¶å¤¹",
@@ -79,25 +97,6 @@
"Database tablespace" => "æ•°æ®åº“表格空间",
"Database host" => "æ•°æ®åº“主机",
"Finish setup" => "完æˆå®‰è£…",
-"Sunday" => "星期天",
-"Monday" => "星期一",
-"Tuesday" => "星期二",
-"Wednesday" => "星期三",
-"Thursday" => "星期四",
-"Friday" => "星期五",
-"Saturday" => "星期六",
-"January" => "一月",
-"February" => "二月",
-"March" => "三月",
-"April" => "四月",
-"May" => "五月",
-"June" => "六月",
-"July" => "七月",
-"August" => "八月",
-"September" => "乿œˆ",
-"October" => "åæœˆ",
-"November" => "å一月",
-"December" => "å二月",
"web services under your control" => "你控制下的网络æœåŠ¡",
"Log out" => "注销",
"Automatic logon rejected!" => "自动登录被拒ç»ï¼",
@@ -106,10 +105,6 @@
"Lost your password?" => "忘记密�",
"remember" => "备忘",
"Log in" => "登陆",
-"You are logged out." => "ä½ å·²ç»æ³¨é”€äº†",
"prev" => "åŽé€€",
-"next" => "å‰è¿›",
-"Security Warning!" => "安全警告ï¼",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "请确认您的密ç ã€‚<br/>处于安全原因你å¶å°”ä¹Ÿä¼šè¢«è¦æ±‚冿¬¡è¾“入您的密ç ã€‚",
-"Verify" => "确认"
+"next" => "å‰è¿›"
);
diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php
index 64b108ca1dd..086687c08c3 100644
--- a/core/l10n/zh_CN.php
+++ b/core/l10n/zh_CN.php
@@ -5,12 +5,30 @@
"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "用户 %s 与您共享了文件夹\"%s\"。文件夹下载地å€ï¼š%s",
"Category type not provided." => "未æä¾›åˆ†ç±»ç±»åž‹ã€‚",
"No category to add?" => "æ²¡æœ‰å¯æ·»åŠ åˆ†ç±»ï¼Ÿ",
-"This category already exists: " => "此分类已存在: ",
"Object type not provided." => "未æä¾›å¯¹è±¡ç±»åž‹ã€‚",
"%s ID not provided." => "%s ID未æä¾›ã€‚",
"Error adding %s to favorites." => "呿”¶è—夹中新增%s时出错。",
"No categories selected for deletion." => "没有选择è¦åˆ é™¤çš„类别",
"Error removing %s from favorites." => "从收è—夹中移除%s时出错。",
+"Sunday" => "星期日",
+"Monday" => "星期一",
+"Tuesday" => "星期二",
+"Wednesday" => "星期三",
+"Thursday" => "星期四",
+"Friday" => "星期五",
+"Saturday" => "星期六",
+"January" => "一月",
+"February" => "二月",
+"March" => "三月",
+"April" => "四月",
+"May" => "五月",
+"June" => "六月",
+"July" => "七月",
+"August" => "八月",
+"September" => "乿œˆ",
+"October" => "åæœˆ",
+"November" => "å一月",
+"December" => "å二月",
"Settings" => "设置",
"seconds ago" => "ç§’å‰",
"1 minute ago" => "一分钟å‰",
@@ -34,6 +52,8 @@
"Error" => "错误",
"The app name is not specified." => "未指定Appå称。",
"The required file {file} is not installed!" => "所需文件{file}未安装ï¼",
+"Share" => "共享",
+"Shared" => "已共享",
"Error while sharing" => "共享时出错",
"Error while unsharing" => "å–æ¶ˆå…±äº«æ—¶å‡ºé”™",
"Error while changing permissions" => "修改æƒé™æ—¶å‡ºé”™",
@@ -43,6 +63,7 @@
"Share with link" => "共享链接",
"Password protect" => "密ç ä¿æŠ¤",
"Password" => "密ç ",
+"Email link to person" => "å‘é€é“¾æŽ¥åˆ°ä¸ªäºº",
"Send" => "å‘é€",
"Set expiration date" => "设置过期日期",
"Expiration date" => "过期日期",
@@ -85,7 +106,6 @@
"Security Warning" => "安全警告",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "éšæœºæ•°ç”Ÿæˆå™¨æ— æ•ˆï¼Œè¯·å¯ç”¨PHPçš„OpenSSL扩展",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "æ²¡æœ‰å®‰å…¨éšæœºç ç”Ÿæˆå™¨ï¼Œæ”»å‡»è€…å¯èƒ½ä¼šçŒœæµ‹å¯†ç é‡ç½®ä¿¡æ¯ä»Žè€Œçªƒå–您的账户",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "æ‚¨çš„æ•°æ®æ–‡ä»¶å¤¹å’Œæ–‡ä»¶å¯ç”±äº’è”网访问。OwnCloudæä¾›çš„.htaccess文件未生效。我们强烈建议您é…ç½®æœåŠ¡å™¨ï¼Œä»¥ä½¿æ•°æ®æ–‡ä»¶å¤¹ä¸å¯è¢«è®¿é—®ï¼Œæˆ–è€…å°†æ•°æ®æ–‡ä»¶å¤¹ç§»åˆ°webæœåŠ¡å™¨æ ¹ç›®å½•ä»¥å¤–ã€‚",
"Create an <strong>admin account</strong>" => "创建<strong>管ç†å‘˜è´¦å·</strong>",
"Advanced" => "高级",
"Data folder" => "æ•°æ®ç›®å½•",
@@ -97,25 +117,6 @@
"Database tablespace" => "æ•°æ®åº“表空间",
"Database host" => "æ•°æ®åº“主机",
"Finish setup" => "安装完æˆ",
-"Sunday" => "星期日",
-"Monday" => "星期一",
-"Tuesday" => "星期二",
-"Wednesday" => "星期三",
-"Thursday" => "星期四",
-"Friday" => "星期五",
-"Saturday" => "星期六",
-"January" => "一月",
-"February" => "二月",
-"March" => "三月",
-"April" => "四月",
-"May" => "五月",
-"June" => "六月",
-"July" => "七月",
-"August" => "八月",
-"September" => "乿œˆ",
-"October" => "åæœˆ",
-"November" => "å一月",
-"December" => "å二月",
"web services under your control" => "由您掌控的网络æœåŠ¡",
"Log out" => "注销",
"Automatic logon rejected!" => "自动登录被拒ç»ï¼",
@@ -124,10 +125,7 @@
"Lost your password?" => "忘记密ç ï¼Ÿ",
"remember" => "è®°ä½",
"Log in" => "登录",
-"You are logged out." => "您已注销。",
"prev" => "上一页",
"next" => "下一页",
-"Security Warning!" => "安全警告ï¼",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "è¯·éªŒè¯æ‚¨çš„密ç ã€‚ <br/>出于安全考虑,你å¯èƒ½å¶å°”ä¼šè¢«è¦æ±‚冿¬¡è¾“入密ç ã€‚",
-"Verify" => "验è¯"
+"Updating ownCloud to version %s, this may take a while." => "æ›´æ–° ownCloud 到版本 %s,这å¯èƒ½éœ€è¦ä¸€äº›æ—¶é—´ã€‚"
);
diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php
index def8c31a21a..96142d20689 100644
--- a/core/l10n/zh_TW.php
+++ b/core/l10n/zh_TW.php
@@ -1,14 +1,41 @@
<?php $TRANSLATIONS = array(
-"No category to add?" => "無分類添加?",
-"This category already exists: " => "此分類已經存在:",
+"User %s shared a file with you" => "用戶 %s 與您分享了一個檔案",
+"User %s shared a folder with you" => "用戶 %s 與您分享了一個資料夾",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "用戶 %s 與您分享了檔案 \"%s\" ,您å¯ä»¥å¾žé€™è£¡ä¸‹è¼‰å®ƒï¼š %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "用戶 %s 與您分享了資料夾 \"%s\" ,您å¯ä»¥å¾žé€™è£¡ä¸‹è¼‰å®ƒï¼š %s",
+"Category type not provided." => "未æä¾›åˆ†é¡žé¡žåž‹ã€‚",
+"No category to add?" => "沒有å¯å¢žåŠ çš„åˆ†é¡žï¼Ÿ",
+"This category already exists: %s" => "分類已經存在: %s",
"Object type not provided." => "䏿”¯æ´çš„物件類型",
-"No categories selected for deletion." => "æ²’é¸æ“‡è¦åˆªé™¤çš„分類",
+"%s ID not provided." => "未æä¾› %s ID 。",
+"Error adding %s to favorites." => "加入 %s 到最愛時發生錯誤。",
+"No categories selected for deletion." => "æ²’æœ‰é¸æ“‡è¦åˆªé™¤çš„分類。",
+"Error removing %s from favorites." => "從最愛移除 %s 時發生錯誤。",
+"Sunday" => "週日",
+"Monday" => "週一",
+"Tuesday" => "週二",
+"Wednesday" => "週三",
+"Thursday" => "週四",
+"Friday" => "週五",
+"Saturday" => "週六",
+"January" => "一月",
+"February" => "二月",
+"March" => "三月",
+"April" => "四月",
+"May" => "五月",
+"June" => "六月",
+"July" => "七月",
+"August" => "八月",
+"September" => "乿œˆ",
+"October" => "åæœˆ",
+"November" => "å一月",
+"December" => "å二月",
"Settings" => "設定",
"seconds ago" => "幾秒å‰",
"1 minute ago" => "1 分é˜å‰",
"{minutes} minutes ago" => "{minutes} 分é˜å‰",
"1 hour ago" => "1 個尿™‚å‰",
-"{hours} hours ago" => "{hours} 個尿™‚å‰",
+"{hours} hours ago" => "{hours} å°æ™‚å‰",
"today" => "今天",
"yesterday" => "昨天",
"{days} days ago" => "{days} 天å‰",
@@ -22,20 +49,26 @@
"No" => "No",
"Yes" => "Yes",
"Ok" => "Ok",
+"The object type is not specified." => "未指定物件類型。",
"Error" => "錯誤",
-"The app name is not specified." => "沒有詳述APPå稱.",
+"The app name is not specified." => "沒有指定 app å稱。",
+"The required file {file} is not installed!" => "æ²’æœ‰å®‰è£æ‰€éœ€çš„æª”案 {file} ï¼",
+"Share" => "分享",
+"Shared" => "已分享",
"Error while sharing" => "分享時發生錯誤",
"Error while unsharing" => "å–æ¶ˆåˆ†äº«æ™‚發生錯誤",
"Error while changing permissions" => "ä¿®æ”¹æ¬Šé™æ™‚發生錯誤",
"Shared with you and the group {group} by {owner}" => "由 {owner} 分享給您和 {group}",
"Shared with you by {owner}" => "{owner} 已經和您分享",
-"Share with" => "與分享",
+"Share with" => "與...分享",
"Share with link" => "使用連çµåˆ†äº«",
"Password protect" => "密碼ä¿è­·",
"Password" => "密碼",
+"Email link to person" => "å°‡é€£çµ email 給別人",
+"Send" => "寄出",
"Set expiration date" => "設置到期日",
"Expiration date" => "到期日",
-"Share via email:" => "é€éŽemail分享:",
+"Share via email:" => "é€éŽ email 分享:",
"No people found" => "沒有找到任何人",
"Resharing is not allowed" => "ä¸å…è¨±é‡æ–°åˆ†äº«",
"Shared in {item} with {user}" => "已和 {user} 分享 {item}",
@@ -46,16 +79,20 @@
"update" => "æ›´æ–°",
"delete" => "刪除",
"share" => "分享",
-"Password protected" => "密碼ä¿è­·",
+"Password protected" => "å—密碼ä¿è­·",
"Error unsetting expiration date" => "è§£é™¤éŽæœŸæ—¥è¨­å®šå¤±æ•—",
"Error setting expiration date" => "錯誤的到期日設定",
+"Sending ..." => "正在寄出...",
+"Email sent" => "Email 已寄出",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "å‡ç´šå¤±æ•—,請將此å•題回報 <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud 社群</a>。",
+"The update was successful. Redirecting you to ownCloud now." => "å‡ç´šæˆåŠŸï¼Œæ­£å°‡æ‚¨é‡æ–°å°Žå‘至 ownCloud 。",
"ownCloud password reset" => "ownCloud 密碼é‡è¨­",
-"Use the following link to reset your password: {link}" => "請循以下è¯çµé‡è¨­ä½ çš„密碼: (è¯çµï¼‰ ",
-"You will receive a link to reset your password via Email." => "é‡è¨­å¯†ç¢¼çš„連çµå°‡æœƒå¯„到你的電å­éƒµä»¶ä¿¡ç®±",
-"Reset email send." => "é‡è¨­éƒµä»¶å·²é€å‡º.",
-"Request failed!" => "請求失敗!",
+"Use the following link to reset your password: {link}" => "請循以下è¯çµé‡è¨­ä½ çš„密碼: {link}",
+"You will receive a link to reset your password via Email." => "é‡è¨­å¯†ç¢¼çš„連çµå°‡æœƒå¯„到你的電å­éƒµä»¶ä¿¡ç®±ã€‚",
+"Reset email send." => "é‡è¨­éƒµä»¶å·²é€å‡ºã€‚",
+"Request failed!" => "請求失敗ï¼",
"Username" => "使用者å稱",
-"Request reset" => "è¦æ±‚é‡è¨­",
+"Request reset" => "請求é‡è¨­",
"Your password was reset" => "你的密碼已é‡è¨­",
"To login page" => "至登入é é¢",
"New password" => "新密碼",
@@ -65,14 +102,15 @@
"Apps" => "應用程å¼",
"Admin" => "管ç†è€…",
"Help" => "幫助",
-"Access forbidden" => "ç¦æ­¢å­˜å–",
+"Access forbidden" => "å­˜å–被拒",
"Cloud not found" => "未發ç¾é›²",
"Edit categories" => "編輯分類",
-"Add" => "添加",
+"Add" => "增加",
"Security Warning" => "安全性警告",
-"No secure random number generator is available, please enable the PHP OpenSSL extension." => "沒有å¯ç”¨çš„隨機數字產生器, 請啟用 PHP 中 OpenSSL 擴充功能.",
+"No secure random number generator is available, please enable the PHP OpenSSL extension." => "沒有å¯ç”¨çš„亂數產生器,請啟用 PHP 中的 OpenSSL 擴充功能。",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "若沒有安全的亂數產生器,攻擊者å¯èƒ½å¯ä»¥é æ¸¬å¯†ç¢¼é‡è¨­ä¿¡ç‰©ï¼Œç„¶å¾ŒæŽ§åˆ¶æ‚¨çš„帳戶。",
-"Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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." => "您的資料目錄 (Data Directory) 和檔案å¯èƒ½å¯ä»¥ç”±ç¶²éš›ç¶²è·¯ä¸Šé¢å…¬é–‹å­˜å–。Owncloud 所æä¾›çš„ .htaccess 設定檔並未生效,我們強烈建議您設定您的網é ä¼ºæœå™¨ä»¥é˜²æ­¢è³‡æ–™ç›®éŒ„被公開存å–,或將您的資料目錄移出網é ä¼ºæœå™¨çš„ document root 。",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "您的資料目錄看起來å¯ä»¥è¢« Internet 公開存å–,因為 .htaccess 設定並未生效。",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "è«‹åƒè€ƒ<a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺æœå™¨ã€‚",
"Create an <strong>admin account</strong>" => "建立一個<strong>管ç†è€…帳號</strong>",
"Advanced" => "進階",
"Data folder" => "資料夾",
@@ -84,37 +122,16 @@
"Database tablespace" => "資料庫 tablespace",
"Database host" => "資料庫主機",
"Finish setup" => "完æˆè¨­å®š",
-"Sunday" => "週日",
-"Monday" => "週一",
-"Tuesday" => "週二",
-"Wednesday" => "週三",
-"Thursday" => "週四",
-"Friday" => "週五",
-"Saturday" => "週六",
-"January" => "一月",
-"February" => "二月",
-"March" => "三月",
-"April" => "四月",
-"May" => "五月",
-"June" => "六月",
-"July" => "七月",
-"August" => "八月",
-"September" => "乿œˆ",
-"October" => "åæœˆ",
-"November" => "å一月",
-"December" => "å二月",
-"web services under your control" => "網路æœå‹™å·²åœ¨ä½ æŽ§åˆ¶",
+"web services under your control" => "網路æœå‹™åœ¨æ‚¨æŽ§åˆ¶ä¹‹ä¸‹",
"Log out" => "登出",
"Automatic logon rejected!" => "自動登入被拒ï¼",
"If you did not change your password recently, your account may be compromised!" => "如果您最近並未更改密碼,您的帳號å¯èƒ½å·²ç¶“é­åˆ°å…¥ä¾µï¼",
"Please change your password to secure your account again." => "è«‹æ›´æ”¹æ‚¨çš„å¯†ç¢¼ä»¥å†æ¬¡å–得您的帳戶的控制權。",
-"Lost your password?" => "忘記密碼?",
+"Lost your password?" => "忘記密碼?",
"remember" => "記ä½",
"Log in" => "登入",
-"You are logged out." => "你已登出",
+"Alternative Logins" => "替代登入方法",
"prev" => "上一é ",
"next" => "下一é ",
-"Security Warning!" => "安全性警告!",
-"Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again." => "請輸入您的密碼。<br/>基於安全性的ç†ç”±ï¼Œæ‚¨æœ‰æ™‚候å¯èƒ½æœƒè¢«è¦æ±‚冿¬¡è¼¸å…¥å¯†ç¢¼ã€‚",
-"Verify" => "é©—è­‰"
+"Updating ownCloud to version %s, this may take a while." => "正在將 Owncloud å‡ç´šè‡³ç‰ˆæœ¬ %s ,這å¯èƒ½éœ€è¦ä¸€é»žæ™‚間。"
);
diff --git a/core/routes.php b/core/routes.php
index fc511d403d8..2527816b662 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -6,6 +6,10 @@
* See the COPYING-README file.
*/
+// Post installation check
+$this->create('post_setup_check', '/post-setup-check')
+ ->action('OC_Setup', 'postSetupCheck');
+
// Core ajax actions
// Search
$this->create('search_ajax_search', '/search/ajax/search.php')
@@ -32,6 +36,9 @@ $this->create('core_ajax_vcategories_favorites', '/core/ajax/vcategories/favorit
->actionInclude('core/ajax/vcategories/favorites.php');
$this->create('core_ajax_vcategories_edit', '/core/ajax/vcategories/edit.php')
->actionInclude('core/ajax/vcategories/edit.php');
+// oC JS config
+$this->create('js_config', '/core/js/config.js')
+ ->actionInclude('core/js/config.php');
// Routing
$this->create('core_ajax_routes', '/core/routes.json')
->action('OC_Router', 'JSRoutes');
diff --git a/core/setup.php b/core/setup.php
index 66b8cf378bd..f16385466cb 100644
--- a/core/setup.php
+++ b/core/setup.php
@@ -43,7 +43,7 @@ if(isset($_POST['install']) AND $_POST['install']=='true') {
OC_Template::printGuestPage("", "installation", $options);
}
else {
- header("Location: ".OC::$WEBROOT.'/');
+ header( 'Location: '.OC_Helper::linkToRoute( 'post_setup_check' ));
exit();
}
}
diff --git a/core/templates/exception.php b/core/templates/exception.php
index 4b951fca51b..47792225557 100644
--- a/core/templates/exception.php
+++ b/core/templates/exception.php
@@ -5,7 +5,7 @@
<p class="exception">
<?php
if($_['showsysinfo'] == true) {
- echo 'If you would like to support ownCloud\'s developers and report this error in our <a href="http://bugs.owncloud.org">Bugtracker</a>, please copy the following informations into the description. <br><br><textarea readonly>';
+ echo 'If you would like to support ownCloud\'s developers and report this error in our <a href="https://github.com/owncloud/core">bug tracker</a>, please copy the following informations into the description. <br><br><textarea readonly>';
echo 'Message: ' . $_['message'] . "\n";
echo 'Error Code: ' . $_['code'] . "\n";
echo 'File: ' . $_['file'] . "\n";
diff --git a/core/templates/installation.php b/core/templates/installation.php
index 3128c4f2e70..cef979c2ab6 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -1,7 +1,7 @@
-<input type='hidden' id='hasMySQL' value='<?php echo $_['hasMySQL'] ?>'></input>
-<input type='hidden' id='hasSQLite' value='<?php echo $_['hasSQLite'] ?>'></input>
-<input type='hidden' id='hasPostgreSQL' value='<?php echo $_['hasPostgreSQL'] ?>'></input>
-<input type='hidden' id='hasOracle' value='<?php echo $_['hasOracle'] ?>'></input>
+<input type='hidden' id='hasMySQL' value='<?php echo $_['hasMySQL'] ?>'>
+<input type='hidden' id='hasSQLite' value='<?php echo $_['hasSQLite'] ?>'>
+<input type='hidden' id='hasPostgreSQL' value='<?php echo $_['hasPostgreSQL'] ?>'>
+<input type='hidden' id='hasOracle' value='<?php echo $_['hasOracle'] ?>'>
<form action="index.php" method="post">
<input type="hidden" name="install" value="true" />
<?php if(count($_['errors']) > 0): ?>
@@ -21,15 +21,15 @@
<?php if(!$_['secureRNG']): ?>
<fieldset class="warning">
<legend><strong><?php echo $l->t('Security Warning');?></strong></legend>
- <span><?php echo $l->t('No secure random number generator is available, please enable the PHP OpenSSL extension.');?></span>
- <br/>
- <span><?php echo $l->t('Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account.');?></span>
+ <p><?php echo $l->t('No secure random number generator is available, please enable the PHP OpenSSL extension.');?><br/>
+ <?php echo $l->t('Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account.');?></p>
</fieldset>
<?php endif; ?>
<?php if(!$_['htaccessWorking']): ?>
<fieldset class="warning">
<legend><strong><?php echo $l->t('Security Warning');?></strong></legend>
- <span><?php echo $l->t('Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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.');?></span>
+ <p><?php echo $l->t('Your data directory and files are probably accessible from the internet because the .htaccess file does not work.');?><br>
+ <?php echo $l->t('For information how to properly configure your server, please see the <a href="http://doc.owncloud.org/server/5.0/admin_manual/installation.html" target="_blank">documentation</a>.');?></p>
</fieldset>
<?php endif; ?>
<fieldset id="adminaccount">
@@ -40,9 +40,11 @@
<img class="svg" src="<?php echo image_path('', 'actions/user.svg'); ?>" alt="" />
</p>
<p class="infield groupbottom">
- <input type="password" name="adminpass" id="adminpass" value="<?php print OC_Helper::init_var('adminpass'); ?>" required />
+ <input type="password" name="adminpass" data-typetoggle="#show" id="adminpass" value="<?php print OC_Helper::init_var('adminpass'); ?>" />
<label for="adminpass" class="infield"><?php echo $l->t( 'Password' ); ?></label>
- <img class="svg" src="<?php echo image_path('', 'actions/password.svg'); ?>" alt="" />
+ <img class="svg" id="adminpass-icon" src="<?php echo image_path('', 'actions/password.svg'); ?>" alt="" />
+ <input type="checkbox" id="show" name="show" />
+ <label for="show"></label>
</p>
</fieldset>
diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php
index 47f4b423b3e..2049bcb36da 100644
--- a/core/templates/layout.base.php
+++ b/core/templates/layout.base.php
@@ -7,12 +7,6 @@
<?php foreach ($_['cssfiles'] as $cssfile): ?>
<link rel="stylesheet" href="<?php echo $cssfile; ?>" type="text/css" media="screen" />
<?php endforeach; ?>
- <script type="text/javascript">
- var oc_debug = <?php echo (defined('DEBUG') && DEBUG) ? 'true' : 'false'; ?>;
- var oc_webroot = '<?php echo OC::$WEBROOT; ?>';
- var oc_appswebroots = <?php echo $_['apps_paths'] ?>;
- var oc_requesttoken = '<?php echo $_['requesttoken']; ?>';
- </script>
<?php foreach ($_['jsfiles'] as $jsfile): ?>
<script type="text/javascript" src="<?php echo $jsfile; ?>"></script>
<?php endforeach; ?>
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index 8395426e4e4..69330aa9fce 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -3,20 +3,11 @@
<head>
<title>ownCloud</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="apple-itunes-app" content="app-id=543672169">
<link rel="shortcut icon" href="<?php echo image_path('', 'favicon.png'); ?>" /><link rel="apple-touch-icon-precomposed" href="<?php echo image_path('', 'favicon-touch.png'); ?>" />
<?php foreach($_['cssfiles'] as $cssfile): ?>
<link rel="stylesheet" href="<?php echo $cssfile; ?>" type="text/css" media="screen" />
<?php endforeach; ?>
- <script type="text/javascript">
- var oc_debug = <?php echo (defined('DEBUG') && DEBUG) ? 'true' : 'false'; ?>;
- var oc_webroot = '<?php echo OC::$WEBROOT; ?>';
- var oc_appswebroots = <?php echo $_['apps_paths'] ?>;
- var oc_requesttoken = '<?php echo $_['requesttoken']; ?>';
- var datepickerFormatDate = <?php echo json_encode($l->l('jsdate', 'jsdate')) ?>;
- var dayNames = <?php echo json_encode(array((string)$l->t('Sunday'), (string)$l->t('Monday'), (string)$l->t('Tuesday'), (string)$l->t('Wednesday'), (string)$l->t('Thursday'), (string)$l->t('Friday'), (string)$l->t('Saturday'))) ?>;
- var monthNames = <?php echo json_encode(array((string)$l->t('January'), (string)$l->t('February'), (string)$l->t('March'), (string)$l->t('April'), (string)$l->t('May'), (string)$l->t('June'), (string)$l->t('July'), (string)$l->t('August'), (string)$l->t('September'), (string)$l->t('October'), (string)$l->t('November'), (string)$l->t('December'))) ?>;
- var firstDay = <?php echo json_encode($l->l('firstday', 'firstday')) ?>;
- </script>
<?php foreach($_['jsfiles'] as $jsfile): ?>
<script type="text/javascript" src="<?php echo $jsfile; ?>"></script>
<?php endforeach; ?>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index ba5053edecf..c8b580b5fd9 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -1,33 +1,16 @@
<!DOCTYPE html>
<html>
<head>
- <title><?php echo isset($_['application']) && !empty($_['application'])?$_['application'].' | ':'' ?>ownCloud <?php echo OC_User::getUser()?' ('.OC_User::getUser().') ':'' ?></title>
+ <title><?php echo !empty($_['application'])?$_['application'].' | ':'' ?>ownCloud <?php echo !empty($_['user_displayname'])?' ('.$_['user_displayname'].') ':'' ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="apple-itunes-app" content="app-id=543672169">
<link rel="shortcut icon" href="<?php echo image_path('', 'favicon.png'); ?>" /><link rel="apple-touch-icon-precomposed" href="<?php echo image_path('', 'favicon-touch.png'); ?>" />
<?php foreach($_['cssfiles'] as $cssfile): ?>
<link rel="stylesheet" href="<?php echo $cssfile; ?>" type="text/css" media="screen" />
<?php endforeach; ?>
- <script type="text/javascript">
- var oc_debug = <?php echo (defined('DEBUG') && DEBUG) ? 'true' : 'false'; ?>;
- var oc_webroot = '<?php echo OC::$WEBROOT; ?>';
- var oc_appswebroots = <?php echo $_['apps_paths'] ?>;
- var oc_current_user = '<?php echo OC_User::getUser() ?>';
- var oc_requesttoken = '<?php echo $_['requesttoken']; ?>';
- var datepickerFormatDate = <?php echo json_encode($l->l('jsdate', 'jsdate')) ?>;
- var dayNames = <?php echo json_encode(array((string)$l->t('Sunday'), (string)$l->t('Monday'), (string)$l->t('Tuesday'), (string)$l->t('Wednesday'), (string)$l->t('Thursday'), (string)$l->t('Friday'), (string)$l->t('Saturday'))) ?>;
- var monthNames = <?php echo json_encode(array((string)$l->t('January'), (string)$l->t('February'), (string)$l->t('March'), (string)$l->t('April'), (string)$l->t('May'), (string)$l->t('June'), (string)$l->t('July'), (string)$l->t('August'), (string)$l->t('September'), (string)$l->t('October'), (string)$l->t('November'), (string)$l->t('December'))) ?>;
- var firstDay = <?php echo json_encode($l->l('firstday', 'firstday')) ?>;
- </script>
<?php foreach($_['jsfiles'] as $jsfile): ?>
<script type="text/javascript" src="<?php echo $jsfile; ?>"></script>
<?php endforeach; ?>
- <script type="text/javascript">
- requesttoken = '<?php echo $_['requesttoken']; ?>';
- OC.EventSource.requesttoken=requesttoken;
- $(document).bind('ajaxSend', function(elm, xhr, s) {
- xhr.setRequestHeader('requesttoken', requesttoken);
- });
- </script>
<?php foreach($_['headers'] as $header): ?>
<?php
echo '<'.$header['tag'].' ';
@@ -40,10 +23,35 @@
</head>
<body id="<?php echo $_['bodyid'];?>">
- <header><div id="header">
+ <div id="notification-container">
+ <div id="notification"></div>
+ </div>
+ <header><div id="header">
<a href="<?php echo link_to('', 'index.php'); ?>" title="" id="owncloud"><img class="svg" src="<?php echo image_path('', 'logo-wide.svg'); ?>" alt="ownCloud" /></a>
- <a class="header-right header-action" id="logout" href="<?php echo link_to('', 'index.php'); ?>?logout=true"><img class="svg" alt="<?php echo $l->t('Log out');?>" title="<?php echo $l->t('Log out'); echo OC_User::getUser()?' ('.OC_User::getUser().') ':'' ?>" src="<?php echo image_path('', 'actions/logout.svg'); ?>" /></a>
- <form class="searchbox header-right" action="#" method="post">
+
+ <ul id="settings" class="svg">
+ <span id="expand">
+ <?php echo OCP\User::getDisplayName($user=null)?OCP\User::getDisplayName($user=null):(OC_User::getUser()?OC_User::getUser():'') ?>
+ <img class="svg" src="<?php echo image_path('', 'actions/caret.svg'); ?>" />
+ </span>
+ <div id="expanddiv">
+ <?php foreach($_['settingsnavigation'] as $entry):?>
+ <li>
+ <a href="<?php echo $entry['href']; ?>" title="" <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>>
+ <img class="svg" alt="" src="<?php echo $entry['icon']; ?>">
+ <?php echo $entry['name'] ?>
+ </a>
+ </li>
+ <?php endforeach; ?>
+ <li>
+ <a id="logout" href="<?php echo link_to('', 'index.php'); ?>?logout=true">
+ <img class="svg" alt="" src="<?php echo image_path('', 'actions/logout.svg'); ?>" /> <?php echo $l->t('Log out');?>
+ </a>
+ </li>
+ </div>
+ </ul>
+
+ <form class="searchbox" action="#" method="post">
<input id="searchbox" class="svg" type="search" name="query" value="<?php if(isset($_POST['query'])) {echo OC_Util::sanitizeHTML($_POST['query']);};?>" autocomplete="off" x-webkit-speech />
</form>
</div></header>
@@ -51,24 +59,20 @@
<nav><div id="navigation">
<ul id="apps" class="svg">
<?php foreach($_['navigation'] as $entry): ?>
- <li data-id="<?php echo $entry['id']; ?>"><a style="background-image:url(<?php echo $entry['icon']; ?>)" href="<?php echo $entry['href']; ?>" title="" <?php if( $entry['active'] ): ?> class="active"<?php endif; ?>><?php echo $entry['name']; ?></a>
+ <li data-id="<?php echo $entry['id']; ?>">
+ <a href="<?php echo $entry['href']; ?>" title="" <?php if( $entry['active'] ): ?> class="active"<?php endif; ?>>
+ <img class="icon" src="<?php echo $entry['icon']; ?>"/>
+ <?php echo $entry['name']; ?>
+ </a>
</li>
<?php endforeach; ?>
</ul>
-
- <ul id="settings" class="svg">
- <img role=button tabindex=0 id="expand" class="svg" alt="<?php echo $l->t('Settings');?>" src="<?php echo image_path('', 'actions/settings.svg'); ?>" />
- <span><?php echo $l->t('Settings');?></span>
- <div id="expanddiv" <?php if($_['bodyid'] == 'body-user') echo 'style="display:none;"'; ?>>
- <?php foreach($_['settingsnavigation'] as $entry):?>
- <li><a style="background-image:url(<?php echo $entry['icon']; ?>)" href="<?php echo $entry['href']; ?>" title="" <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>><?php echo $entry['name'] ?></a></li>
- <?php endforeach; ?>
- </div>
- </ul>
</div></nav>
- <div id="content">
- <?php echo $_['content']; ?>
+ <div id="content-wrapper">
+ <div id="content">
+ <?php echo $_['content']; ?>
+ </div>
</div>
</body>
</html>
diff --git a/core/templates/login.php b/core/templates/login.php
index 10093baabf7..3be2b039b03 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -1,50 +1,61 @@
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
<form method="post">
- <fieldset>
- <?php if (!empty($_['redirect_url'])) {
- echo '<input type="hidden" name="redirect_url" value="' . $_['redirect_url'] . '" />';
- } ?>
- <ul>
- <?php if (isset($_['invalidcookie']) && ($_['invalidcookie'])): ?>
- <li class="errors">
- <?php echo $l->t('Automatic logon rejected!'); ?><br>
- <small><?php echo $l->t('If you did not change your password recently, your account may be compromised!'); ?></small>
- <br>
- <small><?php echo $l->t('Please change your password to secure your account again.'); ?></small>
- </li>
- <?php endif; ?>
- <?php if (isset($_['invalidpassword']) && ($_['invalidpassword'])): ?>
- <a href="<?php echo OC_Helper::linkToRoute('core_lostpassword_index') ?>">
- <li class="errors">
- <?php echo $l->t('Lost your password?'); ?>
- </li>
- </a>
- <?php endif; ?>
- </ul>
- <p class="infield grouptop">
- <input type="text" name="user" id="user"
- value="<?php echo $_['username']; ?>"<?php echo $_['user_autofocus'] ? ' autofocus' : ''; ?>
- autocomplete="on" required/>
- <label for="user" class="infield"><?php echo $l->t('Username'); ?></label>
- <img class="svg" src="<?php echo image_path('', 'actions/user.svg'); ?>" alt=""/>
- </p>
+ <fieldset>
+ <?php if (!empty($_['redirect_url'])) {
+ echo '<input type="hidden" name="redirect_url" value="' . $_['redirect_url'] . '" />';
+ } ?>
+ <ul>
+ <?php if (isset($_['invalidcookie']) && ($_['invalidcookie'])): ?>
+ <li class="errors">
+ <?php echo $l->t('Automatic logon rejected!'); ?><br>
+ <small><?php echo $l->t('If you did not change your password recently, your account may be compromised!'); ?></small>
+ <br>
+ <small><?php echo $l->t('Please change your password to secure your account again.'); ?></small>
+ </li>
+ <?php endif; ?>
+ <?php if (isset($_['invalidpassword']) && ($_['invalidpassword'])): ?>
+ <a href="<?php echo OC_Helper::linkToRoute('core_lostpassword_index') ?>">
+ <li class="errors">
+ <?php echo $l->t('Lost your password?'); ?>
+ </li>
+ </a>
+ <?php endif; ?>
+ </ul>
+ <p class="infield grouptop">
+ <input type="text" name="user" id="user"
+ value="<?php echo $_['username']; ?>"<?php echo $_['user_autofocus'] ? ' autofocus' : ''; ?>
+ autocomplete="on" required/>
+ <label for="user" class="infield"><?php echo $l->t('Username'); ?></label>
+ <img class="svg" src="<?php echo image_path('', 'actions/user.svg'); ?>" alt=""/>
+ </p>
- <p class="infield groupbottom">
- <input type="password" name="password" id="password" value=""
- required<?php echo $_['user_autofocus'] ? '' : ' autofocus'; ?> />
- <label for="password" class="infield"><?php echo $l->t('Password'); ?></label>
- <img class="svg" src="<?php echo image_path('', 'actions/password.svg'); ?>" alt=""/>
- </p>
- <input type="checkbox" name="remember_login" value="1" id="remember_login"/><label
- for="remember_login"><?php echo $l->t('remember'); ?></label>
- <input type="hidden" name="timezone-offset" id="timezone-offset"/>
- <input type="submit" id="submit" class="login primary" value="<?php echo $l->t('Log in'); ?>"/>
- </fieldset>
+ <p class="infield groupbottom">
+ <input type="password" name="password" id="password" value="" data-typetoggle="#show"
+ required<?php echo $_['user_autofocus'] ? '' : ' autofocus'; ?> />
+ <label for="password" class="infield"><?php echo $l->t('Password'); ?></label>
+ <img class="svg" id="password-icon" src="<?php echo image_path('', 'actions/password.svg'); ?>" alt=""/>
+ <input type="checkbox" id="show" name="show" />
+ <label for="show"></label>
+ </p>
+ <input type="checkbox" name="remember_login" value="1" id="remember_login"/><label
+ for="remember_login"><?php echo $l->t('remember'); ?></label>
+ <input type="hidden" name="timezone-offset" id="timezone-offset"/>
+ <input type="submit" id="submit" class="login primary" value="<?php echo $l->t('Log in'); ?>"/>
+ </fieldset>
</form>
-<script>
- $(document).ready(function () {
- var visitortimezone = (-new Date().getTimezoneOffset() / 60);
- $('#timezone-offset').val(visitortimezone);
- });
+<?php if (!empty($_['alt_login'])) { ?>
+<form id="alternative-logins">
+ <fieldset>
+ <legend><?php echo $l->t('Alternative Logins') ?></legend>
+ <ul>
+ <?php foreach($_['alt_login'] as $login): ?>
+ <li><a class="button" href="<?php echo $login['href']; ?>" ><?php echo $login['name']; ?></a></li>
+ <?php endforeach; ?>
+ </ul>
+ </fieldset>
+</form>
+<?php } ?>
+
+<?php
+OCP\Util::addscript('core', 'visitortimezone');
-</script>
diff --git a/core/templates/logout.php b/core/templates/logout.php
deleted file mode 100644
index 2247ed8e70f..00000000000
--- a/core/templates/logout.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php echo $l->t( 'You are logged out.' );
diff --git a/core/templates/update.php b/core/templates/update.php
index c9f3144f257..ae714dcfb92 100644
--- a/core/templates/update.php
+++ b/core/templates/update.php
@@ -3,29 +3,3 @@
<?php echo $l->t('Updating ownCloud to version %s, this may take a while.', array($_['version'])); ?><br /><br />
</li>
</ul>
-<script>
- $(document).ready(function () {
- OC.EventSource.requesttoken = oc_requesttoken;
- var updateEventSource = new OC.EventSource(OC.webroot+'/core/ajax/update.php');
- updateEventSource.listen('success', function(message) {
- $('<span>').append(message).append('<br />').appendTo($('.update'));
- });
- updateEventSource.listen('error', function(message) {
- $('<span>').addClass('error').append(message).append('<br />').appendTo($('.update'));
- });
- updateEventSource.listen('failure', function(message) {
- $('<span>').addClass('error').append(message).append('<br />').appendTo($('.update'));
- $('<span>')
- .addClass('error bold')
- .append('<br />')
- .append(t('core', 'The update was unsuccessful. Please report this issue to the <a href="https://github.com/owncloud/core/issues" target="_blank">ownCloud community</a>.'))
- .appendTo($('.update'));
- });
- updateEventSource.listen('done', function(message) {
- $('<span>').addClass('bold').append('<br />').append(t('core', 'The update was successful. Redirecting you to ownCloud now.')).appendTo($('.update'));
- setTimeout(function () {
- window.location.href = OC.webroot;
- }, 3000);
- });
- });
-</script> \ No newline at end of file
diff --git a/core/templates/verify.php b/core/templates/verify.php
deleted file mode 100644
index 600eaca05b7..00000000000
--- a/core/templates/verify.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<form method="post">
- <fieldset>
- <ul>
- <li class="errors">
- <?php echo $l->t('Security Warning!'); ?><br>
- <small><?php echo $l->t("Please verify your password. <br/>For security reasons you may be occasionally asked to enter your password again."); ?></small>
- </li>
- </ul>
- <p class="infield">
- <input type="text" value="<?php echo $_['username']; ?>" disabled="disabled" />
- </p>
- <p class="infield">
- <label for="password" class="infield"><?php echo $l->t( 'Password' ); ?></label>
- <input type="password" name="password" id="password" value="" required />
- </p>
- <input type="submit" id="submit" class="login" value="<?php echo $l->t( 'Verify' ); ?>" />
- </fieldset>
-</form>
diff --git a/db_structure.xml b/db_structure.xml
index db43ef21140..3ce41096d9e 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -60,21 +60,48 @@
<table>
- <name>*dbprefix*fscache</name>
+ <name>*dbprefix*storages</name>
<declaration>
<field>
<name>id</name>
- <autoincrement>1</autoincrement>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ <field>
+ <name>numeric_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
+ <autoincrement>1</autoincrement>
<length>4</length>
</field>
+ <index>
+ <name>storages_id_index</name>
+ <unique>true</unique>
+ <field>
+ <name>id</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*file_map</name>
+
+ <declaration>
+
<field>
- <name>path</name>
+ <name>logic_path</name>
<type>text</type>
<default></default>
<notnull>true</notnull>
@@ -82,7 +109,7 @@
</field>
<field>
- <name>path_hash</name>
+ <name>logic_path_hash</name>
<type>text</type>
<default></default>
<notnull>true</notnull>
@@ -90,95 +117,189 @@
</field>
<field>
- <name>parent</name>
- <type>integer</type>
- <default>0</default>
+ <name>physic_path</name>
+ <type>text</type>
+ <default></default>
<notnull>true</notnull>
- <length>8</length>
+ <length>512</length>
</field>
<field>
- <name>name</name>
+ <name>physic_path_hash</name>
<type>text</type>
<default></default>
<notnull>true</notnull>
- <length>300</length>
+ <length>32</length>
</field>
+ <index>
+ <name>file_map_lp_index</name>
+ <unique>true</unique>
+ <field>
+ <name>logic_path_hash</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ <index>
+ <name>file_map_pp_index</name>
+ <unique>true</unique>
+ <field>
+ <name>physic_path_hash</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*mimetypes</name>
+
+ <declaration>
+
<field>
- <name>user</name>
+ <name>id</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <autoincrement>1</autoincrement>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>mimetype</name>
<type>text</type>
<default></default>
<notnull>true</notnull>
- <length>64</length>
+ <length>255</length>
</field>
+ <index>
+ <name>mimetype_id_index</name>
+ <unique>true</unique>
+ <field>
+ <name>mimetype</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*filecache</name>
+
+ <declaration>
+
<field>
- <name>size</name>
+ <name>fileid</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
- <length>8</length>
+ <autoincrement>1</autoincrement>
+ <length>4</length>
</field>
<field>
- <name>ctime</name>
+ <name>storage</name>
<type>integer</type>
- <default>0</default>
+ <default></default>
<notnull>true</notnull>
- <length>8</length>
+ <length>4</length>
</field>
<field>
- <name>mtime</name>
+ <name>path</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>512</length>
+ </field>
+
+ <field>
+ <name>path_hash</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>32</length>
+ </field>
+
+ <field>
+ <name>parent</name>
<type>integer</type>
- <default>0</default>
+ <default></default>
<notnull>true</notnull>
- <length>8</length>
+ <length>4</length>
</field>
<field>
- <name>mimetype</name>
+ <name>name</name>
<type>text</type>
<default></default>
<notnull>true</notnull>
- <length>96</length>
+ <length>250</length>
+ </field>
+
+ <field>
+ <name>mimetype</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>4</length>
</field>
<field>
<name>mimepart</name>
- <type>text</type>
+ <type>integer</type>
<default></default>
<notnull>true</notnull>
- <length>32</length>
+ <length>4</length>
</field>
<field>
- <name>encrypted</name>
+ <name>size</name>
<type>integer</type>
- <default>0</default>
+ <default></default>
<notnull>true</notnull>
- <length>1</length>
+ <length>8</length>
</field>
<field>
- <name>versioned</name>
+ <name>mtime</name>
<type>integer</type>
- <default>0</default>
+ <default></default>
<notnull>true</notnull>
- <length>1</length>
+ <length>4</length>
</field>
<field>
- <name>writable</name>
+ <name>encrypted</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
- <length>1</length>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>etag</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>40</length>
</field>
<index>
- <name>fscache_path_hash_index</name>
+ <name>fs_storage_path_hash</name>
+ <unique>true</unique>
+ <field>
+ <name>storage</name>
+ <sorting>ascending</sorting>
+ </field>
<field>
<name>path_hash</name>
<sorting>ascending</sorting>
@@ -186,29 +307,84 @@
</index>
<index>
- <name>parent_index</name>
+ <name>fs_parent_name_hash</name>
<field>
<name>parent</name>
<sorting>ascending</sorting>
</field>
+ <field>
+ <name>name</name>
+ <sorting>ascending</sorting>
+ </field>
</index>
<index>
- <name>name_index</name>
+ <name>fs_storage_mimetype</name>
<field>
- <name>name</name>
+ <name>storage</name>
+ <sorting>ascending</sorting>
+ </field>
+ <field>
+ <name>mimetype</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
- <name>parent_name_index</name>
+ <name>fs_storage_mimepart</name>
<field>
- <name>parent</name>
+ <name>storage</name>
<sorting>ascending</sorting>
</field>
<field>
- <name>name</name>
+ <name>mimepart</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*permissions</name>
+
+ <declaration>
+
+ <field>
+ <name>fileid</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>user</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ <field>
+ <name>permissions</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
+ <index>
+ <name>id_user_index</name>
+ <unique>true</unique>
+ <field>
+ <name>fileid</name>
+ <sorting>ascending</sorting>
+ </field>
+ <field>
+ <name>user</name>
<sorting>ascending</sorting>
</field>
</index>
@@ -680,6 +856,14 @@
</field>
<field>
+ <name>displayname</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ <field>
<name>password</name>
<type>text</type>
<default></default>
diff --git a/index.html b/index.html
new file mode 100644
index 00000000000..69d42e3a0b3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="refresh" content="0; URL=index.php">
+</head>
+</html>
diff --git a/issue_template.md b/issue_template.md
new file mode 100644
index 00000000000..f9bff71af97
--- /dev/null
+++ b/issue_template.md
@@ -0,0 +1,46 @@
+### Expected behaviour
+Tell us what should happen
+
+### Actual behaviour
+Tell us what happens instead
+
+### Steps to reproduce
+1.
+2.
+3.
+
+### Server configuration
+Operating system:
+
+Web server:
+
+Database:
+
+PHP version:
+
+ownCloud version:
+
+### Client configuration
+Browser:
+
+Operating system:
+
+### Logs
+#### Web server error log
+```
+Insert your webserver log here
+```
+
+#### ownCloud log (data/owncloud.log)
+```
+Insert your ownCloud log here
+```
+
+#### Browser log
+```
+Insert your browser log here, this could for example include:
+
+a) The javascript console log
+b) The network log
+c) ...
+```
diff --git a/l10n/.tx/config b/l10n/.tx/config
index 2aac0feedc5..b6589d8112d 100644
--- a/l10n/.tx/config
+++ b/l10n/.tx/config
@@ -40,6 +40,12 @@ source_file = templates/files_sharing.pot
source_lang = en
type = PO
+[owncloud.files_trashbin]
+file_filter = <lang>/files_trashbin.po
+source_file = templates/files_trashbin.pot
+source_lang = en
+type = PO
+
[owncloud.files_versions]
file_filter = <lang>/files_versions.po
source_file = templates/files_versions.pot
diff --git a/l10n/af_ZA/core.po b/l10n/af_ZA/core.po
new file mode 100644
index 00000000000..b0c9bf67feb
--- /dev/null
+++ b/l10n/af_ZA/core.po
@@ -0,0 +1,594 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Jano Barnard <translate@janobarnard.co.za>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/share.php:85
+#, php-format
+msgid "User %s shared a file with you"
+msgstr ""
+
+#: ajax/share.php:87
+#, php-format
+msgid "User %s shared a folder with you"
+msgstr ""
+
+#: ajax/share.php:89
+#, php-format
+msgid ""
+"User %s shared the file \"%s\" with you. It is available for download here: "
+"%s"
+msgstr ""
+
+#: ajax/share.php:91
+#, php-format
+msgid ""
+"User %s shared the folder \"%s\" with you. It is available for download "
+"here: %s"
+msgstr ""
+
+#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
+msgid "Category type not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:30
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:37
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
+#: ajax/vcategories/favorites.php:24
+#: ajax/vcategories/removeFromFavorites.php:26
+msgid "Object type not provided."
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:30
+#: ajax/vcategories/removeFromFavorites.php:30
+#, php-format
+msgid "%s ID not provided."
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:35
+#, php-format
+msgid "Error adding %s to favorites."
+msgstr ""
+
+#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/vcategories/removeFromFavorites.php:35
+#, php-format
+msgid "Error removing %s from favorites."
+msgstr ""
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:284
+msgid "Settings"
+msgstr "Instellings"
+
+#: js/js.js:764
+msgid "seconds ago"
+msgstr ""
+
+#: js/js.js:765
+msgid "1 minute ago"
+msgstr ""
+
+#: js/js.js:766
+msgid "{minutes} minutes ago"
+msgstr ""
+
+#: js/js.js:767
+msgid "1 hour ago"
+msgstr ""
+
+#: js/js.js:768
+msgid "{hours} hours ago"
+msgstr ""
+
+#: js/js.js:769
+msgid "today"
+msgstr ""
+
+#: js/js.js:770
+msgid "yesterday"
+msgstr ""
+
+#: js/js.js:771
+msgid "{days} days ago"
+msgstr ""
+
+#: js/js.js:772
+msgid "last month"
+msgstr ""
+
+#: js/js.js:773
+msgid "{months} months ago"
+msgstr ""
+
+#: js/js.js:774
+msgid "months ago"
+msgstr ""
+
+#: js/js.js:775
+msgid "last year"
+msgstr ""
+
+#: js/js.js:776
+msgid "years ago"
+msgstr ""
+
+#: js/oc-dialogs.js:126
+msgid "Choose"
+msgstr ""
+
+#: js/oc-dialogs.js:146 js/oc-dialogs.js:166
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:162
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:163
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:180
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
+#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
+msgid "The object type is not specified."
+msgstr ""
+
+#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
+msgid "Error"
+msgstr ""
+
+#: js/oc-vcategories.js:179
+msgid "The app name is not specified."
+msgstr ""
+
+#: js/oc-vcategories.js:194
+msgid "The required file {file} is not installed!"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
+msgid "Error while sharing"
+msgstr ""
+
+#: js/share.js:152
+msgid "Error while unsharing"
+msgstr ""
+
+#: js/share.js:159
+msgid "Error while changing permissions"
+msgstr ""
+
+#: js/share.js:168
+msgid "Shared with you and the group {group} by {owner}"
+msgstr ""
+
+#: js/share.js:170
+msgid "Shared with you by {owner}"
+msgstr ""
+
+#: js/share.js:175
+msgid "Share with"
+msgstr ""
+
+#: js/share.js:180
+msgid "Share with link"
+msgstr ""
+
+#: js/share.js:183
+msgid "Password protect"
+msgstr ""
+
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
+msgid "Password"
+msgstr "Wagwoord"
+
+#: js/share.js:189
+msgid "Email link to person"
+msgstr ""
+
+#: js/share.js:190
+msgid "Send"
+msgstr ""
+
+#: js/share.js:194
+msgid "Set expiration date"
+msgstr ""
+
+#: js/share.js:195
+msgid "Expiration date"
+msgstr ""
+
+#: js/share.js:227
+msgid "Share via email:"
+msgstr ""
+
+#: js/share.js:229
+msgid "No people found"
+msgstr ""
+
+#: js/share.js:256
+msgid "Resharing is not allowed"
+msgstr ""
+
+#: js/share.js:292
+msgid "Shared in {item} with {user}"
+msgstr ""
+
+#: js/share.js:313
+msgid "Unshare"
+msgstr ""
+
+#: js/share.js:325
+msgid "can edit"
+msgstr ""
+
+#: js/share.js:327
+msgid "access control"
+msgstr ""
+
+#: js/share.js:330
+msgid "create"
+msgstr ""
+
+#: js/share.js:333
+msgid "update"
+msgstr ""
+
+#: js/share.js:336
+msgid "delete"
+msgstr ""
+
+#: js/share.js:339
+msgid "share"
+msgstr ""
+
+#: js/share.js:373 js/share.js:558
+msgid "Password protected"
+msgstr ""
+
+#: js/share.js:571
+msgid "Error unsetting expiration date"
+msgstr ""
+
+#: js/share.js:583
+msgid "Error setting expiration date"
+msgstr ""
+
+#: js/share.js:598
+msgid "Sending ..."
+msgstr ""
+
+#: js/share.js:609
+msgid "Email sent"
+msgstr ""
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
+#: lostpassword/controller.php:47
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:2
+msgid "Use the following link to reset your password: {link}"
+msgstr "Gebruik die volgende skakel om jou wagwoord te herstel: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Jy sal `n skakel via e-pos ontvang om jou wagwoord te herstel."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Reset email send."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Request failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39
+#: templates/login.php:28
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Herstel-versoek"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Jou wagwoord is herstel"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Na aanteken-bladsy"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nuwe wagwoord"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Herstel wagwoord"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Persoonlik"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Gebruikers"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Toepassings"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Admin"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Hulp"
+
+#: templates/403.php:12
+msgid "Access forbidden"
+msgstr ""
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Wolk nie gevind"
+
+#: templates/edit_categories_dialog.php:4
+msgid "Edit categories"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:16
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23 templates/installation.php:30
+msgid "Security Warning"
+msgstr ""
+
+#: templates/installation.php:24
+msgid ""
+"No secure random number generator is available, please enable the PHP "
+"OpenSSL extension."
+msgstr ""
+
+#: templates/installation.php:25
+msgid ""
+"Without a secure random number generator an attacker may be able to predict "
+"password reset tokens and take over your account."
+msgstr ""
+
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
+#: templates/installation.php:32
+msgid ""
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
+
+#: templates/installation.php:36
+msgid "Create an <strong>admin account</strong>"
+msgstr "Skep `n <strong>admin-rekening</strong>"
+
+#: templates/installation.php:52
+msgid "Advanced"
+msgstr "Gevorderd"
+
+#: templates/installation.php:54
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:61
+msgid "Configure the database"
+msgstr "Stel databasis op"
+
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
+msgid "will be used"
+msgstr "sal gebruik word"
+
+#: templates/installation.php:109
+msgid "Database user"
+msgstr "Databasis-gebruiker"
+
+#: templates/installation.php:113
+msgid "Database password"
+msgstr "Databasis-wagwoord"
+
+#: templates/installation.php:117
+msgid "Database name"
+msgstr "Databasis naam"
+
+#: templates/installation.php:125
+msgid "Database tablespace"
+msgstr ""
+
+#: templates/installation.php:131
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:136
+msgid "Finish setup"
+msgstr "Maak opstelling klaar"
+
+#: templates/layout.guest.php:33
+msgid "web services under your control"
+msgstr "webdienste onder jou beheer"
+
+#: templates/layout.user.php:48
+msgid "Log out"
+msgstr "Teken uit"
+
+#: templates/login.php:10
+msgid "Automatic logon rejected!"
+msgstr ""
+
+#: templates/login.php:11
+msgid ""
+"If you did not change your password recently, your account may be "
+"compromised!"
+msgstr ""
+
+#: templates/login.php:13
+msgid "Please change your password to secure your account again."
+msgstr ""
+
+#: templates/login.php:19
+msgid "Lost your password?"
+msgstr "Jou wagwoord verloor?"
+
+#: templates/login.php:41
+msgid "remember"
+msgstr "onthou"
+
+#: templates/login.php:43
+msgid "Log in"
+msgstr "Teken aan"
+
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "vorige"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "volgende"
+
+#: templates/update.php:3
+#, php-format
+msgid "Updating ownCloud to version %s, this may take a while."
+msgstr ""
diff --git a/l10n/af_ZA/files.po b/l10n/af_ZA/files.po
new file mode 100644
index 00000000000..67facac0f9e
--- /dev/null
+++ b/l10n/af_ZA/files.po
@@ -0,0 +1,315 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/move.php:17
+#, php-format
+msgid "Could not move %s - File with this name already exists"
+msgstr ""
+
+#: ajax/move.php:27 ajax/move.php:30
+#, php-format
+msgid "Could not move %s"
+msgstr ""
+
+#: ajax/rename.php:22 ajax/rename.php:25
+msgid "Unable to rename file"
+msgstr ""
+
+#: ajax/upload.php:19
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:27
+msgid ""
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
+msgstr ""
+
+#: ajax/upload.php:29
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:31
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:32
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:33
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:34
+msgid "Failed to write to disk"
+msgstr ""
+
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr ""
+
+#: ajax/upload.php:83
+msgid "Invalid directory."
+msgstr ""
+
+#: appinfo/app.php:10
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
+
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
+msgid "Delete"
+msgstr ""
+
+#: js/fileactions.js:184
+msgid "Rename"
+msgstr ""
+
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "{new_name} already exists"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:253
+msgid "suggest name"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:295
+msgid "replaced {new_name}"
+msgstr ""
+
+#: js/filelist.js:295 js/filelist.js:297
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:297
+msgid "replaced {new_name} with {old_name}"
+msgstr ""
+
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
+
+#: js/files.js:52
+msgid "'.' is an invalid file name."
+msgstr ""
+
+#: js/files.js:56
+msgid "File name cannot be empty."
+msgstr ""
+
+#: js/files.js:64
+msgid ""
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
+"allowed."
+msgstr ""
+
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
+
+#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:261
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:272
+msgid "Close"
+msgstr ""
+
+#: js/files.js:311
+msgid "1 file uploading"
+msgstr ""
+
+#: js/files.js:314 js/files.js:369 js/files.js:384
+msgid "{count} files uploading"
+msgstr ""
+
+#: js/files.js:387 js/files.js:422
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:496
+msgid ""
+"File upload is in progress. Leaving the page now will cancel the upload."
+msgstr ""
+
+#: js/files.js:569
+msgid "URL cannot be empty."
+msgstr ""
+
+#: js/files.js:574
+msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
+msgstr ""
+
+#: js/files.js:947 templates/index.php:67
+msgid "Name"
+msgstr ""
+
+#: js/files.js:948 templates/index.php:78
+msgid "Size"
+msgstr ""
+
+#: js/files.js:949 templates/index.php:80
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:968
+msgid "1 folder"
+msgstr ""
+
+#: js/files.js:970
+msgid "{count} folders"
+msgstr ""
+
+#: js/files.js:978
+msgid "1 file"
+msgstr ""
+
+#: js/files.js:980
+msgid "{count} files"
+msgstr ""
+
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:10
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:15
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:17
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:20
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:22
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/admin.php:26
+msgid "Save"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:12
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:14
+msgid "From link"
+msgstr ""
+
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:73
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:107
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:112
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:115
+msgid "Current scanning"
+msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/af_ZA/files_encryption.po b/l10n/af_ZA/files_encryption.po
new file mode 100644
index 00000000000..535d61f3944
--- /dev/null
+++ b/l10n/af_ZA/files_encryption.po
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/settings-personal.php:4 templates/settings.php:5
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "None"
+msgstr ""
diff --git a/l10n/af_ZA/files_external.po b/l10n/af_ZA/files_external.po
new file mode 100644
index 00000000000..fab8ff9b425
--- /dev/null
+++ b/l10n/af_ZA/files_external.po
@@ -0,0 +1,120 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-05 00:19+0100\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23
+msgid "Access granted"
+msgstr ""
+
+#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86
+msgid "Error configuring Dropbox storage"
+msgstr ""
+
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+msgid "Grant access"
+msgstr ""
+
+#: js/dropbox.js:73 js/google.js:72
+msgid "Fill out all required fields"
+msgstr ""
+
+#: js/dropbox.js:85
+msgid "Please provide a valid Dropbox app key and secret."
+msgstr ""
+
+#: js/google.js:26 js/google.js:73 js/google.js:78
+msgid "Error configuring Google Drive storage"
+msgstr ""
+
+#: lib/config.php:405
+msgid ""
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
+"is not possible. Please ask your system administrator to install it."
+msgstr ""
+
+#: lib/config.php:406
+msgid ""
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
+" of FTP shares is not possible. Please ask your system administrator to "
+"install it."
+msgstr ""
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:8 templates/settings.php:22
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:86
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:95
+msgid "Users"
+msgstr "Gebruikers"
+
+#: templates/settings.php:108 templates/settings.php:109
+#: templates/settings.php:144 templates/settings.php:145
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:124
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:125
+msgid "Allow users to mount their own external storage"
+msgstr ""
+
+#: templates/settings.php:136
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:153
+msgid "Import Root Certificate"
+msgstr ""
diff --git a/l10n/af_ZA/files_sharing.po b/l10n/af_ZA/files_sharing.po
new file mode 100644
index 00000000000..13198e5bec2
--- /dev/null
+++ b/l10n/af_ZA/files_sharing.po
@@ -0,0 +1,48 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-05 00:19+0100\n"
+"PO-Revision-Date: 2012-08-12 22:35+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/authenticate.php:4
+msgid "Password"
+msgstr "Wagwoord"
+
+#: templates/authenticate.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/public.php:9
+#, php-format
+msgid "%s shared the folder %s with you"
+msgstr ""
+
+#: templates/public.php:11
+#, php-format
+msgid "%s shared the file %s with you"
+msgstr ""
+
+#: templates/public.php:14 templates/public.php:30
+msgid "Download"
+msgstr ""
+
+#: templates/public.php:29
+msgid "No preview available for"
+msgstr ""
+
+#: templates/public.php:35
+msgid "web services under your control"
+msgstr "webdienste onder jou beheer"
diff --git a/l10n/af_ZA/files_trashbin.po b/l10n/af_ZA/files_trashbin.po
new file mode 100644
index 00000000000..6fd4dfb314f
--- /dev/null
+++ b/l10n/af_ZA/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/af_ZA/files_versions.po b/l10n/af_ZA/files_versions.po
new file mode 100644
index 00000000000..14eaae14745
--- /dev/null
+++ b/l10n/af_ZA/files_versions.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
+msgstr ""
+
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Files Versioning"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Enable"
+msgstr ""
diff --git a/l10n/af_ZA/lib.po b/l10n/af_ZA/lib.po
new file mode 100644
index 00000000000..fb18d968019
--- /dev/null
+++ b/l10n/af_ZA/lib.po
@@ -0,0 +1,253 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: app.php:339
+msgid "Help"
+msgstr "Hulp"
+
+#: app.php:346
+msgid "Personal"
+msgstr "Persoonlik"
+
+#: app.php:351
+msgid "Settings"
+msgstr "Instellings"
+
+#: app.php:356
+msgid "Users"
+msgstr "Gebruikers"
+
+#: app.php:363
+msgid "Apps"
+msgstr "Toepassings"
+
+#: app.php:365
+msgid "Admin"
+msgstr "Admin"
+
+#: files.php:202
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:203
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:203 files.php:228
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:227
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:62 json.php:73
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: search/provider/file.php:17 search/provider/file.php:35
+msgid "Files"
+msgstr ""
+
+#: search/provider/file.php:26 search/provider/file.php:33
+msgid "Text"
+msgstr ""
+
+#: search/provider/file.php:29
+msgid "Images"
+msgstr ""
+
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:114
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:115
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:116
+msgid "1 hour ago"
+msgstr ""
+
+#: template.php:117
+#, php-format
+msgid "%d hours ago"
+msgstr ""
+
+#: template.php:118
+msgid "today"
+msgstr ""
+
+#: template.php:119
+msgid "yesterday"
+msgstr ""
+
+#: template.php:120
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:121
+msgid "last month"
+msgstr ""
+
+#: template.php:122
+#, php-format
+msgid "%d months ago"
+msgstr ""
+
+#: template.php:123
+msgid "last year"
+msgstr ""
+
+#: template.php:124
+msgid "years ago"
+msgstr ""
+
+#: updater.php:75
+#, php-format
+msgid "%s is available. Get <a href=\"%s\">more information</a>"
+msgstr ""
+
+#: updater.php:77
+msgid "up to date"
+msgstr ""
+
+#: updater.php:80
+msgid "updates check is disabled"
+msgstr ""
+
+#: vcategories.php:188 vcategories.php:249
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr ""
diff --git a/l10n/af_ZA/settings.po b/l10n/af_ZA/settings.po
new file mode 100644
index 00000000000..6418c5c70fd
--- /dev/null
+++ b/l10n/af_ZA/settings.po
@@ -0,0 +1,316 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/apps/ocs.php:20
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
+#: ajax/creategroup.php:10
+msgid "Group already exists"
+msgstr ""
+
+#: ajax/creategroup.php:19
+msgid "Unable to add group"
+msgstr ""
+
+#: ajax/enableapp.php:11
+msgid "Could not enable app. "
+msgstr ""
+
+#: ajax/lostpassword.php:12
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/removegroup.php:13
+msgid "Unable to delete group"
+msgstr ""
+
+#: ajax/removeuser.php:24
+msgid "Unable to delete user"
+msgstr ""
+
+#: ajax/setlanguage.php:15
+msgid "Language changed"
+msgstr ""
+
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/togglegroups.php:12
+msgid "Admins can't remove themself from the admin group"
+msgstr ""
+
+#: ajax/togglegroups.php:28
+#, php-format
+msgid "Unable to add user to group %s"
+msgstr ""
+
+#: ajax/togglegroups.php:34
+#, php-format
+msgid "Unable to remove user from group %s"
+msgstr ""
+
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:64
+msgid "Enable"
+msgstr ""
+
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:34 personal.php:35
+msgid "__language_name__"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:11
+msgid "More Apps"
+msgstr ""
+
+#: templates/apps.php:24
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:28
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
+msgstr ""
+
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
+#: templates/help.php:3
+msgid "User Documentation"
+msgstr ""
+
+#: templates/help.php:4
+msgid "Administrator Documentation"
+msgstr ""
+
+#: templates/help.php:6
+msgid "Online Documentation"
+msgstr ""
+
+#: templates/help.php:7
+msgid "Forum"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Bugtracker"
+msgstr ""
+
+#: templates/help.php:11
+msgid "Commercial Support"
+msgstr ""
+
+#: templates/personal.php:8
+#, php-format
+msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
+msgstr ""
+
+#: templates/personal.php:14
+msgid "Get the apps to sync your files"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
+
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
+msgid "Password"
+msgstr "Wagwoord"
+
+#: templates/personal.php:37
+msgid "Your password was changed"
+msgstr ""
+
+#: templates/personal.php:38
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:39
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:40
+msgid "New password"
+msgstr "Nuwe wagwoord"
+
+#: templates/personal.php:42
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:69
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:70
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:76 templates/personal.php:77
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:82
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:87
+msgid "WebDAV"
+msgstr ""
+
+#: templates/personal.php:89
+msgid "Use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/personal.php:98
+msgid "Version"
+msgstr ""
+
+#: templates/personal.php:100
+msgid ""
+"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>."
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Storage"
+msgstr ""
+
+#: templates/users.php:42 templates/users.php:142
+msgid "Unlimited"
+msgstr ""
+
+#: templates/users.php:60 templates/users.php:157
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:84 templates/users.php:121
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:86
+msgid "Storage"
+msgstr ""
+
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
+msgid "Default"
+msgstr ""
+
+#: templates/users.php:165
+msgid "Delete"
+msgstr ""
diff --git a/l10n/af_ZA/user_ldap.po b/l10n/af_ZA/user_ldap.po
new file mode 100644
index 00000000000..e8faea36b86
--- /dev/null
+++ b/l10n/af_ZA/user_ldap.po
@@ -0,0 +1,309 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
+" experience unexpected behaviour. Please ask your system administrator to "
+"disable one of them."
+msgstr ""
+
+#: templates/settings.php:11
+msgid ""
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:21
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"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."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "Password"
+msgstr "Wagwoord"
+
+#: templates/settings.php:24
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:25
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:25
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:26
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:26
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
+
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
+
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:39
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:40
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:40
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:40
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
+msgid ""
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
+"attribute."
+msgstr ""
+
+#: templates/settings.php:62
+msgid "Help"
+msgstr "Hulp"
diff --git a/l10n/af_ZA/user_webdavauth.po b/l10n/af_ZA/user_webdavauth.po
new file mode 100644
index 00000000000..5ccd72fea35
--- /dev/null
+++ b/l10n/af_ZA/user_webdavauth.po
@@ -0,0 +1,33 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-01 00:17+0100\n"
+"PO-Revision-Date: 2012-11-09 09:06+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af_ZA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "URL: http://"
+msgstr ""
+
+#: templates/settings.php:6
+msgid ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr ""
diff --git a/l10n/ar/core.po b/l10n/ar/core.po
index 9400ec3432f..f3cdb9f639c 100644
--- a/l10n/ar/core.po
+++ b/l10n/ar/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -19,24 +19,24 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -52,8 +52,9 @@ msgid "No category to add?"
msgstr "ألا توجد ÙØ¦Ø© Ù„Ù„Ø¥Ø¶Ø§ÙØ©ØŸ"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "هذه Ø§Ù„ÙØ¦Ø© موجودة مسبقاً"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -81,59 +82,135 @@ msgstr "لم يتم اختيار ÙØ¦Ø© للحذÙ"
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "الاحد"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "الأثنين"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "الثلاثاء"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "الاربعاء"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "الخميس"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "الجمعه"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "السبت"
+
+#: js/config.php:33
+msgid "January"
+msgstr "كانون الثاني"
+
+#: js/config.php:33
+msgid "February"
+msgstr "شباط"
+
+#: js/config.php:33
+msgid "March"
+msgstr "آذار"
+
+#: js/config.php:33
+msgid "April"
+msgstr "نيسان"
+
+#: js/config.php:33
+msgid "May"
+msgstr "أيار"
+
+#: js/config.php:33
+msgid "June"
+msgstr "حزيران"
+
+#: js/config.php:33
+msgid "July"
+msgstr "تموز"
+
+#: js/config.php:33
+msgid "August"
+msgstr "آب"
+
+#: js/config.php:33
+msgid "September"
+msgstr "أيلول"
+
+#: js/config.php:33
+msgid "October"
+msgstr "تشرين الاول"
+
+#: js/config.php:33
+msgid "November"
+msgstr "تشرين الثاني"
+
+#: js/config.php:33
+msgid "December"
+msgstr "كانون الاول"
+
+#: js/js.js:284
msgid "Settings"
msgstr "تعديلات"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "منذ ثواني"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "منذ دقيقة"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} منذ دقائق"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "اليوم"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -163,8 +240,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "خطأ"
@@ -176,123 +253,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "شارك"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "حصل خطأ عند عملية المشاركة"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "حصل خطأ عند عملية إزالة المشاركة"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "حصل خطأ عند عملية إعادة تعيين التصريح بالتوصل"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "شورك معك ومع المجموعة {group} من قبل {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "شورك معك من قبل {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "شارك مع"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "شارك مع رابط"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "حماية كلمة السر"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "كلمة السر"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "تعيين تاريخ إنتهاء الصلاحية"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "تاريخ إنتهاء الصلاحية"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "مشاركة عبر البريد الإلكتروني:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "لم يتم العثور على أي شخص"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "لا يسمح بعملية إعادة المشاركة"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "شورك ÙÙŠ {item} مع {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "إلغاء مشاركة"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "التحرير مسموح"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "ضبط الوصول"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "إنشاء"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "تحديث"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "حذÙ"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "مشاركة"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "محمي بكلمة السر"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "حصل خطأ عند عملية إزالة تاريخ إنتهاء الصلاحية"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "حصل خطأ عند عملية تعيين تاريخ إنتهاء الصلاحية"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "إعادة تعيين كلمة سر ownCloud"
@@ -374,7 +469,7 @@ msgstr "عدل Ø§Ù„ÙØ¦Ø§Øª"
msgid "Add"
msgstr "أدخل"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "تحذير أمان"
@@ -384,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr "لا يوجد مولّد أرقام عشوائية ØŒ الرجاء ØªÙØ¹ÙŠÙ„ الـ PHP OpenSSL extension."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "أض٠</strong>مستخدم رئيسي <strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "خيارات متقدمة"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "مجلد المعلومات"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "أسس قاعدة البيانات"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "سيتم استخدمه"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "مستخدم قاعدة البيانات"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "كلمة سر مستخدم قاعدة البيانات"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "إسم قاعدة البيانات"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "مساحة جدول قاعدة البيانات"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "خادم قاعدة البيانات"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "انهاء التعديلات"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "الاحد"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "الأثنين"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "الثلاثاء"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "الاربعاء"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "الخميس"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "الجمعه"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "السبت"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "كانون الثاني"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "شباط"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "آذار"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "نيسان"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "أيار"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "حزيران"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "تموز"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "آب"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "أيلول"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "تشرين الاول"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "تشرين الثاني"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "كانون الاول"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "خدمات الوب تحت تصرÙÙƒ"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "الخروج"
@@ -546,17 +569,17 @@ msgstr "الرجاء إعادة تعيين كلمة السر لتأمين حسا
msgid "Lost your password?"
msgstr "هل نسيت كلمة السر؟"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "تذكر"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "أدخل"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "تم الخروج بنجاح."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,17 +593,3 @@ msgstr "التالي"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "تحذير أمان!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "الرجاء التحقق من كلمة السر. <br/>من الممكن أحياناً أن نطلب منك إعادة إدخال كلمة السر مرة أخرى."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "تحقيق"
diff --git a/l10n/ar/files.po b/l10n/ar/files.po
index b57cae5c403..3e5b521eab8 100644
--- a/l10n/ar/files.po
+++ b/l10n/ar/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -23,55 +23,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "تم ترÙيع Ø§Ù„Ù…Ù„ÙØ§Øª بنجاح."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "حجم المل٠الذي تريد ترÙيعه أعلى مما MAX_FILE_SIZE يسمح به ÙÙŠ واجهة ال HTML."
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "تم ترÙيع جزء من Ø§Ù„Ù…Ù„ÙØ§Øª الذي تريد ترÙيعها Ùقط"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "لم يتم ترÙيع أي من Ø§Ù„Ù…Ù„ÙØ§Øª"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "المجلد المؤقت غير موجود"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -79,149 +79,152 @@ msgstr ""
msgid "Files"
msgstr "Ø§Ù„Ù…Ù„ÙØ§Øª"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "إلغاء مشاركة"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "محذوÙ"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "إغلق"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "الاسم"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "حجم"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "معدل"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Ø¥Ø±ÙØ¹"
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -270,36 +273,44 @@ msgstr "مجلد"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Ø¥Ø±ÙØ¹"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "لا يوجد شيء هنا. Ø¥Ø±ÙØ¹ بعض Ø§Ù„Ù…Ù„ÙØ§Øª!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "تحميل"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "إلغاء مشاركة"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "حجم الترÙيع أعلى من المسموح"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "حجم Ø§Ù„Ù…Ù„ÙØ§Øª التي تريد ترÙيعها أعلى من المسموح على الخادم."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ar/files_encryption.po b/l10n/ar/files_encryption.po
index 1d2de3d76f2..66040076539 100644
--- a/l10n/ar/files_encryption.po
+++ b/l10n/ar/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-13 00:05+0100\n"
-"PO-Revision-Date: 2012-11-12 13:20+0000\n"
-"Last-Translator: TYMAH <hussein-atef@hotmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "التشÙير"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "استبعد أنواع Ø§Ù„Ù…Ù„ÙØ§Øª التالية من التشÙير"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "لا شيء"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "ØªÙØ¹ÙŠÙ„ التشÙير"
diff --git a/l10n/ar/files_trashbin.po b/l10n/ar/files_trashbin.po
new file mode 100644
index 00000000000..70c6ea95dde
--- /dev/null
+++ b/l10n/ar/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "اسم"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ar/files_versions.po b/l10n/ar/files_versions.po
index 3b32ba6301d..b915753cedc 100644
--- a/l10n/ar/files_versions.po
+++ b/l10n/ar/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-23 00:09+0100\n"
-"PO-Revision-Date: 2012-12-22 19:47+0000\n"
-"Last-Translator: aboodilankaboot <shiningmoon25@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:7
-msgid "Expire all versions"
-msgstr "إنهاء تاريخ الإنتهاء لجميع الإصدارات"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "السجل الزمني"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "الإصدارات"
-
-#: templates/settings-personal.php:10
-msgid "This will delete all existing backup versions of your files"
-msgstr "هذه العملية ستقوم بإلغاء جميع إصدارات النسخ الاحتياطي Ù„Ù„Ù…Ù„ÙØ§Øª"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ar/lib.po b/l10n/ar/lib.po
index 6a9cdf2b15b..458bcb72e2d 100644
--- a/l10n/ar/lib.po
+++ b/l10n/ar/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-24 00:11+0100\n"
-"PO-Revision-Date: 2012-12-23 19:00+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "المساعدة"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "شخصي"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "تعديلات"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "المستخدمين"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "لم يتم التأكد من الشخصية بنجاح"
@@ -81,55 +85,152 @@ msgstr "معلومات إضاÙية"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "منذ ثواني"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "منذ دقيقة"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "اليوم"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po
index a800f4eef21..2a33d8939db 100644
--- a/l10n/ar/settings.po
+++ b/l10n/ar/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "ÙØ´Ù„ تحميل القائمة من الآب ستور"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "لم يتم التأكد من الشخصية بنجاح"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "المجموعة موجودة مسبقاً"
@@ -32,7 +41,7 @@ msgstr "المجموعة موجودة مسبقاً"
msgid "Unable to add group"
msgstr "ÙØ´Ù„ Ø¥Ø¶Ø§ÙØ© المجموعة"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "ÙØ´Ù„ عملية ØªÙØ¹ÙŠÙ„ التطبيق"
@@ -44,22 +53,10 @@ msgstr "تم Ø­ÙØ¸ البريد الإلكتروني"
msgid "Invalid email"
msgstr "البريد الإلكتروني غير صالح"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "تم تغيير ال OpenID"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "طلبك غير Ù…Ùهوم"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "ÙØ´Ù„ إزالة المجموعة"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "لم يتم التأكد من الشخصية بنجاح"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "ÙØ´Ù„ إزالة المستخدم"
@@ -68,6 +65,10 @@ msgstr "ÙØ´Ù„ إزالة المستخدم"
msgid "Language changed"
msgstr "تم تغيير اللغة"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "طلبك غير Ù…Ùهوم"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "لا يستطيع المدير إزالة حسابه من مجموعة المديرين"
@@ -82,19 +83,47 @@ msgstr "ÙØ´Ù„ Ø¥Ø¶Ø§ÙØ© المستخدم الى المجموعة %s"
msgid "Unable to remove user from group %s"
msgstr "ÙØ´Ù„ إزالة المستخدم من المجموعة %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "إيقاÙ"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "ØªÙØ¹ÙŠÙ„"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "خطأ"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Ø­ÙØ¸"
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -106,18 +135,22 @@ msgstr "أض٠تطبيقاتك"
msgid "More Apps"
msgstr "المزيد من التطبيقات"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "إختر تطبيقاً"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "راجع ØµÙØ­Ø© التطبيق على apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-ترخيص من قبل <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "حدث"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "كتاب توثيق المستخدم"
@@ -147,83 +180,87 @@ msgstr "دعم تجاري"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "تم إستهلاك <strong>%s</strong> من Ø§Ù„Ù…ØªÙˆÙØ± <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "الزبائن"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "تحميل عملاء سطح المكتب"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "تحميل عميل آندرويد"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "تحميل عميل آي أو أس"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "كلمات السر"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "لقد تم تغيير كلمة السر"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "لم يتم تعديل كلمة السر بنجاح"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "كلمات السر الحالية"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "كلمات سر جديدة"
-#: templates/personal.php:26
-msgid "show"
-msgstr "أظهر"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "عدل كلمة السر"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "العنوان البريدي"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "عنوانك البريدي"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "أدخل عنوانك البريدي Ù„ØªÙØ¹ÙŠÙ„ استرجاع كلمة المرور"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "اللغة"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "ساعد ÙÙŠ الترجمه"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "إستخدم هذا العنوان للإتصال بـ ownCloud ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "إصدار"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "طوّر من قبل <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "الاسم"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "مجموعات"
@@ -249,26 +286,34 @@ msgstr "انشئ"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "شيء آخر"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "مدير المجموعة"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "حذÙ"
diff --git a/l10n/ar/user_ldap.po b/l10n/ar/user_ldap.po
index 7aaa90abe9a..059e10baefd 100644
--- a/l10n/ar/user_ldap.po
+++ b/l10n/ar/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-23 00:09+0100\n"
-"PO-Revision-Date: 2012-12-22 19:40+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "ÙØ´Ù„ الحذÙ"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "كلمة المرور"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "المساعدة"
diff --git a/l10n/ar/user_webdavauth.po b/l10n/ar/user_webdavauth.po
index ac1aa5b4a5e..92180c70e7e 100644
--- a/l10n/ar/user_webdavauth.po
+++ b/l10n/ar/user_webdavauth.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-23 00:09+0100\n"
-"PO-Revision-Date: 2012-12-22 19:22+0000\n"
-"Last-Translator: aboodilankaboot <shiningmoon25@gmail.com>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +19,17 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "الرابط: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po
index dc719e9d36a..06b082dffc5 100644
--- a/l10n/bg_BG/core.po
+++ b/l10n/bg_BG/core.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2011-07-25 16:05+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 10:30+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,24 +21,24 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -54,7 +54,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -83,59 +84,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:286
msgid "Settings"
msgstr "ÐаÑтройки"
-#: js/js.js:711
+#: js/js.js:766
msgid "seconds ago"
msgstr "преди Ñекунди"
-#: js/js.js:712
+#: js/js.js:767
msgid "1 minute ago"
msgstr "преди 1 минута"
-#: js/js.js:713
+#: js/js.js:768
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:769
msgid "1 hour ago"
msgstr "преди 1 чаÑ"
-#: js/js.js:715
+#: js/js.js:770
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:716
+#: js/js.js:771
msgid "today"
msgstr "днеÑ"
-#: js/js.js:717
+#: js/js.js:772
msgid "yesterday"
msgstr "вчера"
-#: js/js.js:718
+#: js/js.js:773
msgid "{days} days ago"
msgstr ""
-#: js/js.js:719
+#: js/js.js:774
msgid "last month"
msgstr "поÑледниÑÑ‚ меÑец"
-#: js/js.js:720
+#: js/js.js:775
msgid "{months} months ago"
msgstr ""
-#: js/js.js:721
+#: js/js.js:776
msgid "months ago"
msgstr ""
-#: js/js.js:722
+#: js/js.js:777
msgid "last year"
msgstr "поÑледната година"
-#: js/js.js:723
+#: js/js.js:778
msgid "years ago"
msgstr "поÑледните години"
@@ -165,10 +242,10 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
-msgstr ""
+msgstr "Грешка"
#: js/oc-vcategories.js:179
msgid "The app name is not specified."
@@ -178,123 +255,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "СподелÑне"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Парола"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr ""
@@ -334,7 +429,7 @@ msgstr ""
#: lostpassword/templates/resetpassword.php:8
msgid "New password"
-msgstr ""
+msgstr "Ðова парола"
#: lostpassword/templates/resetpassword.php:11
msgid "Reset password"
@@ -376,7 +471,7 @@ msgstr ""
msgid "Add"
msgstr "ДобавÑне"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -386,147 +481,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr ""
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr ""
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr ""
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr ""
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr ""
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr ""
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr ""
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr ""
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr ""
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr ""
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr ""
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "уеб уÑлуги под Ваш контрол"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr ""
@@ -548,16 +571,16 @@ msgstr ""
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr ""
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
+#: templates/login.php:49
+msgid "Alternative Logins"
msgstr ""
#: templates/part.pagenavi.php:3
@@ -572,17 +595,3 @@ msgstr ""
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po
index 14ac7f3c7b6..827d1e52d1f 100644
--- a/l10n/bg_BG/files.po
+++ b/l10n/bg_BG/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
@@ -24,55 +24,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "ЛипÑва временна папка"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -80,149 +80,152 @@ msgstr ""
msgid "Files"
msgstr "Файлове"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Изтриване"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Преименуване"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "препокриване"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "отказ"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "възтановÑване"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
msgstr ""
-#: js/files.js:224
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
-msgid "Upload Error"
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
msgstr ""
-#: js/files.js:241
-msgid "Close"
+#: js/files.js:261
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
+#: js/files.js:261
+msgid "Upload Error"
msgstr ""
-#: js/files.js:280
+#: js/files.js:272
+msgid "Close"
+msgstr "Затвори"
+
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Качването е ÑпрÑно."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Име"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Размер"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Променено"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Качване"
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -271,36 +274,44 @@ msgstr "Папка"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Качване"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ÐÑма нищо тук. Качете нещо."
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "ИзтеглÑне"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Файлът който Ñте избрали за качване е прекалено голÑм"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/bg_BG/files_encryption.po b/l10n/bg_BG/files_encryption.po
index c5aca629edc..4ec6da246a3 100644
--- a/l10n/bg_BG/files_encryption.po
+++ b/l10n/bg_BG/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 20:51+0000\n"
-"Last-Translator: Stefan Ilivanov <ilivanov@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Криптиране"
-#: templates/settings.php:6
-msgid "Enable Encryption"
-msgstr "Включване на криптирането"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
#: templates/settings.php:7
-msgid "None"
-msgstr "ÐÑма"
+msgid "Exclude the following file types from encryption:"
+msgstr ""
#: templates/settings.php:12
-msgid "Exclude the following file types from encryption"
-msgstr "Изключване на Ñледните файлови типове от криптирането"
+msgid "None"
+msgstr "ÐÑма"
diff --git a/l10n/bg_BG/files_external.po b/l10n/bg_BG/files_external.po
index 656df3768cc..66a058cb877 100644
--- a/l10n/bg_BG/files_external.po
+++ b/l10n/bg_BG/files_external.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 20:47+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 10:20+0000\n"
"Last-Translator: Stefan Ilivanov <ilivanov@gmail.com>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
@@ -42,13 +42,13 @@ msgstr ""
msgid "Error configuring Google Drive storage"
msgstr ""
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
msgstr ""
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
@@ -77,7 +77,7 @@ msgstr "Опции"
#: templates/settings.php:12
msgid "Applicable"
-msgstr ""
+msgstr "Приложимо"
#: templates/settings.php:27
msgid "Add mount point"
diff --git a/l10n/bg_BG/files_trashbin.po b/l10n/bg_BG/files_trashbin.po
new file mode 100644
index 00000000000..bd5ca7e1fe6
--- /dev/null
+++ b/l10n/bg_BG/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 10:30+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bg_BG\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Име"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "ВъзтановÑване"
diff --git a/l10n/bg_BG/files_versions.po b/l10n/bg_BG/files_versions.po
index 0b1e6c05270..c79f0e63842 100644
--- a/l10n/bg_BG/files_versions.po
+++ b/l10n/bg_BG/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 20:49+0000\n"
-"Last-Translator: Stefan Ilivanov <ilivanov@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:7
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "ИÑториÑ"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "ВерÑии"
-
-#: templates/settings-personal.php:10
-msgid "This will delete all existing backup versions of your files"
-msgstr "Това дейÑтвие ще изтрие вÑички налични архивни верÑии на Вашите файлове"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/bg_BG/lib.po b/l10n/bg_BG/lib.po
index 516eee347ab..a027f6cb721 100644
--- a/l10n/bg_BG/lib.po
+++ b/l10n/bg_BG/lib.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 20:43+0000\n"
-"Last-Translator: Stefan Ilivanov <ilivanov@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:301
+#: app.php:339
msgid "Help"
msgstr "Помощ"
-#: app.php:308
+#: app.php:346
msgid "Personal"
msgstr "Лични"
-#: app.php:313
+#: app.php:351
msgid "Settings"
msgstr "ÐаÑтройки"
-#: app.php:318
+#: app.php:356
msgid "Users"
msgstr "Потребители"
-#: app.php:325
+#: app.php:363
msgid "Apps"
msgstr "ПриложениÑ"
-#: app.php:327
+#: app.php:365
msgid "Admin"
msgstr "Ðдмин"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ИзтеглÑнето като ZIP е изключено."
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Файловете трÑбва да Ñе изтеглÑÑ‚ един по един."
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Ðазад към файловете"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Избраните файлове Ñа прекалено големи за генерирането на ZIP архив."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "не може да Ñе определи"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Приложението не е включено."
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Възникна проблем Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñта"
@@ -82,55 +86,152 @@ msgstr "ТекÑÑ‚"
msgid "Images"
msgstr "Снимки"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "преди Ñекунди"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "преди 1 минута"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "преди %d минути"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "преди 1 чаÑ"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "преди %d чаÑа"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "днеÑ"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "вчера"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "преди %d дни"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "поÑледниÑÑ‚ меÑец"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "преди %d меÑеца"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "поÑледната година"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "поÑледните години"
diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po
index 1e14fd56cd5..475c91347d8 100644
--- a/l10n/bg_BG/settings.po
+++ b/l10n/bg_BG/settings.po
@@ -4,15 +4,15 @@
#
# Translators:
# <adn.adin@gmail.com>, 2011.
-# Stefan Ilivanov <ilivanov@gmail.com>, 2011.
+# Stefan Ilivanov <ilivanov@gmail.com>, 2011,2013.
# Yasen Pramatarov <yasen@lindeas.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2011-07-25 16:05+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Възникна проблем Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñта"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -32,7 +41,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -44,29 +53,21 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Възникна проблем Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñта"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
#: ajax/setlanguage.php:15
msgid "Language changed"
-msgstr ""
+msgstr "Езикът е променен"
+
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ðевалидна заÑвка"
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
@@ -82,42 +83,74 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr ""
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Включено"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Грешка"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr ""
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
-msgstr ""
+msgstr "__language_name__"
#: templates/apps.php:10
msgid "Add your App"
-msgstr ""
+msgstr "Добавете Ваше приложение"
#: templates/apps.php:11
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
-msgstr ""
+msgstr "Изберете приложение"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "ОбновÑване"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -147,83 +180,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr ""
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Парола"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
-msgstr ""
+msgstr "ПромÑната на паролата не беше извършена"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
-msgstr ""
+msgstr "Текуща парола"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
+msgstr "Ðова парола"
+
+#: templates/personal.php:42
+msgid "Change password"
+msgstr "ПромÑна на паролата"
+
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
msgstr ""
-#: templates/personal.php:26
-msgid "show"
+#: templates/personal.php:55
+msgid "Your display name was changed"
msgstr ""
-#: templates/personal.php:27
-msgid "Change password"
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
msgstr ""
-#: templates/personal.php:33
+#: templates/personal.php:68
msgid "Email"
msgstr "E-mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
-msgstr ""
+msgstr "Ð’Ð°ÑˆÐ¸Ñ email адреÑ"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr ""
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
-msgstr ""
+msgstr "Език"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
-msgstr ""
+msgstr "Помогнете Ñ Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð°"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,42 +270,50 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Име"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Групи"
#: templates/users.php:32
msgid "Create"
-msgstr ""
+msgstr "Създаване"
#: templates/users.php:35
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
-msgstr ""
+msgstr "Други"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Изтриване"
diff --git a/l10n/bg_BG/user_ldap.po b/l10n/bg_BG/user_ldap.po
index e45d6efc2fb..fd4876ac72a 100644
--- a/l10n/bg_BG/user_ldap.po
+++ b/l10n/bg_BG/user_ldap.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2012-08-12 22:45+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Парола"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Помощ"
diff --git a/l10n/bg_BG/user_webdavauth.po b/l10n/bg_BG/user_webdavauth.po
index 05f8507380b..c541db398fd 100644
--- a/l10n/bg_BG/user_webdavauth.po
+++ b/l10n/bg_BG/user_webdavauth.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-09 00:04+0100\n"
-"PO-Revision-Date: 2012-11-09 09:06+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/bn_BD/core.po b/l10n/bn_BD/core.po
index 69efe6f583c..6b0d2ba2698 100644
--- a/l10n/bn_BD/core.po
+++ b/l10n/bn_BD/core.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <paul_shubhra@yahoo.com>, 2013.
# Shubhra Paul <paul_shubhra@yahoo.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +19,29 @@ msgstr ""
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "%s নামের বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি আপনার সাথে à¦à¦•টা ফাইল ভাগাভাগি করেছেন"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "%s নামের বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি আপনার সাথে à¦à¦•টা ফোলà§à¦¡à¦¾à¦° ভাগাভাগি করেছেন"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "%s নামের বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী \"%s\" ফাইলটি আপনার সাথে ভাগাভাগি করেছেন। à¦à¦Ÿà¦¿ à¦à¦–ন à¦à¦–ানে ডাউনলোড করার জনà§à¦¯ সà§à¦²à¦­à¦ƒ %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "%s নামের বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী \"%s\" ফোলà§à¦¡à¦¾à¦°à¦Ÿà¦¿ আপনার সাথে ভাগাভাগি করেছেন। à¦à¦Ÿà¦¿ à¦à¦–ন à¦à¦–ানে ডাউনলোড করার জনà§à¦¯ সà§à¦²à¦­à¦ƒ %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -51,8 +52,9 @@ msgid "No category to add?"
msgstr "যোগ করার মত কোন কà§à¦¯à¦¾à¦Ÿà§‡à¦—রি নেই ?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "à¦à¦‡ কà§à¦¯à¦¾à¦Ÿà§‡à¦—রিটি বিদà§à¦¯à¦®à¦¾à¦¨à¦ƒ"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -64,7 +66,7 @@ msgstr "অবজেকà§à¦Ÿà§‡à¦° ধরণটি পà§à¦°à¦¦à¦¾à¦¨ করা
#: ajax/vcategories/removeFromFavorites.php:30
#, php-format
msgid "%s ID not provided."
-msgstr ""
+msgstr "%s ID পà§à¦°à¦¦à¦¾à¦¨ করা হয় নি।"
#: ajax/vcategories/addToFavorites.php:35
#, php-format
@@ -73,76 +75,152 @@ msgstr "পà§à¦°à¦¿à§Ÿà¦¤à§‡ %s যোগ করতে সমসà§à¦¯à¦¾ দà§
#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
msgid "No categories selected for deletion."
-msgstr "মà§à¦›à§‡ ফেলার জনà§à¦¯ কোন কà§à¦¯à¦¾à¦Ÿà§‡à¦—রি নিরà§à¦¬à¦¾à¦šà¦¨ করা হয় নি।"
+msgstr "মà§à¦›à§‡ ফেলার জনà§à¦¯ কোন কà§à¦¯à¦¾à¦Ÿà§‡à¦—রি নিরà§à¦¬à¦¾à¦šà¦¨ করা হয় নি ।"
#: ajax/vcategories/removeFromFavorites.php:35
#, php-format
msgid "Error removing %s from favorites."
msgstr "পà§à¦°à¦¿à§Ÿ থেকে %s সরিয়ে ফেলতে সমসà§à¦¯à¦¾ দেখা দিয়েছে।"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "রবিবার"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "সোমবার"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "মঙà§à¦—লবার"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "বà§à¦§à¦¬à¦¾à¦°"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "বৃহষà§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "শà§à¦•à§à¦°à¦¬à¦¾à¦°"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "শনিবার"
+
+#: js/config.php:33
+msgid "January"
+msgstr "জানà§à§Ÿà¦¾à¦°à¦¿"
+
+#: js/config.php:33
+msgid "February"
+msgstr "ফেবà§à¦°à§à§Ÿà¦¾à¦°à¦¿"
+
+#: js/config.php:33
+msgid "March"
+msgstr "মারà§à¦š"
+
+#: js/config.php:33
+msgid "April"
+msgstr "à¦à¦ªà§à¦°à¦¿à¦²"
+
+#: js/config.php:33
+msgid "May"
+msgstr "মে"
+
+#: js/config.php:33
+msgid "June"
+msgstr "জà§à¦¨"
+
+#: js/config.php:33
+msgid "July"
+msgstr "জà§à¦²à¦¾à¦‡"
+
+#: js/config.php:33
+msgid "August"
+msgstr "অগাষà§à¦Ÿ"
+
+#: js/config.php:33
+msgid "September"
+msgstr "সেপà§à¦Ÿà§‡à¦®à§à¦¬à¦°"
+
+#: js/config.php:33
+msgid "October"
+msgstr "অকà§à¦Ÿà§‹à¦¬à¦°"
+
+#: js/config.php:33
+msgid "November"
+msgstr "নভেমà§à¦¬à¦°"
+
+#: js/config.php:33
+msgid "December"
+msgstr "ডিসেমà§à¦¬à¦°"
+
+#: js/js.js:284
msgid "Settings"
msgstr "নিয়ামকসমূহ"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "সেকেনà§à¦¡ পূরà§à¦¬à§‡"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 মিনিট পূরà§à¦¬à§‡"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} মিনিট পূরà§à¦¬à§‡"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 ঘনà§à¦Ÿà¦¾ পূরà§à¦¬à§‡"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} ঘনà§à¦Ÿà¦¾ পূরà§à¦¬à§‡"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "আজ"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "গতকাল"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} দিন পূরà§à¦¬à§‡"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "গতমাস"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} মাস পূরà§à¦¬à§‡"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "মাস পূরà§à¦¬à§‡"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "গত বছর"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "বছর পূরà§à¦¬à§‡"
#: js/oc-dialogs.js:126
msgid "Choose"
-msgstr "নিরà§à¦¬à¦¾à¦šà¦¨"
+msgstr "বেছে নিন"
#: js/oc-dialogs.js:146 js/oc-dialogs.js:166
msgid "Cancel"
-msgstr "বাতিল"
+msgstr "বাতির"
#: js/oc-dialogs.js:162
msgid "No"
@@ -162,8 +240,8 @@ msgid "The object type is not specified."
msgstr "অবজেকà§à¦Ÿà§‡à¦° ধরণটি সà§à¦¨à¦¿à¦°à§à¦¦à¦¿à¦·à§à¦Ÿ নয়।"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "সমসà§à¦¯à¦¾"
@@ -175,134 +253,152 @@ msgstr "অà§à¦¯à¦¾à¦ªà§‡à¦° নামটি সà§à¦¨à¦¿à¦°à§à¦¦à¦¿à¦·à§à¦Ÿ
msgid "The required file {file} is not installed!"
msgstr "আবশà§à¦¯à¦¿à¦• {file} টি সংসà§à¦¥à¦¾à¦ªà¦¿à¦¤ নেই !"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "ভাগাভাগি কর"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "ভাগাভাগিকৃত"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
-msgstr "ভাগাভাগি করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে"
+msgstr "ভাগাভাগি করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে "
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
-msgstr "ভাগাভাগি বাতিল করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে"
+msgstr "ভাগাভাগি বাতিল করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
-msgstr "অনà§à¦®à¦¤à¦¿ পরিবরà§à¦¤à¦¨ করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে"
+msgstr "অনà§à¦®à¦¤à¦¿à¦¸à¦®à§‚হ পরিবরà§à¦¤à¦¨ করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
-msgstr ""
+msgstr "{owner} আপনার à¦à¦¬à¦‚ {group} গোষà§à¦ à§€à¦° সাথে ভাগাভাগি করেছেন"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
-msgstr ""
+msgstr "{owner} আপনার সাথে ভাগাভাগি করেছেন"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
-msgstr "যাদের সাথে ভাগাভাগি করবে"
+msgstr "যাদের সাথে ভাগাভাগি করা হয়েছে"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
-msgstr "লিংক সহযোগে ভাগাভাগি"
+msgstr "লিংকের সাথে ভাগাভাগি কর"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
-msgstr "কূটশবà§à¦¦à¦¦à§à¦¬à¦¾à¦°à¦¾ সà§à¦°à¦•à§à¦·à¦¿à¦¤"
+msgstr "কূটশবà§à¦¦ সà§à¦°à¦•à§à¦·à¦¿à¦¤"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "কূটশবà§à¦¦"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦° সাথে ই-মেইল যà§à¦•à§à¦¤ কর"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "পাঠাও"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
-msgstr "ই-মেইলের মাধà§à¦¯à¦®à§‡ ভাগাভাগি করঃ"
+msgstr "ই-মেইলের মাধà§à¦¯à¦®à§‡ ভাগাভাগি করà§à¦¨à¦ƒ"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "কোন বà§à¦¯à¦•à§à¦¤à¦¿ খà§à¦à¦œà§‡ পাওয়া গেল না"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
-msgstr "পূনরায় ভাগাভাগি করার অনà§à¦®à¦¤à¦¿ নেই"
+msgstr "পূনঃরায় ভাগাভাগি অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
-msgstr ""
+msgstr "{user} à¦à¦° সাথে {item} ভাগাভাগি করা হয়েছে"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
-msgstr "ভাগাভাগি বাতিল"
+msgstr "ভাগাভাগি বাতিল কর"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
-msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করতে পারবে"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করতে পারবেন"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
-msgstr "অধিগমà§à¦¯à¦¤à¦¾à¦° নিয়নà§à¦¤à§à¦°à¦£"
+msgstr "অধিগমà§à¦¯à¦¤à¦¾ নিয়নà§à¦¤à§à¦°à¦£"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
-msgstr "তৈরি কর"
+msgstr "তৈরী করà§à¦¨"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "পরিবরà§à¦§à¦¨ কর"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "মà§à¦›à§‡ ফেল"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "ভাগাভাগি কর"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "কূটশবà§à¦¦à¦¦à§à¦¬à¦¾à¦°à¦¾ সà§à¦°à¦•à§à¦·à¦¿à¦¤"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
-msgstr "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ বাতিল করতে সমসà§à¦¯à¦¾"
+msgstr "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ বাতিল করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
-msgstr "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ করতে সমসà§à¦¯à¦¾"
+msgstr "মেয়াদোতà§à¦¤à§€à¦°à§à¦£ হওয়ার তারিখ নিরà§à¦§à¦¾à¦°à¦£ করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "পাঠানো হচà§à¦›à§‡......"
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "ই-মেইল পাঠানো হয়েছে"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£"
#: lostpassword/templates/email.php:2
msgid "Use the following link to reset your password: {link}"
-msgstr "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£ করতে নিমà§à¦¨à§‹à¦•à§à¦¤ লিংকে কà§à¦²à¦¿à¦• করà§à¦¨:{link}"
+msgstr "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পূনঃনিরà§à¦§à¦¾à¦°à¦£ করার জনà§à¦¯ নিমà§à¦¨à§‹à¦•à§à¦¤ লিংকটি বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¦ƒ {link}"
#: lostpassword/templates/lostpassword.php:3
msgid "You will receive a link to reset your password via Email."
-msgstr "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£à§‡à¦° জনà§à¦¯ à¦à¦•টি লিংক ই-মেইলের মাধà§à¦¯à¦®à§‡ পাঠানো হয়েছে।"
+msgstr "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£à§‡à¦° জনà§à¦¯ à¦à¦•টি টূনঃনিরà§à¦§à¦¾à¦°à¦£ লিংকটি আপনাকে ই-মেইলে পাঠানো হয়েছে ।"
#: lostpassword/templates/lostpassword.php:5
msgid "Reset email send."
@@ -315,19 +411,19 @@ msgstr "অনà§à¦°à§‹à¦§ বà§à¦¯à¦°à§à¦¥ !"
#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39
#: templates/login.php:28
msgid "Username"
-msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি"
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
#: lostpassword/templates/lostpassword.php:14
msgid "Request reset"
-msgstr "পূনঃনিরà§à¦§à¦¾à¦°à¦£à§‡à¦° জনà§à¦¯ অনà§à¦°à§‹à¦§"
+msgstr "অনà§à¦°à§‹à¦§ পূনঃনিরà§à¦§à¦¾à¦°à¦£"
#: lostpassword/templates/resetpassword.php:4
msgid "Your password was reset"
-msgstr "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পূনঃনিরà§à¦§à¦¾à¦°à¦£ করা হয়েছে"
+msgstr "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পূনঃনিরà§à¦§à¦¾à¦°à¦£ করা হয়েছে"
#: lostpassword/templates/resetpassword.php:5
msgid "To login page"
-msgstr "পà§à¦°à¦¬à§‡à¦¶ পাতায়"
+msgstr "পà§à¦°à¦¬à§‡à¦¶ পৃষà§à¦ à¦¾à§Ÿ"
#: lostpassword/templates/resetpassword.php:8
msgid "New password"
@@ -335,7 +431,7 @@ msgstr "নতà§à¦¨ কূটশবà§à¦¦"
#: lostpassword/templates/resetpassword.php:11
msgid "Reset password"
-msgstr "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£"
+msgstr "কূটশবà§à¦¦ পূনঃনিরà§à¦§à¦¾à¦°à¦£ কর"
#: strings.php:5
msgid "Personal"
@@ -343,7 +439,7 @@ msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত"
#: strings.php:6
msgid "Users"
-msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারিবৃনà§à¦¦"
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
#: strings.php:7
msgid "Apps"
@@ -351,7 +447,7 @@ msgstr "অà§à¦¯à¦¾à¦ªà¦¸"
#: strings.php:8
msgid "Admin"
-msgstr "পà§à¦°à¦¶à¦¾à¦¸à¦•"
+msgstr "পà§à¦°à¦¶à¦¾à¦¸à¦¨"
#: strings.php:9
msgid "Help"
@@ -373,7 +469,7 @@ msgstr "কà§à¦¯à¦¾à¦Ÿà§‡à¦—রি সমà§à¦ªà¦¾à¦¦à¦¨à¦¾"
msgid "Add"
msgstr "যোগ কর"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "নিরাপতà§à¦¤à¦¾à¦œà¦¨à¦¿à¦¤ সতরà§à¦•তা"
@@ -383,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
-msgstr "<strong>পà§à¦°à¦¶à¦¾à¦¸à¦• à¦à¦•াউনà§à¦Ÿ</strong> তৈরি কর"
+msgstr "<strong>পà§à¦°à¦¶à¦¾à¦¸à¦• à¦à¦•াউনà§à¦Ÿ</strong> তৈরী করà§à¦¨"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "সà§à¦šà¦¾à¦°à§"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
-msgstr "ডাটা ফোলà§à¦¡à¦¾à¦°"
+msgstr "ডাটা ফোলà§à¦¡à¦¾à¦° "
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
-msgstr "ডাটাবেজ কনফিগার কর"
+msgstr "ডাটাবেচ কনফিগার করà§à¦¨"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "বà§à¦¯à¦¬à¦¹à§ƒà¦¤ হবে"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
-msgstr "ডাটাবেজ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি"
+msgstr "ডাটাবেজ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "ডাটাবেজ কূটশবà§à¦¦"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "ডাটাবেজের নাম"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
-msgstr "ডাটাবেজ টেবিলসà§à¦ªà§‡à¦¸"
+msgstr "ডাটাবেজ টেবলসà§à¦ªà§‡à¦¸"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "ডাটাবেজ হোসà§à¦Ÿ"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
-msgstr "সেট-আপ সà§à¦¸à¦®à§à¦ªà¦¨à§à¦¨ কর"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "রবিবার"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "সোমবার"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "মঙà§à¦—লবার"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "বà§à¦§à¦¬à¦¾à¦°"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "বৃহষà§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "শà§à¦•à§à¦°à¦¬à¦¾à¦°"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "শনিবার"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "জানà§à§Ÿà¦¾à¦°à¦¿"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "ফেবà§à¦°à§à§Ÿà¦¾à¦°à¦¿"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "মারà§à¦š"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "à¦à¦ªà§à¦°à¦¿à¦²"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "মে"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "জà§à¦¨"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "জà§à¦²à¦¾à¦‡"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "অগাসà§à¦Ÿ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "সেপà§à¦Ÿà§‡à¦®à§à¦¬à¦°"
+msgstr "সেটআপ সà§à¦¸à¦®à§à¦ªà¦¨à§à¦¨ কর"
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "অকà§à¦Ÿà§‹à¦¬à¦°"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "নভেমà§à¦¬à¦°"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "ডিসেমà§à¦¬à¦°"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
-msgstr "ওয়েব সেবাসমূহ à¦à¦–ন আপনার হাতের মà§à¦ à§‹à§Ÿ"
+msgstr "ওয়েব সারà§à¦­à¦¿à¦¸à§‡à¦° নিয়নà§à¦¤à§à¦°à¦£ আপনার হাতের মà§à¦ à§‹à§Ÿ"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "পà§à¦°à¦¸à§à¦¥à¦¾à¦¨"
@@ -543,19 +567,19 @@ msgstr ""
#: templates/login.php:19
msgid "Lost your password?"
-msgstr "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ হারিয়েছেন ?"
+msgstr "কূটশবà§à¦¦ হারিয়েছেন?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "মনে রাখ"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "পà§à¦°à¦¬à§‡à¦¶"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "আপনি পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করেছেন"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -568,18 +592,4 @@ msgstr "পরবরà§à¦¤à§€"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "নিরাপতà§à¦¤à¦¾à¦¬à¦¿à¦·à§Ÿà¦• সতরà§à¦•বাণী"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "যাচাই কর"
+msgstr "%s ভারà§à¦¸à¦¨à§‡ ownCloud পরিবরà§à¦§à¦¨ করা হচà§à¦›à§‡, à¦à¦œà¦¨à§à¦¯ কিছৠসময় পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤"
diff --git a/l10n/bn_BD/files.po b/l10n/bn_BD/files.po
index 8cad0bc2694..0cc1231047b 100644
--- a/l10n/bn_BD/files.po
+++ b/l10n/bn_BD/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
@@ -21,210 +21,213 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s কে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦­à¦¬ হলো না - à¦à¦‡ নামের ফাইল বিদà§à¦¯à¦®à¦¾à¦¨"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "%s কে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦­à¦¬ হলো না"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "ফাইলের নাম পরিবরà§à¦¤à¦¨ করা সমà§à¦­à¦¬ হলো না"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "কোন ফাইল আপলোড করা হয় নি। সমসà§à¦¯à¦¾ অজà§à¦žà¦¾à¦¤à¥¤"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "কোন সমসà§à¦¯à¦¾ নেই, ফাইল আপলোড সà§à¦¸à¦®à§à¦ªà¦¨à§à¦¨ হয়েছে"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
-msgstr ""
+msgstr "আপলোড করা ফাইলটি php.ini তে বরà§à¦£à¦¿à¦¤ upload_max_filesize নিরà§à¦¦à§‡à¦¶à¦¿à¦¤ আয়তন অতিকà§à¦°à¦® করছেঃ"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "আপলোড করা ফাইলটি HTML ফরà§à¦®à§‡ নিরà§à¦§à¦¾à¦°à¦¿à¦¤ MAX_FILE_SIZE নিরà§à¦¦à§‡à¦¶à¦¿à¦¤ সরà§à¦¬à§‹à¦šà§à¦š আকার অতিকà§à¦°à¦® করেছে "
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
-msgstr "আপলোড করা ফাইলটি আংশিক আপলোড হয়েছে"
+msgstr "আপলোড করা ফাইলটি আংশিক আপলোড করা হয়েছে"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "কোন ফাইল আপলোড করা হয় নি"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
-msgstr "অসà§à¦¥à¦¾à§Ÿà§€ ফোলà§à¦¡à¦¾à¦°à¦Ÿà¦¿ খোয়া গিয়েছে "
+msgstr "অসà§à¦¥à¦¾à§Ÿà§€ ফোলà§à¦¡à¦¾à¦° খোয়া গিয়েছে"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
-msgstr "ডিসà§à¦•ে লিখতে পারা গেল না"
+msgstr "ডিসà§à¦•ে লিখতে বà§à¦¯à¦°à§à¦¥"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "ভà§à¦² ডিরেকà§à¦Ÿà¦°à¦¿"
#: appinfo/app.php:10
msgid "Files"
msgstr "ফাইল"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "ভাগাভাগি বাতিল"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "মà§à¦›à§‡ ফেল"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "পূনঃনামকরণ"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "মà§à¦²à¦¤à§à¦¬à¦¿"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} টি বিদà§à¦¯à¦®à¦¾à¦¨"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
-msgstr "নাম সà§à¦ªà¦¾à¦°à¦¿à¦¶ কর"
+msgstr "নাম সà§à¦ªà¦¾à¦°à¦¿à¦¶ করà§à¦¨"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "বাতিল"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "কà§à¦°à¦¿à§Ÿà¦¾ পà§à¦°à¦¤à§à¦¯à¦¾à¦¹à¦¾à¦°"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} কে {old_name} নামে পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "{files} ভাগাভাগি বাতিল কর"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} মà§à¦›à§‡ ফেলা হয়েছে"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "টি à¦à¦•টি অননà§à¦®à§‹à¦¦à¦¿à¦¤ নাম।"
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "ফাইলের নামটি ফাà¦à¦•া রাখা যাবে না।"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
+msgstr "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' à¦à¦¬à¦‚ '*' অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়।"
+
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr "আপনার ফাইলটি আপলোড করা সমà§à¦­à¦¬ হলো না, কেননা à¦à¦Ÿà¦¿ হয় à¦à¦•টি ফোলà§à¦¡à¦¾à¦° কিংবা à¦à¦° আকার ০ বাইট"
+
+#: js/files.js:261
msgid "Upload Error"
-msgstr "আপলোড করতে সমসà§à¦¯à¦¾"
+msgstr "আপলোড করতে সমসà§à¦¯à¦¾ "
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
-msgstr ""
+msgstr "বনà§à¦§"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "মà§à¦²à¦¤à§à¦¬à¦¿"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
-msgstr "à§§ টি ফাইল আপলোড করা হচà§à¦›à§‡"
+msgstr "১টি ফাইল আপলোড করা হচà§à¦›à§‡"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
-msgstr ""
+msgstr "{count} টি ফাইল আপলোড করা হচà§à¦›à§‡"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
-msgstr "আপলোড বাতিল করা হয়েছে ।"
+msgstr "আপলোড বাতিল করা হয়েছে।"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
-msgstr ""
+msgstr "ফাইল আপলোড চলমান। à¦à¦‡ পৃষà§à¦ à¦¾ পরিতà§à¦¯à¦¾à¦— করলে আপলোড বাতিল করা হবে।"
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
-msgstr ""
+msgstr "URL ফাà¦à¦•া রাখা যাবে না।"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
+msgstr "ফোলà§à¦¡à¦¾à¦°à§‡à¦° নামটি সঠিক নয়। 'ভাগাভাগি করা' শà§à¦§à§à¦®à¦¾à¦¤à§à¦° Owncloud à¦à¦° জনà§à¦¯ সংরকà§à¦·à¦¿à¦¤à¥¤"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "সà§à¦•à§à¦¯à¦¾à¦¨ করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "নাম"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "আকার"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "পরিবরà§à¦¤à¦¿à¦¤"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
-msgstr ""
+msgstr "১টি ফোলà§à¦¡à¦¾à¦°"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
-msgstr ""
+msgstr "{count} টি ফোলà§à¦¡à¦¾à¦°"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
-msgstr ""
+msgstr "১টি ফাইল"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
-msgstr ""
+msgstr "{count} টি ফাইল"
+
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "আপলোড"
#: templates/admin.php:5
msgid "File handling"
-msgstr "ফাইল হà§à¦¯à¦¾à¦¨à§à¦¡à¦²à¦¿à¦‚"
+msgstr "ফাইল হà§à¦¯à¦¾à¦°à§à¦¡à¦²à¦¿à¦‚"
#: templates/admin.php:7
msgid "Maximum upload size"
@@ -232,27 +235,27 @@ msgstr "আপলোডের সরà§à¦¬à§‹à¦šà§à¦š আকার"
#: templates/admin.php:10
msgid "max. possible: "
-msgstr "সমà§à¦­à¦¾à¦¬à§à¦¯ সরà§à¦¬à§‹à¦šà§à¦šà¦ƒ"
+msgstr "অনà§à¦®à§‹à¦¦à¦¿à¦¤ সরà§à¦¬à§‹à¦šà§à¦š আকার"
#: templates/admin.php:15
msgid "Needed for multi-file and folder downloads."
-msgstr "à¦à¦•াধিক ফাইল à¦à¦¬à¦‚ ফোলà§à¦¡à¦¾à¦° ডাউনলোড করার কà§à¦·à§‡à¦¤à§à¦°à§‡ আবশà§à¦¯à¦•।"
+msgstr "à¦à¦•াধিক ফাইল à¦à¦¬à¦‚ ফোলà§à¦¡à¦¾à¦° ডাউনলোড করার জনà§à¦¯ আবশà§à¦¯à¦•।"
#: templates/admin.php:17
msgid "Enable ZIP-download"
-msgstr "জিপ ডাউনলোড সকà§à¦°à¦¿à§Ÿ কর"
+msgstr "ZIP ডাউনলোড সকà§à¦°à¦¿à§Ÿ কর"
#: templates/admin.php:20
msgid "0 is unlimited"
-msgstr "০ à¦à¦° অরà§à¦¥ হলো অসীম"
+msgstr "০ à¦à¦° অরà§à¦¥ অসীম"
#: templates/admin.php:22
msgid "Maximum input size for ZIP files"
-msgstr "জিপ ফাইলের জনà§à¦¯ সরà§à¦¬à§‹à¦šà§à¦š ইনপà§à¦Ÿ"
+msgstr "ZIP ফাইলের ইনপà§à¦Ÿà§‡à¦° সরà§à¦¬à§‹à¦šà§à¦š আকার"
#: templates/admin.php:26
msgid "Save"
-msgstr "সংরকà§à¦·à¦£ কর"
+msgstr "সংরকà§à¦·à¦¨ কর"
#: templates/index.php:7
msgid "New"
@@ -268,38 +271,46 @@ msgstr "ফোলà§à¦¡à¦¾à¦°"
#: templates/index.php:14
msgid "From link"
-msgstr ""
+msgstr " লিংক থেকে"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "আপলোড"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "আপলোড বাতিল কর"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
-msgstr "à¦à¦–ানে কোন কিছà§à¦‡ নেই। কিছৠআপলোড করà§à¦¨ !"
+msgstr "à¦à¦–ানে কিছà§à¦‡ নেই। কিছৠআপলোড করà§à¦¨ !"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "ডাউনলোড"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "ভাগাভাগি বাতিল "
+
+#: templates/index.php:105
msgid "Upload too large"
-msgstr "আপলোডের আকার অনেক বড়"
+msgstr "আপলোডের আকারটি অনেক বড়"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "আপনি à¦à¦‡ সারà§à¦­à¦¾à¦°à§‡ আপলোড করার জনà§à¦¯ অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফাইলের সরà§à¦¬à§‹à¦šà§à¦š আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষà§à¦Ÿà¦¾ করছেন "
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
-msgstr "ফাইল সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡, দয়া করে অপেকà§à¦·à¦¾ করà§à¦¨à¥¤"
+msgstr "ফাইলগà§à¦²à§‹ সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡, দয়া করে অপেকà§à¦·à¦¾ করà§à¦¨à¥¤"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "বরà§à¦¤à¦®à¦¾à¦¨ সà§à¦•à§à¦¯à¦¾à¦¨à¦¿à¦‚"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/bn_BD/files_encryption.po b/l10n/bn_BD/files_encryption.po
index da32933e271..7c8a89fc3b7 100644
--- a/l10n/bn_BD/files_encryption.po
+++ b/l10n/bn_BD/files_encryption.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-02 00:04+0100\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,18 +17,22 @@ msgstr ""
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
+msgstr "সংকেতায়ন"
+
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:6
-msgid "Enable Encryption"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
msgstr ""
#: templates/settings.php:7
-msgid "None"
+msgid "Exclude the following file types from encryption:"
msgstr ""
#: templates/settings.php:12
-msgid "Exclude the following file types from encryption"
-msgstr ""
+msgid "None"
+msgstr "কোনটিই নয়"
diff --git a/l10n/bn_BD/files_external.po b/l10n/bn_BD/files_external.po
index 601f3807ce2..fc11b94750f 100644
--- a/l10n/bn_BD/files_external.po
+++ b/l10n/bn_BD/files_external.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-08-12 22:34+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-11 00:05+0100\n"
+"PO-Revision-Date: 2013-01-10 10:28+0000\n"
+"Last-Translator: Shubhra Paul <paul_shubhra@yahoo.com>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,27 +19,27 @@ msgstr ""
#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23
msgid "Access granted"
-msgstr ""
+msgstr "অধিগমনের অনà§à¦®à¦¤à¦¿ পà§à¦°à¦¦à¦¾à¦¨ করা হলো"
#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86
msgid "Error configuring Dropbox storage"
-msgstr ""
+msgstr "Dropbox সংরকà§à¦·à¦£à¦¾à¦—ার নিরà§à¦§à¦¾à¦°à¦£ করতে সমসà§à¦¯à¦¾ "
#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
msgid "Grant access"
-msgstr ""
+msgstr "অধিগমনের অনà§à¦®à¦¤à¦¿ পà§à¦°à¦¦à¦¾à¦¨ কর"
#: js/dropbox.js:73 js/google.js:72
msgid "Fill out all required fields"
-msgstr ""
+msgstr "আবশà§à¦¯à¦¿à¦• সমসà§à¦¤ কà§à¦·à§‡à¦¤à§à¦° পূরণ করà§à¦¨"
#: js/dropbox.js:85
msgid "Please provide a valid Dropbox app key and secret."
-msgstr ""
+msgstr "দয়া করে সঠিক à¦à¦¬à¦‚ বৈধ Dropbox app key and secret পà§à¦°à¦¦à¦¾à¦¨ করà§à¦¨à¥¤"
#: js/google.js:26 js/google.js:73 js/google.js:78
msgid "Error configuring Google Drive storage"
-msgstr ""
+msgstr "Google Drive সংরকà§à¦·à¦£à¦¾à¦—ার নিরà§à¦§à¦¾à¦°à¦£ করতে সমসà§à¦¯à¦¾ "
#: lib/config.php:434
msgid ""
@@ -56,47 +56,47 @@ msgstr ""
#: templates/settings.php:3
msgid "External Storage"
-msgstr ""
+msgstr "বাহà§à¦¯à¦¿à¦• সংরকà§à¦·à¦£à¦¾à¦—ার"
#: templates/settings.php:8 templates/settings.php:22
msgid "Mount point"
-msgstr ""
+msgstr "মাউনà§à¦Ÿ পয়েনà§à¦Ÿ"
#: templates/settings.php:9
msgid "Backend"
-msgstr "পà§à¦°à¦¶à¦¾à¦¸à¦•"
+msgstr "পশà§à¦šà¦¾à¦¦à¦ªà¦Ÿ"
#: templates/settings.php:10
msgid "Configuration"
-msgstr ""
+msgstr "কনফিগারেসন"
#: templates/settings.php:11
msgid "Options"
-msgstr ""
+msgstr "বিকলà§à¦ªà¦¸à¦®à§‚হ"
#: templates/settings.php:12
msgid "Applicable"
-msgstr ""
+msgstr "পà§à¦°à¦¯à§‹à¦œà§à¦¯"
#: templates/settings.php:27
msgid "Add mount point"
-msgstr ""
+msgstr "মাউনà§à¦Ÿ পয়েনà§à¦Ÿ যোগ কর"
#: templates/settings.php:85
msgid "None set"
-msgstr ""
+msgstr "কোনটিই নিরà§à¦§à¦¾à¦°à¦£ করা হয় নি"
#: templates/settings.php:86
msgid "All Users"
-msgstr ""
+msgstr "সমসà§à¦¤ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
#: templates/settings.php:87
msgid "Groups"
-msgstr "গোষà§à¦ à§€"
+msgstr "গোষà§à¦ à§€à¦¸à¦®à§‚হ"
#: templates/settings.php:95
msgid "Users"
-msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারিবৃনà§à¦¦"
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী"
#: templates/settings.php:108 templates/settings.php:109
#: templates/settings.php:144 templates/settings.php:145
@@ -105,16 +105,16 @@ msgstr "মà§à¦›à§‡ ফেল"
#: templates/settings.php:124
msgid "Enable User External Storage"
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর বাহà§à¦¯à¦¿à¦• সংরকà§à¦·à¦£à¦¾à¦—ার সকà§à¦°à¦¿à§Ÿ কর"
#: templates/settings.php:125
msgid "Allow users to mount their own external storage"
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীদেরকে তাদের নিজসà§à¦¬ বাহà§à¦¯à¦¿à¦• সংরকà§à¦·à¦¨à¦¾à¦—ার সাউনà§à¦Ÿ করতে অনà§à¦®à§‹à¦¦à¦¨ দাও"
#: templates/settings.php:136
msgid "SSL root certificates"
-msgstr ""
+msgstr "SSL রà§à¦Ÿ সনদপতà§à¦°"
#: templates/settings.php:153
msgid "Import Root Certificate"
-msgstr ""
+msgstr "রà§à¦Ÿ সনদপতà§à¦°à¦Ÿà¦¿ আমদানি করà§à¦¨"
diff --git a/l10n/bn_BD/files_sharing.po b/l10n/bn_BD/files_sharing.po
index 69c55d62484..55a97e9d95c 100644
--- a/l10n/bn_BD/files_sharing.po
+++ b/l10n/bn_BD/files_sharing.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-08-12 22:35+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-11 00:05+0100\n"
+"PO-Revision-Date: 2013-01-10 09:58+0000\n"
+"Last-Translator: Shubhra Paul <paul_shubhra@yahoo.com>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,17 +23,17 @@ msgstr "কূটশবà§à¦¦"
#: templates/authenticate.php:6
msgid "Submit"
-msgstr "পাঠাও"
+msgstr "জমা দাও"
#: templates/public.php:17
#, php-format
msgid "%s shared the folder %s with you"
-msgstr ""
+msgstr "%s আপনার সাথে %s ফোলà§à¦¡à¦¾à¦°à¦Ÿà¦¿ ভাগাভাগি করেছেন"
#: templates/public.php:19
#, php-format
msgid "%s shared the file %s with you"
-msgstr ""
+msgstr "%s আপনার সাথে %s ফাইলটি ভাগাভাগি করেছেন"
#: templates/public.php:22 templates/public.php:38
msgid "Download"
@@ -41,8 +41,8 @@ msgstr "ডাউনলোড"
#: templates/public.php:37
msgid "No preview available for"
-msgstr ""
+msgstr "à¦à¦° জনà§à¦¯ কোন পà§à¦°à¦¾à¦•বীকà§à¦·à¦£ সà§à¦²à¦­ নয়"
#: templates/public.php:43
msgid "web services under your control"
-msgstr "ওয়েব সেবাসমূহ à¦à¦–ন আপনার হাতের মà§à¦ à§‹à§Ÿ"
+msgstr "ওয়েব সারà§à¦­à¦¿à¦¸ আপনার হাতের মà§à¦ à§‹à§Ÿ"
diff --git a/l10n/bn_BD/files_trashbin.po b/l10n/bn_BD/files_trashbin.po
new file mode 100644
index 00000000000..ff75311f2f1
--- /dev/null
+++ b/l10n/bn_BD/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bn_BD\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "রাম"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "১টি ফোলà§à¦¡à¦¾à¦°"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} টি ফোলà§à¦¡à¦¾à¦°"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "১টি ফাইল"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} টি ফাইল"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/bn_BD/files_versions.po b/l10n/bn_BD/files_versions.po
index 9f543cad59e..3c072f78160 100644
--- a/l10n/bn_BD/files_versions.po
+++ b/l10n/bn_BD/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-08-12 22:37+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,26 +17,49 @@ msgstr ""
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:7
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:10
-msgid "This will delete all existing backup versions of your files"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
+msgstr "ইতিহাস"
+
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
-msgstr ""
+msgstr "ফাইল ভারà§à¦¸à¦¨ করা"
#: templates/settings.php:4
msgid "Enable"
-msgstr "সকà§à¦°à¦¿à§Ÿ"
+msgstr "সকà§à¦°à¦¿à§Ÿ "
diff --git a/l10n/bn_BD/lib.po b/l10n/bn_BD/lib.po
index 184ae9bb05d..747a2e28198 100644
--- a/l10n/bn_BD/lib.po
+++ b/l10n/bn_BD/lib.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-07-27 22:23+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,57 +17,61 @@ msgstr ""
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "সহায়িকা"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "নিয়ামকসমূহ"
-#: app.php:304
+#: app.php:356
msgid "Users"
-msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারিবৃনà§à¦¦"
+msgstr "বà§à¦¯à¦­à¦¹à¦¾à¦°à¦•ারী"
-#: app.php:311
+#: app.php:363
msgid "Apps"
-msgstr "অà§à¦¯à¦¾à¦ªà¦¸"
+msgstr "অà§à¦¯à¦¾à¦ª"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "পà§à¦°à¦¶à¦¾à¦¸à¦•"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
-msgstr ""
+msgstr "ZIP ডাউনলোড বনà§à¦§ করা আছে।"
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
-msgstr ""
+msgstr "ফাইলগà§à¦²à§‹ à¦à¦•ে à¦à¦•ে ডাউনলোড করা আবশà§à¦¯à¦•।"
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
-msgstr ""
+msgstr "ফাইলে ফিরে চল"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
+msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলগà§à¦²à§‹ à¦à¦¤à¦‡ বৃহৎ যে জিপ ফাইল তৈরী করা সমà§à¦­à¦¬ নয়।"
+
+#: helper.php:226
+msgid "couldn't be determined"
msgstr ""
#: json.php:28
msgid "Application is not enabled"
-msgstr ""
+msgstr "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েসনটি সকà§à¦°à¦¿à§Ÿ নয়"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
-msgstr "নিশà§à¦šà¦¿à¦¤à¦•রণে সমসà§à¦¯à¦¾ দেখা দিয়েছে"
+msgstr "অনà§à¦®à§‹à¦¦à¦¨ ঘটিত সমসà§à¦¯à¦¾"
#: json.php:51
msgid "Token expired. Please reload page."
-msgstr ""
+msgstr "টোকেন মেয়াদোতà§à¦¤à§€à¦°à§à¦£à¥¤ দয়া করে পৃষà§à¦ à¦¾à¦Ÿà¦¿ পূনরায় লোড করà§à¦¨à¥¤"
#: search/provider/file.php:17 search/provider/file.php:35
msgid "Files"
@@ -81,70 +85,167 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "সেকেনà§à¦¡ পূরà§à¦¬à§‡"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
-msgstr "1 মিনিট পূরà§à¦¬à§‡"
+msgstr "à§§ মিনিট পূরà§à¦¬à§‡"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
-msgstr ""
+msgstr "%d মিনিট পূরà§à¦¬à§‡"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 ঘনà§à¦Ÿà¦¾ পূরà§à¦¬à§‡"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "আজ"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "গতকাল"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
-msgstr ""
+msgstr "%d দিন পূরà§à¦¬à§‡"
-#: template.php:111
+#: template.php:121
msgid "last month"
-msgstr "গতমাস"
+msgstr "গত মাস"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "গত বছর"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "বছর পূরà§à¦¬à§‡"
#: updater.php:75
#, php-format
msgid "%s is available. Get <a href=\"%s\">more information</a>"
-msgstr ""
+msgstr "%s à¦à¦–ন সà§à¦²à¦­à¥¤ <a href=\"%s\">আরও জানà§à¦¨</a>"
#: updater.php:77
msgid "up to date"
-msgstr ""
+msgstr "সরà§à¦¬à¦¶à§‡à¦·"
#: updater.php:80
msgid "updates check is disabled"
-msgstr ""
+msgstr "পরিবরà§à¦§à¦¨ পরীকà§à¦·à¦£ করা বনà§à¦§ রাখা হয়েছে"
#: vcategories.php:188 vcategories.php:249
#, php-format
diff --git a/l10n/bn_BD/settings.po b/l10n/bn_BD/settings.po
index de192ed72c9..778831c83ab 100644
--- a/l10n/bn_BD/settings.po
+++ b/l10n/bn_BD/settings.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2013-01-02 09:43+0000\n"
-"Last-Translator: Shubhra Paul <paul_shubhra@yahoo.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,81 +20,110 @@ msgstr ""
#: ajax/apps/ocs.php:20
msgid "Unable to load list from App Store"
-msgstr "অà§à¦¯à¦¾à¦ªà¦¸à§à¦Ÿà§‹à¦° থেকে তালিকা লোড করা সমà§à¦­à¦¬ হলো না"
+msgstr "অà§à¦¯à¦¾à¦ªà¦¸à§à¦Ÿà§‹à¦° থেকে তালিকা লোড করতে সকà§à¦·à¦® নয়"
+
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "অনà§à¦®à§‹à¦¦à¦¨ ঘটিত সমসà§à¦¯à¦¾"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
#: ajax/creategroup.php:10
msgid "Group already exists"
-msgstr "গোষà§à¦ à§€à¦Ÿà¦¿ বিদà§à¦¯à¦®à¦¾à¦¨"
+msgstr "গোষà§à¦ à§€à¦Ÿà¦¿ পূরà§à¦¬ থেকেই বিদà§à¦¯à¦®à¦¾à¦¨"
#: ajax/creategroup.php:19
msgid "Unable to add group"
-msgstr "গোষà§à¦ à§€ যোগ করতে পারা গেল না"
+msgstr "গোষà§à¦ à§€ যোগ করা সমà§à¦­à¦¬ হলো না"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
-msgstr "অà§à¦¯à¦¾à¦ª সকà§à¦°à¦¿à§Ÿ করা সমà§à¦­à¦¬ হলো না"
+msgstr "অà§à¦¯à¦ªà¦Ÿà¦¿ সকà§à¦°à¦¿à§Ÿ করতে সকà§à¦·à¦® নয়।"
#: ajax/lostpassword.php:12
msgid "Email saved"
-msgstr "ই-মেইল সংরকà§à¦·à¦£ করা হয়েছে"
+msgstr "ই-মেইল সংরকà§à¦·à¦¨ করা হয়েছে"
#: ajax/lostpassword.php:14
msgid "Invalid email"
msgstr "ই-মেইলটি সঠিক নয়"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID পরিবরà§à¦¤à¦¨ করা হয়েছে"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "অননà§à¦®à§‹à¦¦à¦¿à¦¤ অনà§à¦°à§‹à¦§"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
-msgstr "গোষà§à¦ à§€ মà§à¦›à§‡ ফেলা সমà§à¦­à¦¬ হলো না"
-
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "নিশà§à¦šà¦¿à¦¤à¦•রণে সমসà§à¦¯à¦¾ দেখা দিয়েছে"
+msgstr "গোষà§à¦ à§€ মà§à¦›à§‡ ফেলা সমà§à¦­à¦¬ হলো না "
#: ajax/removeuser.php:24
msgid "Unable to delete user"
-msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি মà§à¦›à§‡ ফেলা সমà§à¦­à¦¬ হলো না"
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী মà§à¦›à§‡ ফেলা সমà§à¦­à¦¬ হলো না "
#: ajax/setlanguage.php:15
msgid "Language changed"
msgstr "ভাষা পরিবরà§à¦¤à¦¨ করা হয়েছে"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "অনà§à¦°à§‹à¦§à¦Ÿà¦¿ যথাযথ নয়"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
-msgstr ""
+msgstr "পà§à¦°à¦¶à¦¾à¦¸à¦•বৃনà§à¦¦ তাদেরকে পà§à¦°à¦¶à¦¾à¦¸à¦• গোষà§à¦ à§€ থেকে মà§à¦›à§‡ ফেলতে পারবেন না"
#: ajax/togglegroups.php:28
#, php-format
msgid "Unable to add user to group %s"
-msgstr ""
+msgstr " %s গোষà§à¦ à§€à¦¤à§‡ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী যোগ করা সমà§à¦­à¦¬ হলো না "
#: ajax/togglegroups.php:34
#, php-format
msgid "Unable to remove user from group %s"
+msgstr "%s গোষà§à¦ à§€ থেকে বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীকে অপসারণ করা সমà§à¦­à¦¬ হলো না"
+
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "নিষà§à¦•à§à¦°à¦¿à§Ÿ"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
-msgstr "সকà§à¦°à¦¿à§Ÿ"
+msgstr "সকà§à¦°à¦¿à§Ÿ "
+
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "সমসà§à¦¯à¦¾"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
-#: js/personal.js:69
+#: js/personal.js:96
msgid "Saving..."
-msgstr "সংরকà§à¦·à¦£ করা হচà§à¦›à§‡...."
+msgstr "সংরকà§à¦·à¦£ করা হচà§à¦›à§‡.."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
-msgstr "_ভাষার_নাম_"
+msgstr "__language_name__"
#: templates/apps.php:10
msgid "Add your App"
@@ -104,29 +133,33 @@ msgstr "আপনার অà§à¦¯à¦¾à¦ªà¦Ÿà¦¿ যোগ করà§à¦¨"
msgid "More Apps"
msgstr "আরও অà§à¦¯à¦¾à¦ª"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "অà§à¦¯à¦¾à¦ª নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
-msgstr "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েসন পাতাটি দেখà§à¦¨ à¦à¦–ানে apps.owncloud.com"
+msgstr "apps.owncloud.com ঠঅà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েসন পৃষà§à¦ à¦¾ দেখà§à¦¨"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
-msgstr "<span class=\"licence\"></span>-লাইসেনà§à¦¸ করিয়েছেন <span class=\"author\"></span>"
+msgstr "<span class=\"licence\"></span>-লাইসেনà§à¦¸à¦§à¦¾à¦°à§€ <span class=\"author\"></span>"
+
+#: templates/apps.php:31
+msgid "Update"
+msgstr "পরিবরà§à¦§à¦¨"
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী সহায়িকা"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "পà§à¦°à¦¶à¦¾à¦¸à¦• সহায়িকা"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "অনলাইন সহায়িকা"
#: templates/help.php:7
msgid "Forum"
@@ -143,85 +176,89 @@ msgstr "বাণিজà§à¦¯à¦¿à¦• সাপোরà§à¦Ÿ"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
-msgstr ""
-
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "ডেসà§à¦•টপ কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ ডাউনলোড করà§à¦¨"
+msgstr "আপনি বà§à¦¯à¦¬à¦¹à¦¾à¦° করছেন <strong>%s</strong>, সà§à¦²à¦­ <strong>%s</strong> à¦à¦° মধà§à¦¯à§‡à¥¤"
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "কূটশবà§à¦¦"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
-msgstr "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পরিবরà§à¦¤à¦¨ করা হয়েছে"
+msgstr "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পরিবরà§à¦¤à¦¨ করা হয়েছে "
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
-msgstr "কূটশবà§à¦¦ পরিবরà§à¦¤à¦¨ করা সমà§à¦­à¦¬ হলো না"
+msgstr "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পরিবরà§à¦¤à¦¨ করতে সকà§à¦·à¦® নয়"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "বরà§à¦¤à¦®à¦¾à¦¨ কূটশবà§à¦¦"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "নতà§à¦¨ কূটশবà§à¦¦"
-#: templates/personal.php:26
-msgid "show"
-msgstr "পà§à¦°à¦¦à¦°à§à¦¶à¦¨"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
-msgstr "কূটশবà§à¦¦ পরিবরà§à¦¤à¦¨ কর"
+msgstr "কূটশবà§à¦¦ পরিবরà§à¦¤à¦¨ করà§à¦¨"
+
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
-#: templates/personal.php:33
+#: templates/personal.php:68
msgid "Email"
-msgstr "ই-মেইল"
+msgstr "ই-মেইল "
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "আপনার ই-মেইল ঠিকানা"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
-msgstr ""
+msgstr "কূটশবà§à¦¦ পূনরূদà§à¦§à¦¾à¦° সকà§à¦°à¦¿à§Ÿ করার জনà§à¦¯ ই-মেইল ঠিকানাটি পূরণ করà§à¦¨"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "ভাষা"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
-msgstr "অনà§à¦¬à¦¾à¦¦ করতে সাহাযà§à¦¯ করà§à¦¨"
+msgstr "অনà§à¦¬à¦¾à¦¦ করতে সহায়তা করà§à¦¨"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "আপনার ownCloud ঠসংযà§à¦•à§à¦¤ হতে à¦à¦‡ ঠিকানাটি আপনার ফাইল বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾à¦ªà¦•ে বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "ভারà§à¦¸à¦¨"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -229,44 +266,52 @@ msgid ""
"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>."
-msgstr "তৈরি করেছেন <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</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>."
+msgstr "তৈলী করেছেন <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> à¦à¦° অধীনে লাইসেনà§à¦¸à¦•ৃত।"
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "নাম"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
-msgstr "গোষà§à¦ à§€"
+msgstr "গোষà§à¦ à§€à¦¸à¦®à§‚হ"
#: templates/users.php:32
msgid "Create"
-msgstr "তৈরি কর"
+msgstr "তৈরী কর"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ সংরকà§à¦·à¦£à¦¾à¦—ার"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "অসীম"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "অনà§à¦¯à¦¾à¦¨à§à¦¯"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
-msgstr "গোষà§à¦ à§€ পà§à¦°à¦¶à¦¾à¦¸à¦¨"
+msgstr "গোষà§à¦ à§€ পà§à¦°à¦¶à¦¾à¦¸à¦•"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
+msgstr "সংরকà§à¦·à¦£à¦¾à¦—ার"
+
+#: templates/users.php:97
+msgid "change display name"
msgstr ""
-#: templates/users.php:133
-msgid "Default"
+#: templates/users.php:101
+msgid "set new password"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:137
+msgid "Default"
+msgstr "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤"
+
+#: templates/users.php:165
msgid "Delete"
msgstr "মà§à¦›à§‡ ফেল"
diff --git a/l10n/bn_BD/user_ldap.po b/l10n/bn_BD/user_ldap.po
index 509354b9d66..b39dcc30cbc 100644
--- a/l10n/bn_BD/user_ldap.po
+++ b/l10n/bn_BD/user_ldap.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-08-12 22:45+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
-msgid "Host"
+msgid "Server configuration"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Host"
+msgstr "হোসà§à¦Ÿ"
+
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
-msgstr ""
+msgstr "SSL আবশà§à¦¯à¦• না হলে আপনি à¦à¦‡ পà§à¦°à¦Ÿà§‹à¦•লটি মà§à¦›à§‡ ফেলতে পারেন । à¦à¦°à¦ªà¦° শà§à¦°à§ করà§à¦¨ à¦à¦Ÿà¦¾ দিয়ে ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
+msgstr "ভিতà§à¦¤à¦¿ DN"
+
+#: templates/settings.php:22
+msgid "One Base DN per line"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
-msgstr ""
+msgstr "সà§à¦šà¦¾à¦°à§ টà§à¦¯à¦…বে গিয়ে আপনি বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি à¦à¦¬à¦‚ গোষà§à¦ à§€à¦¸à¦®à§‚হের জনà§à¦¯ ভিতà§à¦¤à¦¿ DN নিরà§à¦§à¦¾à¦°à¦£ করতে পারেন।"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
-msgstr ""
+msgstr "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. পরিচয় গোপন রেখে অধিগমনের জনà§à¦¯ DN à¦à¦¬à¦‚ কূটশবà§à¦¦à¦Ÿà¦¿ ফাà¦à¦•া রাখà§à¦¨à¥¤"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "কূটশবà§à¦¦"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
-msgstr ""
+msgstr "অজà§à¦žà¦¾à¦¤à¦•à§à¦²à¦¶à§€à¦² অধিগমনের জনà§à¦¯ DN à¦à¦¬à¦‚ কূটশবà§à¦¦à¦Ÿà¦¿ ফাà¦à¦•া রাখà§à¦¨à¥¤"
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারির পà§à¦°à¦¬à§‡à¦¶ ছাà¦à¦•নী"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
-msgstr ""
+msgstr "পà§à¦°à¦¬à§‡à¦¶à§‡à¦° চেষà§à¦Ÿà¦¾ করার সময় পà§à¦°à¦¯à§‹à¦œà§à¦¯ ছাà¦à¦•নীটি নিরà§à¦§à¦¾à¦°à¦£ করবে। পà§à¦°à¦¬à§‡à¦¶à§‡à¦° সময় বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী নামটি %%uid দিয়ে পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হবে।"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
-msgstr ""
+msgstr "%%uid সà§à¦¥à¦¾à¦¨à¦§à¦¾à¦°à¦• বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨, উদাহরণঃ \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী তালিকা ছাà¦à¦•নী"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী উদà§à¦§à¦¾à¦° করার সময় পà§à¦°à§Ÿà§‹à¦—ের জনà§à¦¯ ছাà¦à¦•নী নিরà§à¦§à¦¾à¦°à¦£ করবে।"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
-msgstr ""
+msgstr "কোন সà§à¦¥à¦¾à¦¨à¦§à¦¾à¦°à¦• বà§à¦¯à¦¤à§€à¦¤, যেমনঃ \"objectClass=person\"।"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
-msgstr ""
+msgstr "গোষà§à¦ à§€ ছাà¦à¦•নী"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
-msgstr ""
+msgstr "গোষà§à¦ à§€à¦¸à¦®à§‚হ উদà§à¦§à¦¾à¦° করার সময় পà§à¦°à§Ÿà§‹à¦—ের জনà§à¦¯ ছাà¦à¦•নী নিরà§à¦§à¦¾à¦°à¦£ করবে।"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "কোন সà§à¦¥à¦¾à¦¨ ধারক বà§à¦¯à¦¤à§€à¦¤, উদাহরণঃ\"objectClass=posixGroup\"।"
+
+#: templates/settings.php:31
+msgid "Connection Settings"
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
+msgstr "পোরà§à¦Ÿ"
+
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:37
+msgid "Disable Main Server"
msgstr ""
-#: templates/settings.php:28
-msgid "Use TLS"
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Use TLS"
+msgstr "TLS বà§à¦¯à¦¬à¦¹à¦¾à¦° কর"
+
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
-msgstr ""
+msgstr "বরà§à¦£ অসংবেদী LDAP সারà§à¦­à¦¾à¦° (উইনà§à¦¡à§‹à¦œ)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
-msgstr ""
+msgstr "SSL সনদপতà§à¦° যাচাইকরণ বনà§à¦§ রাক।"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
-msgstr ""
+msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° যদি à¦à¦‡ বিকলà§à¦ªà¦Ÿà¦¿ বà§à¦¯à¦¬à¦¹à¦¾à¦° করেই সংযোগ কারà§à¦¯à¦•রী হয় তবে আপনার ownCloud সারà§à¦­à¦¾à¦°à§‡ LDAP সারà§à¦­à¦¾à¦°à§‡à¦° SSL সনদপতà§à¦°à¦Ÿà¦¿ আমদানি করà§à¦¨à¥¤"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
+msgstr "অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়, শà§à¦§à§à¦®à¦¾à¦¤à§à¦° পরীকà§à¦·à¦¾à¦®à§‚লক বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° জনà§à¦¯à¥¤"
+
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "সেকেনà§à¦¡à§‡à¥¤ কোন পরিবরà§à¦¤à¦¨ কà§à¦¯à¦¾à¦¸à§‡ খালি করবে।"
+
+#: templates/settings.php:43
+msgid "Directory Settings"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "User Display Name Field"
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর পà§à¦°à¦¦à¦°à§à¦¶à¦¿à¦¤à¦¬à§à¦¯ নামের কà§à¦·à§‡à¦¤à§à¦°"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীর ownCloud নাম তৈরি করার জনà§à¦¯ বà§à¦¯à¦­à¦¹à§ƒà¦¤ LDAP বৈশিষà§à¦Ÿà§à¦¯à¥¤"
+
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "ভিতà§à¦¤à¦¿ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি বৃকà§à¦·à¦¾à¦•ারে"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
msgstr ""
-#: templates/settings.php:32
-msgid "Group Display Name Field"
+#: templates/settings.php:47
+msgid "User Search Attributes"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "Group Display Name Field"
+msgstr "গোষà§à¦ à§€à¦° পà§à¦°à¦¦à¦°à§à¦¶à¦¿à¦¤à¦¬à§à¦¯ নামের কà§à¦·à§‡à¦¤à§à¦°"
+
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr "গোষà§à¦ à§€à¦° ownCloud নাম তৈরি করার জনà§à¦¯ বà§à¦¯à¦­à¦¹à§ƒà¦¤ LDAP বৈশিষà§à¦Ÿà§à¦¯à¥¤"
+
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "ভিতà§à¦¤à¦¿ গোষà§à¦ à§€ বৃকà§à¦·à¦¾à¦•ারে"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:50
+msgid "Group Search Attributes"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "গোষà§à¦ à§€-সদসà§à¦¯ সংসà§à¦¥à¦¾à¦ªà¦¨"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr "বাইটে"
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী নামের জনà§à¦¯ ফাà¦à¦•া রাখà§à¦¨ (পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤)। অনà§à¦¯à¦¥à¦¾à§Ÿ, LDAP/AD বৈশিষà§à¦Ÿà§à¦¯ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨à¥¤"
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "সহায়িকা"
diff --git a/l10n/bn_BD/user_webdavauth.po b/l10n/bn_BD/user_webdavauth.po
index 3aa6ccffca6..6bf9079f19b 100644
--- a/l10n/bn_BD/user_webdavauth.po
+++ b/l10n/bn_BD/user_webdavauth.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Shubhra Paul <paul_shubhra@yahoo.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-02 00:04+0100\n"
-"PO-Revision-Date: 2012-11-09 09:06+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,13 +18,17 @@ msgstr ""
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "URL:http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index c41d4cbd8b6..bdfbedf5a50 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -4,13 +4,14 @@
#
# Translators:
# <joan@montane.cat>, 2012.
+# <rcalvoi@yahoo.com>, 2013.
# <rcalvoi@yahoo.com>, 2011-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 09:01+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 10:20+0000\n"
"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
@@ -19,24 +20,24 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "L'usuari %s ha compartit un fitxer amb vós"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "L'usuari %s ha compartit una carpeta amb vós"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "L'usuari %s ha compartit el fitxer \"%s\" amb vós. Està disponible per a la descàrrega a: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -52,8 +53,9 @@ msgid "No category to add?"
msgstr "No voleu afegir cap categoria?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Aquesta categoria ja existeix:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Aquesta categoria ja existeix: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -81,59 +83,135 @@ msgstr "No hi ha categories per eliminar."
msgid "Error removing %s from favorites."
msgstr "Error en eliminar %s dels preferits."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Diumenge"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Dilluns"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Dimarts"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Dimecres"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Dijous"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Divendres"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Dissabte"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Gener"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Febrer"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Març"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Abril"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maig"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juny"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juliol"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Agost"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Setembre"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Octubre"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembre"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Desembre"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Arranjament"
-#: js/js.js:704
+#: js/js.js:766
msgid "seconds ago"
msgstr "segons enrere"
-#: js/js.js:705
+#: js/js.js:767
msgid "1 minute ago"
msgstr "fa 1 minut"
-#: js/js.js:706
+#: js/js.js:768
msgid "{minutes} minutes ago"
msgstr "fa {minutes} minuts"
-#: js/js.js:707
+#: js/js.js:769
msgid "1 hour ago"
msgstr "fa 1 hora"
-#: js/js.js:708
+#: js/js.js:770
msgid "{hours} hours ago"
msgstr "fa {hours} hores"
-#: js/js.js:709
+#: js/js.js:771
msgid "today"
msgstr "avui"
-#: js/js.js:710
+#: js/js.js:772
msgid "yesterday"
msgstr "ahir"
-#: js/js.js:711
+#: js/js.js:773
msgid "{days} days ago"
msgstr "fa {days} dies"
-#: js/js.js:712
+#: js/js.js:774
msgid "last month"
msgstr "el mes passat"
-#: js/js.js:713
+#: js/js.js:775
msgid "{months} months ago"
msgstr "fa {months} mesos"
-#: js/js.js:714
+#: js/js.js:776
msgid "months ago"
msgstr "mesos enrere"
-#: js/js.js:715
+#: js/js.js:777
msgid "last year"
msgstr "l'any passat"
-#: js/js.js:716
+#: js/js.js:778
msgid "years ago"
msgstr "anys enrere"
@@ -163,8 +241,8 @@ msgid "The object type is not specified."
msgstr "No s'ha especificat el tipus d'objecte."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Error"
@@ -176,123 +254,141 @@ msgstr "No s'ha especificat el nom de l'aplicació."
msgid "The required file {file} is not installed!"
msgstr "El fitxer requerit {file} no està instal·lat!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Comparteix"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Compartit"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Error en compartir"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Error en deixar de compartir"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Error en canviar els permisos"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Compartit amb vos i amb el grup {group} per {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Compartit amb vos per {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Comparteix amb"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Comparteix amb enllaç"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Protegir amb contrasenya"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Contrasenya"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Enllaç per correu electrónic amb la persona"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Envia"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Estableix la data d'expiració"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Data d'expiració"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Comparteix per correu electrònic"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "No s'ha trobat ningú"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "No es permet compartir de nou"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Compartit en {item} amb {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Deixa de compartir"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "pot editar"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "control d'accés"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "crea"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "actualitza"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "elimina"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "comparteix"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Protegeix amb contrasenya"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Error en eliminar la data d'expiració"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Error en establir la data d'expiració"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "Enviant..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "El correu electrónic s'ha enviat"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "L'actualització ha estat incorrecte. Comuniqueu aquest error a <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">la comunitat ownCloud</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "L'actualització ha estat correcte. Ara sou redireccionat a ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "estableix de nou la contrasenya Owncloud"
@@ -374,7 +470,7 @@ msgstr "Edita les categories"
msgid "Add"
msgstr "Afegeix"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Avís de seguretat"
@@ -384,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr "No està disponible el generador de nombres aleatoris segurs, habiliteu l'extensió de PHP OpenSSL."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Sense un generador de nombres aleatoris segurs un atacant podria predir els senyals per restablir la contrasenya i prendre-us el compte."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "La carpeta de dades i els fitxers provablement són accessibles des d'internet. El fitxer .htaccess que proporciona ownCloud no funciona. Us recomanem que configureu el vostre servidor web de manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de la carpeta arrel del servidor web."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Per més informació sobre com configurar correctament el servidor, mireu la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentació</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Crea un <strong>compte d'administrador</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avançat"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Carpeta de dades"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configura la base de dades"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "s'usarà"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Usuari de la base de dades"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Contrasenya de la base de dades"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nom de la base de dades"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Espai de taula de la base de dades"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Ordinador central de la base de dades"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Acaba la configuració"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Diumenge"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Dilluns"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Dimarts"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Dimecres"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Dijous"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Divendres"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Dissabte"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Gener"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Febrer"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Març"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Abril"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maig"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juny"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juliol"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Agost"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Setembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Octubre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Novembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Desembre"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "controleu els vostres serveis web"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Surt"
@@ -546,17 +570,17 @@ msgstr "Canvieu la contrasenya de nou per assegurar el vostre compte."
msgid "Lost your password?"
msgstr "Heu perdut la contrasenya?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "recorda'm"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Inici de sessió"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Heu tancat la sessió."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Acreditacions alternatives"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,17 +594,3 @@ msgstr "següent"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "S'està actualitzant ownCloud a la versió %s, pot trigar una estona."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Avís de seguretat!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Comproveu la vostra contrasenya. <br/>Per raons de seguretat se us pot demanar escriure de nou la vostra contrasenya."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Comprova"
diff --git a/l10n/ca/files.po b/l10n/ca/files.po
index 919095b8997..6442aaa9c9b 100644
--- a/l10n/ca/files.po
+++ b/l10n/ca/files.po
@@ -7,15 +7,16 @@
# <joan@montane.cat>, 2012.
# <josep_tomas@hotmail.com>, 2012.
# Josep Tomàs <jtomas.binsoft@gmail.com>, 2012.
+# <rcalvoi@yahoo.com>, 2013.
# <rcalvoi@yahoo.com>, 2011-2013.
# <sacoo2@hotmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 15:40+0000\n"
+"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,57 +27,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr " No s'ha pogut moure %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "No es pot canviar el nom del fitxer"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "No s'ha carregat cap fitxer. Error desconegut"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "El fitxer s'ha pujat correctament"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "L’arxiu que voleu carregar supera el màxim definit en la directiva upload_max_filesize del php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "El fitxer de pujada excedeix la directiva MAX_FILE_SIZE especificada al formulari HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "El fitxer només s'ha pujat parcialment"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "El fitxer no s'ha pujat"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "S'ha perdut un fitxer temporal"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Ha fallat en escriure al disc"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr "No hi ha prou espai disponible"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Directori no vàlid."
@@ -84,149 +85,152 @@ msgstr "Directori no vàlid."
msgid "Files"
msgstr "Fitxers"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Deixa de compartir"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Esborra permanentment"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Suprimeix"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Reanomena"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendents"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} ja existeix"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "substitueix"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "sugereix un nom"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "cancel·la"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "s'ha substituït {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "desfés"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "s'ha substituït {old_name} per {new_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "no compartits {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "executa d'operació d'esborrar"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "eliminats {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' és un nom no vàlid per un fitxer."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "El nom del fitxer no pot ser buit."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "s'estan generant fitxers ZIP, pot trigar una estona."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Error en la pujada"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Tanca"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Pendents"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 fitxer pujant"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} fitxers en pujada"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "La pujada s'ha cancel·lat."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "La URL no pot ser buida"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} fitxers escannejats"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "error durant l'escaneig"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Nom"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Mida"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Modificat"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 carpeta"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} carpetes"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 fitxer"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} fitxers"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Puja"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Gestió de fitxers"
@@ -275,36 +279,44 @@ msgstr "Carpeta"
msgid "From link"
msgstr "Des d'enllaç"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Puja"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Paperera"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancel·la la pujada"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Res per aquí. Pugeu alguna cosa!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Baixa"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Deixa de compartir"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "La pujada és massa gran"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "S'estan escanejant els fitxers, espereu"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Actualment escanejant"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Actualitzant la memòria de cau del sistema de fitxers..."
diff --git a/l10n/ca/files_encryption.po b/l10n/ca/files_encryption.po
index 98571697a6a..98f7c39d55d 100644
--- a/l10n/ca/files_encryption.po
+++ b/l10n/ca/files_encryption.po
@@ -3,33 +3,38 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <rcalvoi@yahoo.com>, 2013.
# <rcalvoi@yahoo.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-13 18:30+0000\n"
-"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Encriptatge"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Exclou els tipus de fitxers següents de l'encriptatge"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "L'encriptació de fitxers està activada."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Els tipus de fitxers següents no s'encriptaran:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Exclou els tipus de fitxers següents de l'encriptatge:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Cap"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Activa l'encriptatge"
diff --git a/l10n/ca/files_trashbin.po b/l10n/ca/files_trashbin.po
new file mode 100644
index 00000000000..4c5e094e6d5
--- /dev/null
+++ b/l10n/ca/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <rcalvoi@yahoo.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 15:22+0000\n"
+"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
+"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "No s'ha pogut esborrar permanentment %s"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "No s'ha pogut restaurar %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "executa l'operació de restauració"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "esborra el fitxer permanentment"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nom"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Eliminat"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 carpeta"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} carpetes"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 fitxer"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} fitxers"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "La paperera està buida!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Recupera"
diff --git a/l10n/ca/files_versions.po b/l10n/ca/files_versions.po
index 4bd9bdf45c9..43021a3304d 100644
--- a/l10n/ca/files_versions.po
+++ b/l10n/ca/files_versions.po
@@ -4,13 +4,14 @@
#
# Translators:
# <josep_tomas@hotmail.com>, 2012.
+# <rcalvoi@yahoo.com>, 2013.
# <rcalvoi@yahoo.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-10 02:04+0200\n"
-"PO-Revision-Date: 2012-10-09 07:30+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 15:40+0000\n"
"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
@@ -19,21 +20,44 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Expira totes les versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "No s'ha pogut revertir: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "èxit"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "El fitxer %s s'ha revertit a la versió %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "fallada"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "El fitxer %s no s'ha pogut revertir a la versió %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "No hi ha versións antigues disponibles"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "No heu especificat el camí"
#: js/versions.js:16
msgid "History"
msgstr "Historial"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versions"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Això eliminarà totes les versions de còpia de seguretat dels vostres fitxers"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Reverteix un fitxer a una versió anterior fent clic en el seu botó de reverteix"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ca/lib.po b/l10n/ca/lib.po
index 0bdb8f916ec..694ee585d5c 100644
--- a/l10n/ca/lib.po
+++ b/l10n/ca/lib.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <rcalvoi@yahoo.com>, 2012.
+# <rcalvoi@yahoo.com>, 2013.
+# <rcalvoi@yahoo.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-17 00:01+0100\n"
-"PO-Revision-Date: 2012-11-16 08:22+0000\n"
-"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +19,55 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Ajuda"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personal"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Configuració"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Usuaris"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplicacions"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Administració"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "La baixada en ZIP està desactivada."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Els fitxers s'han de baixar d'un en un."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Torna a Fitxers"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Els fitxers seleccionats son massa grans per generar un fitxer zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "no s'ha pogut determinar"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "L'aplicació no està habilitada"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Error d'autenticació"
@@ -82,55 +87,152 @@ msgstr "Text"
msgid "Images"
msgstr "Imatges"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Comproveu les <a href='%s'>guies d'instal·lació</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "segons enrere"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "fa 1 minut"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "fa %d minuts"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "fa 1 hora"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "fa %d hores"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "avui"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ahir"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "fa %d dies"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "el mes passat"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "fa %d mesos"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "l'any passat"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "fa anys"
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index 85b991ab12e..d13394e2a85 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -7,14 +7,15 @@
# <joan@montane.cat>, 2012.
# <josep_tomas@hotmail.com>, 2012.
# Josep Tomàs <jtomas.binsoft@gmail.com>, 2012.
+# <rcalvoi@yahoo.com>, 2013.
# <rcalvoi@yahoo.com>, 2011-2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-01 00:04+0100\n"
-"PO-Revision-Date: 2012-12-31 07:40+0000\n"
-"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,6 +27,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "No s'ha pogut carregar la llista des de l'App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Error d'autenticació"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "No s'ha pogut canviar el nom a mostrar"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "El grup ja existeix"
@@ -34,7 +44,7 @@ msgstr "El grup ja existeix"
msgid "Unable to add group"
msgstr "No es pot afegir el grup"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "No s'ha pogut activar l'apliació"
@@ -46,22 +56,10 @@ msgstr "S'ha desat el correu electrònic"
msgid "Invalid email"
msgstr "El correu electrònic no és vàlid"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID ha canviat"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Sol.licitud no vàlida"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "No es pot eliminar el grup"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Error d'autenticació"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "No es pot eliminar l'usuari"
@@ -70,6 +68,10 @@ msgstr "No es pot eliminar l'usuari"
msgid "Language changed"
msgstr "S'ha canviat l'idioma"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Sol.licitud no vàlida"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Els administradors no es poden eliminar del grup admin"
@@ -84,19 +86,47 @@ msgstr "No es pot afegir l'usuari al grup %s"
msgid "Unable to remove user from group %s"
msgstr "No es pot eliminar l'usuari del grup %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "No s'ha pogut actualitzar l'aplicació."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Actualitza a {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Desactiva"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Activa"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Espereu..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Actualitzant..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Error en actualitzar l'aplicació"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Error"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Actualitzada"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "S'està desant..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Català"
@@ -108,18 +138,22 @@ msgstr "Afegiu la vostra aplicació"
msgid "More Apps"
msgstr "Més aplicacions"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Seleccioneu una aplicació"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Mireu la pàgina d'aplicacions a apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-propietat de <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Actualitza"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Documentació d'usuari"
@@ -149,83 +183,87 @@ msgstr "Suport comercial"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Heu utilitzat <strong>%s</strong> d'un total disponible de <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clients"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Baixa clients d'escriptori"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr " Baixa el client per Android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Baixa el client per iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Contrasenya"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "La seva contrasenya s'ha canviat"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "No s'ha pogut canviar la contrasenya"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Contrasenya actual"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Contrasenya nova"
-#: templates/personal.php:26
-msgid "show"
-msgstr "mostra"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Canvia la contrasenya"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Nom a mostrar"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "El vostre nom a mostrar ha canviat"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "No s'ha pogut canviar el vostre nom a mostrar"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Canvia el nom a mostrar"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Correu electrònic"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Correu electrònic"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Ompliu el correu electrònic per activar la recuperació de contrasenya"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Ajudeu-nos amb la traducció"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Useu aquesta adreça per connectar amb ownCloud des del gestor de fitxers"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Versió"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -235,11 +273,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nom"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Nom d'accés"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grups"
@@ -251,26 +289,34 @@ msgstr "Crea"
msgid "Default Storage"
msgstr "Emmagatzemament per defecte"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Il·limitat"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Un altre"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grup Admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Emmagatzemament"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "canvia el nom a mostrar"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "estableix nova contrasenya"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Per defecte"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Suprimeix"
diff --git a/l10n/ca/user_ldap.po b/l10n/ca/user_ldap.po
index 10b45cc3214..98ca278100a 100644
--- a/l10n/ca/user_ldap.po
+++ b/l10n/ca/user_ldap.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <rcalvoi@yahoo.com>, 2012.
+# <rcalvoi@yahoo.com>, 2013.
+# <rcalvoi@yahoo.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-17 00:09+0100\n"
-"PO-Revision-Date: 2012-12-16 09:56+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 12:20+0000\n"
"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +19,58 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Ha fallat en eliminar la configuració del servidor"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "La configuració és vàlida i s'ha pogut establir la comunicació!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "La configuració és vàlida, però ha fallat el Bind. Comproveu les credencials i l'arranjament del servidor."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "La configuració no és vàlida. Per més detalls mireu al registre d'ownCloud."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Eliminació fallida"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Voleu prendre l'arranjament de la configuració actual del servidor?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Voleu mantenir la configuració?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "No es pot afegir la configuració del servidor"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "La prova de connexió ha reeixit"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "La prova de connexió ha fallat"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Voleu eliminar la configuració actual del servidor?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Confirma l'eliminació"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +80,232 @@ msgstr "<b>Avís:</b> Les aplicacions user_ldap i user_webdavauth són incompati
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Avís:</b> El mòdul PHP LDAP necessari no està instal·lat, el dorsal no funcionarà. Demaneu a l'administrador del sistema que l'instal·li."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Avís:</b> El mòdul PHP LDAP no està instal·lat, el dorsal no funcionarà. Demaneu a l'administrador del sistema que l'instal·li."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Configuració del servidor"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Afegeix la configuració del servidor"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Màquina"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Podeu ometre el protocol, excepte si requeriu SSL. Llavors comenceu amb ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN Base"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Una DN Base per línia"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Podeu especificar DN Base per usuaris i grups a la pestanya Avançat"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN Usuari"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "La DN de l'usuari client amb la que s'haurà de fer, per exemple uid=agent,dc=exemple,dc=com. Per un accés anònim, deixeu la DN i la contrasenya en blanc."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Contrasenya"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Per un accés anònim, deixeu la DN i la contrasenya en blanc."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtre d'inici de sessió d'usuari"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Defineix el filtre a aplicar quan s'intenta l'inici de sessió. %%uid reemplaça el nom d'usuari en l'acció d'inici de sessió."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "useu el paràmetre de substitució %%uid, per exemple \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Llista de filtres d'usuari"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Defineix el filtre a aplicar quan es mostren usuaris"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "sense cap paràmetre de substitució, per exemple \"objectClass=persona\""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtre de grup"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Defineix el filtre a aplicar quan es mostren grups."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "sense cap paràmetre de substitució, per exemple \"objectClass=grupPosix\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Arranjaments de connexió"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Configuració activa"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Si està desmarcat, aquesta configuració s'ometrà."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Arbre base d'usuaris"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Màquina de còpia de serguretat (rèplica)"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Arbre base de grups"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Afegiu una màquina de còpia de seguretat opcional. Ha de ser una rèplica del servidor LDAP/AD principal."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Associació membres-grup"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Port de la còpia de seguretat (rèplica)"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Desactiva el servidor principal"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Quan està connectat, ownCloud només es connecta al servidor de la rèplica."
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Usa TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "No ho useu en connexions SSL, fallarà."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "No ho useu adicionalment per a conexions LDAPS, fallarà."
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Servidor LDAP sense distinció entre majúscules i minúscules (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Desactiva la validació de certificat SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Si la connexió només funciona amb aquesta opció, importeu el certificat SSL del servidor LDAP en el vostre servidor ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "No recomanat, ús només per proves."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "en segons. Un canvi buidarà la memòria de cau."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Arranjaments de carpetes"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Camp per mostrar el nom d'usuari"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Atribut LDAP a usar per generar el nom d'usuari ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Arbre base d'usuaris"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Una DN Base d'Usuari per línia"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Atributs de cerca d'usuari"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Opcional; Un atribut per línia"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Camp per mostrar el nom del grup"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Atribut LDAP a usar per generar el nom de grup ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Arbre base de grups"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Una DN Base de Grup per línia"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Atributs de cerca de grup"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Associació membres-grup"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Atributs especials"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "en bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "en segons. Un canvi buidarà la memòria de cau."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Deixeu-ho buit pel nom d'usuari (per defecte). Altrament, especifiqueu un atribut LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Ajuda"
diff --git a/l10n/ca/user_webdavauth.po b/l10n/ca/user_webdavauth.po
index c7a053911de..bd7df15438f 100644
--- a/l10n/ca/user_webdavauth.po
+++ b/l10n/ca/user_webdavauth.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <rcalvoi@yahoo.com>, 2012.
+# <rcalvoi@yahoo.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-22 00:24+0100\n"
-"PO-Revision-Date: 2012-12-21 09:21+0000\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 07:22+0000\n"
"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Autenticació WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud enviarà les credencials d'usuari a aquesta URL. S'interpretarà http 401 i http 403 com a credencials incorrectes i tots els altres codis com a credencials correctes."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud enviarà les credencials d'usuari a aquesta URL. Aquest endollable en comprova la resposta i interpretarà els codis d'estat 401 i 403 com a credencials no vàlides, i qualsevol altra resposta com a credencials vàlides."
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index 2148999dc1b..87c6869293e 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 06:20+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 13:30+0000\n"
"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
@@ -21,24 +21,24 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Uživatel %s s vámi sdílí soubor"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Uživatel %s s vámi sdílí složku"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Uživatel %s s vámi sdílí soubor \"%s\". Můžete jej stáhnout zde: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -54,8 +54,9 @@ msgid "No category to add?"
msgstr "Žádná kategorie k přidání?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Tato kategorie již existuje: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Kategorie již existuje: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -83,59 +84,135 @@ msgstr "Žádné kategorie nebyly vybrány ke smazání."
msgid "Error removing %s from favorites."
msgstr "Chyba při odebírání %s z oblíbených."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Neděle"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Pondělí"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Úterý"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Středa"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "ÄŒtvrtek"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Pátek"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sobota"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Leden"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Únor"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Březen"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Duben"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Květen"
+
+#: js/config.php:33
+msgid "June"
+msgstr "ÄŒerven"
+
+#: js/config.php:33
+msgid "July"
+msgstr "ÄŒervenec"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Srpen"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Září"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Říjen"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Listopad"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Prosinec"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Nastavení"
-#: js/js.js:704
+#: js/js.js:766
msgid "seconds ago"
msgstr "před pár vteřinami"
-#: js/js.js:705
+#: js/js.js:767
msgid "1 minute ago"
msgstr "před minutou"
-#: js/js.js:706
+#: js/js.js:768
msgid "{minutes} minutes ago"
msgstr "před {minutes} minutami"
-#: js/js.js:707
+#: js/js.js:769
msgid "1 hour ago"
msgstr "před hodinou"
-#: js/js.js:708
+#: js/js.js:770
msgid "{hours} hours ago"
msgstr "před {hours} hodinami"
-#: js/js.js:709
+#: js/js.js:771
msgid "today"
msgstr "dnes"
-#: js/js.js:710
+#: js/js.js:772
msgid "yesterday"
msgstr "vÄera"
-#: js/js.js:711
+#: js/js.js:773
msgid "{days} days ago"
msgstr "před {days} dny"
-#: js/js.js:712
+#: js/js.js:774
msgid "last month"
msgstr "minulý mesíc"
-#: js/js.js:713
+#: js/js.js:775
msgid "{months} months ago"
msgstr "před {months} měsíci"
-#: js/js.js:714
+#: js/js.js:776
msgid "months ago"
msgstr "před měsíci"
-#: js/js.js:715
+#: js/js.js:777
msgid "last year"
msgstr "minulý rok"
-#: js/js.js:716
+#: js/js.js:778
msgid "years ago"
msgstr "před lety"
@@ -165,8 +242,8 @@ msgid "The object type is not specified."
msgstr "Není urÄen typ objektu."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Chyba"
@@ -178,123 +255,141 @@ msgstr "Není urÄen název aplikace."
msgid "The required file {file} is not installed!"
msgstr "Požadovaný soubor {file} není nainstalován."
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Sdílet"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Sdílené"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Chyba při sdílení"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Chyba při rušení sdílení"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Chyba při změně oprávnění"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "S Vámi a skupinou {group} sdílí {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "S Vámi sdílí {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Sdílet s"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Sdílet s odkazem"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Chránit heslem"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Heslo"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Odeslat osobÄ› odkaz e-mailem"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Odeslat"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Nastavit datum vypršení platnosti"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Datum vypršení platnosti"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Sdílet e-mailem:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Žádní lidé nenalezeni"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Sdílení již sdílené položky není povoleno"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Sdíleno v {item} s {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Zrušit sdílení"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "lze upravovat"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "řízení přístupu"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "vytvořit"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "aktualizovat"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "smazat"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "sdílet"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Chráněno heslem"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Chyba při odstraňování data vypršení platnosti"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Chyba při nastavení data vypršení platnosti"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "Odesílám..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "E-mail odeslán"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Aktualizace neproběhla úspěšně. Nahlaste prosím problém do <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">evidence chyb ownCloud</a>"
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Aktualizace byla úspěšná. Přesměrovávám na ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Obnovení hesla pro ownCloud"
@@ -376,7 +471,7 @@ msgstr "Upravit kategorie"
msgid "Add"
msgstr "Přidat"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "BezpeÄnostní upozornÄ›ní"
@@ -386,147 +481,75 @@ msgid ""
"OpenSSL extension."
msgstr "Není dostupný žádný bezpeÄný generátor náhodných Äísel. Povolte, prosím, rozšíření OpenSSL v PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Bez bezpeÄného generátoru náhodných Äísel může útoÄník pÅ™edpovÄ›dÄ›t token pro obnovu hesla a pÅ™evzít kontrolu nad Vaším úÄtem."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Váš adresář dat a vÅ¡echny VaÅ¡e soubory jsou pravdÄ›podobnÄ› přístupné z internetu. Soubor .htaccess, který je poskytován ownCloud, nefunguje. DůraznÄ› Vám doporuÄujeme nastavit váš webový server tak, aby nebyl adresář dat přístupný, nebo pÅ™esunout adresář dat mimo koÅ™enovou složku dokumentů webového serveru."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Pro informace jak správně nastavit váš server se podívejte do <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentace</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "VytvoÅ™it <strong>úÄet správce</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "PokroÄilé"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Složka s daty"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Nastavit databázi"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "bude použito"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Uživatel databáze"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Heslo databáze"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Název databáze"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Tabulkový prostor databáze"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Hostitel databáze"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "DokonÄit nastavení"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Neděle"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Pondělí"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Úterý"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Středa"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "ÄŒtvrtek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Pátek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sobota"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Leden"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Únor"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Březen"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Duben"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Květen"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "ÄŒerven"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "ÄŒervenec"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Srpen"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Září"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Říjen"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Listopad"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Prosinec"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "webové služby pod Vaší kontrolou"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Odhlásit se"
@@ -548,17 +571,17 @@ msgstr "Změňte, prosím, své heslo pro opÄ›tovné zabezpeÄení VaÅ¡eho úÄt
msgid "Lost your password?"
msgstr "Ztratili jste své heslo?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "zapamatovat si"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Přihlásit"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Jste odhlášeni."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Alternativní přihlášení"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -572,17 +595,3 @@ msgstr "následující"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "Aktualizuji ownCloud na verzi %s, bude to chvíli trvat."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "BezpeÄnostní upozornÄ›ní."
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Ověřte, prosím, své heslo. <br/>Z bezpeÄnostních důvodů můžete být obÄas požádáni o jeho opÄ›tovné zadání."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Ověřit"
diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po
index 0e7e866a144..c6ea61394f2 100644
--- a/l10n/cs_CZ/files.po
+++ b/l10n/cs_CZ/files.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 10:40+0000\n"
+"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,57 +23,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nelze přesunout %s - existuje soubor se stejným názvem"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Nelze přesunout %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Nelze přejmenovat soubor"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Soubor nebyl odeslán. Neznámá chyba"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Soubor byl odeslán úspěšně"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Odesílaný soubor přesahuje velikost upload_max_filesize povolenou v php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Odeslaný soubor přesáhl svou velikostí parametr MAX_FILE_SIZE specifikovaný v formuláři HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Soubor byl odeslán pouze ÄásteÄnÄ›"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Žádný soubor nebyl odeslán"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Chybí adresář pro doÄasné soubory"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Zápis na disk selhal"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Nedostatek dostupného místa"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Nedostatek dostupného úložného prostoru"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Neplatný adresář"
@@ -81,149 +81,152 @@ msgstr "Neplatný adresář"
msgid "Files"
msgstr "Soubory"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Zrušit sdílení"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Trvale odstranit"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Smazat"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Přejmenovat"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Čekající"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} již existuje"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "nahradit"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "navrhnout název"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "zrušit"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "nahrazeno {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "zpět"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "nahrazeno {new_name} s {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "sdílení zrušeno pro {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "provést smazání"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "smazáno {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' je neplatným názvem souboru."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Název souboru nemůže být prázdný řetězec."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "generuji ZIP soubor, může to nějakou dobu trvat."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory."
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Vaše úložiště je téměř plné ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Vaše soubory ke stažení se připravují. Pokud jsou velké může to chvíli trvat."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Chyba odesílání"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Zavřít"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Čekající"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "odesílá se 1 soubor"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "odesílám {count} souborů"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Odesílání zrušeno."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL nemůže být prázdná"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "prozkoumáno {count} souborů"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "chyba při prohledávání"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Název"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Velikost"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Změněno"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 složka"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} složky"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 soubor"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} soubory"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Odeslat"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Zacházení se soubory"
@@ -272,36 +275,44 @@ msgstr "Složka"
msgid "From link"
msgstr "Z odkazu"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Odeslat"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Koš"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Zrušit odesílání"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Žádný obsah. Nahrajte něco."
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Stáhnout"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Zrušit sdílení"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Odeslaný soubor je příliš velký"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Soubory, které se snažíte odeslat, pÅ™ekraÄují limit velikosti odesílání na tomto serveru."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Soubory se prohledávají, prosím Äekejte."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Aktuální prohledávání"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Aktualizuji mezipaměť souborového systému..."
diff --git a/l10n/cs_CZ/files_encryption.po b/l10n/cs_CZ/files_encryption.po
index 96298cc2205..566eff0e84a 100644
--- a/l10n/cs_CZ/files_encryption.po
+++ b/l10n/cs_CZ/files_encryption.po
@@ -4,14 +4,14 @@
#
# Translators:
# Martin <fireball@atlas.cz>, 2012.
-# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-06 02:01+0200\n"
-"PO-Revision-Date: 2012-09-05 13:37+0000\n"
-"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,18 +19,22 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Šifrování"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Při šifrování vynechat následující typy souborů"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Šifrování je povoleno."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Následující typy souborů nebudou šifrovány:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Vyjmout následující typy souborů ze šifrování:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Žádné"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Povolit šifrování"
diff --git a/l10n/cs_CZ/files_trashbin.po b/l10n/cs_CZ/files_trashbin.po
new file mode 100644
index 00000000000..5055b347339
--- /dev/null
+++ b/l10n/cs_CZ/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 06:40+0000\n"
+"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
+"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs_CZ\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "Nelze trvale odstranit %s"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Nelze obnovit %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "provést obnovu"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "trvale odstranit soubor"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Název"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Smazáno"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 složka"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} složky"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 soubor"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} soubory"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Žádný obsah. Váš koš je prázdný."
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Obnovit"
diff --git a/l10n/cs_CZ/files_versions.po b/l10n/cs_CZ/files_versions.po
index 2f109044074..928ac501c8a 100644
--- a/l10n/cs_CZ/files_versions.po
+++ b/l10n/cs_CZ/files_versions.po
@@ -4,13 +4,13 @@
#
# Translators:
# Martin <fireball@atlas.cz>, 2012.
-# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-23 02:01+0200\n"
-"PO-Revision-Date: 2012-09-22 11:58+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 06:40+0000\n"
"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Vypršet všechny verze"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Nelze navrátit: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "úspěch"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "Soubor %s byl navrácen na verzi %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "sehlhání"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Soubor %s nemohl být navrácen na verzi %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Nejsou dostupné žádné starší verze"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Nezadána cesta"
#: js/versions.js:16
msgid "History"
msgstr "Historie"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Verze"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Odstraní všechny existující zálohované verze Vašich souborů"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "NavraÅ¥te soubor do pÅ™edchozí verze kliknutím na tlaÄítko navrátit"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/cs_CZ/lib.po b/l10n/cs_CZ/lib.po
index dd8693c6c82..e6b0553a062 100644
--- a/l10n/cs_CZ/lib.po
+++ b/l10n/cs_CZ/lib.po
@@ -4,14 +4,14 @@
#
# Translators:
# Martin <fireball@atlas.cz>, 2012.
-# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-15 10:08+0000\n"
-"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +19,55 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Nápověda"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Osobní"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Nastavení"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Uživatelé"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplikace"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Administrace"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Stahování ZIPu je vypnuto."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Soubory musí být stahovány jednotlivě."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Zpět k souborům"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Vybrané soubory jsou příliš velké pro vytvoření zip souboru."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "nelze zjistit"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Aplikace není povolena"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Chyba ověření"
@@ -83,55 +87,152 @@ msgstr "Text"
msgid "Images"
msgstr "Obrázky"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Váš webový server není správně nastaven pro umožnění synchronizace, protože rozhraní WebDAV je rozbité."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Zkonzultujte, prosím, <a href='%s'>průvodce instalací</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "před vteřinami"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "před 1 minutou"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "před %d minutami"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "před hodinou"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "před %d hodinami"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "dnes"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "vÄera"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "před %d dny"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "minulý měsíc"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Před %d měsíci"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "loni"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "před lety"
diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po
index 2fd34e04214..0333417b3b6 100644
--- a/l10n/cs_CZ/settings.po
+++ b/l10n/cs_CZ/settings.po
@@ -8,14 +8,14 @@
# Martin <fireball@atlas.cz>, 2011-2012.
# Michal Hrušecký <Michal@hrusecky.net>, 2012.
# <Michal@hrusecky.net>, 2012.
-# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 20:08+0000\n"
-"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -27,6 +27,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Nelze naÄíst seznam z App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Chyba ověření"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Nelze změnit zobrazované jméno"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Skupina již existuje"
@@ -35,7 +44,7 @@ msgstr "Skupina již existuje"
msgid "Unable to add group"
msgstr "Nelze přidat skupinu"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Nelze povolit aplikaci."
@@ -47,22 +56,10 @@ msgstr "E-mail uložen"
msgid "Invalid email"
msgstr "Neplatný e-mail"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID změněno"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Neplatný požadavek"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Nelze smazat skupinu"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Chyba ověření"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Nelze smazat uživatele"
@@ -71,6 +68,10 @@ msgstr "Nelze smazat uživatele"
msgid "Language changed"
msgstr "Jazyk byl změněn"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Neplatný požadavek"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Správci se nemohou odebrat sami ze skupiny správců"
@@ -85,19 +86,47 @@ msgstr "Nelze přidat uživatele do skupiny %s"
msgid "Unable to remove user from group %s"
msgstr "Nelze odstranit uživatele ze skupiny %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Nelze aktualizovat aplikaci."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Aktualizovat na {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Zakázat"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Povolit"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Čekejte prosím..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Aktualizuji..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Chyba při aktualizaci aplikace"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Chyba"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Aktualizováno"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Ukládám..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "ÄŒesky"
@@ -109,18 +138,22 @@ msgstr "Přidat Vaší aplikaci"
msgid "More Apps"
msgstr "Více aplikací"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Vyberte aplikaci"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Více na stránce s aplikacemi na apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licencováno <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Aktualizovat"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Uživatelská dokumentace"
@@ -150,83 +183,87 @@ msgstr "Placená podpora"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Používáte <strong>%s</strong> z <strong>%s</strong> dostupných"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klienti"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Stáhnout klienty pro poÄítaÄ"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Stáhnout klienta pro android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Stáhnout klienta pro iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Heslo"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Vaše heslo bylo změněno"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Vaše heslo nelze změnit"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "SouÄasné heslo"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nové heslo"
-#: templates/personal.php:26
-msgid "show"
-msgstr "zobrazit"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Změnit heslo"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Zobrazované jméno"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Vaše zobrazované jméno bylo změněno"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Nelze změnit vaše zobrazované jméno"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Změnit zobrazované jméno"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Vaše e-mailová adresa"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Pro povolení změny hesla vyplňte adresu e-mailu"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Jazyk"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Pomoci s překladem"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Použijte tuto adresu pro připojení k vašemu ownCloud skrze správce souborů"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Verze"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -236,11 +273,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Jméno"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Přihlašovací jméno"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Skupiny"
@@ -252,26 +289,34 @@ msgstr "Vytvořit"
msgid "Default Storage"
msgstr "Výchozí úložiště"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "NeomezenÄ›"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Jiná"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Správa skupiny"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Úložiště"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "změnit zobrazované jméno"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "nastavit nové heslo"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Výchozí"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Smazat"
diff --git a/l10n/cs_CZ/user_ldap.po b/l10n/cs_CZ/user_ldap.po
index 89d650bf77d..8e0892a688b 100644
--- a/l10n/cs_CZ/user_ldap.po
+++ b/l10n/cs_CZ/user_ldap.po
@@ -4,13 +4,13 @@
#
# Translators:
# Martin <fireball@atlas.cz>, 2012.
-# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-16 00:11+0100\n"
-"PO-Revision-Date: 2012-12-15 15:30+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 06:40+0000\n"
"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,58 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Selhalo smazání konfigurace serveru"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "Nastavení je v pořádku a spojení bylo navázáno."
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "Konfigurace je v pořádku, ale spojení selhalo. Zkontrolujte, prosím, nastavení serveru a přihlašovací údaje."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "Nastavení je neplatné. Zkontrolujte, prosím, záznam ownCloud pro další podrobnosti."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Mazání selhalo."
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Převzít nastavení z nedávného nastavení serveru?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Ponechat nastavení?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Nelze přidat nastavení serveru"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Test spojení byl úspěšný"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Test spojení selhal"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Opravdu si pÅ™ejete smazat souÄasné nastavení serveru?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Potvrdit smazání"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -28,158 +80,232 @@ msgstr "<b>Varování:</b> Aplikace user_ldap a user_webdavauth nejsou kompatibi
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému aby jej nainstaloval."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Nastavení serveru"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Přidat nastavení serveru"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "PoÄítaÄ"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Můžete vynechat protokol, vyjma pokud požadujete SSL. Tehdy zaÄnÄ›te s ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Základní DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Jedna základní DN na řádku"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "V rozšířeném nastavení můžete urÄit základní DN pro uživatele a skupiny"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Uživatelské DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN klentského uživatele ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte údaje DN and Heslo prázdné."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Heslo"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Pro anonymní přístup, ponechte údaje DN and heslo prázdné."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtr přihlášení uživatelů"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "UrÄuje použitý filtr, pÅ™i pokusu o pÅ™ihlášení. %%uid nahrazuje uživatelské jméno v Äinnosti pÅ™ihlášení."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "použijte zástupný vzor %%uid, např. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filtr uživatelských seznamů"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "UrÄuje použitý filtr, pro získávaní uživatelů."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "bez zástupných znaků, např. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtr skupin"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "UrÄuje použitý filtr, pro získávaní skupin."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "bez zástupných znaků, např. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Nastavení spojení"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Nastavení aktivní"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Pokud není zaÅ¡krtnuto, bude nastavení pÅ™eskoÄeno."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Základní uživatelský strom"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Záložní (kopie) hostitel"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Základní skupinový strom"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Zadejte volitelného záložního hostitele. Musí to být kopie hlavního serveru LDAP/AD."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Asociace Älena skupiny"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Záložní (kopie) port"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Zakázat hlavní serveru"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Při zapnutí se ownCloud připojí pouze k záložnímu serveru"
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Použít TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Nepoužívejte pro připojení pomocí SSL, připojení selže."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "Nepoužívejte pro spojení LDAP, selže."
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "LDAP server nerozlišující velikost znaků (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Vypnout ověřování SSL certifikátu."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Pokud připojení pracuje pouze s touto možností, tak importujte SSL certifikát SSL serveru do Vašeho serveru ownCloud"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Není doporuÄeno, pouze pro testovací úÄely."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "ve vteřinách. Změna vyprázdní vyrovnávací paměť."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Nastavení adresáře"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Pole pro zobrazované jméno uživatele"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Atribut LDAP použitý k vytvoření jména uživatele ownCloud"
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Základní uživatelský strom"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Jedna uživatelská základní DN na řádku"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Atributy vyhledávání uživatelů"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Volitelné, atribut na řádku"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Pole pro zobrazení jména skupiny"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Atribut LDAP použitý k vytvoření jména skupiny ownCloud"
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Základní skupinový strom"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Jedna skupinová základní DN na řádku"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Atributy vyhledávání skupin"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Asociace Älena skupiny"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Speciální atributy"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "v bajtech"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "ve vteřinách. Změna vyprázdní vyrovnávací paměť."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Ponechte prázdné pro uživatelské jméno (výchozí). Jinak uveÄte LDAP/AD parametr."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Nápověda"
diff --git a/l10n/cs_CZ/user_webdavauth.po b/l10n/cs_CZ/user_webdavauth.po
index 3545665816d..28b3d2f8f19 100644
--- a/l10n/cs_CZ/user_webdavauth.po
+++ b/l10n/cs_CZ/user_webdavauth.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-21 00:10+0100\n"
-"PO-Revision-Date: 2012-12-20 19:51+0000\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 09:06+0000\n"
"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Ověření WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud odeÅ¡le pÅ™ihlaÅ¡ovací údaje uživatele na URL a z návratové hodnoty urÄí stav pÅ™ihlášení. Http 401 a 403 vyhodnotí jako neplatné údaje a vÅ¡echny ostatní jako úspěšné pÅ™ihlášení."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud odeÅ¡le uživatelské údaje na zadanou URL. Plugin zkontroluje odpovÄ›Ä a považuje návratovou hodnotu HTTP 401 a 403 za neplatné údaje a vÅ¡echny ostatní hodnoty jako platné pÅ™ihlaÅ¡ovací údaje."
diff --git a/l10n/da/core.po b/l10n/da/core.po
index f62c370f05b..7ac480d339f 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -5,9 +5,10 @@
# Translators:
# <cronner@gmail.com>, 2012.
# <mikkelbjerglarsen@gmail.com>, 2011, 2012.
-# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011-2012.
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011-2013.
# Ole Holm Frandsen <froksen@gmail.com>, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
+# Rasmus Paasch <rasmuspaasch@gmail.com>, 2013.
# <simon@rosmi.dk>, 2012.
# Thomas Tanghus <>, 2012.
# Thomas Tanghus <thomas@tanghus.net>, 2012.
@@ -15,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -25,24 +26,24 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Bruger %s delte en fil med dig"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Bruger %s delte en mappe med dig"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Bruger %s delte filen \"%s\" med dig. Den kan hentes her: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -58,8 +59,9 @@ msgid "No category to add?"
msgstr "Ingen kategori at tilføje?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Denne kategori eksisterer allerede: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -87,59 +89,135 @@ msgstr "Ingen kategorier valgt"
msgid "Error removing %s from favorites."
msgstr "Fejl ved fjernelse af %s fra favoritter."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Søndag"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Mandag"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Tirsdag"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Onsdag"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Torsdag"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Fredag"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Lørdag"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Marts"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maj"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "December"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Indstillinger"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "sekunder siden"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minut siden"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} minutter siden"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 time siden"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} timer siden"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "i dag"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "i går"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} dage siden"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "sidste måned"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} måneder siden"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "måneder siden"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "sidste år"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "Ã¥r siden"
@@ -169,8 +247,8 @@ msgid "The object type is not specified."
msgstr "Objekttypen er ikke angivet."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Fejl"
@@ -182,123 +260,141 @@ msgstr "Den app navn er ikke angivet."
msgid "The required file {file} is not installed!"
msgstr "Den krævede fil {file} er ikke installeret!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Del"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Fejl under deling"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Fejl under annullering af deling"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Fejl under justering af rettigheder"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Delt med dig og gruppen {group} af {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Delt med dig af {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Del med"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Del med link"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Beskyt med adgangskode"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Kodeord"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "E-mail link til person"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Send"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Vælg udløbsdato"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Udløbsdato"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Del via email:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ingen personer fundet"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Videredeling ikke tilladt"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Delt i {item} med {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Fjern deling"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "kan redigere"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "Adgangskontrol"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "opret"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "opdater"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "slet"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "del"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Beskyttet med adgangskode"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Fejl ved fjernelse af udløbsdato"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Fejl under sætning af udløbsdato"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Sender ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "E-mail afsendt"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Opdateringen blev ikke udført korrekt. Rapporter venligst problemet til <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownClouds community</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Opdateringen blev udført korrekt. Du bliver nu viderestillet til ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Nulstil ownCloud kodeord"
@@ -380,7 +476,7 @@ msgstr "Rediger kategorier"
msgid "Add"
msgstr "Tilføj"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Sikkerhedsadvarsel"
@@ -390,147 +486,75 @@ msgid ""
"OpenSSL extension."
msgstr "Ingen sikker tilfældighedsgenerator til tal er tilgængelig. Aktiver venligst OpenSSL udvidelsen."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Uden en sikker tilfældighedsgenerator til tal kan en angriber måske gætte dit gendan kodeord og overtage din konto"
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Din data mappe og dine filer er muligvis tilgængelige fra internettet. .htaccess filen som ownCloud leverer virker ikke. Vi anbefaler på det kraftigste at du konfigurerer din webserver på en måske så data mappen ikke længere er tilgængelig eller at du flytter data mappen uden for webserverens dokument rod. "
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Opret en <strong>administratorkonto</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avanceret"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datamappe"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfigurer databasen"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "vil blive brugt"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Databasebruger"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Databasekodeord"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Navn på database"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Database tabelplads"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Databasehost"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Afslut opsætning"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Søndag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Mandag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Tirsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Onsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Torsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Fredag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Lørdag"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Marts"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "December"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Webtjenester under din kontrol"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Log ud"
@@ -552,17 +576,17 @@ msgstr "Skift adgangskode for at sikre din konto igen."
msgid "Lost your password?"
msgstr "Mistet dit kodeord?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "husk"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Log ind"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Du er nu logget ud."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -575,18 +599,4 @@ msgstr "næste"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Sikkerhedsadvarsel!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Verificer din adgangskode.<br/>Af sikkerhedsårsager kan du lejlighedsvist blive bedt om at indtaste din adgangskode igen."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verificer"
+msgstr "Opdatere Owncloud til version %s, dette kan tage et stykke tid."
diff --git a/l10n/da/files.po b/l10n/da/files.po
index b2d80372d34..dfe1828390c 100644
--- a/l10n/da/files.po
+++ b/l10n/da/files.po
@@ -4,7 +4,7 @@
#
# Translators:
# <cronner@gmail.com>, 2012.
-# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011-2012.
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011-2013.
# Ole Holm Frandsen <froksen@gmail.com>, 2012.
# <osos@openeyes.dk>, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
@@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -28,207 +28,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Kunne ikke flytte %s - der findes allerede en fil med dette navn"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Kunne ikke flytte %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Kunne ikke omdøbe fil"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Ingen fil blev uploadet. Ukendt fejl."
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Der er ingen fejl, filen blev uploadet med success"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Den uploadede fil overskrider MAX_FILE_SIZE -direktivet som er specificeret i HTML-formularen"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Den uploadede file blev kun delvist uploadet"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ingen fil blev uploadet"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Mangler en midlertidig mappe"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Fejl ved skrivning til disk."
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Der er ikke nok plads til rådlighed"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Ugyldig mappe."
#: appinfo/app.php:10
msgid "Files"
msgstr "Filer"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Fjern deling"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Slet"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Omdøb"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Afventer"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} eksisterer allerede"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "erstat"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "foreslå navn"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "fortryd"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "erstattede {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "fortryd"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "erstattede {new_name} med {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "ikke delte {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "slettede {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' er et ugyldigt filnavn."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Filnavnet kan ikke stå tomt."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "genererer ZIP-fil, det kan tage lidt tid."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Dit download forberedes. Dette kan tage lidt tid ved større filer."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kunne ikke uploade din fil, da det enten er en mappe eller er tom"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Fejl ved upload"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Luk"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Afventer"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 fil uploades"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} filer uploades"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Upload afbrudt."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URLen kan ikke være tom."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} filer skannet"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "fejl under scanning"
+msgstr "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Navn"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Størrelse"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Ændret"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 mappe"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} mapper"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 fil"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} filer"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Upload"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Filhåndtering"
@@ -277,36 +280,44 @@ msgstr "Mappe"
msgid "From link"
msgstr "Fra link"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Upload"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Fortryd upload"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Her er tomt. Upload noget!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Download"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Fjern deling"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Upload for stor"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Filerne bliver indlæst, vent venligst."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Indlæser"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/da/files_encryption.po b/l10n/da/files_encryption.po
index bd1c9864514..10625b4397d 100644
--- a/l10n/da/files_encryption.po
+++ b/l10n/da/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2013.
# <osos@openeyes.dk>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-14 02:01+0200\n"
-"PO-Revision-Date: 2012-09-13 09:42+0000\n"
-"Last-Translator: osos <osos@openeyes.dk>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Kryptering"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Ekskluder følgende filtyper fra kryptering"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Ingen"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Aktivér kryptering"
diff --git a/l10n/da/files_trashbin.po b/l10n/da/files_trashbin.po
new file mode 100644
index 00000000000..107b90ea909
--- /dev/null
+++ b/l10n/da/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Navn"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 mappe"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} mapper"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 fil"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} filer"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Gendan"
diff --git a/l10n/da/files_versions.po b/l10n/da/files_versions.po
index 3e6898ddd45..6ae8e6b45e6 100644
--- a/l10n/da/files_versions.po
+++ b/l10n/da/files_versions.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-26 02:02+0200\n"
-"PO-Revision-Date: 2012-09-25 14:07+0000\n"
-"Last-Translator: Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Lad alle versioner udløbe"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historik"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versioner"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Dette vil slette alle eksisterende backupversioner af dine filer"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/da/lib.po b/l10n/da/lib.po
index 187d797c533..8f64a72009e 100644
--- a/l10n/da/lib.po
+++ b/l10n/da/lib.po
@@ -4,15 +4,15 @@
#
# Translators:
# <cronner@gmail.com>, 2012.
-# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2012.
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2012-2013.
# <osos@openeyes.dk>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-24 00:11+0100\n"
-"PO-Revision-Date: 2012-12-23 21:58+0000\n"
-"Last-Translator: cronner <cronner@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,51 +20,55 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Hjælp"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Personlig"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Indstillinger"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Brugere"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Apps"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP-download er slået fra."
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Filer skal downloades en for en."
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Tilbage til Filer"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "De markerede filer er for store til at generere en ZIP-fil."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "kunne ikke fastslås"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Programmet er ikke aktiveret"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Adgangsfejl"
@@ -84,55 +88,152 @@ msgstr "SMS"
msgid "Images"
msgstr "Billeder"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "sekunder siden"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minut siden"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minutter siden"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 time siden"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d timer siden"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "I dag"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "I går"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d dage siden"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "Sidste måned"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d måneder siden"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "Sidste år"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "Ã¥r siden"
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index 3c2c03dfdaf..9160a7711ab 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -17,9 +17,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2013-01-02 21:06+0000\n"
-"Last-Translator: ressel <sr@ybnet.dk>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -31,6 +31,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Kunne ikke indlæse listen fra App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Adgangsfejl"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Gruppen findes allerede"
@@ -39,7 +48,7 @@ msgstr "Gruppen findes allerede"
msgid "Unable to add group"
msgstr "Gruppen kan ikke oprettes"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Applikationen kunne ikke aktiveres."
@@ -51,22 +60,10 @@ msgstr "Email adresse gemt"
msgid "Invalid email"
msgstr "Ugyldig email adresse"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID ændret"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ugyldig forespørgsel"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Gruppen kan ikke slettes"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Adgangsfejl"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Bruger kan ikke slettes"
@@ -75,6 +72,10 @@ msgstr "Bruger kan ikke slettes"
msgid "Language changed"
msgstr "Sprog ændret"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ugyldig forespørgsel"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Administratorer kan ikke fjerne dem selv fra admin gruppen"
@@ -89,19 +90,47 @@ msgstr "Brugeren kan ikke tilføjes til gruppen %s"
msgid "Unable to remove user from group %s"
msgstr "Brugeren kan ikke fjernes fra gruppen %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Deaktiver"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Aktiver"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Fejl"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Gemmer..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Dansk"
@@ -113,18 +142,22 @@ msgstr "Tilføj din App"
msgid "More Apps"
msgstr "Flere Apps"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Vælg en App"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Se applikationens side på apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licenseret af <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Opdater"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Brugerdokumentation"
@@ -154,83 +187,87 @@ msgstr "Kommerciel support"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Du har brugt <strong>%s</strong> af den tilgængelige <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klienter"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Hent Desktop Klienter"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Hent Android Klient"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Hent iOS Klient"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Kodeord"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Din adgangskode blev ændret"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ude af stand til at ændre dit kodeord"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Nuværende adgangskode"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Ny adgangskode"
-#: templates/personal.php:26
-msgid "show"
-msgstr "vis"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Skift kodeord"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Din emailadresse"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Indtast en emailadresse for at kunne få påmindelse om adgangskode"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Sprog"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Hjælp med oversættelsen"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Brug denne adresse til at oprette forbindelse til din ownCloud i din filstyring"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Version"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -240,11 +277,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Navn"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupper"
@@ -256,26 +293,34 @@ msgstr "Ny"
msgid "Default Storage"
msgstr "Standard opbevaring"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Ubegrænset"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Andet"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Gruppe Administrator"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Opbevaring"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr "Standard"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Slet"
diff --git a/l10n/da/user_ldap.po b/l10n/da/user_ldap.po
index 0aab1f40519..31ec98eaba9 100644
--- a/l10n/da/user_ldap.po
+++ b/l10n/da/user_ldap.po
@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-26 00:10+0100\n"
-"PO-Revision-Date: 2012-12-25 19:52+0000\n"
-"Last-Translator: Daraiko <blah@blacksunset.dk>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,6 +22,58 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Fejl ved sletning"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -31,158 +83,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Du kan udelade protokollen, medmindre du skal bruge SSL. Start i så fald med ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Base DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "You can specify Base DN for users and groups in the Advanced tab"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Bruger DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Kodeord"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "For anonym adgang, skal du lade DN og Adgangskode tomme."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Bruger Login Filter"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Brugerliste Filter"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Definere filteret der bruges ved indlæsning af brugere."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Gruppe Filter"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Definere filteret der bruges når der indlæses grupper."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Base Bruger Træ"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Brug TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Brug ikke til SSL forbindelser, da den vil fejle."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Deaktiver SSL certifikat validering"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Anbefales ikke, brug kun for at teste."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "User Display Name Field"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Base Bruger Træ"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
-msgstr "i bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Base Group Tree"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Group-Member association"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr "i bytes"
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Hjælp"
diff --git a/l10n/da/user_webdavauth.po b/l10n/da/user_webdavauth.po
index 73cb352861f..32a2a3729ab 100644
--- a/l10n/da/user_webdavauth.po
+++ b/l10n/da/user_webdavauth.po
@@ -4,13 +4,14 @@
#
# Translators:
# <cronner@gmail.com>, 2012.
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-24 00:10+0100\n"
-"PO-Revision-Date: 2012-12-23 22:14+0000\n"
-"Last-Translator: cronner <cronner@gmail.com>\n"
+"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"PO-Revision-Date: 2013-01-29 12:07+0000\n"
+"Last-Translator: Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +19,17 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV-godkendelse"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud vil sende brugeroplysningerne til denne webadresse er fortolker http 401 og http 403 som brugeroplysninger forkerte og alle andre koder som brugeroplysninger korrekte."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud vil sende brugerens oplysninger til denne URL. Plugin'et registrerer responsen og fortolker HTTP-statuskoder 401 og 403 som ugyldige oplysninger, men alle andre besvarelser som gyldige oplysninger."
diff --git a/l10n/de/core.po b/l10n/de/core.po
index 3a66b45941b..eb62f53acad 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -3,7 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <admin@s-goecker.de>, 2011, 2012.
+# <admin@s-goecker.de>, 2011-2012.
# <alex.hotz@gmail.com>, 2011.
# <blobbyjj@ymail.com>, 2012.
# <georg.stefan.germany@googlemail.com>, 2011.
@@ -11,7 +11,7 @@
# I Robot <thomas.mueller@tmit.eu>, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# <mail@felixmoeller.de>, 2012.
-# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2012-2013.
# <markus.thiel@desico.de>, 2012.
# <m.fresel@sysangels.com>, 2012.
# <niko@nik-o-mat.de>, 2012.
@@ -23,8 +23,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-09 00:04+0100\n"
-"PO-Revision-Date: 2013-01-08 13:25+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -33,24 +33,24 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Der Nutzer %s hat eine Datei für Dich freigegeben"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "%s hat ein Verzeichnis für Dich freigegeben"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "%s hat eine Datei \"%s\" für Dich freigegeben. Sie ist zum Download hier ferfügbar: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -66,8 +66,9 @@ msgid "No category to add?"
msgstr "Keine Kategorie hinzuzufügen?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Kategorie existiert bereits:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -95,59 +96,135 @@ msgstr "Es wurde keine Kategorien zum Löschen ausgewählt."
msgid "Error removing %s from favorites."
msgstr "Fehler beim Entfernen von %s von den Favoriten."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Montag"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Dienstag"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Freitag"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Samstag"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "März"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Dezember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Einstellungen"
-#: js/js.js:711
+#: js/js.js:764
msgid "seconds ago"
msgstr "Gerade eben"
-#: js/js.js:712
+#: js/js.js:765
msgid "1 minute ago"
msgstr "vor einer Minute"
-#: js/js.js:713
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "Vor {minutes} Minuten"
-#: js/js.js:714
+#: js/js.js:767
msgid "1 hour ago"
msgstr "Vor einer Stunde"
-#: js/js.js:715
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "Vor {hours} Stunden"
-#: js/js.js:716
+#: js/js.js:769
msgid "today"
msgstr "Heute"
-#: js/js.js:717
+#: js/js.js:770
msgid "yesterday"
msgstr "Gestern"
-#: js/js.js:718
+#: js/js.js:771
msgid "{days} days ago"
msgstr "Vor {days} Tag(en)"
-#: js/js.js:719
+#: js/js.js:772
msgid "last month"
msgstr "Letzten Monat"
-#: js/js.js:720
+#: js/js.js:773
msgid "{months} months ago"
msgstr "Vor {months} Monaten"
-#: js/js.js:721
+#: js/js.js:774
msgid "months ago"
msgstr "Vor Monaten"
-#: js/js.js:722
+#: js/js.js:775
msgid "last year"
msgstr "Letztes Jahr"
-#: js/js.js:723
+#: js/js.js:776
msgid "years ago"
msgstr "Vor Jahren"
@@ -177,8 +254,8 @@ msgid "The object type is not specified."
msgstr "Der Objekttyp ist nicht angegeben."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Fehler"
@@ -190,123 +267,141 @@ msgstr "Der App-Name ist nicht angegeben."
msgid "The required file {file} is not installed!"
msgstr "Die benötigte Datei {file} ist nicht installiert."
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Freigeben"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Freigegeben"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Fehler beim Freigeben"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Fehler beim Aufheben der Freigabe"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Fehler beim Ändern der Rechte"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "{owner} hat dies für Dich und die Gruppe {group} freigegeben"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "{owner} hat dies für Dich freigegeben"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Freigeben für"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Über einen Link freigeben"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Passwortschutz"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Passwort"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Link per E-Mail verschicken"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Senden"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Setze ein Ablaufdatum"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Ablaufdatum"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Über eine E-Mail freigeben:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Niemand gefunden"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Weiterverteilen ist nicht erlaubt"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Für {user} in {item} freigegeben"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Freigabe aufheben"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "kann bearbeiten"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "Zugriffskontrolle"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "erstellen"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "aktualisieren"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "löschen"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "freigeben"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Durch ein Passwort geschützt"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Fehler beim entfernen des Ablaufdatums"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Fehler beim Setzen des Ablaufdatums"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Sende ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "E-Mail wurde verschickt"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud Community</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud-Passwort zurücksetzen"
@@ -388,7 +483,7 @@ msgstr "Kategorien bearbeiten"
msgid "Add"
msgstr "Hinzufügen"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Sicherheitswarnung"
@@ -398,147 +493,75 @@ msgid ""
"OpenSSL extension."
msgstr "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktiviere die PHP-Erweiterung für OpenSSL."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Konten zu übernehmen."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Dein Datenverzeichnis und deine Datein sind vielleicht vom Internet aus erreichbar. Die .htaccess Datei, die ownCloud verwendet, arbeitet nicht richtig. Wir schlagen Dir dringend vor, dass du deinen Webserver so konfigurierst, dass das Datenverzeichnis nicht länger erreichbar ist oder, dass du dein Datenverzeichnis aus dem Dokumenten-root des Webservers bewegst."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "<strong>Administrator-Konto</strong> anlegen"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Fortgeschritten"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datenverzeichnis"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Datenbank einrichten"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "wird verwendet"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Datenbank-Benutzer"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Datenbank-Passwort"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Datenbank-Name"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Datenbank-Tablespace"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Datenbank-Host"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Installation abschließen"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Sonntag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Montag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Dienstag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Mittwoch"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Donnerstag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Freitag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Samstag"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "März"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Dezember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Web-Services unter Ihrer Kontrolle"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Abmelden"
@@ -560,17 +583,17 @@ msgstr "Bitte ändere Dein Passwort, um Deinen Account wieder zu schützen."
msgid "Lost your password?"
msgstr "Passwort vergessen?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "merken"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Einloggen"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Du wurdest abgemeldet."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -584,17 +607,3 @@ msgstr "Weiter"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "Aktualisiere ownCloud auf Version %s. Dies könnte eine Weile dauern."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Sicherheitswarnung!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Bitte bestätige Dein Passwort. <br/> Aus Sicherheitsgründen wirst Du hierbei gebeten, Dein Passwort erneut einzugeben."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Bestätigen"
diff --git a/l10n/de/files.po b/l10n/de/files.po
index b87748be1aa..bf70be47a70 100644
--- a/l10n/de/files.po
+++ b/l10n/de/files.po
@@ -12,7 +12,8 @@
# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
# <lukas@statuscode.ch>, 2012.
# <mail@felixmoeller.de>, 2012.
-# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2012-2013.
+# <markus.thiel@desico.de>, 2013.
# Michael Krell <m4dmike.mni@gmail.com>, 2012.
# <nelsonfritsch@gmail.com>, 2012.
# <niko@nik-o-mat.de>, 2012.
@@ -21,12 +22,14 @@
# Thomas Müller <>, 2012.
# <transifex.3.mensaje@spamgourmet.com>, 2012.
# <transifex.com@mail.simonzoellner.de>, 2013.
+# <uu.kabum@gmail.com>, 2013.
+# <wachhund@wachhund.to>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -38,57 +41,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits."
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Konnte %s nicht verschieben"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Konnte Datei nicht umbenennen"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Keine Datei hochgeladen. Unbekannter Fehler"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Datei fehlerfrei hochgeladen."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Die Größe der hochzuladenden Datei überschreitet die MAX_FILE_SIZE-Richtlinie, die im HTML-Formular angegeben wurde"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Die Datei wurde nur teilweise hochgeladen."
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Es wurde keine Datei hochgeladen."
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Temporärer Ordner fehlt."
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Fehler beim Schreiben auf die Festplatte"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr "Nicht genug Speicherplatz verfügbar"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Ungültiges Verzeichnis."
@@ -96,149 +99,152 @@ msgstr "Ungültiges Verzeichnis."
msgid "Files"
msgstr "Dateien"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Nicht mehr freigeben"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Löschen"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Umbenennen"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ausstehend"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} existiert bereits"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "ersetzen"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "Name vorschlagen"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "abbrechen"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} wurde ersetzt"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "rückgängig machen"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name} ersetzt durch {new_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "Freigabe von {files} aufgehoben"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "Löschvorgang ausführen"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} gelöscht"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' ist kein gültiger Dateiname."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Der Dateiname darf nicht leer sein."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Erstelle ZIP-Datei. Dies kann eine Weile dauern."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Ihr Speicherplatz ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Ihr Speicherplatz ist fast aufgebraucht ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Fehler beim Upload"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Schließen"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Ausstehend"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "Eine Datei wird hoch geladen"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} Dateien werden hochgeladen"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Upload abgebrochen."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "Die URL darf nicht leer sein."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
+msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten."
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} Dateien wurden gescannt"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "Fehler beim Scannen"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Name"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Größe"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Bearbeitet"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 Ordner"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} Ordner"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 Datei"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} Dateien"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Hochladen"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Dateibehandlung"
@@ -287,36 +293,44 @@ msgstr "Ordner"
msgid "From link"
msgstr "Von einem Link"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Hochladen"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload abbrechen"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Alles leer. Lade etwas hoch!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Herunterladen"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nicht mehr freigeben"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Upload zu groß"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dateien werden gescannt, bitte warten."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Scanne"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Dateisystem-Cache wird aktualisiert ..."
diff --git a/l10n/de/files_encryption.po b/l10n/de/files_encryption.po
index 2231e6ffdf9..075f5b77349 100644
--- a/l10n/de/files_encryption.po
+++ b/l10n/de/files_encryption.po
@@ -4,13 +4,14 @@
#
# Translators:
# <driz@i2pmail.org>, 2012.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-02 23:16+0200\n"
-"PO-Revision-Date: 2012-10-02 09:06+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Verschlüsselung"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Die folgenden Dateitypen von der Verschlüsselung ausnehmen"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Keine"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Verschlüsselung aktivieren"
diff --git a/l10n/de/files_trashbin.po b/l10n/de/files_trashbin.po
new file mode 100644
index 00000000000..b9692802ff3
--- /dev/null
+++ b/l10n/de/files_trashbin.po
@@ -0,0 +1,70 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# I Robot <owncloud-bot@tmit.eu>, 2013.
+# <wachhund@wachhund.to>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "Wiederherstellung ausführen"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Name"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "gelöscht"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 Ordner"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} Ordner"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 Datei"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} Dateien"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Nichts zu löschen, der Papierkorb ist leer!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Wiederherstellen"
diff --git a/l10n/de/files_versions.po b/l10n/de/files_versions.po
index 464f1fe302c..e969e096065 100644
--- a/l10n/de/files_versions.po
+++ b/l10n/de/files_versions.po
@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-02 23:16+0200\n"
-"PO-Revision-Date: 2012-10-02 09:08+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,21 +22,44 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Alle Versionen löschen"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historie"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versionen"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Dies löscht alle vorhandenen Sicherungsversionen Deiner Dateien."
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/de/lib.po b/l10n/de/lib.po
index d572145c29a..28beedf69ff 100644
--- a/l10n/de/lib.po
+++ b/l10n/de/lib.po
@@ -6,7 +6,7 @@
# <blobbyjj@ymail.com>, 2012.
# I Robot <thomas.mueller@tmit.eu>, 2012.
# Jan-Christoph Borchardt <hey@jancborchardt.net>, 2012.
-# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2012-2013.
# Phi Lieb <>, 2012.
# <thomas.mueller@tmit.eu>, 2012.
# <transifex.3.mensaje@spamgourmet.com>, 2012.
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-12 00:13+0100\n"
-"PO-Revision-Date: 2012-12-11 09:31+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,51 +24,55 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Hilfe"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Persönlich"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Einstellungen"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Benutzer"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Apps"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Administrator"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Der ZIP-Download ist deaktiviert."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Die Dateien müssen einzeln heruntergeladen werden."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Zurück zu \"Dateien\""
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "Konnte nicht festgestellt werden"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Die Anwendung ist nicht aktiviert"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Authentifizierungs-Fehler"
@@ -88,55 +92,152 @@ msgstr "Text"
msgid "Images"
msgstr "Bilder"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "Gerade eben"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "Vor einer Minute"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "Vor %d Minuten"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Vor einer Stunde"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "Vor %d Stunden"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "Heute"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "Gestern"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "Vor %d Tag(en)"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "Letzten Monat"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Vor %d Monaten"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "Letztes Jahr"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "Vor Jahren"
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index 129f9393516..45b80edf9de 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -6,7 +6,7 @@
# <admin@s-goecker.de>, 2011, 2012.
# <blobbyjj@ymail.com>, 2012.
# <icewind1991@gmail.com>, 2012.
-# I Robot <owncloud-bot@tmit.eu>, 2012.
+# I Robot <owncloud-bot@tmit.eu>, 2012-2013.
# I Robot <thomas.mueller@tmit.eu>, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# Jan T <jan-temesinko@web.de>, 2012.
@@ -20,12 +20,14 @@
# Phi Lieb <>, 2012.
# <thomas.mueller@tmit.eu>, 2012.
# <transifex.3.mensaje@spamgourmet.com>, 2012.
+# Tristan <blobbyjj@ymail.com>, 2013.
+# <wachhund@wachhund.to>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 00:15+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -38,6 +40,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden."
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Fehler bei der Anmeldung"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Gruppe existiert bereits"
@@ -46,7 +57,7 @@ msgstr "Gruppe existiert bereits"
msgid "Unable to add group"
msgstr "Gruppe konnte nicht angelegt werden"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "App konnte nicht aktiviert werden."
@@ -58,22 +69,10 @@ msgstr "E-Mail Adresse gespeichert"
msgid "Invalid email"
msgstr "Ungültige E-Mail Adresse"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID geändert"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ungültige Anfrage"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Gruppe konnte nicht gelöscht werden"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Fehler bei der Anmeldung"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Benutzer konnte nicht gelöscht werden"
@@ -82,6 +81,10 @@ msgstr "Benutzer konnte nicht gelöscht werden"
msgid "Language changed"
msgstr "Sprache geändert"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ungültige Anfrage"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen."
@@ -96,19 +99,47 @@ msgstr "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden"
msgid "Unable to remove user from group %s"
msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Deaktivieren"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Aktivieren"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Fehler beim Aktualisieren der App"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Fehler"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Speichern..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Deutsch (Persönlich)"
@@ -120,18 +151,22 @@ msgstr "Füge Deine Anwendung hinzu"
msgid "More Apps"
msgstr "Weitere Anwendungen"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Wähle eine Anwendung aus"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Weitere Anwendungen findest Du auf apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-lizenziert von <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Update durchführen"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Dokumentation für Benutzer"
@@ -161,83 +196,87 @@ msgstr "Kommerzieller Support"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Du verwendest <strong>%s</strong> der verfügbaren <strong>%s<strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Kunden"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Desktop-Client herunterladen"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Android-Client herunterladen"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "iOS-Client herunterladen"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Passwort"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Dein Passwort wurde geändert."
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Passwort konnte nicht geändert werden"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Aktuelles Passwort"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Neues Passwort"
-#: templates/personal.php:26
-msgid "show"
-msgstr "zeigen"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Passwort ändern"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-Mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Deine E-Mail-Adresse"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Trage eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren."
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Sprache"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Hilf bei der Übersetzung"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Verwende diese Adresse, um Deinen Dateimanager mit Deiner ownCloud zu verbinden"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Version"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -247,11 +286,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Name"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Loginname"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Gruppen"
@@ -263,26 +302,34 @@ msgstr "Anlegen"
msgid "Default Storage"
msgstr "Standard-Speicher"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Unbegrenzt"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Andere"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Gruppenadministrator"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Speicher"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "Anzeigenamen ändern"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "Neues Passwort setzen"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Standard"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Löschen"
diff --git a/l10n/de/user_ldap.po b/l10n/de/user_ldap.po
index 7e83a5b2043..e247c006708 100644
--- a/l10n/de/user_ldap.po
+++ b/l10n/de/user_ldap.po
@@ -4,8 +4,9 @@
#
# Translators:
# <blobbyjj@ymail.com>, 2012.
-# I Robot <owncloud-bot@tmit.eu>, 2012.
+# I Robot <owncloud-bot@tmit.eu>, 2012-2013.
# I Robot <thomas.mueller@tmit.eu>, 2012.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2013.
# Maurice Preuß <>, 2012.
# <niko@nik-o-mat.de>, 2012.
# Phi Lieb <>, 2012.
@@ -15,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-23 00:09+0100\n"
-"PO-Revision-Date: 2012-12-22 14:04+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,6 +26,58 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Löschen fehlgeschlagen"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Einstellungen beibehalten?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -34,158 +87,232 @@ msgstr "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkom
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Warnung:</b> Das PHP-Modul, das LDAP benöntigt, ist nicht installiert. Das Backend wird nicht funktionieren. Bitte deinen Systemadministrator das Modul zu installieren."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Du kannst das Protokoll auslassen, außer wenn Du SSL benötigst. Beginne dann mit ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Basis-DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Ein Base DN pro Zeile"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Du kannst Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Benutzer-DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lasse DN und Passwort leer."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Passwort"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Lasse die Felder von DN und Passwort für anonymen Zugang leer."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Benutzer-Login-Filter"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Bestimmt den angewendeten Filter, wenn eine Anmeldung versucht wird. %%uid ersetzt den Benutzernamen bei dem Anmeldeversuch."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "verwende %%uid Platzhalter, z. B. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Benutzer-Filter-Liste"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Definiert den Filter für die Anfrage der Benutzer."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "ohne Platzhalter, z.B.: \"objectClass=person\""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Gruppen-Filter"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Definiert den Filter für die Anfrage der Gruppen."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "ohne Platzhalter, z.B.: \"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Basis-Benutzerbaum"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Basis-Gruppenbaum"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Assoziation zwischen Gruppe und Benutzer"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Nutze TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Verwende dies nicht für SSL-Verbindungen, es wird fehlschlagen."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Schalte die SSL-Zertifikatsprüfung aus."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Nicht empfohlen, nur zu Testzwecken."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "in Sekunden. Eine Änderung leert den Cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Feld für den Anzeigenamen des Benutzers"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. "
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Basis-Benutzerbaum"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Ein Benutzer Base DN pro Zeile"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Feld für den Anzeigenamen der Gruppe"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. "
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Basis-Gruppenbaum"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Ein Gruppen Base DN pro Zeile"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Assoziation zwischen Gruppe und Benutzer"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "in Bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "in Sekunden. Eine Änderung leert den Cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Hilfe"
diff --git a/l10n/de/user_webdavauth.po b/l10n/de/user_webdavauth.po
index 392938e5f92..3bc6180a309 100644
--- a/l10n/de/user_webdavauth.po
+++ b/l10n/de/user_webdavauth.po
@@ -4,14 +4,15 @@
#
# Translators:
# <blobbyjj@ymail.com>, 2012.
+# <mibunrui@gmx.de>, 2013.
# <seeed@freenet.de>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-23 00:09+0100\n"
-"PO-Revision-Date: 2012-12-22 14:08+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 00:30+0000\n"
+"Last-Translator: AndryXY <mibunrui@gmx.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +20,17 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV Authentifikation"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud wird die Logindaten zu dieser URL senden. http 401 und http 403 werden als falsche Logindaten interpretiert und alle anderen Codes als korrekte Logindaten."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud wird die Benutzer-Anmeldedaten an diese URL schicken. Dieses Plugin prüft die Anmeldedaten auf ihre Gültigkeit und interpretiert die HTTP Statusfehler 401 und 403 als ungültige, sowie alle Anderen als gültige Anmeldedaten."
diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po
index b0ce05ca25c..c67c4205fbf 100644
--- a/l10n/de_DE/core.po
+++ b/l10n/de_DE/core.po
@@ -9,23 +9,25 @@
# <blobbyjj@ymail.com>, 2012.
# <deh3nne@deviantdev.com>, 2012.
# <georg.stefan.germany@googlemail.com>, 2011.
+# I Robot <owncloud-bot@tmit.eu>, 2013.
# I Robot <thomas.mueller@tmit.eu>, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# <mail@felixmoeller.de>, 2012.
-# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2012-2013.
# <m.fresel@sysangels.com>, 2012.
# <niko@nik-o-mat.de>, 2012.
# Phi Lieb <>, 2012.
# <Steve_Reichert@gmx.de>, 2013.
+# Susi <>, 2013.
# <thomas.mueller@tmit.eu>, 2012.
# <transifex.3.mensaje@spamgourmet.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-09 00:04+0100\n"
-"PO-Revision-Date: 2013-01-08 10:38+0000\n"
-"Last-Translator: Valermos <Steve_Reichert@gmx.de>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -33,24 +35,24 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Der Nutzer %s hat eine Datei für Sie freigegeben"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "%s hat ein Verzeichnis für Sie freigegeben"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "%s hat eine Datei \"%s\" für Sie freigegeben. Sie ist zum Download hier ferfügbar: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -66,8 +68,9 @@ msgid "No category to add?"
msgstr "Keine Kategorie hinzuzufügen?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Kategorie existiert bereits:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Die Kategorie '%s' existiert bereits."
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -95,59 +98,135 @@ msgstr "Es wurden keine Kategorien zum Löschen ausgewählt."
msgid "Error removing %s from favorites."
msgstr "Fehler beim Entfernen von %s von den Favoriten."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Montag"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Dienstag"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Freitag"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Samstag"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "März"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Dezember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Einstellungen"
-#: js/js.js:711
+#: js/js.js:764
msgid "seconds ago"
msgstr "Gerade eben"
-#: js/js.js:712
+#: js/js.js:765
msgid "1 minute ago"
msgstr "Vor 1 Minute"
-#: js/js.js:713
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "Vor {minutes} Minuten"
-#: js/js.js:714
+#: js/js.js:767
msgid "1 hour ago"
msgstr "Vor einer Stunde"
-#: js/js.js:715
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "Vor {hours} Stunden"
-#: js/js.js:716
+#: js/js.js:769
msgid "today"
msgstr "Heute"
-#: js/js.js:717
+#: js/js.js:770
msgid "yesterday"
msgstr "Gestern"
-#: js/js.js:718
+#: js/js.js:771
msgid "{days} days ago"
msgstr "Vor {days} Tag(en)"
-#: js/js.js:719
+#: js/js.js:772
msgid "last month"
msgstr "Letzten Monat"
-#: js/js.js:720
+#: js/js.js:773
msgid "{months} months ago"
msgstr "Vor {months} Monaten"
-#: js/js.js:721
+#: js/js.js:774
msgid "months ago"
msgstr "Vor Monaten"
-#: js/js.js:722
+#: js/js.js:775
msgid "last year"
msgstr "Letztes Jahr"
-#: js/js.js:723
+#: js/js.js:776
msgid "years ago"
msgstr "Vor Jahren"
@@ -177,8 +256,8 @@ msgid "The object type is not specified."
msgstr "Der Objekttyp ist nicht angegeben."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Fehler"
@@ -190,123 +269,141 @@ msgstr "Der App-Name ist nicht angegeben."
msgid "The required file {file} is not installed!"
msgstr "Die benötigte Datei {file} ist nicht installiert."
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Freigeben"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Freigegeben"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Fehler bei der Freigabe"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Fehler bei der Aufhebung der Freigabe"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Fehler bei der Änderung der Rechte"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Durch {owner} für Sie und die Gruppe {group} freigegeben."
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Durch {owner} für Sie freigegeben."
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Freigeben für"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Über einen Link freigeben"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Passwortschutz"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Passwort"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Link per E-Mail verschicken"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Senden"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Setze ein Ablaufdatum"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Ablaufdatum"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Mittels einer E-Mail freigeben:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Niemand gefunden"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Das Weiterverteilen ist nicht erlaubt"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Freigegeben in {item} von {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Freigabe aufheben"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "kann bearbeiten"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "Zugriffskontrolle"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "erstellen"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "aktualisieren"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "löschen"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "freigeben"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Durch ein Passwort geschützt"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Fehler beim Entfernen des Ablaufdatums"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Fehler beim Setzen des Ablaufdatums"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Sende ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Email gesendet"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud Gemeinschaft</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud-Passwort zurücksetzen"
@@ -388,7 +485,7 @@ msgstr "Kategorien bearbeiten"
msgid "Add"
msgstr "Hinzufügen"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Sicherheitshinweis"
@@ -398,147 +495,75 @@ msgid ""
"OpenSSL extension."
msgstr "Es ist kein sicherer Zufallszahlengenerator verfügbar, bitte aktivieren Sie die PHP-Erweiterung für OpenSSL."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Ohne einen sicheren Zufallszahlengenerator sind Angreifer in der Lage, die Tokens für das Zurücksetzen der Passwörter vorherzusehen und Ihr Konto zu übernehmen."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich über das Internet erreichbar. Die von ownCloud bereitgestellte .htaccess Datei funktioniert nicht. Wir empfehlen Ihnen dringend, Ihren Webserver so zu konfigurieren, dass das Datenverzeichnis nicht mehr über das Internet erreichbar ist. Alternativ können Sie auch das Datenverzeichnis aus dem Dokumentenverzeichnis des Webservers verschieben."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "<strong>Administrator-Konto</strong> anlegen"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Fortgeschritten"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datenverzeichnis"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Datenbank einrichten"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "wird verwendet"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Datenbank-Benutzer"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Datenbank-Passwort"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Datenbank-Name"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Datenbank-Tablespace"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Datenbank-Host"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Installation abschließen"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Sonntag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Montag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Dienstag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Mittwoch"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Donnerstag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Freitag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Samstag"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "März"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Dezember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Web-Services unter Ihrer Kontrolle"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Abmelden"
@@ -560,17 +585,17 @@ msgstr "Bitte ändern Sie Ihr Passwort, um Ihr Konto wieder zu sichern."
msgid "Lost your password?"
msgstr "Passwort vergessen?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "merken"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Einloggen"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Sie wurden abgemeldet."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Alternative Logins"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -584,17 +609,3 @@ msgstr "Weiter"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "Aktualisiere ownCloud auf Version %s. Dies könnte eine Weile dauern."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Sicherheitshinweis!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Bitte überprüfen Sie Ihr Passwort. <br/>Aus Sicherheitsgründen werden Sie gelegentlich aufgefordert, Ihr Passwort erneut einzugeben."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Überprüfen"
diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po
index ec85e5580e9..a92ea83e99f 100644
--- a/l10n/de_DE/files.po
+++ b/l10n/de_DE/files.po
@@ -4,6 +4,7 @@
#
# Translators:
# <admin@s-goecker.de>, 2012.
+# Andreas Tangemann <a.tangemann@web.de>, 2013.
# <a.tangemann@web.de>, 2012-2013.
# <blobbyjj@ymail.com>, 2012.
# I Robot <owncloud-bot@tmit.eu>, 2012-2013.
@@ -13,12 +14,15 @@
# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
# <lukas@statuscode.ch>, 2012.
# <mail@felixmoeller.de>, 2012.
-# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2012-2013.
+# <markus.thiel@desico.de>, 2013.
# Michael Krell <m4dmike.mni@gmail.com>, 2012.
# <nelsonfritsch@gmail.com>, 2012.
# <niko@nik-o-mat.de>, 2012.
# Phi Lieb <>, 2012.
+# Phillip Schichtel <quick_wango@code-infection.de>, 2013.
# <Steve_Reichert@gmx.de>, 2013.
+# Susi <>, 2013.
# <thomas.mueller@tmit.eu>, 2012.
# Thomas Müller <>, 2012.
# <transifex.3.mensaje@spamgourmet.com>, 2012.
@@ -26,8 +30,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
@@ -39,57 +43,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Konnte %s nicht verschieben"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Konnte Datei nicht umbenennen"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Keine Datei hochgeladen. Unbekannter Fehler"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Es sind keine Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Die Größe der hochzuladenden Datei überschreitet die MAX_FILE_SIZE-Richtlinie, die im HTML-Formular angegeben wurde"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Die Datei wurde nur teilweise hochgeladen."
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Es wurde keine Datei hochgeladen."
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Der temporäre Ordner fehlt."
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Fehler beim Schreiben auf die Festplatte"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Nicht genügend Speicherplatz verfügbar"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Nicht genug Speicher vorhanden."
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Ungültiges Verzeichnis."
@@ -97,149 +101,152 @@ msgstr "Ungültiges Verzeichnis."
msgid "Files"
msgstr "Dateien"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Nicht mehr freigeben"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Entgültig löschen"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Löschen"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Umbenennen"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ausstehend"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} existiert bereits"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "ersetzen"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "Name vorschlagen"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "abbrechen"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} wurde ersetzt"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "rückgängig machen"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name} wurde ersetzt durch {new_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "Freigabe für {files} beendet"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} gelöscht"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "Führe das Löschen aus"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' ist kein gültiger Dateiname."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Der Dateiname darf nicht leer sein."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Erstelle ZIP-Datei. Dies kann eine Weile dauern."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Ihr Speicher ist voll. Daher können keine Dateien mehr aktualisiert oder synchronisiert werden!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Ihr Speicher ist fast voll ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien einen Moment dauern."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Fehler beim Upload"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Schließen"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Ausstehend"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 Datei wird hochgeladen"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} Dateien wurden hochgeladen"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Upload abgebrochen."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "Die URL darf nicht leer sein."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} Dateien wurden gescannt"
+msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten"
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "Fehler beim Scannen"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Name"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Größe"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Bearbeitet"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 Ordner"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} Ordner"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 Datei"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} Dateien"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Hochladen"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Dateibehandlung"
@@ -288,36 +295,44 @@ msgstr "Ordner"
msgid "From link"
msgstr "Von einem Link"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Hochladen"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload abbrechen"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Alles leer. Bitte laden Sie etwas hoch!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Herunterladen"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nicht mehr freigeben"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Der Upload ist zu groß"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dateien werden gescannt, bitte warten."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Scanne"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Aktualisiere den Dateisystem-Cache"
diff --git a/l10n/de_DE/files_encryption.po b/l10n/de_DE/files_encryption.po
index 52f9f34a774..a4b8388e603 100644
--- a/l10n/de_DE/files_encryption.po
+++ b/l10n/de_DE/files_encryption.po
@@ -3,14 +3,19 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <admin@kaio.ws>, 2013.
+# Andreas Tangemann <a.tangemann@web.de>, 2013.
# <driz@i2pmail.org>, 2012.
+# Marc-Andre Husyk <member@wue.de>, 2013.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2013.
+# Susi <>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-20 02:02+0200\n"
-"PO-Revision-Date: 2012-10-19 21:33+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +23,22 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Verschlüsselung"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Die folgenden Dateitypen von der Verschlüsselung ausnehmen"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Datei-Verschlüsselung ist aktiviert"
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Die folgenden Datei-Typen werden nicht verschlüsselt:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Die folgenden Datei-Typen von der Verschlüsselung ausnehmen:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Keine"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Verschlüsselung aktivieren"
diff --git a/l10n/de_DE/files_trashbin.po b/l10n/de_DE/files_trashbin.po
new file mode 100644
index 00000000000..755e0968dbd
--- /dev/null
+++ b/l10n/de_DE/files_trashbin.po
@@ -0,0 +1,71 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# I Robot <owncloud-bot@tmit.eu>, 2013.
+# Phillip Schichtel <quick_wango@code-infection.de>, 2013.
+# Susi <>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de_DE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "Führe die Wiederherstellung aus"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "Datei entgültig löschen"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Name"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Gelöscht"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 Ordner"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} Ordner"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 Datei"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} Dateien"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Nichts zu löschen, Ihr Papierkorb ist leer!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Wiederherstellen"
diff --git a/l10n/de_DE/files_versions.po b/l10n/de_DE/files_versions.po
index c9f8e08c2e5..e6c6d61cb21 100644
--- a/l10n/de_DE/files_versions.po
+++ b/l10n/de_DE/files_versions.po
@@ -6,15 +6,16 @@
# <blobbyjj@ymail.com>, 2012.
# I Robot <thomas.mueller@tmit.eu>, 2012.
# <mail@felixmoeller.de>, 2012.
+# <niko@nik-o-mat.de>, 2013.
# <niko@nik-o-mat.de>, 2012.
# <thomas.mueller@tmit.eu>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-20 02:02+0200\n"
-"PO-Revision-Date: 2012-10-19 21:36+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 12:20+0000\n"
+"Last-Translator: JamFX <niko@nik-o-mat.de>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,21 +23,44 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Alle Versionen löschen"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr "Erfolgreich"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr "Fehlgeschlagen"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "keine älteren Versionen verfügbar"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Kein Pfad angegeben"
#: js/versions.js:16
msgid "History"
msgstr "Historie"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versionen"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Dies löscht alle vorhandenen Sicherungsversionen Ihrer Dateien."
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po
index 3c9177f17ed..8465b3420a6 100644
--- a/l10n/de_DE/lib.po
+++ b/l10n/de_DE/lib.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Andreas Tangemann <a.tangemann@web.de>, 2013.
# <a.tangemann@web.de>, 2012.
# <blobbyjj@ymail.com>, 2012.
# Jan-Christoph Borchardt <hey@jancborchardt.net>, 2012.
@@ -14,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-11 00:04+0100\n"
-"PO-Revision-Date: 2012-12-10 13:49+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,51 +25,55 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Hilfe"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Persönlich"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Einstellungen"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Benutzer"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Apps"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Administrator"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Der ZIP-Download ist deaktiviert."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Die Dateien müssen einzeln heruntergeladen werden."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Zurück zu \"Dateien\""
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "konnte nicht ermittelt werden"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Die Anwendung ist nicht aktiviert"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Authentifizierungs-Fehler"
@@ -88,55 +93,152 @@ msgstr "Text"
msgid "Images"
msgstr "Bilder"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "Gerade eben"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "Vor einer Minute"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "Vor %d Minuten"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Vor einer Stunde"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "Vor %d Stunden"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "Heute"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "Gestern"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "Vor %d Tag(en)"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "Letzten Monat"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Vor %d Monaten"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "Letztes Jahr"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "Vor Jahren"
diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po
index 4886219fbce..2e63866f197 100644
--- a/l10n/de_DE/settings.po
+++ b/l10n/de_DE/settings.po
@@ -6,27 +6,32 @@
# <admin@s-goecker.de>, 2011-2012.
# <blobbyjj@ymail.com>, 2012.
# <icewind1991@gmail.com>, 2012.
-# I Robot <owncloud-bot@tmit.eu>, 2012.
+# I Robot <owncloud-bot@tmit.eu>, 2012-2013.
# I Robot <thomas.mueller@tmit.eu>, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# Jan T <jan-temesinko@web.de>, 2012.
+# Lukas Reschke <lukas@statuscode.ch>, 2013.
# <lukas@statuscode.ch>, 2012.
# <mail@felixmoeller.de>, 2012.
# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
# <nelsonfritsch@gmail.com>, 2012.
# <niko@nik-o-mat.de>, 2012.
# Phi Lieb <>, 2012.
+# Phillip Schichtel <quick_wango@code-infection.de>, 2013.
# <seeed@freenet.de>, 2012.
+# <stefan.niedermann@googlemail.com>, 2013.
+# Susi <>, 2013.
# <thomas.mueller@tmit.eu>, 2012.
# <transifex-2.7.mensaje@spamgourmet.com>, 2012.
# <transifex.3.mensaje@spamgourmet.com>, 2012.
+# Tristan <blobbyjj@ymail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-04 13:22+0100\n"
-"PO-Revision-Date: 2013-01-03 16:09+0000\n"
-"Last-Translator: a.tangemann <a.tangemann@web.de>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -38,6 +43,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden."
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Fehler bei der Anmeldung"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Das Ändern des Anzeigenamens ist nicht möglich"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Die Gruppe existiert bereits"
@@ -46,7 +60,7 @@ msgstr "Die Gruppe existiert bereits"
msgid "Unable to add group"
msgstr "Die Gruppe konnte nicht angelegt werden"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Die Anwendung konnte nicht aktiviert werden."
@@ -58,22 +72,10 @@ msgstr "E-Mail-Adresse gespeichert"
msgid "Invalid email"
msgstr "Ungültige E-Mail-Adresse"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID geändert"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ungültige Anfrage"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Die Gruppe konnte nicht gelöscht werden"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Fehler bei der Anmeldung"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Der Benutzer konnte nicht gelöscht werden"
@@ -82,6 +84,10 @@ msgstr "Der Benutzer konnte nicht gelöscht werden"
msgid "Language changed"
msgstr "Sprache geändert"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ungültige Anfrage"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Administratoren können sich nicht selbst aus der admin-Gruppe löschen"
@@ -96,19 +102,47 @@ msgstr "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden"
msgid "Unable to remove user from group %s"
msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Die App konnte nicht geupdated werden."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Update zu {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Deaktivieren"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Aktivieren"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Bitte warten...."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Update..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Es ist ein Fehler während des Updates aufgetreten"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Fehler"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Geupdated"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Speichern..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Deutsch (Förmlich: Sie)"
@@ -120,18 +154,22 @@ msgstr "Fügen Sie Ihre Anwendung hinzu"
msgid "More Apps"
msgstr "Weitere Anwendungen"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Wählen Sie eine Anwendung aus"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Weitere Anwendungen finden Sie auf apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-lizenziert von <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Update durchführen"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Dokumentation für Benutzer"
@@ -161,83 +199,87 @@ msgstr "Kommerzieller Support"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Kunden"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Desktop-Client herunterladen"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Android-Client herunterladen"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "iOS-Client herunterladen"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Passwort"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Ihr Passwort wurde geändert."
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Das Passwort konnte nicht geändert werden"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Aktuelles Passwort"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Neues Passwort"
-#: templates/personal.php:26
-msgid "show"
-msgstr "zeigen"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Passwort ändern"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Dein Anzeigename wurde geändert"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Das Ändern deines Anzeigenamens ist nicht möglich"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Anzeigenamen ändern"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-Mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Ihre E-Mail-Adresse"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Bitte tragen Sie eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren."
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Sprache"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Helfen Sie bei der Übersetzung"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Verwenden Sie diese Adresse, um Ihren Dateimanager mit Ihrer ownCloud zu verbinden"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Version"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -247,11 +289,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Name"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Loginname"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Gruppen"
@@ -263,26 +305,34 @@ msgstr "Anlegen"
msgid "Default Storage"
msgstr "Standard-Speicher"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Unbegrenzt"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Andere"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Gruppenadministrator"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Speicher"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "Anzeigenamen ändern"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "Neues Passwort setzen"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Standard"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Löschen"
diff --git a/l10n/de_DE/user_ldap.po b/l10n/de_DE/user_ldap.po
index 843b2e80f4d..0633de147c9 100644
--- a/l10n/de_DE/user_ldap.po
+++ b/l10n/de_DE/user_ldap.po
@@ -3,20 +3,24 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Andreas Tangemann <a.tangemann@web.de>, 2013.
# <blobbyjj@ymail.com>, 2012.
# I Robot <thomas.mueller@tmit.eu>, 2012.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2013.
# Maurice Preuß <>, 2012.
# <niko@nik-o-mat.de>, 2012.
# Phi Lieb <>, 2012.
+# <stefan.niedermann@googlemail.com>, 2013.
+# Susi <>, 2013.
# <transifex-2.7.mensaje@spamgourmet.com>, 2012.
# <transifex.3.mensaje@spamgourmet.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-23 00:09+0100\n"
-"PO-Revision-Date: 2012-12-22 14:04+0000\n"
-"Last-Translator: Mirodin <blobbyjj@ymail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,6 +28,58 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Das Löschen der Server-Konfiguration schlug fehl"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "Die Konfiguration ist valide und eine Verbindung konnte hergestellt werden!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "Die Konfiguration ist valide, aber das Herstellen einer Verbindung schlug fehl. Bitte überprüfen Sie die Server-Einstellungen und Zertifikate."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "Die Konfiguration ist nicht valide. Weitere Details können Sie im ownCloud-Log nachlesen."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Löschen fehlgeschlagen"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Sollen die Einstellungen der letzten Server-Konfiguration übernommen werden?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Einstellungen behalten?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Das Hinzufügen der Server-Konfiguration schlug fehl"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Verbindungs-Test erfolgreich"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Verbindungs-Test fehlgeschlagen"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Möchten Sie wirklich die Server-Konfiguration löschen?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Löschung bestätigen"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -33,158 +89,232 @@ msgstr "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkom
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Warnung:</b> Das PHP-Modul, das LDAP benöntigt, ist nicht installiert. Das Backend wird nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Warnung:</b> Da das PHP-Modul für LDAP ist nicht installiert, das Backend wird nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Server-Konfiguration"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Server-Konfiguration hinzufügen"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Sie können das Protokoll auslassen, außer wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Basis-DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Ein Base DN pro Zeile"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Sie können Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Benutzer-DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lassen Sie DN und Passwort leer."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Passwort"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Lassen Sie die Felder von DN und Passwort für anonymen Zugang leer."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Benutzer-Login-Filter"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Bestimmt den angewendeten Filter, wenn eine Anmeldung versucht wird. %%uid ersetzt den Benutzernamen bei dem Anmeldeversuch."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "verwenden Sie %%uid Platzhalter, z. B. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Benutzer-Filter-Liste"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Definiert den Filter für die Anfrage der Benutzer."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "ohne Platzhalter, z.B.: \"objectClass=person\""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Gruppen-Filter"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Definiert den Filter für die Anfrage der Gruppen."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "ohne Platzhalter, z.B.: \"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Verbindungs-Einstellungen"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Konfiguration aktiv"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Wenn nicht angehakt, wird diese Konfiguration übersprungen."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Basis-Benutzerbaum"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Back-Up (Replikation) Host"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Basis-Gruppenbaum"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Optionaler Backup Host. Es muss ein Replikat des eigentlichen LDAP/AD Servers sein."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Assoziation zwischen Gruppe und Benutzer"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Back-Up (Replikation) Port"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Hauptserver deaktivieren"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Wenn eingeschaltet wird sich ownCloud nur mit dem Replilat-Server verbinden."
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Nutze TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Verwenden Sie dies nicht für SSL-Verbindungen, es wird fehlschlagen."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Schalten Sie die SSL-Zertifikatsprüfung aus."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Falls die Verbindung es erfordert, muss das SSL-Zertifikat des LDAP-Server importiert werden."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Nicht empfohlen, nur zu Testzwecken."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "in Sekunden. Eine Änderung leert den Cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Verzeichnis-Einstellungen"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Feld für den Anzeigenamen des Benutzers"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Das LDAP-Attribut für die Generierung des Benutzernamens in ownCloud. "
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Basis-Benutzerbaum"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Ein Benutzer Base DN pro Zeile"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Benutzer-Suche Eigenschaften"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Optional; Ein Attribut pro Zeile"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Feld für den Anzeigenamen der Gruppe"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Das LDAP-Attribut für die Generierung des Gruppennamens in ownCloud. "
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Basis-Gruppenbaum"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Ein Gruppen Base DN pro Zeile"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Gruppen-Suche Eigenschaften"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Assoziation zwischen Gruppe und Benutzer"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "besondere Eigenschaften"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "in Bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "in Sekunden. Eine Änderung leert den Cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Hilfe"
diff --git a/l10n/de_DE/user_webdavauth.po b/l10n/de_DE/user_webdavauth.po
index aabd937409d..2d01d1e91e1 100644
--- a/l10n/de_DE/user_webdavauth.po
+++ b/l10n/de_DE/user_webdavauth.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <a.tangemann@web.de>, 2012.
+# <a.tangemann@web.de>, 2012-2013.
# <multimill@gmail.com>, 2012.
# <transifex-2.7.mensaje@spamgourmet.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-04 13:22+0100\n"
-"PO-Revision-Date: 2013-01-03 16:07+0000\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 22:23+0000\n"
"Last-Translator: a.tangemann <a.tangemann@web.de>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
@@ -20,13 +20,17 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV Authentifizierung"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud "
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud sendet die Benutzerdaten an diese URL. Dieses Plugin prüft die Antwort und wird die Statuscodes 401 und 403 als ungültige Daten interpretieren und alle anderen Antworten als gültige Daten."
diff --git a/l10n/el/core.po b/l10n/el/core.po
index 71c93b2c815..0c8ae8d8ae9 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -4,19 +4,20 @@
#
# Translators:
# axil Pι <axilleas@archlinux.gr>, 2012.
-# Dimitris M. <monopatis@gmail.com>, 2012.
+# Dimitris M. <monopatis@gmail.com>, 2012-2013.
# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
# Marios Bekatoros <>, 2012.
# <petros.kyladitis@gmail.com>, 2011.
# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011-2012.
+# <vagelis@cyberdest.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 14:40+0000\n"
+"Last-Translator: Dimitris M. <monopatis@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,24 +25,24 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Ο χÏήστης %s διαμοιÏάστηκε ένα αÏχείο με εσάς"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Ο χÏήστης %s διαμοιÏάστηκε ένα φάκελο με εσάς"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Ο χÏήστης %s διαμοιÏάστηκε το αÏχείο \"%s\" μαζί σας. Είναι διαθέσιμο για λήψη εδώ: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -57,8 +58,9 @@ msgid "No category to add?"
msgstr "Δεν έχετε κατηγοÏία να Ï€Ïοσθέσετε;"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Αυτή η κατηγοÏία υπάÏχει ήδη:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Αυτή η κατηγοÏία υπάÏχει ήδη: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -86,59 +88,135 @@ msgstr "Δεν επιλέχτηκαν κατηγοÏίες για διαγÏαφ
msgid "Error removing %s from favorites."
msgstr "Σφάλμα αφαίÏεσης %s από τα αγαπημένα."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "ΚυÏιακή"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "ΔευτέÏα"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "ΤÏίτη"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "ΤετάÏτη"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Πέμπτη"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "ΠαÏασκευή"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Σάββατο"
+
+#: js/config.php:33
+msgid "January"
+msgstr "ΙανουάÏιος"
+
+#: js/config.php:33
+msgid "February"
+msgstr "ΦεβÏουάÏιος"
+
+#: js/config.php:33
+msgid "March"
+msgstr "ΜάÏτιος"
+
+#: js/config.php:33
+msgid "April"
+msgstr "ΑπÏίλιος"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Μάϊος"
+
+#: js/config.php:33
+msgid "June"
+msgstr "ΙοÏνιος"
+
+#: js/config.php:33
+msgid "July"
+msgstr "ΙοÏλιος"
+
+#: js/config.php:33
+msgid "August"
+msgstr "ΑÏγουστος"
+
+#: js/config.php:33
+msgid "September"
+msgstr "ΣεπτέμβÏιος"
+
+#: js/config.php:33
+msgid "October"
+msgstr "ΟκτώβÏιος"
+
+#: js/config.php:33
+msgid "November"
+msgstr "ÎοέμβÏιος"
+
+#: js/config.php:33
+msgid "December"
+msgstr "ΔεκέμβÏιος"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Ρυθμίσεις"
-#: js/js.js:704
+#: js/js.js:766
msgid "seconds ago"
msgstr "δευτεÏόλεπτα Ï€Ïιν"
-#: js/js.js:705
+#: js/js.js:767
msgid "1 minute ago"
msgstr "1 λεπτό Ï€Ïιν"
-#: js/js.js:706
+#: js/js.js:768
msgid "{minutes} minutes ago"
msgstr "{minutes} λεπτά Ï€Ïιν"
-#: js/js.js:707
+#: js/js.js:769
msgid "1 hour ago"
msgstr "1 ÏŽÏα Ï€Ïιν"
-#: js/js.js:708
+#: js/js.js:770
msgid "{hours} hours ago"
msgstr "{hours} ÏŽÏες Ï€Ïιν"
-#: js/js.js:709
+#: js/js.js:771
msgid "today"
msgstr "σήμεÏα"
-#: js/js.js:710
+#: js/js.js:772
msgid "yesterday"
msgstr "χτες"
-#: js/js.js:711
+#: js/js.js:773
msgid "{days} days ago"
msgstr "{days} ημέÏες Ï€Ïιν"
-#: js/js.js:712
+#: js/js.js:774
msgid "last month"
msgstr "τελευταίο μήνα"
-#: js/js.js:713
+#: js/js.js:775
msgid "{months} months ago"
msgstr "{months} μήνες Ï€Ïιν"
-#: js/js.js:714
+#: js/js.js:776
msgid "months ago"
msgstr "μήνες Ï€Ïιν"
-#: js/js.js:715
+#: js/js.js:777
msgid "last year"
msgstr "τελευταίο χÏόνο"
-#: js/js.js:716
+#: js/js.js:778
msgid "years ago"
msgstr "χÏόνια Ï€Ïιν"
@@ -168,8 +246,8 @@ msgid "The object type is not specified."
msgstr "Δεν καθοÏίστηκε ο Ï„Ïπος του αντικειμένου."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Σφάλμα"
@@ -181,123 +259,141 @@ msgstr "Δεν καθοÏίστηκε το όνομα της εφαÏμογής.
msgid "The required file {file} is not installed!"
msgstr "Το απαιτοÏμενο αÏχείο {file} δεν εγκαταστάθηκε!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "ΔιαμοιÏασμός"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Σφάλμα κατά τον διαμοιÏασμό"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Σφάλμα κατά το σταμάτημα του διαμοιÏασμοÏ"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Σφάλμα κατά την αλλαγή των δικαιωμάτων"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "ΔιαμοιÏάστηκε με σας και με την ομάδα {group} του {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "ΔιαμοιÏάστηκε με σας από τον {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "ΔιαμοιÏασμός με"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "ΔιαμοιÏασμός με σÏνδεσμο"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "ΠÏοστασία συνθηματικοÏ"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Συνθηματικό"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Αποστολή συνδέσμου με email "
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Αποστολή"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "ΟÏισμός ημ. λήξης"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "ΗμεÏομηνία λήξης"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "ΔιαμοιÏασμός μέσω email:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Δεν βÏέθηκε άνθÏωπος"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "ΞαναμοιÏασμός δεν επιτÏέπεται"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "ΔιαμοιÏασμός του {item} με τον {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Σταμάτημα διαμοιÏασμοÏ"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "δυνατότητα αλλαγής"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "έλεγχος Ï€Ïόσβασης"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "δημιουÏγία"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "ενημέÏωση"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "διαγÏαφή"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "διαμοιÏασμός"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "ΠÏοστασία με συνθηματικό"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Σφάλμα κατά την διαγÏαφή της ημ. λήξης"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Σφάλμα κατά τον οÏισμό ημ. λήξης"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "Αποστολή..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "Το Email απεστάλη "
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ΕπαναφοÏά ÏƒÏ…Î½Î¸Î·Î¼Î±Ï„Î¹ÎºÎ¿Ï ownCloud"
@@ -379,7 +475,7 @@ msgstr "ΕπεξεÏγασία κατηγοÏιών"
msgid "Add"
msgstr "ΠÏοσθήκη"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "ΠÏοειδοποίηση Ασφαλείας"
@@ -389,147 +485,75 @@ msgid ""
"OpenSSL extension."
msgstr "Δεν είναι διαθέσιμο το Ï€Ïόσθετο δημιουÏγίας τυχαίων αÏιθμών ασφαλείας, παÏακαλώ ενεÏγοποιήστε το Ï€Ïόσθετο της PHP, OpenSSL."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "ΧωÏίς το Ï€Ïόσθετο δημιουÏγίας τυχαίων αÏιθμών ασφαλείας, μποÏεί να διαÏÏεÏσει ο λογαÏιασμός σας από επιθέσεις στο διαδίκτυο."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Ο κατάλογος data και τα αÏχεία σας πιθανόν να είναι διαθέσιμα στο διαδίκτυο. Το αÏχείο .htaccess που παÏέχει το ownCloud δεν δουλεÏει. Σας Ï€Ïοτείνουμε ανεπιφÏλακτα να Ïυθμίσετε το διακομιστή σας με τέτοιο Ï„Ïόπο ώστε ο κατάλογος data να μην είναι πλέον Ï€Ïοσβάσιμος ή να μετακινήσετε τον κατάλογο data έξω από τον κατάλογο του διακομιστή."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "ΔημιουÏγήστε έναν <strong>λογαÏιασμό διαχειÏιστή</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Για Ï€ÏοχωÏημένους"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Φάκελος δεδομένων"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "ΡÏθμιση της βάσης δεδομένων"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "θα χÏησιμοποιηθοÏν"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "ΧÏήστης της βάσης δεδομένων"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Συνθηματικό βάσης δεδομένων"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Όνομα βάσης δεδομένων"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Κενά Πινάκων Βάσης Δεδομένων"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Διακομιστής βάσης δεδομένων"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "ΟλοκλήÏωση εγκατάστασης"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "ΚυÏιακή"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "ΔευτέÏα"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "ΤÏίτη"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "ΤετάÏτη"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Πέμπτη"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "ΠαÏασκευή"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Σάββατο"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "ΙανουάÏιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "ΦεβÏουάÏιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "ΜάÏτιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "ΑπÏίλιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Μάϊος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "ΙοÏνιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "ΙοÏλιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "ΑÏγουστος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "ΣεπτέμβÏιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "ΟκτώβÏιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "ÎοέμβÏιος"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "ΔεκέμβÏιος"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "ΥπηÏεσίες web υπό τον έλεγχό σας"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "ΑποσÏνδεση"
@@ -551,17 +575,17 @@ msgstr "ΠαÏακαλώ αλλάξτε το συνθηματικό σας γιÎ
msgid "Lost your password?"
msgstr "Ξεχάσατε το συνθηματικό σας;"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "απομνημόνευση"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Είσοδος"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Έχετε αποσυνδεθεί."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -574,18 +598,4 @@ msgstr "επόμενο"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "ΠÏοειδοποίηση Ασφαλείας!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "ΠαÏακαλώ επιβεβαιώστε το συνθηματικό σας. <br/>Για λόγους ασφαλείας μποÏεί να εÏωτάστε να εισάγετε ξανά το συνθηματικό σας."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Επαλήθευση"
+msgstr "ΕνημεÏώνοντας το ownCloud στην έκδοση %s,μποÏεί να πάÏει λίγο χÏόνο."
diff --git a/l10n/el/files.po b/l10n/el/files.po
index 6dbee32887a..d0ce4ea85e8 100644
--- a/l10n/el/files.po
+++ b/l10n/el/files.po
@@ -3,8 +3,9 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Dimitris M. <monopatis@gmail.com>, 2012.
-# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
+# Dimitris M. <monopatis@gmail.com>, 2012-2013.
+# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012-2013.
+# Efstathios Iosifidis <iefstathios@gmail.com>, 2013.
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
# Konstantinos Tzanidis <tzanidis@gmail.com>, 2012.
# Marios Bekatoros <>, 2012.
@@ -14,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -27,207 +28,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Αδυναμία μετακίνησης του %s - υπάÏχει ήδη αÏχείο με αυτό το όνομα"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Αδυναμία μετακίνησης του %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Αδυναμία μετονομασίας αÏχείου"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Δεν ανέβηκε κάποιο αÏχείο. Άγνωστο σφάλμα"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Δεν υπάÏχει σφάλμα, το αÏχείο εστάλει επιτυχώς"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Το απεσταλμένο αÏχείο ξεπεÏνά την οδηγία upload_max_filesize στο php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Το αÏχείο υπεÏβαίνει την οδηγία μέγιστου επιτÏÎµÏ€Ï„Î¿Ï Î¼ÎµÎ³Î­Î¸Î¿Ï…Ï‚ \"MAX_FILE_SIZE\" που έχει οÏιστεί στην HTML φόÏμα"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Το αÏχείο εστάλει μόνο εν μέÏει"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Κανένα αÏχείο δεν στάλθηκε"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Λείπει ο Ï€ÏοσωÏινός φάκελος"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Αποτυχία εγγÏαφής στο δίσκο"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Μη επαÏκής διαθέσιμος αποθηκευτικός χώÏος"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Μη έγκυÏος φάκελος."
#: appinfo/app.php:10
msgid "Files"
msgstr "ΑÏχεία"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Διακοπή κοινής χÏήσης"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Μόνιμη διαγÏαφή"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "ΔιαγÏαφή"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Μετονομασία"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "ΕκκÏεμεί"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} υπάÏχει ήδη"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "αντικατέστησε"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "συνιστώμενο όνομα"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "ακÏÏωση"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} αντικαταστάθηκε"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "αναίÏεση"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "αντικαταστάθηκε το {new_name} με {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "μη διαμοιÏασμένα {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "εκτέλεση διαδικασία διαγÏαφής"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "διαγÏαμμένα {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' είναι μη έγκυÏο όνομα αÏχείου."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Το όνομα αÏχείου δεν Ï€Ïέπει να είναι κενό."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Μη έγκυÏο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτÏέπονται."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "παÏαγωγή αÏχείου ZIP, ίσως διαÏκέσει αÏκετά."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Ο αποθηκευτικός σας χώÏος είναι γεμάτος, τα αÏχεία δεν μποÏοÏν να ενημεÏωθοÏν ή να συγχÏονιστοÏν πια!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Ο αποθηκευτικός χώÏος είναι σχεδόν γεμάτος ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Η λήψη Ï€Ïοετοιμάζεται. Αυτό μποÏεί να πάÏει ÏŽÏα εάν τα αÏχεία έχουν μεγάλο μέγεθος."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Αδυναμία στην αποστολή του αÏχείου σας Î±Ï†Î¿Ï ÎµÎ¯Î½Î±Î¹ φάκελος ή έχει 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Σφάλμα Αποστολής"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Κλείσιμο"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "ΕκκÏεμεί"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 αÏχείο ανεβαίνει"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} αÏχεία ανεβαίνουν"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Η αποστολή ακυÏώθηκε."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Η αποστολή του αÏχείου βÏίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυÏώσει την αποστολή."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "Η URL δεν Ï€Ïέπει να είναι κενή."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} αÏχεία ανιχνεÏτηκαν"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "σφάλμα κατά την ανίχνευση"
+msgstr "Μη έγκυÏο όνομα φακέλου. Η χÏήση του 'ΚοινόχÏηστος' χÏησιμοποιείται από ο Owncloud"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Όνομα"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Μέγεθος"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "ΤÏοποποιήθηκε"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 φάκελος"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} φάκελοι"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 αÏχείο"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} αÏχεία"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Αποστολή"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "ΔιαχείÏιση αÏχείων"
@@ -276,36 +280,44 @@ msgstr "Φάκελος"
msgid "From link"
msgstr "Από σÏνδεσμο"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Αποστολή"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "ΑκÏÏωση αποστολής"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Δεν υπάÏχει τίποτα εδώ. Ανέβασε κάτι!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Λήψη"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Διακοπή κοινής χÏήσης"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Î Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ αÏχείο Ï€Ïος αποστολή"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Τα αÏχεία που Ï€Ïοσπαθείτε να ανεβάσετε υπεÏβαίνουν το μέγιστο μέγεθος αποστολής αÏχείων σε αυτόν τον διακομιστή."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Τα αÏχεία σαÏώνονται, παÏακαλώ πεÏιμένετε"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "ΤÏέχουσα αναζήτηση "
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Αναβάθμιση μνήμης cache του συστήματος αÏχείων..."
diff --git a/l10n/el/files_encryption.po b/l10n/el/files_encryption.po
index 6d54cf8abcf..7196402db42 100644
--- a/l10n/el/files_encryption.po
+++ b/l10n/el/files_encryption.po
@@ -3,33 +3,39 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Dimitris M. <monopatis@gmail.com>, 2013.
# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
+# Efstathios Iosifidis <iefstathios@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-24 02:02+0200\n"
-"PO-Revision-Date: 2012-08-23 13:34+0000\n"
-"Last-Translator: Efstathios Iosifidis <diamond_gr@freemail.gr>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: el\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "ΚÏυπτογÏάφηση"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "ΕξαίÏεση των παÏακάτω Ï„Ïπων αÏχείων από την κÏυπτογÏάφηση"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Η κÏυπτογÏάφηση αÏχείων είναι ενεÏγή."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Οι παÏακάτω Ï„Ïποι αÏχείων δεν θα κÏυπτογÏαφηθοÏν:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "ΕξαίÏεση των παÏακάτω Ï„Ïπων αÏχείων από την κÏυπτογÏάφηση:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Καμία"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "ΕνεÏγοποίηση ΚÏυπτογÏάφησης"
diff --git a/l10n/el/files_trashbin.po b/l10n/el/files_trashbin.po
new file mode 100644
index 00000000000..91d2ccfde2c
--- /dev/null
+++ b/l10n/el/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dimitris M. <monopatis@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 14:20+0000\n"
+"Last-Translator: Dimitris M. <monopatis@gmail.com>\n"
+"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "ΑδÏνατη η μόνιμη διαγÏαφή του %s"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Αδυναμία επαναφοÏάς %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "εκτέλεση λειτουÏγία επαναφοÏάς"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "μόνιμη διαγÏαφή αÏχείου"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Όνομα"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "ΔιαγÏάφηκε"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 φάκελος"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} φάκελοι"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 αÏχείο"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} αÏχεία"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Δεν υπάÏχει τίποτα εδώ. Ο κάδος σας είναι άδειος!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "ΕπαναφοÏά"
diff --git a/l10n/el/files_versions.po b/l10n/el/files_versions.po
index a79674e946a..0f2316b7ab7 100644
--- a/l10n/el/files_versions.po
+++ b/l10n/el/files_versions.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Dimitris M. <monopatis@gmail.com>, 2012.
+# Dimitris M. <monopatis@gmail.com>, 2012-2013.
# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
# Nisok Kosin <nikos.efthimiou@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-28 23:34+0200\n"
-"PO-Revision-Date: 2012-09-28 01:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 14:20+0000\n"
"Last-Translator: Dimitris M. <monopatis@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -20,21 +20,44 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Λήξη όλων των εκδόσεων"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Αδυναμία επαναφοÏάς του: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "επιτυχία"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "Το αÏχείο %s επαναφέÏθηκε στην έκδοση %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "αποτυχία"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Το αÏχείο %s δεν είναι δυνατό να επαναφεÏθεί στην έκδοση %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Μη διαθέσιμες παλιές εκδόσεις"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Δεν καθοÏίστηκε διαδÏομή"
#: js/versions.js:16
msgid "History"
msgstr "ΙστοÏικό"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Εκδόσεις"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Αυτό θα διαγÏάψει όλες τις υπάÏχουσες εκδόσεις των αντιγÏάφων ασφαλείας των αÏχείων σας"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "ΕπαναφοÏά ενός αÏχείου σε Ï€ÏοηγοÏμενη έκδοση πατώντας στο κουμπί επαναφοÏάς"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/el/lib.po b/l10n/el/lib.po
index c58bb7b0af6..9d54c6a083b 100644
--- a/l10n/el/lib.po
+++ b/l10n/el/lib.po
@@ -4,13 +4,14 @@
#
# Translators:
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
+# <vagelis@cyberdest.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-17 00:01+0100\n"
-"PO-Revision-Date: 2012-11-16 17:32+0000\n"
-"Last-Translator: Efstathios Iosifidis <diamond_gr@freemail.gr>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +19,55 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Βοήθεια"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "ΠÏοσωπικά"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Ρυθμίσεις"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "ΧÏήστες"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "ΕφαÏμογές"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "ΔιαχειÏιστής"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Η λήψη ZIP απενεÏγοποιήθηκε."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Τα αÏχεία Ï€Ïέπει να ληφθοÏν ένα-ένα."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Πίσω στα ΑÏχεία"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Τα επιλεγμένα αÏχεία είναι μεγάλα ώστε να δημιουÏγηθεί αÏχείο zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "δεν μποÏοÏσε να Ï€ÏοσδιοÏισθεί"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Δεν ενεÏγοποιήθηκε η εφαÏμογή"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Σφάλμα πιστοποίησης"
@@ -82,55 +87,152 @@ msgstr "Κείμενο"
msgid "Images"
msgstr "Εικόνες"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "δευτεÏόλεπτα Ï€Ïιν"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 λεπτό Ï€Ïιν"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d λεπτά Ï€Ïιν"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 ÏŽÏα Ï€Ïιν"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d ÏŽÏες Ï€Ïιν"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "σήμεÏα"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "χθές"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d ημέÏες Ï€Ïιν"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "τον Ï€ÏοηγοÏμενο μήνα"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d μήνες Ï€Ïιν"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "τον Ï€ÏοηγοÏμενο χÏόνο"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "χÏόνια Ï€Ïιν"
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index 83f4985217b..69ad471da56 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -13,13 +13,14 @@
# <petros.kyladitis@gmail.com>, 2011.
# <petros.kyladitis@gmail.com>, 2011.
# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011-2012.
+# <vagelis@cyberdest.com>, 2013.
# Γιάννης Ανθυμίδης <yannanth@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -32,6 +33,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Σφάλμα στην φόÏτωση της λίστας από το App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Σφάλμα πιστοποίησης"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Η ομάδα υπάÏχει ήδη"
@@ -40,7 +50,7 @@ msgstr "Η ομάδα υπάÏχει ήδη"
msgid "Unable to add group"
msgstr "Αδυναμία Ï€Ïοσθήκης ομάδας"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Αδυναμία ενεÏγοποίησης εφαÏμογής "
@@ -52,22 +62,10 @@ msgstr "Το email αποθηκεÏτηκε "
msgid "Invalid email"
msgstr "Μη έγκυÏο email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "Το OpenID άλλαξε"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Μη έγκυÏο αίτημα"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Αδυναμία διαγÏαφής ομάδας"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Σφάλμα πιστοποίησης"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Αδυναμία διαγÏαφής χÏήστη"
@@ -76,6 +74,10 @@ msgstr "Αδυναμία διαγÏαφής χÏήστη"
msgid "Language changed"
msgstr "Η γλώσσα άλλαξε"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Μη έγκυÏο αίτημα"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Οι διαχειÏιστές δεν μποÏοÏν να αφαιÏέσουν τους εαυτοÏÏ‚ τους από την ομάδα των διαχειÏιστών"
@@ -90,19 +92,47 @@ msgstr "Αδυναμία Ï€Ïοσθήκη χÏήστη στην ομάδα %s"
msgid "Unable to remove user from group %s"
msgstr "Αδυναμία αφαίÏεσης χÏήστη από την ομάδα %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "ΑπενεÏγοποίηση"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "ΕνεÏγοποίηση"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Σφάλμα"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Αποθήκευση..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__όνομα_γλώσσας__"
@@ -114,18 +144,22 @@ msgstr "ΠÏόσθεστε τη Δικιά σας ΕφαÏμογή"
msgid "More Apps"
msgstr "ΠεÏισσότεÏες ΕφαÏμογές"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Επιλέξτε μια ΕφαÏμογή"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Δείτε την σελίδα εφαÏμογών στο apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-άδεια από <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "ΕνημέÏωση"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "ΤεκμηÏίωση ΧÏήστη"
@@ -155,83 +189,87 @@ msgstr "ΕμποÏική ΥποστήÏιξη"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "ΧÏησιμοποιήσατε <strong>%s</strong> από διαθέσιμα <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Πελάτες"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Λήψη ΠÏογÏαμμάτων για ΣταθεÏοÏÏ‚ Υπολογιστές"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Λήψη ΠÏογÏάμματος Android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Λήψη ΠÏογÏάμματος iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Συνθηματικό"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Το συνθηματικό σας έχει αλλάξει"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Δεν ήταν δυνατή η αλλαγή του ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "ΤÏέχων συνθηματικό"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Îέο συνθηματικό"
-#: templates/personal.php:26
-msgid "show"
-msgstr "εμφάνιση"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Αλλαγή συνθηματικοÏ"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Η διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου σας"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "ΣυμπληÏώστε μια διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου για να ενεÏγοποιηθεί η ανάκτηση συνθηματικοÏ"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Γλώσσα"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Βοηθήστε στη μετάφÏαση"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "ΧÏήση αυτής της διεÏθυνσης για σÏνδεση στο ownCloud με τον διαχειÏιστή αÏχείων σας"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Έκδοση"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -241,11 +279,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "ΑναπτÏχθηκε από την <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Όνομα"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Ομάδες"
@@ -255,28 +293,36 @@ msgstr "ΔημιουÏγία"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "ΠÏοκαθοÏισμένη Αποθήκευση "
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "ΑπεÏιόÏιστο"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Άλλα"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Ομάδα ΔιαχειÏιστών"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
+msgstr "Αποθήκευση"
+
+#: templates/users.php:97
+msgid "change display name"
msgstr ""
-#: templates/users.php:133
-msgid "Default"
+#: templates/users.php:101
+msgid "set new password"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:137
+msgid "Default"
+msgstr "ΠÏοκαθοÏισμένο"
+
+#: templates/users.php:165
msgid "Delete"
msgstr "ΔιαγÏαφή"
diff --git a/l10n/el/user_ldap.po b/l10n/el/user_ldap.po
index 14b7e75c710..972b0601dfa 100644
--- a/l10n/el/user_ldap.po
+++ b/l10n/el/user_ldap.po
@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 14:12+0000\n"
-"Last-Translator: Konstantinos Tzanidis <tzanidis@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,6 +22,58 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Η διαγÏαφή απέτυχε"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -31,158 +83,232 @@ msgstr "<b>ΠÏοσοχή:</b> Οι εφαÏμογές user_ldap και user_web
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>ΠÏοσοχή:</b> Το PHP LDAP module που απαιτείται δεν είναι εγκατεστημένο και ο μηχανισμός δεν θα λειτουÏγήσει. ΠαÏακαλώ ζητήστε από τον διαχειÏιστή του συστήματος να το εγκαταστήσει."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Διακομιστής"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "ΜποÏείτε να παÏαλείψετε το Ï€Ïωτόκολλο, εκτός αν απαιτείται SSL. Σε αυτή την πεÏίπτωση ξεκινήστε με ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Base DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "ΜποÏείτε να καθοÏίσετε το Base DN για χÏήστες και ομάδες από την καÏτέλα ΠÏοηγμένες Ïυθμίσεις"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "User DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "Το DN του χÏήστη πελάτη με το οποίο θα Ï€Ïέπει να γίνει η σÏνδεση, Ï€.χ. uid=agent,dc=example,dc=com. Για χÏήση χωÏίς πιστοποίηση, αφήστε το DN και τον Κωδικό κενά."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Συνθηματικό"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Για ανώνυμη Ï€Ïόσβαση, αφήστε κενά τα πεδία DN και Pasword."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "User Login Filter"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "ΚαθοÏίζει το φίλτÏο που θα ισχÏει κατά την Ï€Ïοσπάθεια σÏνδεσης χÏήστη. %%uid αντικαθιστά το όνομα χÏήστη κατά τη σÏνδεση. "
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "χÏησιμοποιήστε τη μεταβλητή %%uid, Ï€.χ. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "User List Filter"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "ΚαθοÏίζει το φίλτÏο που θα ισχÏει κατά την ανάκτηση επαφών."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "χωÏίς κάποια μεταβλητή, Ï€.χ. \"objectClass=άτομο\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Group Filter"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "ΚαθοÏίζει το φίλτÏο που θα ισχÏει κατά την ανάκτηση ομάδων."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "χωÏίς κάποια μεταβλητή, Ï€.χ. \"objectClass=ΟμάδαPosix\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "ΘÏÏα"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "ΧÏήση TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Μην χÏησιμοποιείτε για συνδέσεις SSL, θα αποτÏχει."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "LDAP server (Windows) με διάκÏιση πεζών-ΚΕΦΑΛΑΙΩÎ"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "ΑπενεÏγοποίηση επικÏÏωσης Ï€Î¹ÏƒÏ„Î¿Ï€Î¿Î¹Î·Ï„Î¹ÎºÎ¿Ï SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Εάν η σÏνδεση δουλεÏει μόνο με αυτή την επιλογή, εισάγετε το LDAP SSL πιστοποιητικό του διακομιστή στον ownCloud server σας."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Δεν Ï€Ïοτείνεται, χÏήση μόνο για δοκιμές."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "σε δευτεÏόλεπτα. Μια αλλαγή αδειάζει την μνήμη cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Πεδίο Ονόματος ΧÏήστη"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Η ιδιότητα LDAP που θα χÏησιμοποιείται για τη δημιουÏγία του ονόματος χÏήστη του ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Base User Tree"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Group Display Name Field"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Η ιδιότητα LDAP που θα χÏησιμοποιείται για τη δημιουÏγία του ονόματος ομάδας του ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Base Group Tree"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Group-Member association"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "σε bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "σε δευτεÏόλεπτα. Μια αλλαγή αδειάζει την μνήμη cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Αφήστε το κενό για το όνομα χÏήστη (Ï€Ïοεπιλογή). ΔιαφοÏετικά, συμπληÏώστε μία ιδιότητα LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Βοήθεια"
diff --git a/l10n/el/user_webdavauth.po b/l10n/el/user_webdavauth.po
index dff8dd88f35..ae9fa402bf8 100644
--- a/l10n/el/user_webdavauth.po
+++ b/l10n/el/user_webdavauth.po
@@ -6,13 +6,14 @@
# Dimitris M. <monopatis@gmail.com>, 2012.
# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
# Konstantinos Tzanidis <tzanidis@gmail.com>, 2012.
+# Marios Bekatoros <>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 13:55+0000\n"
-"Last-Translator: Konstantinos Tzanidis <tzanidis@gmail.com>\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 08:10+0000\n"
+"Last-Translator: Marios Bekatoros <>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,13 +21,17 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Αυθεντικοποίηση μέσω WebDAV "
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "Το ownCloud θα στείλει τα συνθηματικά χÏήστη σε αυτό το URL, μεταφÏάζοντας τα http 401 και http 403 ως λανθασμένα συνθηματικά και όλους τους άλλους κωδικοÏÏ‚ ως σωστά συνθηματικά."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "Το ownCloud θα στείλει τα διαπιστευτήÏια χÏήστη σε αυτό το URL. Αυτό το plugin ελέγχει την απάντηση και την μετατÏέπει σε HTTP κωδικό κατάστασης 401 και 403 για μη έγκυÏα, όλες οι υπόλοιπες απαντήσεις είναι έγκυÏες."
diff --git a/l10n/eo/core.po b/l10n/eo/core.po
index a443f9ad911..15f0635aa27 100644
--- a/l10n/eo/core.po
+++ b/l10n/eo/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -20,24 +20,24 @@ msgstr ""
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "La uzanto %s kunhavigis dosieron kun vi"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "La uzanto %s kunhavigis dosierujon kun vi"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "La uzanto %s kunhavigis la dosieron “%s†kun vi. Äœi elÅuteblas el tie ĉi: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,8 +53,9 @@ msgid "No category to add?"
msgstr "Ĉu neniu kategorio estas aldonota?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Ĉi tiu kategorio jam ekzistas: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -82,59 +83,135 @@ msgstr "Neniu kategorio elektiÄis por forigo."
msgid "Error removing %s from favorites."
msgstr "Eraro dum forigo de %s el favoratoj."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "dimanĉo"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "lundo"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "mardo"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "merkredo"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "ĵaŭdo"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "vendredo"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "sabato"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januaro"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februaro"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Marto"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Aprilo"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Majo"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Junio"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Julio"
+
+#: js/config.php:33
+msgid "August"
+msgstr "AÅ­gusto"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Septembro"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktobro"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembro"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Decembro"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Agordo"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "sekundoj antaÅ­e"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "antaÅ­ 1 minuto"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "antaÅ­ {minutes} minutoj"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "antaÅ­ 1 horo"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "antaÅ­ {hours} horoj"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "hodiaÅ­"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "hieraÅ­"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "antaÅ­ {days} tagoj"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "lastamonate"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "antaÅ­ {months} monatoj"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "monatoj antaÅ­e"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "lastajare"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "jaroj antaÅ­e"
@@ -164,8 +241,8 @@ msgid "The object type is not specified."
msgstr "Ne indikiÄis tipo de la objekto."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Eraro"
@@ -177,123 +254,141 @@ msgstr "Ne indikiÄis nomo de la aplikaĵo."
msgid "The required file {file} is not installed!"
msgstr "La necesa dosiero {file} ne instaliÄis!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Kunhavigi"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Eraro dum kunhavigo"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Eraro dum malkunhavigo"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Eraro dum ÅanÄo de permesoj"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Kunhavigita kun vi kaj la grupo {group} de {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Kunhavigita kun vi de {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Kunhavigi kun"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Kunhavigi per ligilo"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Protekti per pasvorto"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Pasvorto"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "RetpoÅti la ligilon al ulo"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Sendi"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Agordi limdaton"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Limdato"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Kunhavigi per retpoÅto:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ne troviÄis gento"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Rekunhavigo ne permesatas"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Kunhavigita en {item} kun {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Malkunhavigi"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "povas redakti"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "alirkontrolo"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "krei"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "Äisdatigi"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "forigi"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "kunhavigi"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Protektita per pasvorto"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Eraro dum malagordado de limdato"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Eraro dum agordado de limdato"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Sendante..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "La retpoÅtaĵo sendiÄis"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "La pasvorto de ownCloud restariÄis."
@@ -375,7 +470,7 @@ msgstr "Redakti kategoriojn"
msgid "Add"
msgstr "Aldoni"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Sekureca averto"
@@ -385,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr "Ne disponeblas sekura generilo de hazardaj numeroj; bonvolu kapabligi la OpenSSL-kromaĵon por PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Krei <strong>administran konton</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Progresinta"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datuma dosierujo"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Agordi la datumbazon"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "estos uzata"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Datumbaza uzanto"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Datumbaza pasvorto"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Datumbaza nomo"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Datumbaza tabelospaco"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Datumbaza gastigo"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Fini la instalon"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "dimanĉo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "lundo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "mardo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "merkredo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "ĵaŭdo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "vendredo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "sabato"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januaro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februaro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Marto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Aprilo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Majo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Junio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Julio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "AÅ­gusto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Septembro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktobro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Novembro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Decembro"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "TTT-servoj sub via kontrolo"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Elsaluti"
@@ -547,17 +570,17 @@ msgstr "Bonvolu ÅanÄi vian pasvorton por sekurigi vian konton ree."
msgid "Lost your password?"
msgstr "Ĉu vi perdis vian pasvorton?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "memori"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Ensaluti"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Vi estas elsalutita."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,17 +594,3 @@ msgstr "jena"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Sekureca averto!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Bonvolu kontroli vian pasvorton. <br/>Pro sekureco, oni okaze povas peti al vi enigi vian pasvorton ree."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Kontroli"
diff --git a/l10n/eo/files.po b/l10n/eo/files.po
index 9989b6eb9b5..f2006ab6bd8 100644
--- a/l10n/eo/files.po
+++ b/l10n/eo/files.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Mariano <mstreet@kde.org.ar>, 2013.
# Mariano <mstreet@kde.org.ar>, 2012.
# <mstreet@kde.org.ar>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -22,207 +23,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Ne eblis movi %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Ne eblis alinomigi dosieron"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Neniu dosiero alÅutiÄis. Nekonata eraro."
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Ne estas eraro, la dosiero alÅutiÄis sukcese"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "La dosiero alÅutita superas la regulon upload_max_filesize el php.ini: "
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "La dosiero alÅutita superas la regulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "La alÅutita dosiero nur parte alÅutiÄis"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Neniu dosiero estas alÅutita"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Mankas tempa dosierujo"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Malsukcesis skribo al disko"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Nevalida dosierujo."
#: appinfo/app.php:10
msgid "Files"
msgstr "Dosieroj"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Malkunhavigi"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Forigi"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Alinomigi"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Traktotaj"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} jam ekzistas"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "anstataÅ­igi"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "sugesti nomon"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "nuligi"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "anstataÅ­iÄis {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "malfari"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "anstataÅ­iÄis {new_name} per {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "malkunhaviÄis {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "foriÄis {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' ne estas valida dosiernomo."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Dosiernomo devas ne malpleni."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nevalida nomo: “\\â€, “/â€, “<â€, “>â€, “:â€, “\"â€, “|â€, “?†kaj “*†ne permesatas."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "generanta ZIP-dosiero, Äi povas daÅ­ri iom da tempo"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Via elÅuto pretiÄatas. Ĉi tio povas daÅ­ri iom da tempo se la dosieroj grandas."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ne eblis alÅuti vian dosieron ĉar Äi estas dosierujo aÅ­ havas 0 duumokojn"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "AlÅuta eraro"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Fermi"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Traktotaj"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 dosiero estas alÅutata"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} dosieroj alÅutatas"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "La alÅuto nuliÄis."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "DosieralÅuto plenumiÄas. Lasi la paÄon nun nuligus la alÅuton."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL ne povas esti malplena."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} dosieroj skaniÄis"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "eraro dum skano"
+msgstr "Nevalida dosierujnomo. Uzo de “Shared†rezervatas de Owncloud."
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nomo"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Grando"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Modifita"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 dosierujo"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} dosierujoj"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 dosiero"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} dosierujoj"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "AlÅuti"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Dosieradministro"
@@ -271,36 +275,44 @@ msgstr "Dosierujo"
msgid "From link"
msgstr "El ligilo"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "AlÅuti"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Nuligi alÅuton"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nenio estas ĉi tie. AlÅutu ion!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "ElÅuti"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Malkunhavigi"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "ElÅuto tro larÄa"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "La dosieroj, kiujn vi provas alÅuti, transpasas la maksimuman grandon por dosieralÅutoj en ĉi tiu servilo."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dosieroj estas skanataj, bonvolu atendi."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Nuna skano"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/eo/files_encryption.po b/l10n/eo/files_encryption.po
index dbcedb1a56a..1a1260fd413 100644
--- a/l10n/eo/files_encryption.po
+++ b/l10n/eo/files_encryption.po
@@ -8,28 +8,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-16 02:04+0200\n"
-"PO-Revision-Date: 2012-08-15 19:41+0000\n"
-"Last-Translator: Mariano <mstreet@kde.org.ar>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: eo\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Ĉifrado"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Malinkluzivigi la jenajn dosiertipojn el ĉifrado"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Nenio"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Kapabligi ĉifradon"
diff --git a/l10n/eo/files_trashbin.po b/l10n/eo/files_trashbin.po
new file mode 100644
index 00000000000..407ed42d6da
--- /dev/null
+++ b/l10n/eo/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nomo"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 dosierujo"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} dosierujoj"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 dosiero"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} dosierujoj"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "RestaÅ­ri"
diff --git a/l10n/eo/files_versions.po b/l10n/eo/files_versions.po
index 64415603319..6e7f83b9ade 100644
--- a/l10n/eo/files_versions.po
+++ b/l10n/eo/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-14 02:05+0200\n"
-"PO-Revision-Date: 2012-10-13 02:50+0000\n"
-"Last-Translator: Mariano <mstreet@kde.org.ar>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Eksvalidigi ĉiujn eldonojn"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historio"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Eldonoj"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Ĉi tio forigos ĉiujn estantajn sekurkopiajn eldonojn de viaj dosieroj"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/eo/lib.po b/l10n/eo/lib.po
index b4a219e21a2..4bdcdeb2464 100644
--- a/l10n/eo/lib.po
+++ b/l10n/eo/lib.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-03 00:04+0100\n"
-"PO-Revision-Date: 2012-12-02 21:42+0000\n"
-"Last-Translator: Mariano <mstreet@kde.org.ar>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Helpo"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Persona"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Agordo"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Uzantoj"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplikaĵoj"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Administranto"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP-elÅuto estas malkapabligita."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Dosieroj devas elÅutiÄi unuope."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Reen al la dosieroj"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "La elektitaj dosieroj tro grandas por genero de ZIP-dosiero."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "La aplikaĵo ne estas kapabligita"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "AÅ­tentiga eraro"
@@ -82,55 +86,152 @@ msgstr "Teksto"
msgid "Images"
msgstr "Bildoj"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "sekundojn antaÅ­e"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "antaÅ­ 1 minuto"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "antaÅ­ %d minutoj"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "antaÅ­ 1 horo"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "antaÅ­ %d horoj"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "hodiaÅ­"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "hieraÅ­"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "antaÅ­ %d tagoj"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "lasta monato"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "antaÅ­ %d monatoj"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "lasta jaro"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "jarojn antaÅ­e"
diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po
index d57fded0283..b01137e99ac 100644
--- a/l10n/eo/settings.po
+++ b/l10n/eo/settings.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Mariano <mstreet@kde.org.ar>, 2013.
# Mariano <mstreet@kde.org.ar>, 2012.
# <mstreet@kde.org.ar>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -23,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Ne eblis Åargi liston el aplikaĵovendejo"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "AÅ­tentiga eraro"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "La grupo jam ekzistas"
@@ -31,7 +41,7 @@ msgstr "La grupo jam ekzistas"
msgid "Unable to add group"
msgstr "Ne eblis aldoni la grupon"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Ne eblis kapabligi la aplikaĵon."
@@ -43,22 +53,10 @@ msgstr "La retpoÅtadreso konserviÄis"
msgid "Invalid email"
msgstr "Nevalida retpoÅtadreso"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "La agordo de OpenID estas ÅanÄita"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Nevalida peto"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ne eblis forigi la grupon"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "AÅ­tentiga eraro"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ne eblis forigi la uzanton"
@@ -67,6 +65,10 @@ msgstr "Ne eblis forigi la uzanton"
msgid "Language changed"
msgstr "La lingvo estas ÅanÄita"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Nevalida peto"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Administrantoj ne povas forigi sin mem el la administra grupo."
@@ -81,19 +83,47 @@ msgstr "Ne eblis aldoni la uzanton al la grupo %s"
msgid "Unable to remove user from group %s"
msgstr "Ne eblis forigi la uzantan el la grupo %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Malkapabligi"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Kapabligi"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Eraro"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Konservante..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Esperanto"
@@ -105,124 +135,132 @@ msgstr "Aldonu vian aplikaĵon"
msgid "More Apps"
msgstr "Pli da aplikaĵoj"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Elekti aplikaĵon"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Vidu la paÄon pri aplikaĵoj ĉe apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"</span>-permesilhavigita de <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Äœisdatigi"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "Dokumentaro por uzantoj"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "Dokumentaro por administrantoj"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "Reta dokumentaro"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "Forumo"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr ""
+msgstr "Cimoraportejo"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "Komerca subteno"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Vi uzas <strong>%s</strong> el la haveblaj <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klientoj"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Pasvorto"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Via pasvorto ÅanÄiÄis"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ne eblis ÅanÄi vian pasvorton"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Nuna pasvorto"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nova pasvorto"
-#: templates/personal.php:26
-msgid "show"
-msgstr "montri"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "ÅœanÄi la pasvorton"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "RetpoÅto"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Via retpoÅta adreso"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Enigu retpoÅtadreson por kapabligi pasvortan restaÅ­ron"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Lingvo"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Helpu traduki"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "Uzu ĉi tiun adreson por konekti al via ownCloud vian dosieradministrilon"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "Eldono"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nomo"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupoj"
@@ -246,28 +284,36 @@ msgstr "Krei"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "DefaÅ­lta konservejo"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Senlima"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Alia"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupadministranto"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
+msgstr "Konservejo"
+
+#: templates/users.php:97
+msgid "change display name"
msgstr ""
-#: templates/users.php:133
-msgid "Default"
+#: templates/users.php:101
+msgid "set new password"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:137
+msgid "Default"
+msgstr "DefaÅ­lta"
+
+#: templates/users.php:165
msgid "Delete"
msgstr "Forigi"
diff --git a/l10n/eo/user_ldap.po b/l10n/eo/user_ldap.po
index 419be520bc0..ac325f3f01d 100644
--- a/l10n/eo/user_ldap.po
+++ b/l10n/eo/user_ldap.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Mariano <mstreet@kde.org.ar>, 2013.
# Mariano <mstreet@kde.org.ar>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +19,58 @@ msgstr ""
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Forigo malsukcesis"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +80,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Gastigo"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Vi povas neglekti la protokolon, escepte se vi bezonas SSL-on. Tiuokaze, komencu per ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
-msgstr "Baz-DN"
+msgstr "Bazo-DN"
+
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Uzanto-DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Pasvorto"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Por sennoman aliron, lasu DN-on kaj Pasvorton malplenaj."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtrilo de uzantensaluto"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Äœi difinas la filtrilon aplikotan, kiam oni provas ensaluti. %%uid anstataÅ­igas la uzantonomon en la ensaluta ago."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "uzu la referencilon %%uid, ekz.: \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filtrilo de uzantolisto"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Äœi difinas la filtrilon aplikotan, kiam veniÄas uzantoj."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "sen ajna referencilo, ekz.: \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtrilo de grupo"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Äœi difinas la filtrilon aplikotan, kiam veniÄas grupoj."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "sen ajna referencilo, ekz.: \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Pordo"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Baza uzantarbo"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Baza gruparbo"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Asocio de grupo kaj membro"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Uzi TLS-on"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ne uzu Äin por SSL-konektoj, Äi malsukcesos."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "LDAP-servilo blinda je litergrandeco (Vindozo)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Malkapabligi validkontrolon de SSL-atestiloj."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Se la konekto nur funkcias kun ĉi tiu malnepro, enportu la SSL-atestilo de la LDAP-servilo en via ownCloud-servilo."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Ne rekomendata, uzu Äin nur por testoj."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "sekunde. Ajna ÅanÄo malplenigas la kaÅmemoron."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Kampo de vidignomo de uzanto"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "La atributo de LDAP uzota por generi la ownCloud-an nomon de la uzanto."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Baza uzantarbo"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Kampo de vidignomo de grupo"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "La atributo de LDAP uzota por generi la ownCloud-an nomon de la grupo."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Baza gruparbo"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Asocio de grupo kaj membro"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "duumoke"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "sekunde. Ajna ÅanÄo malplenigas la kaÅmemoron."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Lasu malplena por uzantonomo (defaÅ­lto). Alie, specifu LDAP/AD-atributon."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Helpo"
diff --git a/l10n/eo/user_webdavauth.po b/l10n/eo/user_webdavauth.po
index 60a766ad4c7..d9f66ba5177 100644
--- a/l10n/eo/user_webdavauth.po
+++ b/l10n/eo/user_webdavauth.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Mariano <mstreet@kde.org.ar>, 2013.
# Mariano <mstreet@kde.org.ar>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 03:35+0000\n"
+"POT-Creation-Date: 2013-01-21 00:04+0100\n"
+"PO-Revision-Date: 2013-01-20 01:16+0000\n"
"Last-Translator: Mariano <mstreet@kde.org.ar>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +19,17 @@ msgstr ""
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV-aÅ­tentigo"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/es/core.po b/l10n/es/core.po
index ffe01773beb..4b75e189da4 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -3,8 +3,10 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Felix Liberio <felix.liberio@gmail.com>, 2013.
# <javierkaiser@gmail.com>, 2012.
# Javier Llorente <javier@opensuse.org>, 2012.
+# <juanma@kde.org.ar>, 2013.
# <juanma@kde.org.ar>, 2011-2013.
# <malmirk@gmail.com>, 2012.
# oSiNaReF <>, 2012.
@@ -14,12 +16,13 @@
# Rubén Trujillo <rubentrf@gmail.com>, 2012.
# <sergioballesterossolanas@gmail.com>, 2011-2012.
# <sergio@entrecables.com>, 2012.
+# Vladimir Martinez Sierra <vladimirmartinezsierra@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 10:49+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:30+0000\n"
"Last-Translator: juanman <juanma@kde.org.ar>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -28,24 +31,24 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "El usuario %s ha compartido un archivo contigo"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "El usuario %s ha compartido una carpeta contigo"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "El usuario %s ha compartido el archivo \"%s\" contigo. Puedes descargarlo aquí: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -61,8 +64,9 @@ msgid "No category to add?"
msgstr "¿Ninguna categoría para añadir?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Esta categoría ya existe: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Esta categoria ya existe: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -90,59 +94,135 @@ msgstr "No hay categorías seleccionadas para borrar."
msgid "Error removing %s from favorites."
msgstr "Error eliminando %s de los favoritos."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Domingo"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Lunes"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Martes"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Miércoles"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Jueves"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Viernes"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sábado"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Enero"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Febrero"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Marzo"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Abril"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mayo"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Junio"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Julio"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Agosto"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Septiembre"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Octubre"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Noviembre"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Diciembre"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Ajustes"
-#: js/js.js:704
+#: js/js.js:767
msgid "seconds ago"
msgstr "hace segundos"
-#: js/js.js:705
+#: js/js.js:768
msgid "1 minute ago"
msgstr "hace 1 minuto"
-#: js/js.js:706
+#: js/js.js:769
msgid "{minutes} minutes ago"
msgstr "hace {minutes} minutos"
-#: js/js.js:707
+#: js/js.js:770
msgid "1 hour ago"
msgstr "Hace 1 hora"
-#: js/js.js:708
+#: js/js.js:771
msgid "{hours} hours ago"
msgstr "Hace {hours} horas"
-#: js/js.js:709
+#: js/js.js:772
msgid "today"
msgstr "hoy"
-#: js/js.js:710
+#: js/js.js:773
msgid "yesterday"
msgstr "ayer"
-#: js/js.js:711
+#: js/js.js:774
msgid "{days} days ago"
msgstr "hace {days} días"
-#: js/js.js:712
+#: js/js.js:775
msgid "last month"
msgstr "mes pasado"
-#: js/js.js:713
+#: js/js.js:776
msgid "{months} months ago"
msgstr "Hace {months} meses"
-#: js/js.js:714
+#: js/js.js:777
msgid "months ago"
msgstr "hace meses"
-#: js/js.js:715
+#: js/js.js:778
msgid "last year"
msgstr "año pasado"
-#: js/js.js:716
+#: js/js.js:779
msgid "years ago"
msgstr "hace años"
@@ -172,8 +252,8 @@ msgid "The object type is not specified."
msgstr "El tipo de objeto no se ha especificado."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Fallo"
@@ -185,123 +265,141 @@ msgstr "El nombre de la app no se ha especificado."
msgid "The required file {file} is not installed!"
msgstr "El fichero {file} requerido, no está instalado."
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Compartir"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Compartido"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Error compartiendo"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Error descompartiendo"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Error cambiando permisos"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Compartido contigo y el grupo {group} por {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Compartido contigo por {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Compartir con"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Compartir con enlace"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Protegido por contraseña"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Contraseña"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Enviar un enlace por correo electrónico a una persona"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Enviar"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Establecer fecha de caducidad"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Fecha de caducidad"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "compartido via e-mail:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "No se encontró gente"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "No se permite compartir de nuevo"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Compartido en {item} con {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "No compartir"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "puede editar"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "control de acceso"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "crear"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "modificar"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "eliminar"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "compartir"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Protegido por contraseña"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Error al eliminar la fecha de caducidad"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Error estableciendo fecha de caducidad"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "Enviando..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "Correo electrónico enviado"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "La actualización ha fracasado. Por favor, informe este problema a la <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">Comunidad de ownCloud</ a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "La actualización se ha realizado correctamente. Redireccionando a ownCloud ahora."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Reiniciar contraseña de ownCloud"
@@ -383,7 +481,7 @@ msgstr "Editar categorías"
msgid "Add"
msgstr "Añadir"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Advertencia de seguridad"
@@ -393,147 +491,75 @@ msgid ""
"OpenSSL extension."
msgstr "No está disponible un generador de números aleatorios seguro, por favor habilite la extensión OpenSSL de PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Sin un generador de números aleatorios seguro un atacante podría predecir los tokens de reinicio de su contraseña y tomar control de su cuenta."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "Su directorio de datos y sus archivos están probablemente accesibles a través de internet ya que el archivo .htaccess no está funcionando."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Su directorio de datos y sus archivos están probablemente accesibles desde internet. El archivo .htaccess que ownCloud provee no está funcionando. Sugerimos fuertemente que configure su servidor web de manera que el directorio de datos ya no esté accesible o mueva el directorio de datos fuera del documento raíz de su servidor web."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Para información sobre cómo configurar adecuadamente su servidor, por favor vea la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentación</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Crea una <strong>cuenta de administrador</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avanzado"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Directorio de almacenamiento"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configurar la base de datos"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "se utilizarán"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Usuario de la base de datos"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Contraseña de la base de datos"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nombre de la base de datos"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Espacio de tablas de la base de datos"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Host de la base de datos"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Completar la instalación"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Domingo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Lunes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Martes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Miércoles"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Jueves"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Viernes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sábado"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Enero"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Febrero"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Marzo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Abril"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mayo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Junio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Julio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Agosto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Septiembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Octubre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Noviembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Diciembre"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "servicios web bajo tu control"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Salir"
@@ -555,17 +581,17 @@ msgstr "Por favor cambie su contraseña para asegurar su cuenta nuevamente."
msgid "Lost your password?"
msgstr "¿Has perdido tu contraseña?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "recuérdame"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Entrar"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Has cerrado la sesión."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Nombre de usuarios alternativos"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -579,17 +605,3 @@ msgstr "siguiente"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "Actualizando ownCloud a la versión %s, esto puede demorar un tiempo."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "¡Advertencia de seguridad!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Por favor verifique su contraseña. <br/>Por razones de seguridad se le puede volver a preguntar ocasionalmente la contraseña."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verificar"
diff --git a/l10n/es/files.po b/l10n/es/files.po
index 7ea7d7330ce..369ddba9fea 100644
--- a/l10n/es/files.po
+++ b/l10n/es/files.po
@@ -7,17 +7,20 @@
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2013.
# <devianpctek@gmail.com>, 2012.
# Javier Llorente <javier@opensuse.org>, 2012.
+# <juanma@kde.org.ar>, 2013.
# <juanma@kde.org.ar>, 2012-2013.
+# <karvayoEdgar@gmail.com>, 2013.
# Rubén Trujillo <rubentrf@gmail.com>, 2012.
# <sergioballesterossolanas@gmail.com>, 2011-2012.
# <sergio@entrecables.com>, 2012.
+# Vladimir Martinez Sierra <vladimirmartinezsierra@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:30+0000\n"
+"Last-Translator: juanman <juanma@kde.org.ar>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -28,57 +31,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "No se puede mover %s - Ya existe un archivo con ese nombre"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "No se puede mover %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "No se puede renombrar el archivo"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Fallo no se subió el fichero"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "No se ha producido ningún error, el archivo se ha subido con éxito"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "El archivo que intentas subir sobrepasa el tamaño definido por la variable MAX_FILE_SIZE especificada en el formulario HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "El archivo que intentas subir solo se subió parcialmente"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "No se ha subido ningún archivo"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Falta un directorio temporal"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "La escritura en disco ha fallado"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr "No hay suficiente espacio disponible"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Directorio invalido."
@@ -86,149 +89,152 @@ msgstr "Directorio invalido."
msgid "Files"
msgstr "Archivos"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Dejar de compartir"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Eliminar permanentemente"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Eliminar"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Renombrar"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendiente"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} ya existe"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "reemplazar"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "sugerir nombre"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "cancelar"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "reemplazado {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "deshacer"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "reemplazado {new_name} con {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "{files} descompartidos"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} eliminados"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "Eliminar"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' es un nombre de archivo inválido."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "El nombre de archivo no puede estar vacío."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nombre Invalido, \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos "
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "generando un fichero ZIP, puede llevar un tiempo."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Su almacenamiento esta lleno, los archivos no pueden ser mas actualizados o sincronizados!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Su almacenamiento esta lleno en un ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Tu descarga esta siendo preparada. Esto puede tardar algun tiempo si los archivos son muy grandes."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Error al subir el archivo"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "cerrrar"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Pendiente"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "subiendo 1 archivo"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "Subiendo {count} archivos"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Subida cancelada."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "La URL no puede estar vacía."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
+msgstr "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} archivos escaneados"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "error escaneando"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Nombre"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Tamaño"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 carpeta"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} carpetas"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 archivo"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} archivos"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Subir"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Tratamiento de archivos"
@@ -277,36 +283,44 @@ msgstr "Carpeta"
msgid "From link"
msgstr "Desde el enlace"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Subir"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Papelera de reciclaje"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar subida"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Aquí no hay nada. ¡Sube algo!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Dejar de compartir"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "El archivo es demasiado grande"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Se están escaneando los archivos, por favor espere."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Ahora escaneando"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Actualizando cache de archivos de sistema"
diff --git a/l10n/es/files_encryption.po b/l10n/es/files_encryption.po
index 9b75acf31d7..f4c68c14f4c 100644
--- a/l10n/es/files_encryption.po
+++ b/l10n/es/files_encryption.po
@@ -3,33 +3,40 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Felix Liberio <felix.liberio@gmail.com>, 2013.
# <juanma@kde.org.ar>, 2012.
+# Raul Fernandez Garcia <raulfg3@gmail.com>, 2013.
+# Vladimir Martinez Sierra <vladimirmartinezsierra@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-28 02:01+0200\n"
-"PO-Revision-Date: 2012-08-27 05:27+0000\n"
-"Last-Translator: juanman <juanma@kde.org.ar>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Cifrado"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Excluir del cifrado los siguientes tipos de archivo"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "La encriptacion de archivo esta activada."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Los siguientes tipos de archivo no seran encriptados:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Excluir los siguientes tipos de archivo de la encriptacion:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Ninguno"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Habilitar cifrado"
diff --git a/l10n/es/files_trashbin.po b/l10n/es/files_trashbin.po
new file mode 100644
index 00000000000..7e95d500a1b
--- /dev/null
+++ b/l10n/es/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Vladimir Martinez Sierra <vladimirmartinezsierra@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 00:30+0000\n"
+"Last-Translator: msvladimir <vladimirmartinezsierra@gmail.com>\n"
+"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "No se puede eliminar %s permanentemente"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "No se puede restaurar %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "Restaurar"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "Eliminar archivo permanentemente"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nombre"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Eliminado"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 carpeta"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} carpetas"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 archivo"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} archivos"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Nada aqui. La papelera esta vacia!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Recuperar"
diff --git a/l10n/es/files_versions.po b/l10n/es/files_versions.po
index b928098bf8c..279601b80de 100644
--- a/l10n/es/files_versions.po
+++ b/l10n/es/files_versions.po
@@ -7,13 +7,14 @@
# <juanma@kde.org.ar>, 2012.
# Rubén Trujillo <rubentrf@gmail.com>, 2012.
# <sergio@entrecables.com>, 2012.
+# Vladimir Martinez Sierra <vladimirmartinezsierra@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-26 13:19+0200\n"
-"PO-Revision-Date: 2012-09-26 05:59+0000\n"
-"Last-Translator: scambra <sergio@entrecables.com>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 00:40+0000\n"
+"Last-Translator: msvladimir <vladimirmartinezsierra@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,21 +22,44 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Expirar todas las versiones"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "No se puede revertir: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "exitoso"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "El archivo %s fue revertido a la version %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "fallo"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "El archivo %s no puede ser revertido a la version %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "No hay versiones antiguas disponibles"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Ruta no especificada"
#: js/versions.js:16
msgid "History"
msgstr "Historial"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versiones"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Esto eliminará todas las versiones guardadas como copia de seguridad de tus archivos"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Revertir un archivo a una versión anterior haciendo clic en el boton de revertir"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/es/lib.po b/l10n/es/lib.po
index 179b6bff7d6..be25031f5d8 100644
--- a/l10n/es/lib.po
+++ b/l10n/es/lib.po
@@ -3,6 +3,8 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2013.
+# <juanma@kde.org.ar>, 2013.
# <juanma@kde.org.ar>, 2012.
# Raul Fernandez Garcia <raulfg3@gmail.com>, 2012.
# Rubén Trujillo <rubentrf@gmail.com>, 2012.
@@ -11,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-18 00:01+0100\n"
-"PO-Revision-Date: 2012-11-17 08:43+0000\n"
-"Last-Translator: Raul Fernandez Garcia <raulfg3@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,51 +23,55 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Ayuda"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personal"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Ajustes"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Usuarios"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplicaciones"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Administración"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "La descarga en ZIP está desactivada."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Los archivos deben ser descargados uno por uno."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Volver a Archivos"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "no pudo ser determinado"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "La aplicación no está habilitada"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Error de autenticación"
@@ -85,55 +91,152 @@ msgstr "Texto"
msgid "Images"
msgstr "Imágenes"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "hace segundos"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "hace 1 minuto"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "hace %d minutos"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Hace 1 hora"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "Hace %d horas"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "hoy"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ayer"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "hace %d días"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "este mes"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Hace %d meses"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "este año"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "hace años"
diff --git a/l10n/es/settings.po b/l10n/es/settings.po
index be3f8676b46..404c0a40250 100644
--- a/l10n/es/settings.po
+++ b/l10n/es/settings.po
@@ -15,13 +15,14 @@
# <rom1dep@gmail.com>, 2011.
# Rubén Trujillo <rubentrf@gmail.com>, 2012.
# <sergioballesterossolanas@gmail.com>, 2011-2012.
+# Vladimir Martinez Sierra <vladimirmartinezsierra@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 00:45+0000\n"
-"Last-Translator: Agustin Ferrario <agustin.ferrario@hotmail.com.ar>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -33,6 +34,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Imposible cargar la lista desde el App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Error de autenticación"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Incapaz de cambiar el nombre"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "El grupo ya existe"
@@ -41,7 +51,7 @@ msgstr "El grupo ya existe"
msgid "Unable to add group"
msgstr "No se pudo añadir el grupo"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "No puedo habilitar la app."
@@ -53,22 +63,10 @@ msgstr "Correo guardado"
msgid "Invalid email"
msgstr "Correo no válido"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID cambiado"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Solicitud no válida"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "No se pudo eliminar el grupo"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Error de autenticación"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "No se pudo eliminar el usuario"
@@ -77,6 +75,10 @@ msgstr "No se pudo eliminar el usuario"
msgid "Language changed"
msgstr "Idioma cambiado"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Solicitud no válida"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador"
@@ -91,19 +93,47 @@ msgstr "Imposible añadir el usuario al grupo %s"
msgid "Unable to remove user from group %s"
msgstr "Imposible eliminar al usuario del grupo %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "No se puedo actualizar la aplicacion."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Actualizado a {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Desactivar"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Activar"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Espere por favor...."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Actualizando...."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Error mientras se actualizaba"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Error"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Actualizado"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Guardando..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Castellano"
@@ -115,18 +145,22 @@ msgstr "Añade tu aplicación"
msgid "More Apps"
msgstr "Más aplicaciones"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Seleccionar una aplicación"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Echa un vistazo a la web de aplicaciones apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Actualizar"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Documentación del usuario"
@@ -156,83 +190,87 @@ msgstr "Soporte Comercial"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Ha usado <strong>%s</strong> de <strong>%s</strong> disponibles"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clientes"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Descargar clientes de escritorio"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Descargar cliente para android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Descargar cliente para iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Contraseña"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Su contraseña ha sido cambiada"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "No se ha podido cambiar tu contraseña"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Contraseña actual"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nueva contraseña:"
-#: templates/personal.php:26
-msgid "show"
-msgstr "mostrar"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Cambiar contraseña"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Nombre a mostrar"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Su nombre fue cambiado"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Incapaz de cambiar su nombre"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Cambiar nombre"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Correo electrónico"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Tu dirección de correo"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Escribe una dirección de correo electrónico para restablecer la contraseña"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Ayúdanos a traducir"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Use esta dirección para conectarse a su cuenta de ownCloud en el administrador de archivos"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Version"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -242,11 +280,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nombre"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Nombre de usuario"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupos"
@@ -258,26 +296,34 @@ msgstr "Crear"
msgid "Default Storage"
msgstr "Almacenamiento Predeterminado"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Ilimitado"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Otro"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupo admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Alamacenamiento"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "Cambiar nombre a mostrar"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "Configurar nueva contraseña"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Predeterminado"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Eliminar"
diff --git a/l10n/es/user_ldap.po b/l10n/es/user_ldap.po
index 32c72e60755..139d0cb69b8 100644
--- a/l10n/es/user_ldap.po
+++ b/l10n/es/user_ldap.po
@@ -3,19 +3,21 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Felix Liberio <felix.liberio@gmail.com>, 2013.
# Javier Llorente <javier@opensuse.org>, 2012.
# <juanma@kde.org.ar>, 2012.
# <manudeloz86@gmail.com>, 2012.
# Raul Fernandez Garcia <raulfg3@gmail.com>, 2012.
# Rubén Trujillo <rubentrf@gmail.com>, 2012.
# <sergioballesterossolanas@gmail.com>, 2012.
+# Vladimir Martinez Sierra <vladimirmartinezsierra@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-19 00:03+0100\n"
-"PO-Revision-Date: 2012-12-18 00:58+0000\n"
-"Last-Translator: valarauco <manudeloz86@gmail.com>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 00:30+0000\n"
+"Last-Translator: msvladimir <vladimirmartinezsierra@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,6 +25,58 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "No se pudo borrar la configuración del servidor"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "La configuración es válida y la conexión puede establecerse!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "La configuración es válida, pero falló el Enlace. Por favor, compruebe la configuración del servidor y las credenciales."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "La configuración no es válida. Por favor, busque en el log de ownCloud para más detalles."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Falló el borrado"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Hacerse cargo de los ajustes de configuración del servidor reciente?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Mantener la configuración?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "No se puede añadir la configuración del servidor"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "La prueba de conexión fue exitosa"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "La prueba de conexión falló"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "¿Realmente desea eliminar la configuración actual del servidor?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Confirmar eliminación"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -32,158 +86,232 @@ msgstr "<b>Advertencia:</b> Los Apps user_ldap y user_webdavauth son incompatibl
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Advertencia:</b> El módulo PHP LDAP necesario no está instalado, el sistema no funcionará. Pregunte al administrador del sistema para instalarlo."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Por favor consulte al administrador del sistema para instalarlo."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Configuración del Servidor"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Agregar configuracion del servidor"
+
+#: templates/settings.php:21
msgid "Host"
-msgstr "Servidor"
+msgstr "Máquina"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Puede omitir el protocolo, excepto si requiere SSL. En ese caso, empiece con ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN base"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Un DN Base por línea"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Puede especificar el DN base para usuarios y grupos en la pestaña Avanzado"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN usuario"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, deje DN y contraseña vacíos."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Contraseña"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Para acceso anónimo, deje DN y contraseña vacíos."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtro de inicio de sesión de usuario"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Define el filtro a aplicar cuando se ha realizado un login. %%uid remplazrá el nombre de usuario en el proceso de login."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "usar %%uid como placeholder, ej: \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Lista de filtros de usuario"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Define el filtro a aplicar, cuando se obtienen usuarios."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "Sin placeholder, ej: \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtro de grupo"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Define el filtro a aplicar, cuando se obtienen grupos."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "Con cualquier placeholder, ej: \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Configuracion de coneccion"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Configuracion activa"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Cuando deseleccione, esta configuracion sera omitida."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Puerto"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Ãrbol base de usuario"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Host para backup (Replica)"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Ãrbol base de grupo"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Dar un host de copia de seguridad opcional. Debe ser una réplica del servidor principal LDAP / AD."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Asociación Grupo-Miembro"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Puerto para backup (Replica)"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Deshabilitar servidor principal"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Cuando se inicie, ownCloud unicamente estara conectado al servidor replica"
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Usar TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "No usarlo para SSL, habrá error."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "No usar adicionalmente para conecciones LDAPS, estas fallaran"
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Servidor de LDAP sensible a mayúsculas/minúsculas (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Apagar la validación por certificado SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Si la conexión sólo funciona con esta opción, importe el certificado SSL del servidor LDAP en su servidor ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "No recomendado, sólo para pruebas."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "en segundos. Un cambio vacía la cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Configuracion de directorio"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Campo de nombre de usuario a mostrar"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "El atributo LDAP a usar para generar el nombre de usuario de ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Ãrbol base de usuario"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Un DN Base de Usuario por línea"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Atributos de la busqueda de usuario"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Opcional; un atributo por linea"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Campo de nombre de grupo a mostrar"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "El atributo LDAP a usar para generar el nombre de los grupos de ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Ãrbol base de grupo"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Un DN Base de Grupo por línea"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Atributos de busqueda de grupo"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Asociación Grupo-Miembro"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Atributos especiales"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "en bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "en segundos. Un cambio vacía la cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Vacío para el nombre de usuario (por defecto). En otro caso, especifique un atributo LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Ayuda"
diff --git a/l10n/es/user_webdavauth.po b/l10n/es/user_webdavauth.po
index 8eec33bde17..c3d87548a9b 100644
--- a/l10n/es/user_webdavauth.po
+++ b/l10n/es/user_webdavauth.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2013.
# Art O. Pal <artopal@fastmail.fm>, 2012.
# <pggx999@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 19:17+0000\n"
-"Last-Translator: pggx999 <pggx999@gmail.com>\n"
+"POT-Creation-Date: 2013-01-21 00:04+0100\n"
+"PO-Revision-Date: 2013-01-20 02:31+0000\n"
+"Last-Translator: Agustin Ferrario <agustin.ferrario@hotmail.com.ar>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +20,17 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Autenticación de WevDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud enviará al usuario las interpretaciones 401 y 403 a esta URL como incorrectas y todas las otras credenciales como correctas"
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "onwCloud enviará las credenciales de usuario a esta URL. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas."
diff --git a/l10n/es_AR/core.po b/l10n/es_AR/core.po
index 43ae151a756..b13721f69df 100644
--- a/l10n/es_AR/core.po
+++ b/l10n/es_AR/core.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <claudio.tessone@gmail.com>, 2012.
+# CJTess <claudio.tessone@gmail.com>, 2013.
+# <claudio.tessone@gmail.com>, 2012-2013.
# <javierkaiser@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
@@ -19,24 +20,24 @@ msgstr ""
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "El usurario %s compartió un archivo con vos."
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "El usurario %s compartió una carpeta con vos."
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "El usuario %s compartió el archivo \"%s\" con vos. Está disponible para su descarga aquí: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -52,8 +53,9 @@ msgid "No category to add?"
msgstr "¿Ninguna categoría para añadir?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Esta categoría ya existe: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -81,59 +83,135 @@ msgstr "No hay categorías seleccionadas para borrar."
msgid "Error removing %s from favorites."
msgstr "Error al remover %s de favoritos. "
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Domingo"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Lunes"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Martes"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Miércoles"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Jueves"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Viernes"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sábado"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Enero"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Febrero"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Marzo"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Abril"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mayo"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Junio"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Julio"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Agosto"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Septiembre"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Octubre"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Noviembre"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Diciembre"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Ajustes"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "segundos atrás"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "hace 1 minuto"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "hace {minutes} minutos"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "Hace 1 hora"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} horas atrás"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "hoy"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "ayer"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "hace {days} días"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "el mes pasado"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} meses atrás"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "meses atrás"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "el año pasado"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "años atrás"
@@ -163,8 +241,8 @@ msgid "The object type is not specified."
msgstr "El tipo de objeto no esta especificado. "
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Error"
@@ -176,123 +254,141 @@ msgstr "El nombre de la aplicación no esta especificado."
msgid "The required file {file} is not installed!"
msgstr "¡El archivo requerido {file} no está instalado!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Compartir"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Compartido"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Error al compartir"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Error en el procedimiento de "
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Error al cambiar permisos"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Compartido con vos y el grupo {group} por {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Compartido con vos por {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Compartir con"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Compartir con link"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Proteger con contraseña "
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Contraseña"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Enviar el link por e-mail."
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Enviar"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Asignar fecha de vencimiento"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Fecha de vencimiento"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "compartido a través de e-mail:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "No se encontraron usuarios"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "No se permite volver a compartir"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Compartido en {item} con {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Remover compartir"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "puede editar"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "control de acceso"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "crear"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "actualizar"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "borrar"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "compartir"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Protegido por contraseña"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Error al remover la fecha de caducidad"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Error al asignar fecha de vencimiento"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Enviando..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Email enviado"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "La actualización no pudo ser completada. Por favor, reportá el inconveniente a la comunidad <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "La actualización fue exitosa. Estás siendo redirigido a ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Restablecer contraseña de ownCloud"
@@ -374,7 +470,7 @@ msgstr "Editar categorías"
msgid "Add"
msgstr "Agregar"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Advertencia de seguridad"
@@ -384,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr "No hay disponible ningún generador de números aleatorios seguro. Por favor habilitá la extensión OpenSSL de PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Sin un generador de números aleatorios seguro un atacante podría predecir los tokens de reinicio de tu contraseña y tomar control de tu cuenta."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Tu directorio de datos y tus archivos son probablemente accesibles desde internet. El archivo .htaccess provisto por ownCloud no está funcionando. Te sugerimos que configures tu servidor web de manera que el directorio de datos ya no esté accesible, o que muevas el directorio de datos afuera del directorio raíz de tu servidor web."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Crear una <strong>cuenta de administrador</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avanzado"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Directorio de almacenamiento"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configurar la base de datos"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "se utilizarán"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Usuario de la base de datos"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Contraseña de la base de datos"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nombre de la base de datos"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Espacio de tablas de la base de datos"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Host de la base de datos"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Completar la instalación"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Domingo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Lunes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Martes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Miércoles"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Jueves"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Viernes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sábado"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Enero"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Febrero"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Marzo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Abril"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mayo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Junio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Julio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Agosto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Septiembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Octubre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Noviembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Diciembre"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "servicios web sobre los que tenés control"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Cerrar la sesión"
@@ -546,17 +570,17 @@ msgstr "Por favor, cambiá tu contraseña para fortalecer nuevamente la segurida
msgid "Lost your password?"
msgstr "¿Perdiste tu contraseña?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "recordame"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Entrar"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Terminaste la sesión."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,18 +593,4 @@ msgstr "siguiente"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "¡Advertencia de seguridad!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Por favor, verificá tu contraseña. <br/>Por razones de seguridad, puede ser que que te pregunte ocasionalmente la contraseña."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verificar"
+msgstr "Actualizando ownCloud a la versión %s, puede domorar un rato."
diff --git a/l10n/es_AR/files.po b/l10n/es_AR/files.po
index d3f2c7ebc15..74cb51e8c7a 100644
--- a/l10n/es_AR/files.po
+++ b/l10n/es_AR/files.po
@@ -4,13 +4,14 @@
#
# Translators:
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2012-2013.
-# <claudio.tessone@gmail.com>, 2012.
+# CJTess <claudio.tessone@gmail.com>, 2013.
+# <claudio.tessone@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
@@ -22,57 +23,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "No se pudo mover %s - Un archivo con este nombre ya existe"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "No se pudo mover %s "
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "No fue posible cambiar el nombre al archivo"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "El archivo no fue subido. Error desconocido"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "No se han producido errores, el archivo se ha subido con éxito"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "El archivo que intentás subir excede el tamaño definido por upload_max_filesize en el php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "El archivo que intentás subir sobrepasa el tamaño definido por la variable MAX_FILE_SIZE especificada en el formulario HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "El archivo que intentás subir solo se subió parcialmente"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "El archivo no fue subido"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Falta un directorio temporal"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Error al escribir en el disco"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "No hay suficiente espacio disponible"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "No hay suficiente capacidad de almacenamiento"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Directorio invalido."
@@ -80,149 +81,152 @@ msgstr "Directorio invalido."
msgid "Files"
msgstr "Archivos"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Dejar de compartir"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Borrar"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Cambiar nombre"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendiente"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} ya existe"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "reemplazar"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "sugerir nombre"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "cancelar"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "reemplazado {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "deshacer"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "reemplazado {new_name} con {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "{files} se dejaron de compartir"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "Eliminar"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} borrados"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' es un nombre de archivo inválido."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "El nombre del archivo no puede quedar vacío."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "generando un archivo ZIP, puede llevar un tiempo."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "El almacenamiento está casi lleno ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Tu descarga esta siendo preparada. Esto puede tardar algun tiempo si los archivos son muy grandes."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Error al subir el archivo"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Cerrar"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Pendiente"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "Subiendo 1 archivo"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "Subiendo {count} archivos"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "La subida fue cancelada"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "La URL no puede estar vacía"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} archivos escaneados"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "error mientras se escaneaba"
+msgstr "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nombre"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Tamaño"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 directorio"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} directorios"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 archivo"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} archivos"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Subir"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Tratamiento de archivos"
@@ -271,36 +275,44 @@ msgstr "Carpeta"
msgid "From link"
msgstr "Desde enlace"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Subir"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar subida"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "No hay nada. ¡Subí contenido!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Dejar de compartir"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "El archivo es demasiado grande"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Los archivos que intentás subir sobrepasan el tamaño máximo "
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Se están escaneando los archivos, por favor esperá."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Escaneo actual"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Actualizando el cache del sistema de archivos"
diff --git a/l10n/es_AR/files_encryption.po b/l10n/es_AR/files_encryption.po
index 16b134f329d..1afbf7e9f89 100644
--- a/l10n/es_AR/files_encryption.po
+++ b/l10n/es_AR/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-25 02:02+0200\n"
-"PO-Revision-Date: 2012-09-24 04:41+0000\n"
-"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Encriptación"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Exceptuar de la encriptación los siguientes tipos de archivo"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Ninguno"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Habilitar encriptación"
diff --git a/l10n/es_AR/files_trashbin.po b/l10n/es_AR/files_trashbin.po
new file mode 100644
index 00000000000..c50739188cc
--- /dev/null
+++ b/l10n/es_AR/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_AR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nombre"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 directorio"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} directorios"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 archivo"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} archivos"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Recuperar"
diff --git a/l10n/es_AR/files_versions.po b/l10n/es_AR/files_versions.po
index 51e4552b000..e19644ccc5b 100644
--- a/l10n/es_AR/files_versions.po
+++ b/l10n/es_AR/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-25 02:02+0200\n"
-"PO-Revision-Date: 2012-09-24 04:28+0000\n"
-"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Expirar todas las versiones"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historia"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versiones"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Hacer estom borrará todas las versiones guardadas como copia de seguridad de tus archivos"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/es_AR/lib.po b/l10n/es_AR/lib.po
index d7c4a911766..3cc70c6efcd 100644
--- a/l10n/es_AR/lib.po
+++ b/l10n/es_AR/lib.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-22 00:01+0100\n"
-"PO-Revision-Date: 2012-11-21 09:56+0000\n"
-"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +19,55 @@ msgstr ""
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Ayuda"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personal"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Ajustes"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Usuarios"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplicaciones"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Administración"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "La descarga en ZIP está desactivada."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Los archivos deben ser descargados de a uno."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Volver a archivos"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "no pudo ser determinado"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "La aplicación no está habilitada"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Error de autenticación"
@@ -82,55 +87,152 @@ msgstr "Texto"
msgid "Images"
msgstr "Imágenes"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "hace unos segundos"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "hace 1 minuto"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "hace %d minutos"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 hora atrás"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d horas atrás"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "hoy"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ayer"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "hace %d días"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "este mes"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d meses atrás"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "este año"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "hace años"
diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po
index 5e4d44648a9..008d05eb17a 100644
--- a/l10n/es_AR/settings.po
+++ b/l10n/es_AR/settings.po
@@ -4,14 +4,15 @@
#
# Translators:
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2012.
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 00:45+0000\n"
-"Last-Translator: Agustin Ferrario <agustin.ferrario@hotmail.com.ar>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Imposible cargar la lista desde el App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Error al autenticar"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "El grupo ya existe"
@@ -31,7 +41,7 @@ msgstr "El grupo ya existe"
msgid "Unable to add group"
msgstr "No fue posible añadir el grupo"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "No se puede habilitar la aplicación."
@@ -43,22 +53,10 @@ msgstr "e-mail guardado"
msgid "Invalid email"
msgstr "el e-mail no es válido "
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID cambiado"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Solicitud no válida"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "No fue posible eliminar el grupo"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Error al autenticar"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "No fue posible eliminar el usuario"
@@ -67,6 +65,10 @@ msgstr "No fue posible eliminar el usuario"
msgid "Language changed"
msgstr "Idioma cambiado"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Solicitud no válida"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Los administradores no se pueden quitar a ellos mismos del grupo administrador. "
@@ -81,19 +83,47 @@ msgstr "No fue posible añadir el usuario al grupo %s"
msgid "Unable to remove user from group %s"
msgstr "No es posible eliminar al usuario del grupo %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Desactivar"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Activar"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Error"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Guardando..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Castellano (Argentina)"
@@ -105,18 +135,22 @@ msgstr "Añadí tu aplicación"
msgid "More Apps"
msgstr "Más aplicaciones"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Seleccionar una aplicación"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Mirá la web de aplicaciones apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licenciado por <span class=\"author\">"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Actualizar"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Documentación de Usuario"
@@ -127,7 +161,7 @@ msgstr "Documentación de Administrador"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr "Documentación en linea"
+msgstr "Documentación en línea"
#: templates/help.php:7
msgid "Forum"
@@ -146,83 +180,87 @@ msgstr "Soporte comercial"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Usaste <strong>%s</strong> de los <strong>%s</strong> disponibles"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clientes"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Descargar clientes de escritorio"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Descargar cliente de Android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Descargar cliente de iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Contraseña"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Tu contraseña fue cambiada"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "No fue posible cambiar tu contraseña"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Contraseña actual"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nueva contraseña:"
-#: templates/personal.php:26
-msgid "show"
-msgstr "mostrar"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Cambiar contraseña"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Nombre a mostrar"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Correo electrónico"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Tu dirección de e-mail"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Escribí una dirección de correo electrónico para restablecer la contraseña"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Ayudanos a traducir"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Utiliza esta dirección para conectarte con ownCloud en tu Administrador de Archivos"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Versión"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nombre"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Nombre de "
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupos"
@@ -248,26 +286,34 @@ msgstr "Crear"
msgid "Default Storage"
msgstr "Almacenamiento Predeterminado"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Ilimitado"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Otro"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupo Administrador"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Almacenamiento"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr "Predeterminado"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Borrar"
diff --git a/l10n/es_AR/user_ldap.po b/l10n/es_AR/user_ldap.po
index 4ceff26caa1..b0aad05a15d 100644
--- a/l10n/es_AR/user_ldap.po
+++ b/l10n/es_AR/user_ldap.po
@@ -4,14 +4,15 @@
#
# Translators:
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2013.
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-04 13:22+0100\n"
-"PO-Revision-Date: 2013-01-04 05:53+0000\n"
-"Last-Translator: Agustin Ferrario <agustin.ferrario@hotmail.com.ar>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +20,58 @@ msgstr ""
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Fallo al borrar la configuración del servidor"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "La configuración es valida y la conexión pudo ser establecida."
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Error al borrar"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "¿Mantener preferencias?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "No se pudo añadir la configuración del servidor"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "El este de conexión ha sido completado satisfactoriamente"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Falló es test de conexión"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "¿Realmente desea borrar la configuración actual del servidor?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Confirmar borrado"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -28,158 +81,232 @@ msgstr "<b>Advertencia:</b> Los Apps user_ldap y user_webdavauth son incompatibl
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Advertencia:</b> El módulo PHP LDAP necesario no está instalado, el sistema no funcionará. Pregunte al administrador del sistema para instalarlo."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Atención:</b> El módulo PHP LDAP no está instalado, este elemento no va a funcionar. Por favor, pedile al administrador que lo instale."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Configuración del Servidor"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Añadir Configuración del Servidor"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Servidor"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Podés omitir el protocolo, excepto si SSL es requerido. En ese caso, empezá con ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN base"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Una DN base por línea"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Podés especificar el DN base para usuarios y grupos en la pestaña \"Avanzado\""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN usuario"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, dejá DN y contraseña vacíos."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Contraseña"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Para acceso anónimo, dejá DN y contraseña vacíos."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtro de inicio de sesión de usuario"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Define el filtro a aplicar cuando se ha realizado un login. %%uid remplazará el nombre de usuario en el proceso de inicio de sesión."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "usar %%uid como plantilla, p. ej.: \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Lista de filtros de usuario"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Define el filtro a aplicar, cuando se obtienen usuarios."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "Sin plantilla, p. ej.: \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtro de grupo"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Define el filtro a aplicar cuando se obtienen grupos."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "Sin ninguna plantilla, p. ej.: \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Configuración de Conección"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Configuración activa"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Puerto"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Ãrbol base de usuario"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Ãrbol base de grupo"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Asociación Grupo-Miembro"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Deshabilitar el Servidor Principal"
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Usar TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "No usarlo para SSL, dará error."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Servidor de LDAP sensible a mayúsculas/minúsculas (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Desactivar la validación por certificado SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Si la conexión sólo funciona con esta opción, importá el certificado SSL del servidor LDAP en tu servidor ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "No recomendado, sólo para pruebas."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "en segundos. Cambiarlo vacía la cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Configuración de Directorio"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Campo de nombre de usuario a mostrar"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "El atributo LDAP a usar para generar el nombre de usuario de ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Ãrbol base de usuario"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Una DN base de usuario por línea"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Campo de nombre de grupo a mostrar"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "El atributo LDAP a usar para generar el nombre de los grupos de ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Ãrbol base de grupo"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Una DN base de grupo por línea"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Asociación Grupo-Miembro"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Atributos Especiales"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "en bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "en segundos. Cambiarlo vacía la cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Vacío para el nombre de usuario (por defecto). En otro caso, especificá un atributo LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Ayuda"
diff --git a/l10n/es_AR/user_webdavauth.po b/l10n/es_AR/user_webdavauth.po
index 5eb7c5b084b..6c88cac3fd0 100644
--- a/l10n/es_AR/user_webdavauth.po
+++ b/l10n/es_AR/user_webdavauth.po
@@ -4,14 +4,15 @@
#
# Translators:
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2012.
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 21:34+0000\n"
-"Last-Translator: Agustin Ferrario <agustin.ferrario@hotmail.com.ar>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 16:22+0000\n"
+"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +20,17 @@ msgstr ""
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Autenticación de WevDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud enviará las credenciales a esta dirección, si son interpretadas como http 401 o http 403 las credenciales son erroneas; todos los otros códigos indican que las credenciales son correctas."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "onwCloud enviará las credenciales de usuario a esta URL. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas."
diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po
index 7953c94046e..54c76b77460 100644
--- a/l10n/et_EE/core.po
+++ b/l10n/et_EE/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +18,24 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,8 +51,9 @@ msgid "No category to add?"
msgstr "Pole kategooriat, mida lisada?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "See kategooria on juba olemas: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -80,59 +81,135 @@ msgstr "Kustutamiseks pole kategooriat valitud."
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Pühapäev"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Esmaspäev"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Teisipäev"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Kolmapäev"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Neljapäev"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Reede"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Laupäev"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Jaanuar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Veebruar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Märts"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Aprill"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juuni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juuli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktoober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Detsember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Seaded"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "sekundit tagasi"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minut tagasi"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} minutit tagasi"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "täna"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "eile"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} päeva tagasi"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "viimasel kuul"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "kuu tagasi"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "viimasel aastal"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "aastat tagasi"
@@ -162,8 +239,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Viga"
@@ -175,123 +252,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Jaga"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Viga jagamisel"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Viga jagamise lõpetamisel"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Viga õiguste muutmisel"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Sinuga jagas {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Jaga"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Jaga lingiga"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Parooliga kaitstud"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Parool"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Määra aegumise kuupäev"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Aegumise kuupäev"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Jaga e-postiga:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ühtegi inimest ei leitud"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Edasijagamine pole lubatud"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Lõpeta jagamine"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "saab muuta"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "ligipääsukontroll"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "loo"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "uuenda"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "kustuta"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "jaga"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Parooliga kaitstud"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Viga aegumise kuupäeva eemaldamisel"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Viga aegumise kuupäeva määramisel"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud parooli taastamine"
@@ -373,7 +468,7 @@ msgstr "Muuda kategooriaid"
msgid "Add"
msgstr "Lisa"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Turvahoiatus"
@@ -383,147 +478,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Loo <strong>admini konto</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Lisavalikud"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Andmete kaust"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Seadista andmebaasi"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "kasutatakse"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Andmebaasi kasutaja"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Andmebaasi parool"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Andmebasi nimi"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Andmebaasi tabeliruum"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Andmebaasi host"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Lõpeta seadistamine"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Pühapäev"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Esmaspäev"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Teisipäev"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Kolmapäev"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Neljapäev"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Reede"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Laupäev"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Jaanuar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Veebruar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Märts"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Aprill"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juuni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juuli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktoober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Detsember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "veebiteenused sinu kontrolli all"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Logi välja"
@@ -545,17 +568,17 @@ msgstr "Palun muuda parooli, et oma kasutajakonto uuesti turvata."
msgid "Lost your password?"
msgstr "Kaotasid oma parooli?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "pea meeles"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Logi sisse"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Sa oled välja loginud"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +592,3 @@ msgstr "järgm"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "turvahoiatus!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Kinnita"
diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po
index 444a31d0214..3e795d756e0 100644
--- a/l10n/et_EE/files.po
+++ b/l10n/et_EE/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -24,55 +24,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Ühtegi faili ei laetud üles. Tundmatu viga"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Ühtegi viga pole, fail on üles laetud"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Üles laetud faili suurus ületab HTML vormis määratud upload_max_filesize suuruse"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Fail laeti üles ainult osaliselt"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ühtegi faili ei laetud üles"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Ajutiste failide kaust puudub"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Kettale kirjutamine ebaõnnestus"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -80,149 +80,152 @@ msgstr ""
msgid "Files"
msgstr "Failid"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Lõpeta jagamine"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Kustuta"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "ümber"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ootel"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} on juba olemas"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "asenda"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "soovita nime"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "loobu"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "asendatud nimega {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "tagasi"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "asendas nime {old_name} nimega {new_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "jagamata {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "kustutatud {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "ZIP-faili loomine, see võib veidi aega võtta."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Üleslaadimise viga"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Sulge"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Ootel"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 faili üleslaadimisel"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} faili üleslaadimist"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Üleslaadimine tühistati."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL ei saa olla tühi."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} faili skännitud"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "viga skännimisel"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nimi"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Suurus"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Muudetud"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 kaust"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} kausta"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 fail"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} faili"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Lae üles"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Failide käsitlemine"
@@ -271,36 +274,44 @@ msgstr "Kaust"
msgid "From link"
msgstr "Allikast"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Lae üles"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Tühista üleslaadimine"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Siin pole midagi. Lae midagi üles!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Lae alla"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Lõpeta jagamine"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Üleslaadimine on liiga suur"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Faile skannitakse, palun oota"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Praegune skannimine"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/et_EE/files_encryption.po b/l10n/et_EE/files_encryption.po
index 8a0593fa337..3f06b12afb2 100644
--- a/l10n/et_EE/files_encryption.po
+++ b/l10n/et_EE/files_encryption.po
@@ -8,28 +8,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-19 02:02+0200\n"
-"PO-Revision-Date: 2012-08-18 06:39+0000\n"
-"Last-Translator: Rivo Zängov <eraser@eraser.ee>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: et_EE\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Krüpteerimine"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Järgnevaid failitüüpe ära krüpteeri"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Pole"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Luba krüpteerimine"
diff --git a/l10n/et_EE/files_trashbin.po b/l10n/et_EE/files_trashbin.po
new file mode 100644
index 00000000000..e4e1d3e4372
--- /dev/null
+++ b/l10n/et_EE/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: et_EE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nimi"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 kaust"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} kausta"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 fail"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} faili"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/et_EE/files_versions.po b/l10n/et_EE/files_versions.po
index a0d4710bcd4..b35f2b2c7e7 100644
--- a/l10n/et_EE/files_versions.po
+++ b/l10n/et_EE/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-21 02:03+0200\n"
-"PO-Revision-Date: 2012-10-20 20:09+0000\n"
-"Last-Translator: Rivo Zängov <eraser@eraser.ee>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Kõikide versioonide aegumine"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Ajalugu"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versioonid"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "See kustutab kõik sinu failidest tehtud varuversiooni"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/et_EE/lib.po b/l10n/et_EE/lib.po
index f617ebc7835..9f3d6200baa 100644
--- a/l10n/et_EE/lib.po
+++ b/l10n/et_EE/lib.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Abiinfo"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Isiklik"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Seaded"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Kasutajad"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Rakendused"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP-ina allalaadimine on välja lülitatud."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Failid tuleb alla laadida ükshaaval."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Tagasi failide juurde"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Valitud failid on ZIP-faili loomiseks liiga suured."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Rakendus pole sisse lülitatud"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Autentimise viga"
@@ -82,55 +86,152 @@ msgstr "Tekst"
msgid "Images"
msgstr "Pildid"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "sekundit tagasi"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minut tagasi"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minutit tagasi"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "täna"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "eile"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d päeva tagasi"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "eelmisel kuul"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "eelmisel aastal"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "aastat tagasi"
diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po
index 42f157b4e7c..9b6a08fafc3 100644
--- a/l10n/et_EE/settings.po
+++ b/l10n/et_EE/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -23,6 +23,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "App Sotre'i nimekirja laadimine ebaõnnestus"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Autentimise viga"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Grupp on juba olemas"
@@ -31,7 +40,7 @@ msgstr "Grupp on juba olemas"
msgid "Unable to add group"
msgstr "Keela grupi lisamine"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Rakenduse sisselülitamine ebaõnnestus."
@@ -43,22 +52,10 @@ msgstr "Kiri on salvestatud"
msgid "Invalid email"
msgstr "Vigane e-post"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID on muudetud"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Vigane päring"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Keela grupi kustutamine"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Autentimise viga"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Keela kasutaja kustutamine"
@@ -67,6 +64,10 @@ msgstr "Keela kasutaja kustutamine"
msgid "Language changed"
msgstr "Keel on muudetud"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Vigane päring"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -81,19 +82,47 @@ msgstr "Kasutajat ei saa lisada gruppi %s"
msgid "Unable to remove user from group %s"
msgstr "Kasutajat ei saa eemaldada grupist %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Lülita välja"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Lülita sisse"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Viga"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Salvestamine..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Eesti"
@@ -105,18 +134,22 @@ msgstr "Lisa oma rakendus"
msgid "More Apps"
msgstr "Veel rakendusi"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Vali programm"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Vaata rakenduste lehte aadressil apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-litsenseeritud <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Uuenda"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -146,83 +179,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Kliendid"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Parool"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Sinu parooli on muudetud"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Sa ei saa oma parooli muuta"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Praegune parool"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Uus parool"
-#: templates/personal.php:26
-msgid "show"
-msgstr "näita"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Muuda parooli"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-post"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Sinu e-posti aadress"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Parooli taastamise sisse lülitamiseks sisesta e-posti aadress"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Keel"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Aita tõlkida"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +269,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nimi"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupid"
@@ -248,26 +285,34 @@ msgstr "Lisa"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Muu"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupi admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Kustuta"
diff --git a/l10n/et_EE/user_ldap.po b/l10n/et_EE/user_ldap.po
index c8207cb0467..83400a76258 100644
--- a/l10n/et_EE/user_ldap.po
+++ b/l10n/et_EE/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Kustutamine ebaõnnestus"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Sa ei saa protokolli ära jätta, välja arvatud siis, kui sa nõuad SSL-ühendust. Sel juhul alusta eesliitega ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Baas DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Sa saad kasutajate ja gruppide baas DN-i määrata lisavalikute vahekaardilt"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Kasutaja DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "Klientkasutaja DN, kellega seotakse, nt. uid=agent,dc=näidis,dc=com. Anonüümseks ligipääsuks jäta DN ja parool tühjaks."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Parool"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Anonüümseks ligipääsuks jäta DN ja parool tühjaks."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Kasutajanime filter"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Määrab sisselogimisel kasutatava filtri. %%uid asendab sisselogimistegevuses kasutajanime."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "kasuta %%uid kohatäitjat, nt. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Kasutajate nimekirja filter"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Määrab kasutajaid hankides filtri, mida rakendatakse."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "ilma ühegi kohatäitjata, nt. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Grupi filter"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Määrab gruppe hankides filtri, mida rakendatakse."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "ilma ühegi kohatäitjata, nt. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Baaskasutaja puu"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Baasgrupi puu"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Grupiliikme seotus"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Kasutaja TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ära kasuta seda SSL ühenduse jaoks, see ei toimi."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Mittetõstutundlik LDAP server (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Lülita SSL sertifikaadi kontrollimine välja."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Kui ühendus toimib ainult selle valikuga, siis impordi LDAP serveri SSL sertifikaat oma ownCloud serverisse."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Pole soovitatav, kasuta ainult testimiseks."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "sekundites. Muudatus tühjendab vahemälu."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Kasutaja näidatava nime väli"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "LDAP omadus, mida kasutatakse kasutaja ownCloudi nime loomiseks."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Baaskasutaja puu"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Grupi näidatava nime väli"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "LDAP omadus, mida kasutatakse ownCloudi grupi nime loomiseks."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Baasgrupi puu"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Grupiliikme seotus"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "baitides"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "sekundites. Muudatus tühjendab vahemälu."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Kasutajanime (vaikeväärtus) kasutamiseks jäta tühjaks. Vastasel juhul määra LDAP/AD omadus."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Abiinfo"
diff --git a/l10n/et_EE/user_webdavauth.po b/l10n/et_EE/user_webdavauth.po
index 2e1b479cbe8..a2ccf77cee8 100644
--- a/l10n/et_EE/user_webdavauth.po
+++ b/l10n/et_EE/user_webdavauth.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/eu/core.po b/l10n/eu/core.po
index 4825d0400e8..faa3a2a3a3b 100644
--- a/l10n/eu/core.po
+++ b/l10n/eu/core.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <asieriko@gmail.com>, 2013.
# <asieriko@gmail.com>, 2012.
# Asier Urio Larrea <asieriko@gmail.com>, 2011.
# Piarres Beobide <pi@beobide.net>, 2012.
@@ -10,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
@@ -20,24 +21,24 @@ msgstr ""
"Language: eu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "%s erabiltzaileak zurekin fitxategi bat partekatu du "
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "%s erabiltzaileak zurekin karpeta bat partekatu du "
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "%s erabiltzaileak \"%s\" fitxategia zurekin partekatu du. Hemen duzu eskuragarri: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,8 +54,9 @@ msgid "No category to add?"
msgstr "Ez dago gehitzeko kategoriarik?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Kategoria hau dagoeneko existitzen da:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -82,59 +84,135 @@ msgstr "Ez da ezabatzeko kategoriarik hautatu."
msgid "Error removing %s from favorites."
msgstr "Errorea gertatu da %s gogokoetatik ezabatzean."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Igandea"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Astelehena"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Asteartea"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Asteazkena"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Osteguna"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Ostirala"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Larunbata"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Urtarrila"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Otsaila"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Martxoa"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Apirila"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maiatza"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Ekaina"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Uztaila"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Abuztua"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Iraila"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Urria"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Azaroa"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Abendua"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Ezarpenak"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "segundu"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "orain dela minutu 1"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "orain dela {minutes} minutu"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "orain dela ordu bat"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "orain dela {hours} ordu"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "gaur"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "atzo"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "orain dela {days} egun"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "joan den hilabetean"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "orain dela {months} hilabete"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "hilabete"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "joan den urtean"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "urte"
@@ -164,8 +242,8 @@ msgid "The object type is not specified."
msgstr "Objetu mota ez dago zehaztuta."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Errorea"
@@ -177,123 +255,141 @@ msgstr "App izena ez dago zehaztuta."
msgid "The required file {file} is not installed!"
msgstr "Beharrezkoa den {file} fitxategia ez dago instalatuta!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Elkarbanatu"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Elkarbanatuta"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Errore bat egon da elkarbanatzean"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Errore bat egon da elkarbanaketa desegitean"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Errore bat egon da baimenak aldatzean"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "{owner}-k zu eta {group} taldearekin partekatuta"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "{owner}-k zurekin partekatuta"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Elkarbanatu honekin"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Elkarbanatu lotura batekin"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Babestu pasahitzarekin"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Pasahitza"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Postaz bidali lotura "
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Bidali"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Ezarri muga data"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Muga data"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Elkarbanatu eposta bidez:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ez da inor aurkitu"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Berriz elkarbanatzea ez dago baimendua"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "{user}ekin {item}-n partekatuta"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Ez elkarbanatu"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "editatu dezake"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "sarrera kontrola"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "sortu"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "eguneratu"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "ezabatu"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "elkarbanatu"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Pasahitzarekin babestuta"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Errorea izan da muga data kentzean"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Errore bat egon da muga data ezartzean"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Bidaltzen ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Eposta bidalia"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Eguneraketa ez da ongi egin. Mesedez egin arazoaren txosten bat <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud komunitatearentzako</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Eguneraketa ongi egin da. Orain zure ownClouderea berbideratua izango zara."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud-en pasahitza berrezarri"
@@ -375,7 +471,7 @@ msgstr "Editatu kategoriak"
msgid "Add"
msgstr "Gehitu"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Segurtasun abisua"
@@ -385,147 +481,75 @@ msgid ""
"OpenSSL extension."
msgstr "Ez dago hausazko zenbaki sortzaile segururik eskuragarri, mesedez gatiu PHP OpenSSL extensioa."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Hausazko zenbaki sortzaile segururik gabe erasotzaile batek pasahitza berrezartzeko kodeak iragarri ditzake eta zure kontuaz jabetu."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Zure data karpeta eta zure fitxategiak internetetik zuzenean eskuragarri egon daitezke. ownCloudek emandako .htaccess fitxategia ez du bere lana egiten. Aholkatzen dizugu zure web zerbitzaria ongi konfiguratzea data karpeta eskuragarri ez izateko edo data karpeta web zerbitzariaren dokumentu errotik mugitzea."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Sortu <strong>kudeatzaile kontu<strong> bat"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Aurreratua"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datuen karpeta"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfiguratu datu basea"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "erabiliko da"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Datubasearen erabiltzailea"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Datubasearen pasahitza"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Datubasearen izena"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Datu basearen taula-lekua"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Datubasearen hostalaria"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Bukatu konfigurazioa"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Igandea"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Astelehena"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Asteartea"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Asteazkena"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Osteguna"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Ostirala"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Larunbata"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Urtarrila"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Otsaila"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Martxoa"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Apirila"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maiatza"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Ekaina"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Uztaila"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Abuztua"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Iraila"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Urria"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Azaroa"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Abendua"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "web zerbitzuak zure kontrolpean"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Saioa bukatu"
@@ -547,17 +571,17 @@ msgstr "Mesedez aldatu zure pasahitza zure kontua berriz segurtatzeko."
msgid "Lost your password?"
msgstr "Galdu duzu pasahitza?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "gogoratu"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Hasi saioa"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Zure saioa bukatu da."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,18 +594,4 @@ msgstr "hurrengoa"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Segurtasun abisua"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Mesedez egiaztatu zure pasahitza. <br/>Segurtasun arrazoiengatik noizbehinka zure pasahitza berriz sartzea eska diezazukegu."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Egiaztatu"
+msgstr "ownCloud %s bertsiora eguneratzen, denbora har dezake."
diff --git a/l10n/eu/files.po b/l10n/eu/files.po
index 0cc98cedbd1..c7a7fc3d327 100644
--- a/l10n/eu/files.po
+++ b/l10n/eu/files.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <asieriko@gmail.com>, 2013.
# <asieriko@gmail.com>, 2012.
# Asier Urio Larrea <asieriko@gmail.com>, 2011.
-# Piarres Beobide <pi@beobide.net>, 2012.
+# Piarres Beobide <pi@beobide.net>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
@@ -23,207 +24,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Ezin dira fitxategiak mugitu %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Ezin izan da fitxategia berrizendatu"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Ez da fitxategirik igo. Errore ezezaguna"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Ez da arazorik izan, fitxategia ongi igo da"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Igotako fitxategiaren tamaina HTML inprimakiko MAX_FILESIZE direktiban adierazitakoa baino handiagoa da"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Igotako fitxategiaren zati bat baino gehiago ez da igo"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ez da fitxategirik igo"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Aldi baterako karpeta falta da"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Errore bat izan da diskoan idazterakoan"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Ez dago behar aina leku erabilgarri,"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Baliogabeko karpeta."
#: appinfo/app.php:10
msgid "Files"
msgstr "Fitxategiak"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Ez elkarbanatu"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Ezabatu"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Berrizendatu"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Zain"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} dagoeneko existitzen da"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "ordeztu"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "aholkatu izena"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "ezeztatu"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "ordezkatua {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "desegin"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr " {new_name}-k {old_name} ordezkatu du"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "elkarbanaketa utzita {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "ezabatuta {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' ez da fitxategi izen baliogarria."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Fitxategi izena ezin da hutsa izan."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "ZIP-fitxategia sortzen ari da, denbora har dezake"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Zure deskarga prestatu egin behar da. Denbora bat har lezake fitxategiak handiak badira. "
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Igotzean errore bat suertatu da"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Itxi"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Zain"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "fitxategi 1 igotzen"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} fitxategi igotzen"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Igoera ezeztatuta"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URLa ezin da hutsik egon."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} fitxategi eskaneatuta"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "errore bat egon da eskaneatzen zen bitartean"
+msgstr "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Izena"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Tamaina"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Aldatuta"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "karpeta bat"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} karpeta"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "fitxategi bat"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} fitxategi"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Igo"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Fitxategien kudeaketa"
@@ -272,36 +276,44 @@ msgstr "Karpeta"
msgid "From link"
msgstr "Estekatik"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Igo"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Ezeztatu igoera"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ez dago ezer. Igo zerbait!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Deskargatu"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Ez elkarbanatu"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Igotakoa handiegia da"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Fitxategiak eskaneatzen ari da, itxoin mezedez."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Orain eskaneatzen ari da"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/eu/files_encryption.po b/l10n/eu/files_encryption.po
index cd97e58a497..767e018b1fb 100644
--- a/l10n/eu/files_encryption.po
+++ b/l10n/eu/files_encryption.po
@@ -3,33 +3,38 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <asieriko@gmail.com>, 2013.
# <asieriko@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-28 02:01+0200\n"
-"PO-Revision-Date: 2012-08-27 09:08+0000\n"
-"Last-Translator: asieriko <asieriko@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: eu\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Enkriptazioa"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Ez enkriptatu hurrengo fitxategi motak"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Bat ere ez"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Gaitu enkriptazioa"
diff --git a/l10n/eu/files_trashbin.po b/l10n/eu/files_trashbin.po
new file mode 100644
index 00000000000..70120e4257a
--- /dev/null
+++ b/l10n/eu/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Izena"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "karpeta bat"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} karpeta"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "fitxategi bat"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} fitxategi"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Berrezarri"
diff --git a/l10n/eu/files_versions.po b/l10n/eu/files_versions.po
index 471bd1ee586..fdece04b8c3 100644
--- a/l10n/eu/files_versions.po
+++ b/l10n/eu/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-25 02:02+0200\n"
-"PO-Revision-Date: 2012-09-24 13:25+0000\n"
-"Last-Translator: asieriko <asieriko@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: eu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Iraungi bertsio guztiak"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historia"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Bertsioak"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Honek zure fitxategien bertsio guztiak ezabatuko ditu"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/eu/lib.po b/l10n/eu/lib.po
index 9442caf83a9..60cad52a5a2 100644
--- a/l10n/eu/lib.po
+++ b/l10n/eu/lib.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <asieriko@gmail.com>, 2013.
# <asieriko@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-27 00:10+0100\n"
-"PO-Revision-Date: 2012-11-25 23:10+0000\n"
-"Last-Translator: asieriko <asieriko@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +19,55 @@ msgstr ""
"Language: eu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Laguntza"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Pertsonala"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Ezarpenak"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Erabiltzaileak"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplikazioak"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP deskarga ez dago gaituta."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Fitxategiak banan-banan deskargatu behar dira."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Itzuli fitxategietara"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Hautatuko fitxategiak oso handiak dira zip fitxategia sortzeko."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "ezin izan da zehaztu"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Aplikazioa ez dago gaituta"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Autentikazio errorea"
@@ -82,55 +87,152 @@ msgstr "Testua"
msgid "Images"
msgstr "Irudiak"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "orain dela segundu batzuk"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "orain dela minutu 1"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "orain dela %d minutu"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "orain dela ordu bat"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "orain dela %d ordu"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "gaur"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "atzo"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "orain dela %d egun"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "joan den hilabetea"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "orain dela %d hilabete"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "joan den urtea"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "orain dela urte batzuk"
diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po
index cf8c43c710b..2051f739da1 100644
--- a/l10n/eu/settings.po
+++ b/l10n/eu/settings.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <asieriko@gmail.com>, 2013.
# <asieriko@gmail.com>, 2012.
# Asier Urio Larrea <asieriko@gmail.com>, 2011.
# Piarres Beobide <pi@beobide.net>, 2012.
@@ -10,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
@@ -24,6 +25,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Ezin izan da App Dendatik zerrenda kargatu"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Autentifikazio errorea"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Taldea dagoeneko existitzenda"
@@ -32,7 +42,7 @@ msgstr "Taldea dagoeneko existitzenda"
msgid "Unable to add group"
msgstr "Ezin izan da taldea gehitu"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Ezin izan da aplikazioa gaitu."
@@ -44,22 +54,10 @@ msgstr "Eposta gorde da"
msgid "Invalid email"
msgstr "Baliogabeko eposta"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID aldatuta"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Baliogabeko eskaria"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ezin izan da taldea ezabatu"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Autentifikazio errorea"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ezin izan da erabiltzailea ezabatu"
@@ -68,6 +66,10 @@ msgstr "Ezin izan da erabiltzailea ezabatu"
msgid "Language changed"
msgstr "Hizkuntza aldatuta"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Baliogabeko eskaria"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik"
@@ -82,19 +84,47 @@ msgstr "Ezin izan da erabiltzailea %s taldera gehitu"
msgid "Unable to remove user from group %s"
msgstr "Ezin izan da erabiltzailea %s taldetik ezabatu"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Ez-gaitu"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Gaitu"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Errorea"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Gordetzen..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Euskera"
@@ -106,18 +136,22 @@ msgstr "Gehitu zure aplikazioa"
msgid "More Apps"
msgstr "App gehiago"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Aukeratu programa bat"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Ikusi programen orria apps.owncloud.com en"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-lizentziatua <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Eguneratu"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Erabiltzaile dokumentazioa"
@@ -147,83 +181,87 @@ msgstr "Babes komertziala"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Dagoeneko <strong>%s</strong> erabili duzu eskuragarri duzun <strong>%s</strong>etatik"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Bezeroak"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Deskargatu mahaigainerako bezeroak"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Deskargatu Android bezeroa"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Deskargatu iOS bezeroa"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Pasahitza"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Zere pasahitza aldatu da"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ezin izan da zure pasahitza aldatu"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Uneko pasahitza"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Pasahitz berria"
-#: templates/personal.php:26
-msgid "show"
-msgstr "erakutsi"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Aldatu pasahitza"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Bistaratze Izena"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-Posta"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Zure e-posta"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Idatz ezazu e-posta bat pasahitza berreskuratu ahal izateko"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Hizkuntza"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Lagundu itzultzen"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Erabili helbide hau zure fitxategi kudeatzailean zure ownCloudera konektatzeko"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Bertsioa"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +271,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "<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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Izena"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Sarrera Izena"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Taldeak"
@@ -247,28 +285,36 @@ msgstr "Sortu"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Lehenetsitako Biltegiratzea"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Mugarik gabe"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Besteak"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Talde administradorea"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
+msgstr "Biltegiratzea"
+
+#: templates/users.php:97
+msgid "change display name"
msgstr ""
-#: templates/users.php:133
-msgid "Default"
+#: templates/users.php:101
+msgid "set new password"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:137
+msgid "Default"
+msgstr "Lehenetsia"
+
+#: templates/users.php:165
msgid "Delete"
msgstr "Ezabatu"
diff --git a/l10n/eu/user_ldap.po b/l10n/eu/user_ldap.po
index 6184b2abf9d..5e0f44fe88b 100644
--- a/l10n/eu/user_ldap.po
+++ b/l10n/eu/user_ldap.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <asieriko@gmail.com>, 2013.
# <asieriko@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 20:38+0000\n"
-"Last-Translator: asieriko <asieriko@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +19,58 @@ msgstr ""
"Language: eu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Ezabaketak huts egin du"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +80,232 @@ msgstr "<b>Abisua:</b> user_ldap eta user_webdavauth aplikazioak bateraezinak di
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr "<b>Abisua:</b> PHPk behar duen LDAP modulua ez dago instalaturik, motorrak ez du funtzionatuko. Mesedez eskatu zure sistema kudeatzaileari instala dezan."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Hostalaria"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Protokoloa ez da beharrezkoa, SSL behar baldin ez baduzu. Honela bada hasi ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Oinarrizko DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "DN Oinarri bat lerroko"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Erabiltzaile eta taldeentzako Oinarrizko DN zehaztu dezakezu Aurreratu fitxan"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Erabiltzaile DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "Lotura egingo den bezero erabiltzailearen DNa, adb. uid=agent,dc=example,dc=com. Sarrera anonimoak gaitzeko utzi DN eta Pasahitza hutsik."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Pasahitza"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Sarrera anonimoak gaitzeko utzi DN eta Pasahitza hutsik."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Erabiltzaileen saioa hasteko iragazkia"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Saioa hastean erabiliko den iragazkia zehazten du. %%uid-ek erabiltzaile izena ordezkatzen du saioa hasterakoan."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "erabili %%uid txantiloia, adb. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Erabiltzaile zerrendaren Iragazkia"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Erabiltzaileak jasotzen direnean ezarriko den iragazkia zehazten du."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "txantiloirik gabe, adb. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Taldeen iragazkia"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Taldeak jasotzen direnean ezarriko den iragazkia zehazten du."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "txantiloirik gabe, adb. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Portua"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Oinarrizko Erabiltzaile Zuhaitza"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Oinarrizko Talde Zuhaitza"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Talde-Kide elkarketak"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Erabili TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ez erabili SSL konexioetan, huts egingo du."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Maiuskulak eta minuskulak ezberditzen ez dituen LDAP zerbitzaria (windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Ezgaitu SSL ziurtagirien egiaztapena."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Konexioa aukera hau ezinbestekoa badu, inportatu LDAP zerbitzariaren SSL ziurtagiria zure ownCloud zerbitzarian."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Ez da aholkatzen, erabili bakarrik frogak egiteko."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "segundutan. Aldaketak katxea husten du."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Erabiltzaileen bistaratzeko izena duen eremua"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "ownCloud erabiltzailearen izena sortzeko erabiliko den LDAP atributua"
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Oinarrizko Erabiltzaile Zuhaitza"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Erabiltzaile DN Oinarri bat lerroko"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Taldeen bistaratzeko izena duen eremua"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "ownCloud taldearen izena sortzeko erabiliko den LDAP atributua"
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Oinarrizko Talde Zuhaitza"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Talde DN Oinarri bat lerroko"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Talde-Kide elkarketak"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "bytetan"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "segundutan. Aldaketak katxea husten du."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Utzi hutsik erabiltzaile izenarako (lehentsia). Bestela zehaztu LDAP/AD atributua."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Laguntza"
diff --git a/l10n/eu/user_webdavauth.po b/l10n/eu/user_webdavauth.po
index 0f039352404..ada89a92f4d 100644
--- a/l10n/eu/user_webdavauth.po
+++ b/l10n/eu/user_webdavauth.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <asieriko@gmail.com>, 2013.
# <asieriko@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 20:58+0000\n"
+"POT-Creation-Date: 2013-01-20 00:05+0100\n"
+"PO-Revision-Date: 2013-01-18 23:47+0000\n"
"Last-Translator: asieriko <asieriko@gmail.com>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +19,17 @@ msgstr ""
"Language: eu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV Autentikazioa"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud erabiltzailearen kredentzialak helbide honetara bidaliko ditu. http 401 eta http 403 kredentzial ez zuzenak bezala hartuko dira eta beste kode guztiak kredentzial zuzentzat hartuko dira."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloudek erabiltzailearen kredentzialak URL honetara bidaliko ditu. Plugin honek erantzuna aztertzen du eta HTTP 401 eta 403 egoera kodeak baliogabezko kredentzialtzat hartuko ditu, beste erantzunak kredentzial egokitzat hartuko dituelarik."
diff --git a/l10n/fa/core.po b/l10n/fa/core.po
index 6693df21f9e..de2bbcd7005 100644
--- a/l10n/fa/core.po
+++ b/l10n/fa/core.po
@@ -4,12 +4,13 @@
#
# Translators:
# Hossein nag <h.sname@yahoo.com>, 2012.
+# mahdi Kereshteh <miki_mika1362@yahoo.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -18,58 +19,59 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "کاربر %s یک پرونده را با شما به اشتراک گذاشته است."
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "کاربر %s یک پوشه را با شما به اشتراک گذاشته است."
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "کاربر %s پرونده \"%s\" را با شما به اشتراک گذاشته است. پرونده برای دانلود اینجاست : %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "کاربر %s پوشه \"%s\" را با شما به اشتراک گذاشته است. پرونده برای دانلود اینجاست : %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
-msgstr ""
+msgstr "نوع دسته بندی ارائه نشده است."
#: ajax/vcategories/add.php:30
msgid "No category to add?"
msgstr "آیا گروه دیگری برای Ø§ÙØ²ÙˆØ¯Ù† ندارید"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "این گروه از قبل اضاÙÙ‡ شده"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
#: ajax/vcategories/removeFromFavorites.php:26
msgid "Object type not provided."
-msgstr ""
+msgstr "نوع شی ارائه نشده است."
#: ajax/vcategories/addToFavorites.php:30
#: ajax/vcategories/removeFromFavorites.php:30
#, php-format
msgid "%s ID not provided."
-msgstr ""
+msgstr "شناسه %s ارائه نشده است."
#: ajax/vcategories/addToFavorites.php:35
#, php-format
msgid "Error adding %s to favorites."
-msgstr ""
+msgstr "خطای اضاÙÙ‡ کردن %s به علاقه مندی ها."
#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
msgid "No categories selected for deletion."
@@ -78,67 +80,143 @@ msgstr "هیج دسته ای برای پاک شدن انتخاب نشده است
#: ajax/vcategories/removeFromFavorites.php:35
#, php-format
msgid "Error removing %s from favorites."
-msgstr ""
+msgstr "خطای پاک کردن %s از علاقه مندی ها."
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr "یکشنبه"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "دوشنبه"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "سه شنبه"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "چهارشنبه"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "پنجشنبه"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "جمعه"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "شنبه"
+
+#: js/config.php:33
+msgid "January"
+msgstr "ژانویه"
+
+#: js/config.php:33
+msgid "February"
+msgstr "ÙØ¨Ø±ÛŒÙ‡"
+
+#: js/config.php:33
+msgid "March"
+msgstr "مارس"
+
+#: js/config.php:33
+msgid "April"
+msgstr "آوریل"
+
+#: js/config.php:33
+msgid "May"
+msgstr "می"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:33
+msgid "June"
+msgstr "ژوئن"
+
+#: js/config.php:33
+msgid "July"
+msgstr "جولای"
+
+#: js/config.php:33
+msgid "August"
+msgstr "آگوست"
+
+#: js/config.php:33
+msgid "September"
+msgstr "سپتامبر"
+
+#: js/config.php:33
+msgid "October"
+msgstr "اکتبر"
+
+#: js/config.php:33
+msgid "November"
+msgstr "نوامبر"
+
+#: js/config.php:33
+msgid "December"
+msgstr "دسامبر"
+
+#: js/js.js:284
msgid "Settings"
msgstr "تنظیمات"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "ثانیه‌ها پیش"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 دقیقه پیش"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
-msgstr ""
+msgstr "{دقیقه ها} دقیقه های پیش"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
-msgstr ""
+msgstr "1 ساعت پیش"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
-msgstr ""
+msgstr "{ساعت ها} ساعت ها پیش"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "امروز"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "دیروز"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
-msgstr ""
+msgstr "{روزها} روزهای پیش"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "ماه قبل"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
-msgstr ""
+msgstr "{ماه ها} ماه ها پیش"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "ماه‌های قبل"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "سال قبل"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "سال‌های قبل"
#: js/oc-dialogs.js:126
msgid "Choose"
-msgstr ""
+msgstr "انتخاب کردن"
#: js/oc-dialogs.js:146 js/oc-dialogs.js:166
msgid "Cancel"
@@ -159,139 +237,157 @@ msgstr "قبول"
#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
msgid "The object type is not specified."
-msgstr ""
+msgstr "نوع شی تعیین نشده است."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "خطا"
#: js/oc-vcategories.js:179
msgid "The app name is not specified."
-msgstr ""
+msgstr "نام برنامه تعیین نشده است."
#: js/oc-vcategories.js:194
msgid "The required file {file} is not installed!"
+msgstr "پرونده { پرونده} درخواست شده نصب نشده است !"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "اشتراک‌گزاری"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
-msgstr ""
+msgstr "خطا درحال به اشتراک گذاشتن"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
-msgstr ""
+msgstr "خطا درحال لغو اشتراک"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
-msgstr ""
+msgstr "خطا در حال تغییر مجوز"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
-msgstr ""
+msgstr "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
-msgstr ""
+msgstr "به اشتراک گذاشته شده با شما توسط { دارنده}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
-msgstr ""
+msgstr "به اشتراک گذاشتن با"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
-msgstr ""
+msgstr "به اشتراک گذاشتن با پیوند"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
-msgstr ""
+msgstr "نگهداری کردن رمز عبور"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "گذرواژه"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "پیوند ایمیل برای شخص."
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
-msgstr ""
+msgstr "تنظیم تاریخ انقضا"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
-msgstr ""
+msgstr "تاریخ انقضا"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
-msgstr ""
+msgstr "از طریق ایمیل به اشتراک بگذارید :"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
-msgstr ""
+msgstr "کسی ÛŒØ§ÙØª نشد"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
-msgstr ""
+msgstr "اشتراک گذاری مجدد مجاز نمی باشد"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
-msgstr ""
+msgstr "به اشتراک گذاشته شده در {بخش} با {کاربر}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
-msgstr ""
+msgstr "لغو اشتراک"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
-msgstr ""
+msgstr "می توان ویرایش کرد"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
-msgstr ""
+msgstr "کنترل دسترسی"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "ایجاد"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
-msgstr ""
+msgstr "به روز"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
-msgstr ""
+msgstr "پاک کردن"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
-msgstr ""
+msgstr "به اشتراک گذاشتن"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
-msgstr ""
+msgstr "نگهداری از رمز عبور"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
-msgstr ""
+msgstr "خطا در تنظیم نکردن تاریخ انقضا "
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
-msgstr ""
+msgstr "خطا در تنظیم تاریخ انقضا"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "پسورد ابرهای شما تغییرکرد"
@@ -306,11 +402,11 @@ msgstr "شما یک نامه الکترونیکی حاوی یک لینک جهت
#: lostpassword/templates/lostpassword.php:5
msgid "Reset email send."
-msgstr ""
+msgstr "تنظیم مجدد ایمیل را Ø¨ÙØ±Ø³ØªÛŒØ¯."
#: lostpassword/templates/lostpassword.php:8
msgid "Request failed!"
-msgstr ""
+msgstr "درخواست رد شده است !"
#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39
#: templates/login.php:28
@@ -373,7 +469,7 @@ msgstr "ویرایش گروه ها"
msgid "Add"
msgstr "Ø§ÙØ²ÙˆØ¯Ù†"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "اخطار امنیتی"
@@ -381,181 +477,109 @@ msgstr "اخطار امنیتی"
msgid ""
"No secure random number generator is available, please enable the PHP "
"OpenSSL extension."
-msgstr ""
+msgstr "هیچ مولد تصادÙÛŒ امن در دسترس نیست، Ù„Ø·ÙØ§ ÙØ±Ù…ت PHP OpenSSL را ÙØ¹Ø§Ù„ نمایید."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
+msgstr "بدون وجود یک تولید کننده اعداد تصادÙÛŒ امن ØŒ یک مهاجم ممکن است این قابلیت را داشته باشد Ú©Ù‡ پیشگویی کند پسوورد های راه انداز Ú¯Ø±ÙØªÙ‡ شده Ùˆ کنترلی روی حساب کاربری شما داشته باشد ."
+
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
msgstr ""
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Ù„Ø·ÙØ§ یک <strong> شناسه برای مدیر</strong> بسازید"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "حرÙÙ‡ ای"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "پوشه اطلاعاتی"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "پایگاه داده برنامه ریزی شدند"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "Ø§Ø³ØªÙØ§Ø¯Ù‡ خواهد شد"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "شناسه پایگاه داده"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "پسورد پایگاه داده"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "نام پایگاه داده"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
-msgstr ""
+msgstr "جدول پایگاه داده"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "هاست پایگاه داده"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "اتمام نصب"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "یکشنبه"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "دوشنبه"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "سه شنبه"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "چهارشنبه"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "پنجشنبه"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "جمعه"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "شنبه"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "ژانویه"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "ÙØ¨Ø±ÛŒÙ‡"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "مارس"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "آوریل"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "می"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "ژوئن"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "جولای"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "آگوست"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "سپتامبر"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "اکتبر"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "نوامبر"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "دسامبر"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "سرویس وب تحت کنترل شما"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "خروج"
#: templates/login.php:10
msgid "Automatic logon rejected!"
-msgstr ""
+msgstr "ورود به سیستم اتوماتیک ردشد!"
#: templates/login.php:11
msgid ""
"If you did not change your password recently, your account may be "
"compromised!"
-msgstr ""
+msgstr "اگر شما اخیرا رمزعبور را تغییر نداده اید، حساب شما در معرض خطر می باشد !"
#: templates/login.php:13
msgid "Please change your password to secure your account again."
-msgstr ""
+msgstr "Ù„Ø·ÙØ§ رمز عبور خود را تغییر دهید تا مجددا حساب شما در امان باشد."
#: templates/login.php:19
msgid "Lost your password?"
msgstr "آیا گذرواژه تان را به یاد نمی آورید؟"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "بیاد آوری"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "ورود"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "شما خارج شدید"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +593,3 @@ msgstr "بعدی"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/fa/files.po b/l10n/fa/files.po
index ea5bfc082a3..ace120766b4 100644
--- a/l10n/fa/files.po
+++ b/l10n/fa/files.po
@@ -4,14 +4,15 @@
#
# Translators:
# Hossein nag <h.sname@yahoo.com>, 2012.
+# mahdi Kereshteh <miki_mika1362@yahoo.com>, 2013.
# Mohammad Dashtizadeh <mohammad@dashtizadeh.net>, 2012.
# vahid chakoshy <vchakoshy@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -23,206 +24,209 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. "
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "%s نمی تواند حرکت کند "
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "قادر به تغییر نام پرونده نیست."
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "هیچ ÙØ§ÛŒÙ„ÛŒ آپلود نشد.خطای ناشناس"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "هیچ خطایی وجود ندارد ÙØ§ÛŒÙ„ با موÙقیت بار گذاری شد"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
-msgstr ""
+msgstr "پرونده آپلود شده بیش ازدستور ماکزیمم_حجم ÙØ§ÛŒÙ„_برای آپلود در php.ini Ø§Ø³ØªÙØ§Ø¯Ù‡ کرده است."
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "حداکثر حجم مجاز برای بارگذاری از طریق HTML \nMAX_FILE_SIZE"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "مقدار Ú©Ù…ÛŒ از ÙØ§ÛŒÙ„ بارگذاری شده"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "هیچ ÙØ§ÛŒÙ„ÛŒ بارگذاری نشده"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "یک پوشه موقت گم شده است"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "نوشتن بر روی دیسک سخت ناموÙÙ‚ بود"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Ùهرست راهنما نامعتبر Ù…ÛŒ باشد."
#: appinfo/app.php:10
msgid "Files"
msgstr "ÙØ§ÛŒÙ„ ها"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "پاک کردن"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "تغییرنام"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "در انتظار"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
-msgstr ""
+msgstr "{نام _جدید} در حال حاضر وجود دارد."
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "جایگزین"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
-msgstr ""
+msgstr "پیشنهاد نام"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "لغو"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
-msgstr ""
+msgstr "{نام _جدید} جایگزین شد "
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "بازگشت"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
-msgstr ""
+msgstr "{نام_جدید} با { نام_قدیمی} جایگزین شد."
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' یک نام پرونده نامعتبر است."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "نام پرونده نمی تواند خالی باشد."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
+msgstr "نام نامعتبر ، '\\', '/', '<', '>', ':', '\"', '|', '?' و '*' مجاز نمی باشند."
+
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "در حال ساخت ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ ممکن است زمان زیادی به طول بیانجامد"
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "دانلود شما در حال آماده شدن است. در صورتیکه پرونده ها بزرگ باشند ممکن است مدتی طول بکشد."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ناتوان در بارگذاری یا ÙØ§ÛŒÙ„ یک پوشه است یا 0بایت دارد"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "خطا در بار گذاری"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "بستن"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "در انتظار"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
-msgstr ""
+msgstr "1 پرونده آپلود شد."
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
-msgstr ""
+msgstr "{ شمار } ÙØ§ÛŒÙ„ های در حال آپلود"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "بار گذاری لغو شد"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
-msgstr ""
+msgstr "آپلودکردن پرونده در حال Ù¾ÛŒØ´Ø±ÙØª است. در صورت خروج از ØµÙØ­Ù‡ آپلود لغو میگردد. "
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
-msgstr ""
+msgstr "URL نمی تواند خالی باشد."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
+msgstr "نام پوشه نامعتبر است. Ø§Ø³ØªÙØ§Ø¯Ù‡ از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است."
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "نام"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "اندازه"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "تغییر ÛŒØ§ÙØªÙ‡"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
-msgstr ""
+msgstr "1 پوشه"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
-msgstr ""
+msgstr "{ شمار} پوشه ها"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
-msgstr ""
+msgstr "1 پرونده"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
-msgstr ""
+msgstr "{ شمار } ÙØ§ÛŒÙ„ ها"
+
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "بارگذاری"
#: templates/admin.php:5
msgid "File handling"
@@ -270,38 +274,46 @@ msgstr "پوشه"
#: templates/index.php:14
msgid "From link"
-msgstr ""
+msgstr "از پیوند"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "بارگذاری"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "متوق٠کردن بار گذاری"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "اینجا هیچ چیز نیست."
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "بارگیری"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "لغو اشتراک"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "حجم بارگذاری بسیار زیاد است"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ÙØ§ÛŒÙ„ها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر ÙØ§ÛŒÙ„ php,ini میتوان این محدودیت را برطر٠کرد"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "پرونده ها در حال بازرسی هستند Ù„Ø·ÙØ§ صبر کنید"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "بازرسی کنونی"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/fa/files_encryption.po b/l10n/fa/files_encryption.po
index 74f153d436e..ca4053cf7ee 100644
--- a/l10n/fa/files_encryption.po
+++ b/l10n/fa/files_encryption.po
@@ -4,14 +4,15 @@
#
# Translators:
# <basir.jafarzadeh@gmail.com>, 2012.
+# mahdi Kereshteh <miki_mika1362@yahoo.com>, 2013.
# Mohammad Dashtizadeh <mohammad@dashtizadeh.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-15 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 08:31+0000\n"
-"Last-Translator: basir <basir.jafarzadeh@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,18 +20,22 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "رمزگذاری"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "نادیده Ú¯Ø±ÙØªÙ† ÙØ§ÛŒÙ„ های زیر برای رمز گذاری"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "هیچ‌کدام"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "ÙØ¹Ø§Ù„ کردن رمزگذاری"
diff --git a/l10n/fa/files_external.po b/l10n/fa/files_external.po
index 76d4d5289bf..075c47b4356 100644
--- a/l10n/fa/files_external.po
+++ b/l10n/fa/files_external.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# mahdi Kereshteh <miki_mika1362@yahoo.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-04 00:04+0100\n"
+"PO-Revision-Date: 2013-02-03 05:40+0000\n"
+"Last-Translator: miki_mika1362 <miki_mika1362@yahoo.com>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,11 +26,11 @@ msgstr ""
msgid "Error configuring Dropbox storage"
msgstr ""
-#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41
msgid "Grant access"
msgstr ""
-#: js/dropbox.js:73 js/google.js:72
+#: js/dropbox.js:73 js/google.js:73
msgid "Fill out all required fields"
msgstr ""
@@ -37,17 +38,17 @@ msgstr ""
msgid "Please provide a valid Dropbox app key and secret."
msgstr ""
-#: js/google.js:26 js/google.js:73 js/google.js:78
+#: js/google.js:26 js/google.js:74 js/google.js:79
msgid "Error configuring Google Drive storage"
msgstr ""
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
msgstr ""
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
@@ -56,7 +57,7 @@ msgstr ""
#: templates/settings.php:3
msgid "External Storage"
-msgstr ""
+msgstr "Ø­Ø§ÙØ¸Ù‡ خارجی"
#: templates/settings.php:8 templates/settings.php:22
msgid "Mount point"
@@ -68,15 +69,15 @@ msgstr ""
#: templates/settings.php:10
msgid "Configuration"
-msgstr ""
+msgstr "پیکربندی"
#: templates/settings.php:11
msgid "Options"
-msgstr ""
+msgstr "تنظیمات"
#: templates/settings.php:12
msgid "Applicable"
-msgstr ""
+msgstr "قابل اجرا"
#: templates/settings.php:27
msgid "Add mount point"
@@ -99,22 +100,22 @@ msgid "Users"
msgstr "کاربران"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "حذÙ"
#: templates/settings.php:124
msgid "Enable User External Storage"
-msgstr ""
+msgstr "ÙØ¹Ø§Ù„ سازی Ø­Ø§ÙØ¸Ù‡ خارجی کاربر"
#: templates/settings.php:125
msgid "Allow users to mount their own external storage"
msgstr ""
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr ""
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr ""
diff --git a/l10n/fa/files_sharing.po b/l10n/fa/files_sharing.po
index f7b3799df12..e72b1ce1dc6 100644
--- a/l10n/fa/files_sharing.po
+++ b/l10n/fa/files_sharing.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Amir Reza Asadi <amirreza.asadi@live.com>, 2013.
# Mohammad Dashtizadeh <mohammad@dashtizadeh.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-03 00:04+0100\n"
+"PO-Revision-Date: 2013-02-02 11:20+0000\n"
+"Last-Translator: Amir Reza Asadi <amirreza.asadi@live.com>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,30 +21,30 @@ msgstr ""
#: templates/authenticate.php:4
msgid "Password"
-msgstr ""
+msgstr "گذرواژه"
#: templates/authenticate.php:6
msgid "Submit"
-msgstr ""
+msgstr "ثبت"
#: templates/public.php:9
#, php-format
msgid "%s shared the folder %s with you"
-msgstr ""
+msgstr "%sپوشه %s را با شما به اشتراک گذاشت"
#: templates/public.php:11
#, php-format
msgid "%s shared the file %s with you"
-msgstr ""
+msgstr "%sÙØ§ÛŒÙ„ %s را با شما به اشتراک گذاشت"
#: templates/public.php:14 templates/public.php:30
msgid "Download"
-msgstr ""
+msgstr "دانلود"
#: templates/public.php:29
msgid "No preview available for"
-msgstr ""
+msgstr "هیچگونه پیش نمایشی موجود نیست"
-#: templates/public.php:37
+#: templates/public.php:35
msgid "web services under your control"
-msgstr ""
+msgstr "سرویس های تحت وب در کنترل شما"
diff --git a/l10n/fa/files_trashbin.po b/l10n/fa/files_trashbin.po
new file mode 100644
index 00000000000..a9bffbf81b1
--- /dev/null
+++ b/l10n/fa/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fa\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "نام"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 پوشه"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{ شمار} پوشه ها"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 پرونده"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{ شمار } ÙØ§ÛŒÙ„ ها"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "بازیابی"
diff --git a/l10n/fa/files_versions.po b/l10n/fa/files_versions.po
index b7da17a8178..a2a96bc6ec1 100644
--- a/l10n/fa/files_versions.po
+++ b/l10n/fa/files_versions.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# mahdi Kereshteh <miki_mika1362@yahoo.com>, 2013.
# Mohammad Dashtizadeh <mohammad@dashtizadeh.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,20 +19,43 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "انقضای تمامی نسخه‌ها"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
+msgstr "تاریخچه"
+
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
@@ -40,4 +64,4 @@ msgstr ""
#: templates/settings.php:4
msgid "Enable"
-msgstr ""
+msgstr "ÙØ¹Ø§Ù„"
diff --git a/l10n/fa/lib.po b/l10n/fa/lib.po
index 44408cc66f7..5454ea40b1e 100644
--- a/l10n/fa/lib.po
+++ b/l10n/fa/lib.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Amir Reza Asadi <amirreza.asadi@live.com>, 2013.
# Mohammad Dashtizadeh <mohammad@dashtizadeh.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -18,51 +19,55 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "راه‌نما"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "شخصی"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "تنظیمات"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "کاربران"
-#: app.php:309
+#: app.php:363
msgid "Apps"
-msgstr ""
+msgstr " برنامه ها"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "مدیر"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
-msgstr ""
+msgstr "دانلود به صورت ÙØ´Ø±Ø¯Ù‡ غیر ÙØ¹Ø§Ù„ است"
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
-msgstr ""
+msgstr "ÙØ§ÛŒÙ„ ها باید به صورت یکی یکی دانلود شوند"
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
-msgstr ""
+msgstr "بازگشت به ÙØ§ÛŒÙ„ ها"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
+msgstr "ÙØ§ÛŒÙ„ های انتخاب شده بزرگتر از آن هستند Ú©Ù‡ بتوان یک ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ تولید کرد"
+
+#: helper.php:226
+msgid "couldn't be determined"
msgstr ""
#: json.php:28
msgid "Application is not enabled"
-msgstr ""
+msgstr "برنامه ÙØ¹Ø§Ù„ نشده است"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "خطا در اعتبار سنجی"
@@ -80,57 +85,154 @@ msgstr "متن"
#: search/provider/file.php:29
msgid "Images"
+msgstr "تصاویر"
+
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
msgstr ""
-#: template.php:103
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "ثانیه‌ها پیش"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 دقیقه پیش"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d دقیقه پیش"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
-msgstr ""
+msgstr "1 ساعت پیش"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
-msgstr ""
+msgstr "%d ساعت پیش"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "امروز"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "دیروز"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
-msgstr ""
+msgstr "%d روز پیش"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "ماه قبل"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
-msgstr ""
+msgstr "%dماه پیش"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "سال قبل"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "سال‌های قبل"
@@ -150,4 +252,4 @@ msgstr ""
#: vcategories.php:188 vcategories.php:249
#, php-format
msgid "Could not find category \"%s\""
-msgstr ""
+msgstr "دسته بندی %s ÛŒØ§ÙØª نشد"
diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po
index 55f1ea97204..60d6c3d51da 100644
--- a/l10n/fa/settings.po
+++ b/l10n/fa/settings.po
@@ -5,14 +5,15 @@
# Translators:
# <basir.jafarzadeh@gmail.com>, 2012.
# Hossein nag <h.sname@yahoo.com>, 2012.
+# mahdi Kereshteh <miki_mika1362@yahoo.com>, 2013.
# <tamass4116@gmail.com>, 2012.
# vahid chakoshy <vchakoshy@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -25,15 +26,24 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "قادر به بارگذاری لیست از ÙØ±ÙˆØ´Ú¯Ø§Ù‡ اپ نیستم"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "خطا در اعتبار سنجی"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "امکان تغییر نام نمایشی شما وجود ندارد"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
-msgstr ""
+msgstr "این گروه در حال حاضر موجود است"
#: ajax/creategroup.php:19
msgid "Unable to add group"
-msgstr ""
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† گروه امکان پذیر نیست"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -45,33 +55,25 @@ msgstr "ایمیل ذخیره شد"
msgid "Invalid email"
msgstr "ایمیل غیر قابل قبول"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID تغییر کرد"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "درخواست غیر قابل قبول"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
-msgstr ""
-
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "خطا در اعتبار سنجی"
+msgstr "حذ٠گروه امکان پذیر نیست"
#: ajax/removeuser.php:24
msgid "Unable to delete user"
-msgstr ""
+msgstr "حذ٠کاربر امکان پذیر نیست"
#: ajax/setlanguage.php:15
msgid "Language changed"
msgstr "زبان تغییر کرد"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "درخواست غیر قابل قبول"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
-msgstr ""
+msgstr "مدیران نمی توانند خود را از گروه مدیریت حذ٠کنند"
#: ajax/togglegroups.php:28
#, php-format
@@ -83,19 +85,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "ØºÛŒØ±ÙØ¹Ø§Ù„"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "ÙØ¹Ø§Ù„"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Ù„Ø·ÙØ§ صبر کنید ..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "در حال بروز رسانی..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "خطا"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "بروز رسانی انجام شد"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "درحال ذخیره ..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -105,27 +135,31 @@ msgstr "برنامه خود را Ø¨ÛŒØ§ÙØ²Ø§ÛŒÛŒØ¯"
#: templates/apps.php:11
msgid "More Apps"
-msgstr ""
+msgstr "برنامه های بیشتر"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "یک برنامه انتخاب کنید"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "ØµÙØ­Ù‡ این اٌپ را در apps.owncloud.com ببینید"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "به روز رسانی"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "مستندات کاربر"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "مستندات مدیر"
#: templates/help.php:6
msgid "Online Documentation"
@@ -133,7 +167,7 @@ msgstr ""
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "انجمن"
#: templates/help.php:9
msgid "Bugtracker"
@@ -141,90 +175,94 @@ msgstr ""
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "پشتیبانی تجاری"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "مشتریان"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "گذرواژه"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "رمز عبور شما تغییر ÛŒØ§ÙØª"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "ناتوان در تغییر گذرواژه"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "گذرواژه کنونی"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "گذرواژه جدید"
-#: templates/personal.php:26
-msgid "show"
-msgstr "نمایش"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "تغییر گذر واژه"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "نام نمایشی"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "نام نمایشی شما تغییر ÛŒØ§ÙØª"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "امکان تغییر نام نمایشی شما وجود ندارد"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "تغییر نام نمایشی"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "پست الکترونیکی"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "پست الکترونیکی شما"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "پست الکترونیکی را پرکنید تا بازیابی گذرواژه ÙØ¹Ø§Ù„ شود"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "زبان"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "به ترجمه آن کمک کنید"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "نسخه"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -234,11 +272,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "نام"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "نام کاربری"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "گروه ها"
@@ -248,28 +286,36 @@ msgstr "ایجاد کردن"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "ذخیره سازی پیش ÙØ±Ø¶"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "نامحدود"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "سایر"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
-msgstr ""
+msgstr "Ø­Ø§ÙØ¸Ù‡"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "تغییر نام نمایشی"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "تنظیم کلمه عبور جدید"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "پیش ÙØ±Ø¶"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "پاک کردن"
diff --git a/l10n/fa/user_ldap.po b/l10n/fa/user_ldap.po
index f7e8c607e27..4297459853f 100644
--- a/l10n/fa/user_ldap.po
+++ b/l10n/fa/user_ldap.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# mahdi Kereshteh <miki_mika1362@yahoo.com>, 2013.
# Mohammad Dashtizadeh <mohammad@dashtizadeh.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +19,58 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "حذ٠کردن انجام نشد"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "آیا تنظیمات ذخیره شود ؟"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +80,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "میزبانی"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "رمز عبور"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
+msgstr "درگاه"
+
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:37
+msgid "Disable Main Server"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "راه‌نما"
diff --git a/l10n/fa/user_webdavauth.po b/l10n/fa/user_webdavauth.po
index 2987a7b6bdb..e4088da32dd 100644
--- a/l10n/fa/user_webdavauth.po
+++ b/l10n/fa/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po
index 8824e25a493..fef4938627f 100644
--- a/l10n/fi_FI/core.po
+++ b/l10n/fi_FI/core.po
@@ -5,7 +5,7 @@
# Translators:
# <ari.takalo@iki.fi>, 2012.
# Jesse Jaara <jesse.jaara@gmail.com>, 2012.
-# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012-2013.
# Johannes Korpela <>, 2012.
# Pekka Sutela <pekka.sutela@gmail.com>, 2012.
# <tehoratopato@gmail.com>, 2012.
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
@@ -24,29 +24,29 @@ msgstr ""
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "Käyttäjä %s jakoi tiedoston kanssasi"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "Käyttäjä %s jakoi kansion kanssasi"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "Käyttäjä %s jakoi tiedoston \"%s\" kanssasi. Se on ladattavissa täältä: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "Käyttäjä %s jakoi kansion \"%s\" kanssasi. Se on ladattavissa täältä: %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -57,8 +57,9 @@ msgid "No category to add?"
msgstr "Ei lisättävää luokkaa?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Tämä luokka on jo olemassa: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -75,7 +76,7 @@ msgstr ""
#: ajax/vcategories/addToFavorites.php:35
#, php-format
msgid "Error adding %s to favorites."
-msgstr ""
+msgstr "Virhe lisätessä kohdetta %s suosikkeihin."
#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
msgid "No categories selected for deletion."
@@ -84,61 +85,137 @@ msgstr "Luokkia ei valittu poistettavaksi."
#: ajax/vcategories/removeFromFavorites.php:35
#, php-format
msgid "Error removing %s from favorites."
-msgstr ""
+msgstr "Virhe poistaessa kohdetta %s suosikeista."
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Sunnuntai"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Maanantai"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Tiistai"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Keskiviikko"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Torstai"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Perjantai"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Lauantai"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Tammikuu"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Helmikuu"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Maaliskuu"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Huhtikuu"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Toukokuu"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Kesäkuu"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Heinäkuu"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Elokuu"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Syyskuu"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:33
+msgid "October"
+msgstr "Lokakuu"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Marraskuu"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Joulukuu"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Asetukset"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "sekuntia sitten"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minuutti sitten"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} minuuttia sitten"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 tunti sitten"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} tuntia sitten"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "tänään"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "eilen"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} päivää sitten"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "viime kuussa"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} kuukautta sitten"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "kuukautta sitten"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "viime vuonna"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "vuotta sitten"
@@ -168,8 +245,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Virhe"
@@ -181,123 +258,141 @@ msgstr "Sovelluksen nimeä ei ole määritelty."
msgid "The required file {file} is not installed!"
msgstr "Vaadittua tiedostoa {file} ei ole asennettu!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Jaa"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Virhe jaettaessa"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Virhe jakoa peruttaessa"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Virhe oikeuksia muuttaessa"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
-msgstr ""
+msgstr "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
-msgstr ""
+msgstr "Jaettu kanssasi käyttäjän {owner} toimesta"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
-msgstr ""
+msgstr "Jaa"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Jaa linkillä"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Suojaa salasanalla"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Salasana"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Lähetä linkki sähköpostitse"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Lähetä"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Aseta päättymispäivä"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Päättymispäivä"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Jaa sähköpostilla:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Henkilöitä ei löytynyt"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Jakaminen uudelleen ei ole salittu"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Peru jakaminen"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "voi muokata"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "Pääsyn hallinta"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "luo"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "päivitä"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "poista"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "jaa"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Salasanasuojattu"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Virhe purettaessa eräpäivää"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Virhe päättymispäivää asettaessa"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Lähetetään..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Sähköposti lähetetty"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Päivitys epäonnistui. Ilmoita ongelmasta <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud-yhteisölle</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud-salasanan nollaus"
@@ -312,7 +407,7 @@ msgstr "Saat sähköpostitse linkin nollataksesi salasanan."
#: lostpassword/templates/lostpassword.php:5
msgid "Reset email send."
-msgstr ""
+msgstr "Salasanan nollausviesti lähetetty."
#: lostpassword/templates/lostpassword.php:8
msgid "Request failed!"
@@ -379,7 +474,7 @@ msgstr "Muokkaa luokkia"
msgid "Add"
msgstr "Lisää"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Turvallisuusvaroitus"
@@ -389,147 +484,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Data-kansio ja tiedostot ovat ehkä saavutettavissa Internetistä. .htaccess-tiedosto, jolla kontrolloidaan pääsyä, ei toimi. Suosittelemme, että muutat web-palvelimesi asetukset niin ettei data-kansio ole enää pääsyä tai siirrät data-kansion pois web-palvelimen tiedostojen juuresta."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Luo <strong>ylläpitäjän tunnus</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Lisäasetukset"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datakansio"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Muokkaa tietokantaa"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "käytetään"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Tietokannan käyttäjä"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Tietokannan salasana"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Tietokannan nimi"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Tietokannan taulukkotila"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Tietokantapalvelin"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Viimeistele asennus"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Sunnuntai"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Maanantai"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Tiistai"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Keskiviikko"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Torstai"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Perjantai"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Lauantai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Tammikuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Helmikuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Maaliskuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Huhtikuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Toukokuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Kesäkuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Heinäkuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Elokuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Syyskuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Lokakuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Marraskuu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Joulukuu"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "verkkopalvelut hallinnassasi"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Kirjaudu ulos"
@@ -551,17 +574,17 @@ msgstr "Vaihda salasanasi suojataksesi tilisi uudelleen."
msgid "Lost your password?"
msgstr "Unohditko salasanasi?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "muista"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Kirjaudu sisään"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Olet kirjautunut ulos."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -574,18 +597,4 @@ msgstr "seuraava"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Turvallisuusvaroitus!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Vahvista salasanasi. <br/>Turvallisuussyistä sinulta saatetaan ajoittain kysyä salasanasi uudelleen."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Vahvista"
+msgstr "Päivitetään ownCloud versioon %s, tämä saattaa kestää hetken."
diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po
index bb2f0da1820..cbc9351025f 100644
--- a/l10n/fi_FI/files.po
+++ b/l10n/fi_FI/files.po
@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 10:40+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,57 +25,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Kohteen %s siirto ei onnistunut"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Tiedoston nimeäminen uudelleen ei onnistunut"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Tiedostoa ei lähetetty. Tuntematon virhe"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Ei virheitä, tiedosto lähetettiin onnistuneesti"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Lähetetty tiedosto ylittää HTML-lomakkeessa määritetyn MAX_FILE_SIZE-arvon ylärajan"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Tiedoston lähetys onnistui vain osittain"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Yhtäkään tiedostoa ei lähetetty"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Väliaikaiskansiota ei ole olemassa"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Levylle kirjoitus epäonnistui"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Tilaa ei ole riittävästi"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Tallennustilaa ei ole riittävästi käytettävissä"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Virheellinen kansio."
@@ -83,149 +83,152 @@ msgstr "Virheellinen kansio."
msgid "Files"
msgstr "Tiedostot"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Peru jakaminen"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Poista pysyvästi"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Poista"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Nimeä uudelleen"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Odottaa"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} on jo olemassa"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "korvaa"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "ehdota nimeä"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "peru"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "kumoa"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "suorita poistotoiminto"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' on virheellinen nimi tiedostolle."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Tiedoston nimi ei voi olla tyhjä."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Virheellinen nimi, merkit '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' eivät ole sallittuja."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "luodaan ZIP-tiedostoa, tämä saattaa kestää hetken."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Tallennustila on melkein loppu ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot ovat suuria kooltaan."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Lähetysvirhe."
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Sulje"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Odottaa"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Lähetys peruttu."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "Verkko-osoite ei voi olla tyhjä"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Nimi"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Koko"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Muutettu"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 kansio"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} kansiota"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 tiedosto"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} tiedostoa"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Lähetä"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Tiedostonhallinta"
@@ -274,36 +277,44 @@ msgstr "Kansio"
msgid "From link"
msgstr "Linkistä"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Lähetä"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Roskakori"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Peru lähetys"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Täällä ei ole mitään. Lähetä tänne jotakin!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Lataa"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Peru jakaminen"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Lähetettävä tiedosto on liian suuri"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Tiedostoja tarkistetaan, odota hetki."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Tämänhetkinen tutkinta"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Päivitetään tiedostojärjestelmän välimuistia..."
diff --git a/l10n/fi_FI/files_encryption.po b/l10n/fi_FI/files_encryption.po
index 89ad916e382..00e3d63dbb3 100644
--- a/l10n/fi_FI/files_encryption.po
+++ b/l10n/fi_FI/files_encryption.po
@@ -3,33 +3,37 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-17 00:44+0200\n"
-"PO-Revision-Date: 2012-08-16 10:56+0000\n"
-"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Salaus"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Jätä seuraavat tiedostotyypit salaamatta"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Ei mitään"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Käytä salausta"
diff --git a/l10n/fi_FI/files_external.po b/l10n/fi_FI/files_external.po
index c40ca823386..7b2a88bd1b2 100644
--- a/l10n/fi_FI/files_external.po
+++ b/l10n/fi_FI/files_external.po
@@ -4,15 +4,15 @@
#
# Translators:
# <ari.takalo@iki.fi>, 2012.
-# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012-2013.
# <tehoratopato@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-03 00:04+0100\n"
+"PO-Revision-Date: 2013-02-02 14:01+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -28,11 +28,11 @@ msgstr "Pääsy sallittu"
msgid "Error configuring Dropbox storage"
msgstr "Virhe Dropbox levyn asetuksia tehtäessä"
-#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41
msgid "Grant access"
msgstr "Salli pääsy"
-#: js/dropbox.js:73 js/google.js:72
+#: js/dropbox.js:73 js/google.js:73
msgid "Fill out all required fields"
msgstr "Täytä kaikki vaaditut kentät"
@@ -40,22 +40,22 @@ msgstr "Täytä kaikki vaaditut kentät"
msgid "Please provide a valid Dropbox app key and secret."
msgstr ""
-#: js/google.js:26 js/google.js:73 js/google.js:78
+#: js/google.js:26 js/google.js:74 js/google.js:79
msgid "Error configuring Google Drive storage"
msgstr "Virhe Google Drive levyn asetuksia tehtäessä"
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Varoitus:</b> \"smbclient\" ei ole asennettuna. CIFS-/SMB-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan smbclient."
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
"install it."
-msgstr ""
+msgstr "<b>Varoitus:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. FTP-jakojen liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön."
#: templates/settings.php:3
msgid "External Storage"
@@ -102,7 +102,7 @@ msgid "Users"
msgstr "Käyttäjät"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "Poista"
@@ -114,10 +114,10 @@ msgstr "Ota käyttöön ulkopuoliset tallennuspaikat"
msgid "Allow users to mount their own external storage"
msgstr "Salli käyttäjien liittää omia erillisiä tallennusvälineitä"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr "SSL-juurivarmenteet"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr "Tuo juurivarmenne"
diff --git a/l10n/fi_FI/files_trashbin.po b/l10n/fi_FI/files_trashbin.po
new file mode 100644
index 00000000000..27afca0a85b
--- /dev/null
+++ b/l10n/fi_FI/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "suorita palautustoiminto"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nimi"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Poistettu"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 kansio"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} kansiota"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 tiedosto"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} tiedostoa"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Tyhjää täynnä! Roskakorissa ei ole mitään."
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Palauta"
diff --git a/l10n/fi_FI/files_versions.po b/l10n/fi_FI/files_versions.po
index ab692d6056c..f8ce72e1e07 100644
--- a/l10n/fi_FI/files_versions.po
+++ b/l10n/fi_FI/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-27 02:01+0200\n"
-"PO-Revision-Date: 2012-09-26 12:22+0000\n"
-"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Vanhenna kaikki versiot"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historia"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versiot"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Tämä poistaa kaikki tiedostojesi olemassa olevat varmuuskopioversiot"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/fi_FI/lib.po b/l10n/fi_FI/lib.po
index 0669c281cf6..8f723746fea 100644
--- a/l10n/fi_FI/lib.po
+++ b/l10n/fi_FI/lib.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-15 20:58+0000\n"
-"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Ohje"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Henkilökohtainen"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Asetukset"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Käyttäjät"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Sovellukset"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Ylläpitäjä"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP-lataus on poistettu käytöstä."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Tiedostot on ladattava yksittäin."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Takaisin tiedostoihin"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Valitut tiedostot ovat liian suurikokoisia mahtuakseen zip-tiedostoon."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "ei voitu määrittää"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Sovellusta ei ole otettu käyttöön"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Todennusvirhe"
@@ -82,55 +86,152 @@ msgstr "Teksti"
msgid "Images"
msgstr "Kuvat"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Lue tarkasti <a href='%s'>asennusohjeet</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "sekuntia sitten"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minuutti sitten"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minuuttia sitten"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 tunti sitten"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d tuntia sitten"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "tänään"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "eilen"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d päivää sitten"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "viime kuussa"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d kuukautta sitten"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "viime vuonna"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "vuotta sitten"
diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po
index 0b52b4e2f60..cf2066d2f0b 100644
--- a/l10n/fi_FI/settings.po
+++ b/l10n/fi_FI/settings.po
@@ -4,14 +4,14 @@
#
# Translators:
# Jesse Jaara <jesse.jaara@gmail.com>, 2012.
-# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012-2013.
# <tehoratopato@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Ei pystytä lataamaan listaa sovellusvarastosta (App Store)"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Todennusvirhe"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Näyttönimen muuttaminen epäonnistui"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Ryhmä on jo olemassa"
@@ -32,7 +41,7 @@ msgstr "Ryhmä on jo olemassa"
msgid "Unable to add group"
msgstr "Ryhmän lisäys epäonnistui"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Sovelluksen käyttöönotto epäonnistui."
@@ -44,22 +53,10 @@ msgstr "Sähköposti tallennettu"
msgid "Invalid email"
msgstr "Virheellinen sähköposti"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID on vaihdettu"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Virheellinen pyyntö"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ryhmän poisto epäonnistui"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Todennusvirhe"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Käyttäjän poisto epäonnistui"
@@ -68,6 +65,10 @@ msgstr "Käyttäjän poisto epäonnistui"
msgid "Language changed"
msgstr "Kieli on vaihdettu"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Virheellinen pyyntö"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä"
@@ -82,19 +83,47 @@ msgstr "Käyttäjän tai ryhmän %s lisääminen ei onnistu"
msgid "Unable to remove user from group %s"
msgstr "Käyttäjän poistaminen ryhmästä %s ei onnistu"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Sovelluksen päivitys epäonnistui."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Päivitä versioon {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Poista käytöstä"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Käytä"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Odota hetki..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Päivitetään..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Virhe sovellusta päivittäessä"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Virhe"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Päivitetty"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Tallennetaan..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "_kielen_nimi_"
@@ -106,18 +135,22 @@ msgstr "Lisää sovelluksesi"
msgid "More Apps"
msgstr "Lisää sovelluksia"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Valitse sovellus"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Katso sovellussivu osoitteessa apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-lisensoija <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Päivitä"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Käyttäjäohjeistus"
@@ -147,83 +180,87 @@ msgstr "Kaupallinen tuki"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Asiakkaat"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Lataa työpöytäsovelluksia"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Lataa Android-sovellus"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Lataa iOS-sovellus"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Salasana"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Salasanasi vaihdettiin"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Salasanaasi ei voitu vaihtaa"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Nykyinen salasana"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Uusi salasana"
-#: templates/personal.php:26
-msgid "show"
-msgstr "näytä"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Vaihda salasana"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Näyttönimi"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Näyttönimesi muutettiin"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Näyttönimen muuttaminen epäonnistui"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Muuta näyttönimeä"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Sähköposti"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Sähköpostiosoitteesi"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista palauttaa"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Kieli"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Auta kääntämisessä"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Käytä tätä osoitetta yhdistäessäsi ownCloudiisi tiedostonhallintaa käyttäen"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Versio"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nimi"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Kirjautumisnimi"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Ryhmät"
@@ -249,26 +286,34 @@ msgstr "Luo"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Rajoittamaton"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Muu"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Ryhmän ylläpitäjä"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "vaihda näyttönimi"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "aseta uusi salasana"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "Oletus"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Poista"
diff --git a/l10n/fi_FI/user_ldap.po b/l10n/fi_FI/user_ldap.po
index 6f821f095c1..14247957dd3 100644
--- a/l10n/fi_FI/user_ldap.po
+++ b/l10n/fi_FI/user_ldap.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
@@ -20,6 +20,58 @@ msgstr ""
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Poisto epäonnistui"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -29,158 +81,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Isäntä"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Voit jättää protokollan määrittämättä, paitsi kun vaadit SSL:ää. Aloita silloin ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Oletus DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset'-välilehdeltä "
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Käyttäjän DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "Asiakasohjelman DN, jolla yhdistäminen tehdään, ts. uid=agent,dc=example,dc=com. Mahdollistaaksesi anonyymin yhteyden, jätä DN ja salasana tyhjäksi."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Salasana"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi "
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Login suodatus"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Määrittelee käytettävän suodattimen, kun sisäänkirjautumista yritetään. %%uid korvaa sisäänkirjautumisessa käyttäjätunnuksen."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "käytä %%uid paikanvaraajaa, ts. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Käyttäjien suodatus"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Määrittelee käytettävän suodattimen, kun käyttäjiä haetaan. "
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "ilman paikanvaraustermiä, ts. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Ryhmien suodatus"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Määrittelee käytettävän suodattimen, kun ryhmiä haetaan. "
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "ilman paikanvaraustermiä, ts. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Portti"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Oletuskäyttäjäpuu"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Ryhmien juuri"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Ryhmän ja jäsenen assosiaatio (yhteys)"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Käytä TLS:ää"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Älä käytä SSL-yhteyttä varten, se epäonnistuu. "
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Kirjainkoosta piittamaton LDAP-palvelin (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Poista käytöstä SSL-varmenteen vahvistus"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Jos yhteys toimii vain tällä valinnalla, siirrä LDAP-palvelimen SSL-varmenne ownCloud-palvelimellesi."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Ei suositella, käytä vain testausta varten."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "sekunneissa. Muutos tyhjentää välimuistin."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Käyttäjän näytettävän nimen kenttä"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "LDAP-attribuutti, jota käytetään käyttäjän ownCloud-käyttäjänimenä "
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Oletuskäyttäjäpuu"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Ryhmän \"näytettävä nimi\"-kenttä"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "LDAP-attribuutti, jota käytetään luomaan ryhmän ownCloud-nimi"
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Ryhmien juuri"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Ryhmän ja jäsenen assosiaatio (yhteys)"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "tavuissa"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "sekunneissa. Muutos tyhjentää välimuistin."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Jätä tyhjäksi käyttäjänimi (oletusasetus). Muutoin anna LDAP/AD-atribuutti."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Ohje"
diff --git a/l10n/fi_FI/user_webdavauth.po b/l10n/fi_FI/user_webdavauth.po
index 1bf07546c14..c42c6d288e6 100644
--- a/l10n/fi_FI/user_webdavauth.po
+++ b/l10n/fi_FI/user_webdavauth.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index 0807b8ed65a..62f0878214d 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -4,7 +4,9 @@
#
# Translators:
# Christophe Lherieau <skimpax@gmail.com>, 2012-2013.
+# David Basquin <dba@alternalease.fr>, 2013.
# <dba@alternalease.fr>, 2013.
+# Fabian Lemaître <ptit.boogy@gmail.com>, 2013.
# <fkhannouf@me.com>, 2012.
# <florentin.lemoal@gmail.com>, 2012.
# Guillaume Paumier <guillom.pom@gmail.com>, 2012.
@@ -12,15 +14,16 @@
# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
# <nathaplop@gmail.com>, 2012.
# <nicolas@shivaserv.fr>, 2012.
+# Robert Di Rosa <>, 2013.
# <rom1dep@gmail.com>, 2011.
-# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 15:29+0000\n"
-"Last-Translator: Christophe Lherieau <skimpax@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:00+0000\n"
+"Last-Translator: Robert Di Rosa <>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -28,24 +31,24 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "L'utilisateur %s a partagé un fichier avec vous"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "L'utilsateur %s a partagé un dossier avec vous"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "L'utilisateur %s a partagé le fichier \"%s\" avec vous. Vous pouvez le télécharger ici : %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -61,8 +64,9 @@ msgid "No category to add?"
msgstr "Pas de catégorie à ajouter ?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Cette catégorie existe déjà : "
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Cette catégorie existe déjà : %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -90,59 +94,135 @@ msgstr "Aucune catégorie sélectionnée pour suppression"
msgid "Error removing %s from favorites."
msgstr "Erreur lors de la suppression de %s des favoris."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Dimanche"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Lundi"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Mardi"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Mercredi"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Jeudi"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Vendredi"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Samedi"
+
+#: js/config.php:33
+msgid "January"
+msgstr "janvier"
+
+#: js/config.php:33
+msgid "February"
+msgstr "février"
+
+#: js/config.php:33
+msgid "March"
+msgstr "mars"
+
+#: js/config.php:33
+msgid "April"
+msgstr "avril"
+
+#: js/config.php:33
+msgid "May"
+msgstr "mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "juin"
+
+#: js/config.php:33
+msgid "July"
+msgstr "juillet"
+
+#: js/config.php:33
+msgid "August"
+msgstr "août"
+
+#: js/config.php:33
+msgid "September"
+msgstr "septembre"
+
+#: js/config.php:33
+msgid "October"
+msgstr "octobre"
+
+#: js/config.php:33
+msgid "November"
+msgstr "novembre"
+
+#: js/config.php:33
+msgid "December"
+msgstr "décembre"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Paramètres"
-#: js/js.js:704
+#: js/js.js:767
msgid "seconds ago"
msgstr "il y a quelques secondes"
-#: js/js.js:705
+#: js/js.js:768
msgid "1 minute ago"
msgstr "il y a une minute"
-#: js/js.js:706
+#: js/js.js:769
msgid "{minutes} minutes ago"
msgstr "il y a {minutes} minutes"
-#: js/js.js:707
+#: js/js.js:770
msgid "1 hour ago"
msgstr "Il y a une heure"
-#: js/js.js:708
+#: js/js.js:771
msgid "{hours} hours ago"
msgstr "Il y a {hours} heures"
-#: js/js.js:709
+#: js/js.js:772
msgid "today"
msgstr "aujourd'hui"
-#: js/js.js:710
+#: js/js.js:773
msgid "yesterday"
msgstr "hier"
-#: js/js.js:711
+#: js/js.js:774
msgid "{days} days ago"
msgstr "il y a {days} jours"
-#: js/js.js:712
+#: js/js.js:775
msgid "last month"
msgstr "le mois dernier"
-#: js/js.js:713
+#: js/js.js:776
msgid "{months} months ago"
msgstr "Il y a {months} mois"
-#: js/js.js:714
+#: js/js.js:777
msgid "months ago"
msgstr "il y a plusieurs mois"
-#: js/js.js:715
+#: js/js.js:778
msgid "last year"
msgstr "l'année dernière"
-#: js/js.js:716
+#: js/js.js:779
msgid "years ago"
msgstr "il y a plusieurs années"
@@ -172,8 +252,8 @@ msgid "The object type is not specified."
msgstr "Le type d'objet n'est pas spécifié."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Erreur"
@@ -185,123 +265,141 @@ msgstr "Le nom de l'application n'est pas spécifié."
msgid "The required file {file} is not installed!"
msgstr "Le fichier requis {file} n'est pas installé !"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Partager"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Partagé"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Erreur lors de la mise en partage"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Erreur lors de l'annulation du partage"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Erreur lors du changement des permissions"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Partagé par {owner} avec vous et le groupe {group}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Partagé avec vous par {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Partager avec"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Partager via lien"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Protéger par un mot de passe"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Mot de passe"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Envoyez le lien par email"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Envoyer"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Spécifier la date d'expiration"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Date d'expiration"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Partager via e-mail :"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Aucun utilisateur trouvé"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Le repartage n'est pas autorisé"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Partagé dans {item} avec {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Ne plus partager"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "édition autorisée"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "contrôle des accès"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "créer"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "mettre à jour"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "supprimer"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "partager"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Protégé par un mot de passe"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Une erreur est survenue pendant la suppression de la date d'expiration"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Erreur lors de la spécification de la date d'expiration"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "En cours d'envoi ..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "Email envoyé"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "La mise à jour a échoué. Veuillez signaler ce problème à la <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">communauté ownCloud</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "La mise à jour a réussi. Vous êtes redirigé maintenant vers ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Réinitialisation de votre mot de passe Owncloud"
@@ -383,7 +481,7 @@ msgstr "Modifier les catégories"
msgid "Add"
msgstr "Ajouter"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Avertissement de sécurité"
@@ -393,147 +491,75 @@ msgid ""
"OpenSSL extension."
msgstr "Aucun générateur de nombre aléatoire sécurisé n'est disponible, veuillez activer l'extension PHP OpenSSL"
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Sans générateur de nombre aléatoire sécurisé, un attaquant peut être en mesure de prédire les jetons de réinitialisation du mot de passe, et ainsi prendre le contrôle de votre compte utilisateur."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "Votre répertoire data est certainement accessible depuis l'internet car le fichier .htaccess ne semble pas fonctionner"
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Votre dossier data et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess fourni par ownCloud ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de manière à ce que le dossier data ne soit plus accessible ou bien de déplacer le dossier data en dehors du dossier racine des documents du serveur web."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Créer un <strong>compte administrateur</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avancé"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Répertoire des données"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configurer la base de données"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "sera utilisé"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Utilisateur pour la base de données"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Mot de passe de la base de données"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nom de la base de données"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Tablespaces de la base de données"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Serveur de la base de données"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Terminer l'installation"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Dimanche"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Lundi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Mardi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Mercredi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Jeudi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Vendredi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Samedi"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "janvier"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "février"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "mars"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "avril"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "juin"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "juillet"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "août"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "septembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "octobre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "novembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "décembre"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "services web sous votre contrôle"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Se déconnecter"
@@ -555,17 +581,17 @@ msgstr "Veuillez changer votre mot de passe pour sécuriser à nouveau votre com
msgid "Lost your password?"
msgstr "Mot de passe perdu ?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "se souvenir de moi"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Connexion"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Vous êtes désormais déconnecté."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Logins alternatifs"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -579,17 +605,3 @@ msgstr "suivant"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "Mise à jour en cours d'ownCloud vers la version %s, cela peut prendre du temps."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Alerte de sécurité !"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Veuillez vérifier votre mot de passe. <br/>Par sécurité il vous sera occasionnellement demandé d'entrer votre mot de passe de nouveau."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Vérification"
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index 3230fbb0c6d..1f984617ca5 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -3,8 +3,10 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Cédric MARTIN <sid50.martin@gmail.com>, 2013.
# Christophe Lherieau <skimpax@gmail.com>, 2012-2013.
# Cyril Glapa <kyriog@gmail.com>, 2012.
+# David Basquin <dba@alternalease.fr>, 2013.
# <dba@alternalease.fr>, 2013.
# Geoffrey Guerrier <geoffrey.guerrier@gmail.com>, 2012.
# <gp4004@arghh.org>, 2012.
@@ -12,16 +14,16 @@
# Guillaume Paumier <guillom.pom@gmail.com>, 2012.
# <life_0n_mars@live.fr>, 2012.
# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
-# Robert Di Rosa <>, 2012.
+# Robert Di Rosa <>, 2012-2013.
# <rom1dep@gmail.com>, 2011.
-# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:00+0000\n"
+"Last-Translator: Robert Di Rosa <>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -32,57 +34,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Impossible de déplacer %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Impossible de renommer le fichier"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Aucun fichier n'a été chargé. Erreur inconnue"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Aucune erreur, le fichier a été téléversé avec succès"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Le fichier téléversé excède la valeur de MAX_FILE_SIZE spécifiée dans le formulaire HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Le fichier n'a été que partiellement téléversé"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Aucun fichier n'a été téléversé"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Il manque un répertoire temporaire"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Erreur d'écriture sur le disque"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Espace disponible insuffisant"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Plus assez d'espace de stockage disponible"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Dossier invalide."
@@ -90,149 +92,152 @@ msgstr "Dossier invalide."
msgid "Files"
msgstr "Fichiers"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Ne plus partager"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Supprimer de façon définitive"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Supprimer"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Renommer"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "En cours"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} existe déjà"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "remplacer"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "Suggérer un nom"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "annuler"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} a été remplacé"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "annuler"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} a été remplacé par {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "Fichiers non partagés : {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "effectuer l'opération de suppression"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "Fichiers supprimés : {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' n'est pas un nom de fichier valide."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Le nom de fichier ne peut être vide."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Fichier ZIP en cours d'assemblage ; cela peut prendre du temps."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Votre espage de stockage est plein, les fichiers ne peuvent plus être téléversés ou synchronisés !"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Votre espace de stockage est presque plein ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Erreur de chargement"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Fermer"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "En cours"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 fichier en cours de téléchargement"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} fichiers téléversés"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Chargement annulé."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "L'URL ne peut-être vide"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} fichiers indexés"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "erreur lors de l'indexation"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Nom"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Taille"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Modifié"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 dossier"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} dossiers"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 fichier"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} fichiers"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Envoyer"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Gestion des fichiers"
@@ -281,36 +286,44 @@ msgstr "Dossier"
msgid "From link"
msgstr "Depuis le lien"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Envoyer"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Corbeille"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Annuler l'envoi"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Il n'y a rien ici ! Envoyez donc quelque chose :)"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Télécharger"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Ne plus partager"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Fichier trop volumineux"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Les fichiers sont en cours d'analyse, veuillez patienter."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Analyse en cours"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Mise à niveau du cache du système de fichier"
diff --git a/l10n/fr/files_encryption.po b/l10n/fr/files_encryption.po
index cbad09601fc..7c41515ad88 100644
--- a/l10n/fr/files_encryption.po
+++ b/l10n/fr/files_encryption.po
@@ -3,33 +3,37 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-15 02:02+0200\n"
-"PO-Revision-Date: 2012-08-14 16:26+0000\n"
-"Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Chiffrement"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Ne pas chiffrer les fichiers dont les types sont les suivants"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Le chiffrement des fichiers est activé"
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Les fichiers de types suivants ne seront pas chiffrés :"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Ne pas chiffrer les fichiers dont les types sont les suivants :"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Aucun"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Activer le chiffrement"
diff --git a/l10n/fr/files_trashbin.po b/l10n/fr/files_trashbin.po
new file mode 100644
index 00000000000..23b922f8f1c
--- /dev/null
+++ b/l10n/fr/files_trashbin.po
@@ -0,0 +1,70 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cédric MARTIN <sid50.martin@gmail.com>, 2013.
+# Romain DEP. <rom1dep@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 14:03+0000\n"
+"Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
+"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "Impossible d'effacer %s de façon permanente"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Impossible de restaurer %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "effectuer l'opération de restauration"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "effacer définitivement le fichier"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nom"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Effacé"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 dossier"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} dossiers"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 fichier"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} fichiers"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Il n'y a rien ici. Votre corbeille est vide !"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Restaurer"
diff --git a/l10n/fr/files_versions.po b/l10n/fr/files_versions.po
index a88cc9a369b..0bfce6ee9bc 100644
--- a/l10n/fr/files_versions.po
+++ b/l10n/fr/files_versions.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-25 02:02+0200\n"
-"PO-Revision-Date: 2012-09-24 14:20+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 14:02+0000\n"
"Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Supprimer les versions intermédiaires"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Impossible de restaurer %s"
+
+#: history.php:40
+msgid "success"
+msgstr "succès"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "Le fichier %s a été restauré dans sa version %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "échec"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Le fichier %s ne peut être restauré dans sa version %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Aucune ancienne version n'est disponible"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Aucun chemin spécifié"
#: js/versions.js:16
msgid "History"
msgstr "Historique"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versions"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Cette opération va effacer toutes les versions intermédiaires de vos fichiers (et ne garder que la dernière version en date)."
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Restaurez un fichier dans une version antérieure en cliquant sur son bouton de restauration"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/fr/lib.po b/l10n/fr/lib.po
index 7617ac30e7d..15c8dea2589 100644
--- a/l10n/fr/lib.po
+++ b/l10n/fr/lib.po
@@ -4,14 +4,15 @@
#
# Translators:
# Geoffrey Guerrier <geoffrey.guerrier@gmail.com>, 2012.
-# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Robert Di Rosa <>, 2013.
+# Romain DEP. <rom1dep@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-26 00:01+0100\n"
-"PO-Revision-Date: 2012-11-25 00:56+0000\n"
-"Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +20,55 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Aide"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personnel"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Paramètres"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Utilisateurs"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Applications"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Administration"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Téléchargement ZIP désactivé."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Les fichiers nécessitent d'être téléchargés un par un."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Retour aux Fichiers"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Les fichiers sélectionnés sont trop volumineux pour être compressés."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "impossible à déterminer"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "L'application n'est pas activée"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Erreur d'authentification"
@@ -83,55 +88,152 @@ msgstr "Texte"
msgid "Images"
msgstr "Images"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Veuillez vous référer au <a href='%s'>guide d'installation</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "à l'instant"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "il y a 1 minute"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "il y a %d minutes"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Il y a une heure"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "Il y a %d heures"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "aujourd'hui"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "hier"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "il y a %d jours"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "le mois dernier"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Il y a %d mois"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "l'année dernière"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "il y a plusieurs années"
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index be09fe8f50a..0875712ecf5 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -4,6 +4,7 @@
#
# Translators:
# Brice <bmaron@gmail.com>, 2012.
+# Cédric MARTIN <sid50.martin@gmail.com>, 2013.
# Cyril Glapa <kyriog@gmail.com>, 2012.
# <dba@alternalease.fr>, 2013.
# <fboulogne@april.org>, 2011.
@@ -17,14 +18,15 @@
# <pierreamiel.giraud@gmail.com>, 2012.
# Robert Di Rosa <>, 2012.
# <rom1dep@gmail.com>, 2011, 2012.
-# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012-2013.
+# <thomash76@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-04 13:22+0100\n"
-"PO-Revision-Date: 2013-01-03 10:33+0000\n"
-"Last-Translator: dbasquin <dba@alternalease.fr>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -36,6 +38,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Impossible de charger la liste depuis l'App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Erreur d'authentification"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Impossible de modifier le nom d'affichage"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Ce groupe existe déjà"
@@ -44,7 +55,7 @@ msgstr "Ce groupe existe déjà"
msgid "Unable to add group"
msgstr "Impossible d'ajouter le groupe"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Impossible d'activer l'Application"
@@ -56,22 +67,10 @@ msgstr "E-mail sauvegardé"
msgid "Invalid email"
msgstr "E-mail invalide"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "Identifiant OpenID changé"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Requête invalide"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Impossible de supprimer le groupe"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Erreur d'authentification"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Impossible de supprimer l'utilisateur"
@@ -80,6 +79,10 @@ msgstr "Impossible de supprimer l'utilisateur"
msgid "Language changed"
msgstr "Langue changée"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Requête invalide"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin"
@@ -94,19 +97,47 @@ msgstr "Impossible d'ajouter l'utilisateur au groupe %s"
msgid "Unable to remove user from group %s"
msgstr "Impossible de supprimer l'utilisateur du groupe %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Impossible de mettre à jour l'application"
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Mettre à jour vers {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Désactiver"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Activer"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Veuillez patienter…"
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Mise à jour..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Erreur lors de la mise à jour de l'application"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Erreur"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Mise à jour effectuée avec succès"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Sauvegarde..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Français"
@@ -118,18 +149,22 @@ msgstr "Ajoutez votre application"
msgid "More Apps"
msgstr "Plus d'applications…"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Sélectionner une Application"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Voir la page des applications à l'url apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "Distribué sous licence <span class=\"licence\"></span>, par <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Mettre à jour"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Documentation utilisateur"
@@ -159,83 +194,87 @@ msgstr "Support commercial"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Vous avez utilisé <strong>%s</strong> des <strong>%s<strong> disponibles"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clients"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Télécharger des clients de bureau"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Télécharger le client Android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Télécharger le client iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Mot de passe"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Votre mot de passe a été changé"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Impossible de changer votre mot de passe"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Mot de passe actuel"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nouveau mot de passe"
-#: templates/personal.php:26
-msgid "show"
-msgstr "Afficher"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Changer de mot de passe"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Nom affiché"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Votre nom d'affichage a bien été modifié"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Impossible de modifier votre nom d'affichage"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Changer le nom affiché"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Votre adresse e-mail"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Entrez votre adresse e-mail pour permettre la réinitialisation du mot de passe"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Langue"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Aidez à traduire"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Utiliser cette adresse pour vous connecter à ownCloud dans votre gestionnaire de fichiers"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Version"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -245,11 +284,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nom"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Nom de la connexion"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Groupes"
@@ -261,26 +300,34 @@ msgstr "Créer"
msgid "Default Storage"
msgstr "Support de stockage par défaut"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Illimité"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Autre"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Groupe Admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Support de stockage"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "Changer le nom affiché"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "Changer le mot de passe"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Défaut"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Supprimer"
diff --git a/l10n/fr/user_ldap.po b/l10n/fr/user_ldap.po
index d435d3b77ce..61d51d61cab 100644
--- a/l10n/fr/user_ldap.po
+++ b/l10n/fr/user_ldap.po
@@ -6,16 +6,17 @@
# Cyril Glapa <kyriog@gmail.com>, 2012.
# <mathieu.payrol@gmail.com>, 2012.
# <mishka.lazzlo@gmail.com>, 2012.
-# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012-2013.
+# <thomash76@gmail.com>, 2013.
# <windes@tructor.net>, 2012.
# <zrk951@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-25 00:10+0100\n"
-"PO-Revision-Date: 2012-12-24 14:18+0000\n"
-"Last-Translator: mishka <mishka.lazzlo@gmail.com>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 14:02+0000\n"
+"Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,6 +24,58 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Échec de la suppression de la configuration du serveur"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "La configuration est valide est la connexion peut être établie !"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "La configuration est valide, mais le lien ne peut être établi. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "La configuration est invalide. Veuillez vous référer aux fichiers de journaux ownCloud pour plus d'information."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "La suppression a échoué"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Récupérer les paramètres depuis une configuration récente du serveur ?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Garder ces paramètres ?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Impossible d'ajouter la configuration du serveur."
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Test de connexion réussi"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Le test de connexion a échoué"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Êtes-vous vraiment sûr de vouloir effacer la configuration actuelle du serveur ?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Confirmer la suppression"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -32,158 +85,232 @@ msgstr "<b>Avertissement:</b> Les applications user_ldap et user_webdavauth sont
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Avertissement:</b> Le module PHP LDAP requis n'est pas installé, l'application ne marchera pas. Contactez votre administrateur système pour qu'il l'installe."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Attention :</b> Le module php LDAP n'est pas installé, par conséquent cette extension ne pourra fonctionner. Veuillez contacter votre administrateur système afin qu'il l'installe."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Configuration du serveur"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Ajouter une configuration du serveur"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Hôte"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Vous pouvez omettre le protocole, sauf si vous avez besoin de SSL. Dans ce cas préfixez avec ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN Racine"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Un DN racine par ligne"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
-msgstr "Vous pouvez détailler les DN Racines de vos utilisateurs et groupes dans l'onglet Avancé"
+msgstr "Vous pouvez spécifier les DN Racines de vos utilisateurs et groupes via l'onglet Avancé"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN Utilisateur (Autorisé à consulter l'annuaire)"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
-msgstr "Le DN de l'utilisateur client avec lequel la liaison doit se faire, par exemple uid=agent,dc=example,dc=com. Pour l'accès anonyme, laisser le DN et le mot de passe vides."
+msgstr "DN de l'utilisateur client pour lequel la liaison doit se faire, par exemple uid=agent,dc=example,dc=com. Pour un accès anonyme, laisser le DN et le mot de passe vides."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Mot de passe"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Pour un accès anonyme, laisser le DN Utilisateur et le mot de passe vides."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Modèle d'authentification utilisateurs"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Définit le motif à appliquer, lors d'une tentative de connexion. %%uid est remplacé par le nom d'utilisateur lors de la connexion."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "veuillez utiliser le champ %%uid , ex.: \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filtre d'utilisateurs"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Définit le filtre à appliquer lors de la récupération des utilisateurs."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "sans élément de substitution, par exemple \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtre de groupes"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Définit le filtre à appliquer lors de la récupération des groupes."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "sans élément de substitution, par exemple \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Paramètres de connexion"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Configuration active"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Lorsque non cochée, la configuration sera ignorée."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "DN racine de l'arbre utilisateurs"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Serveur de backup (réplique)"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "DN racine de l'arbre groupes"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Fournir un serveur de backup optionnel. Il doit s'agir d'une réplique du serveur LDAP/AD principal."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Association groupe-membre"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Port du serveur de backup (réplique)"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Désactiver le serveur principal"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Lorsqu'activé, ownCloud ne se connectera qu'au serveur répliqué."
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Utiliser TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ne pas utiliser pour les connexions SSL, car cela échouera."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "À ne pas utiliser pour les connexions LDAPS (cela échouera)."
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Serveur LDAP insensible à la casse (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Désactiver la validation du certificat SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Non recommandé, utilisation pour tests uniquement."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "en secondes. Tout changement vide le cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Paramètres du répertoire"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Champ \"nom d'affichage\" de l'utilisateur"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "L'attribut LDAP utilisé pour générer les noms d'utilisateurs d'ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "DN racine de l'arbre utilisateurs"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Un DN racine utilisateur par ligne"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Recherche des attributs utilisateur"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Optionnel, un attribut par ligne"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Champ \"nom d'affichage\" du groupe"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "L'attribut LDAP utilisé pour générer les noms de groupes d'ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "DN racine de l'arbre groupes"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Un DN racine groupe par ligne"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Recherche des attributs du groupe"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Association groupe-membre"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Attributs spéciaux"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "en octets"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "en secondes. Tout changement vide le cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Laisser vide "
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Aide"
diff --git a/l10n/fr/user_webdavauth.po b/l10n/fr/user_webdavauth.po
index ee515cab580..4d665c8ff42 100644
--- a/l10n/fr/user_webdavauth.po
+++ b/l10n/fr/user_webdavauth.po
@@ -4,16 +4,17 @@
#
# Translators:
# Christophe Lherieau <skimpax@gmail.com>, 2013.
+# <mishka.lazzlo@gmail.com>, 2013.
# <nicolas@shivaserv.fr>, 2012.
# Robert Di Rosa <>, 2012.
-# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 14:46+0000\n"
-"Last-Translator: Christophe Lherieau <skimpax@gmail.com>\n"
+"POT-Creation-Date: 2013-01-25 00:05+0100\n"
+"PO-Revision-Date: 2013-01-24 01:04+0000\n"
+"Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,13 +22,17 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Authentification WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL : http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "Owncloud enverra les identifiants de sécurité de l'utilisateur à cet URL et interprète les http 401 et 403 comme des erreurs d'identification et tous les autres codes seront considérés comme une identification valide."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud enverra les informations de connexion à cette adresse. Ce module complémentaire analyse le code réponse HTTP et considère tout code différent des codes 401 et 403 comme associé à une authentification correcte."
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
index 357aa690c32..0135ef42332 100644
--- a/l10n/gl/core.po
+++ b/l10n/gl/core.po
@@ -5,13 +5,13 @@
# Translators:
# antiparvos <marcoslansgarza@gmail.com>, 2012.
# <mbouzada@gmail.com>, 2012.
-# Xosé M. Lamas <correo.xmgz@gmail.com>, 2012.
+# Xosé M. Lamas <correo.xmgz@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 10:10+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
@@ -20,24 +20,24 @@ msgstr ""
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "O usuario %s compartíu un ficheiro con vostede"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "O usuario %s compartíu un cartafol con vostede"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "O usuario %s compartiu o ficheiro «%s» con vostede. Teno dispoñíbel en: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,8 +53,9 @@ msgid "No category to add?"
msgstr "Sen categoría que engadir?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Esta categoría xa existe: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -82,59 +83,135 @@ msgstr "Non hai categorías seleccionadas para eliminar."
msgid "Error removing %s from favorites."
msgstr "Produciuse un erro ao eliminar %s dos favoritos."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Domingo"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Luns"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Martes"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Mércores"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Xoves"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Venres"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sábado"
+
+#: js/config.php:33
+msgid "January"
+msgstr "xaneiro"
+
+#: js/config.php:33
+msgid "February"
+msgstr "febreiro"
+
+#: js/config.php:33
+msgid "March"
+msgstr "marzo"
+
+#: js/config.php:33
+msgid "April"
+msgstr "abril"
+
+#: js/config.php:33
+msgid "May"
+msgstr "maio"
+
+#: js/config.php:33
+msgid "June"
+msgstr "xuño"
+
+#: js/config.php:33
+msgid "July"
+msgstr "xullo"
+
+#: js/config.php:33
+msgid "August"
+msgstr "agosto"
+
+#: js/config.php:33
+msgid "September"
+msgstr "setembro"
+
+#: js/config.php:33
+msgid "October"
+msgstr "outubro"
+
+#: js/config.php:33
+msgid "November"
+msgstr "novembro"
+
+#: js/config.php:33
+msgid "December"
+msgstr "decembro"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Configuracións"
-#: js/js.js:704
+#: js/js.js:767
msgid "seconds ago"
msgstr "segundos atrás"
-#: js/js.js:705
+#: js/js.js:768
msgid "1 minute ago"
msgstr "hai 1 minuto"
-#: js/js.js:706
+#: js/js.js:769
msgid "{minutes} minutes ago"
msgstr "hai {minutes} minutos"
-#: js/js.js:707
+#: js/js.js:770
msgid "1 hour ago"
msgstr "hai 1 hora"
-#: js/js.js:708
+#: js/js.js:771
msgid "{hours} hours ago"
msgstr "hai {hours} horas"
-#: js/js.js:709
+#: js/js.js:772
msgid "today"
msgstr "hoxe"
-#: js/js.js:710
+#: js/js.js:773
msgid "yesterday"
msgstr "onte"
-#: js/js.js:711
+#: js/js.js:774
msgid "{days} days ago"
msgstr "hai {days} días"
-#: js/js.js:712
+#: js/js.js:775
msgid "last month"
msgstr "último mes"
-#: js/js.js:713
+#: js/js.js:776
msgid "{months} months ago"
msgstr "hai {months} meses"
-#: js/js.js:714
+#: js/js.js:777
msgid "months ago"
msgstr "meses atrás"
-#: js/js.js:715
+#: js/js.js:778
msgid "last year"
msgstr "último ano"
-#: js/js.js:716
+#: js/js.js:779
msgid "years ago"
msgstr "anos atrás"
@@ -164,8 +241,8 @@ msgid "The object type is not specified."
msgstr "Non se especificou o tipo de obxecto."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Erro"
@@ -177,123 +254,141 @@ msgstr "Non se especificou o nome do aplicativo."
msgid "The required file {file} is not installed!"
msgstr "Non está instalado o ficheiro {file} que se precisa"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Compartir"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Produciuse un erro ao compartir"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Produciuse un erro ao deixar de compartir"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Produciuse un erro ao cambiar os permisos"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Compartido con vostede e co grupo {group} por {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Compartido con vostede por {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Compartir con"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Compartir coa ligazón"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Protexido con contrasinais"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Contrasinal"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Enviar ligazón por correo"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Enviar"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Definir a data de caducidade"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Data de caducidade"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Compartir por correo:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Non se atopou xente"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Non se permite volver a compartir"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Compartido en {item} con {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Deixar de compartir"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "pode editar"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "control de acceso"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "crear"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "actualizar"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "eliminar"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "compartir"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Protexido con contrasinal"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Produciuse un erro ao retirar a data de caducidade"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Produciuse un erro ao definir a data de caducidade"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "Enviando..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "Correo enviado"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Restabelecer o contrasinal de ownCloud"
@@ -375,7 +470,7 @@ msgstr "Editar categorías"
msgid "Add"
msgstr "Engadir"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Aviso de seguranza"
@@ -385,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr "Non hai un xerador de números ao chou dispoñíbel. Active o engadido de OpenSSL para PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Sen un xerador seguro de números ao chou podería acontecer que predicindo as cadeas de texto de reinicio de contrasinais se afagan coa súa conta."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través da Internet. O ficheiro .htaccess que fornece ownCloud non está a empregarse. Suxerimoslle que configure o seu servidor web de tal xeito que o cartafol de datos non estea accesíbel ou mova o cartafol de datos fora do directorio raíz de datos do servidor web."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Crear unha <strong>contra de administrador</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avanzado"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Cartafol de datos"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configurar a base de datos"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "vai ser utilizado"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Usuario da base de datos"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Contrasinal da base de datos"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nome da base de datos"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Táboa de espazos da base de datos"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Servidor da base de datos"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Rematar a configuración"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Domingo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Luns"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Martes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Mércores"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Xoves"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Venres"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sábado"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "xaneiro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "febreiro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "marzo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "abril"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "maio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "xuño"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "xullo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "agosto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "setembro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "outubro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "novembro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "decembro"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "servizos web baixo o seu control"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Desconectar"
@@ -547,17 +570,17 @@ msgstr "Cambie de novo o seu contrasinal para asegurar a súa conta."
msgid "Lost your password?"
msgstr "Perdeu o contrasinal?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "lembrar"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Conectar"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Está desconectado"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,18 +593,4 @@ msgstr "seguinte"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Advertencia de seguranza"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Verifique o seu contrasinal.<br/>Por motivos de seguranza pode que ocasionalmente se lle pregunte de novo polo seu contrasinal."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verificar"
+msgstr "Actualizando ownCloud a versión %s, esto pode levar un anaco."
diff --git a/l10n/gl/files.po b/l10n/gl/files.po
index 2390a546dbc..469ef894266 100644
--- a/l10n/gl/files.po
+++ b/l10n/gl/files.po
@@ -4,14 +4,15 @@
#
# Translators:
# antiparvos <marcoslansgarza@gmail.com>, 2012-2013.
-# Xosé M. Lamas <correo.xmgz@gmail.com>, 2012.
+# <mbouzada@gmail.com>, 2013.
+# Xosé M. Lamas <correo.xmgz@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 11:40+0000\n"
+"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,57 +23,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Non se moveu %s - Xa existe un ficheiro con ese nome."
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Non foi posíbel mover %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Non é posíbel renomear o ficheiro"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
-msgstr "Non se subiu ningún ficheiro. Erro descoñecido."
+msgstr "Non foi enviado ningún ficheiro. Produciuse un erro descoñecido."
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
-msgstr "Non hai erros. O ficheiro enviouse correctamente"
+msgstr "Non se produciu ningún erro. O ficheiro enviouse correctamente"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
-msgstr "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini"
+msgstr "O ficheiro enviado excede a directiva indicada por upload_max_filesize de php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr "O ficheiro enviado supera a directiva MAX_FILE_SIZE que foi indicada no formulario HTML"
+msgstr "O ficheiro enviado excede a directiva MAX_FILE_SIZE que foi indicada no formulario HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "O ficheiro enviado foi só parcialmente enviado"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Non se enviou ningún ficheiro"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Falta un cartafol temporal"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
-msgstr "Erro ao escribir no disco"
+msgstr "Produciuse un erro ao escribir no disco"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "O espazo dispoñíbel é insuficiente"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Non hai espazo de almacenamento abondo"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "O directorio é incorrecto."
@@ -80,160 +81,163 @@ msgstr "O directorio é incorrecto."
msgid "Files"
msgstr "Ficheiros"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Deixar de compartir"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Eliminar permanentemente"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Eliminar"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
-msgstr "Mudar o nome"
+msgstr "Renomear"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendentes"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "xa existe un {new_name}"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "substituír"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "suxerir nome"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "cancelar"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "substituír {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "desfacer"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
-msgstr "substituír {new_name} polo {old_name}"
-
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "{files} sen compartir"
+msgstr "substituír {new_name} por {old_name}"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} eliminados"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "realizar a operación de eliminación"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "«.» é un nome de ficheiro incorrecto"
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "O nome de ficheiro non pode estar baleiro"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
-msgstr "Nome non válido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non se permiten."
+msgstr "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*»."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "xerando un ficheiro ZIP, o que pode levar un anaco."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes"
+msgstr "Non foi posíbel enviar o ficheiro pois ou é un directorio ou ten 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
-msgstr "Erro na subida"
+msgstr "Produciuse un erro no envío"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Pechar"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Pendentes"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
-msgstr "1 ficheiro subíndose"
+msgstr "Enviándose 1 ficheiro"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
-msgstr "{count} ficheiros subíndose"
+msgstr "Enviandose {count} ficheiros"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
-msgstr "Subida cancelada."
+msgstr "Envío cancelado."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
-msgstr "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida."
+msgstr "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
-msgstr "URL non pode quedar baleiro."
+msgstr "O URL non pode quedar baleiro."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} ficheiros escaneados"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "erro mentres analizaba"
+msgstr "Nome de cartafol incorrecto. O uso de «Shared» está reservado por Owncloud"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Nome"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Tamaño"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 cartafol"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} cartafoles"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 ficheiro"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} ficheiros"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Enviar"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Manexo de ficheiro"
#: templates/admin.php:7
msgid "Maximum upload size"
-msgstr "Tamaño máximo de envío"
+msgstr "Tamaño máximo do envío"
#: templates/admin.php:10
msgid "max. possible: "
-msgstr "máx. posible: "
+msgstr "máx. posíbel: "
#: templates/admin.php:15
msgid "Needed for multi-file and folder downloads."
@@ -249,7 +253,7 @@ msgstr "0 significa ilimitado"
#: templates/admin.php:22
msgid "Maximum input size for ZIP files"
-msgstr "Tamaño máximo de descarga para os ZIP"
+msgstr "Tamaño máximo de descarga para os ficheiros ZIP"
#: templates/admin.php:26
msgid "Save"
@@ -269,38 +273,46 @@ msgstr "Cartafol"
#: templates/index.php:14
msgid "From link"
-msgstr "Dende a ligazón"
+msgstr "Desde a ligazón"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Enviar"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Cesto do lixo"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
-msgstr "Cancelar a subida"
+msgstr "Cancelar o envío"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
-msgstr "Nada por aquí. Envía algo."
+msgstr "Aquí non hai nada por aquí. Envíe algo."
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Deixar de compartir"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Envío demasiado grande"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor"
+msgstr "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
-msgstr "Estanse analizando os ficheiros. Agarda."
+msgstr "Estanse analizando os ficheiros. Agarde."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Análise actual"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Anovando a caché do sistema de ficheiros..."
diff --git a/l10n/gl/files_encryption.po b/l10n/gl/files_encryption.po
index 367cd2cd063..0f66e72f332 100644
--- a/l10n/gl/files_encryption.po
+++ b/l10n/gl/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <mbouzada@gmail.com>, 2013.
# Xosé M. Lamas <correo.xmgz@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-21 00:01+0100\n"
-"PO-Revision-Date: 2012-11-20 22:19+0000\n"
-"Last-Translator: Miguel Branco <mgl.branco@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 10:01+0000\n"
+"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Cifrado"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Excluír os seguintes tipos de ficheiro do cifrado"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "O cifrado de ficheiros está activado"
-#: templates/settings.php:5
-msgid "None"
-msgstr "Nada"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Os seguintes tipos de ficheiros non van seren cifrados:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Excluír os seguintes tipos de ficheiros do cifrado:"
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Activar o cifrado"
+#: templates/settings.php:12
+msgid "None"
+msgstr "Ningún"
diff --git a/l10n/gl/files_trashbin.po b/l10n/gl/files_trashbin.po
new file mode 100644
index 00000000000..b1c8fe79926
--- /dev/null
+++ b/l10n/gl/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mbouzada@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 11:20+0000\n"
+"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
+"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "Non foi posíbel eliminar %s permanente"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Non foi posíbel restaurar %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "realizar a operación de restauración"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "eliminar o ficheiro permanentemente"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nome"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Eliminado"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 cartafol"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} cartafoles"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 ficheiro"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} ficheiros"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Aquí non hai nada. O cesto do lixo está baleiro!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Restablecer"
diff --git a/l10n/gl/files_versions.po b/l10n/gl/files_versions.po
index aeb062c08df..7bfd504e633 100644
--- a/l10n/gl/files_versions.po
+++ b/l10n/gl/files_versions.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-30 00:03+0100\n"
-"PO-Revision-Date: 2012-11-29 16:08+0000\n"
-"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,21 +20,44 @@ msgstr ""
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Caducan todas as versións"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historial"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versións"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Isto eliminará todas as copias de seguranza que haxa dos seus ficheiros"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po
index 739b0ba67ff..12ac1761ec6 100644
--- a/l10n/gl/lib.po
+++ b/l10n/gl/lib.po
@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <mbouzada@gmail.com>, 2013.
# <mbouzada@gmail.com>, 2012.
# Miguel Branco <mgl.branco@gmail.com>, 2012.
-# Xosé M. Lamas <correo.xmgz@gmail.com>, 2012.
+# Xosé M. Lamas <correo.xmgz@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-08 00:10+0100\n"
-"PO-Revision-Date: 2012-12-06 11:56+0000\n"
-"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,51 +21,55 @@ msgstr ""
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Axuda"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Persoal"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Configuracións"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Usuarios"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Aplicativos"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Administración"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
-msgstr "As descargas ZIP están desactivadas"
+msgstr "As descargas ZIP están desactivadas."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Os ficheiros necesitan seren descargados de un en un."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Volver aos ficheiros"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Os ficheiros seleccionados son demasiado grandes como para xerar un ficheiro zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "non foi posíbel determinalo"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "O aplicativo non está activado"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Produciuse un erro na autenticación"
@@ -84,55 +89,152 @@ msgstr "Texto"
msgid "Images"
msgstr "Imaxes"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "O seu servidor web non está aínda configurado adecuadamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Volva comprobar as <a href='%s'>guías de instalación</a>"
+
+#: template.php:113
msgid "seconds ago"
-msgstr "hai segundos"
+msgstr "segundos atrás"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "hai 1 minuto"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "hai %d minutos"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Vai 1 hora"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "Vai %d horas"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "hoxe"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "onte"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "hai %d días"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "último mes"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Vai %d meses"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "último ano"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "anos atrás"
diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po
index 29fdaa8ac25..1668054b2ed 100644
--- a/l10n/gl/settings.po
+++ b/l10n/gl/settings.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-01 00:04+0100\n"
-"PO-Revision-Date: 2012-12-31 09:02+0000\n"
-"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Non foi posíbel cargar a lista desde a App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Produciuse un erro de autenticación"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "O grupo xa existe"
@@ -32,7 +41,7 @@ msgstr "O grupo xa existe"
msgid "Unable to add group"
msgstr "Non é posíbel engadir o grupo"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Non é posíbel activar o aplicativo."
@@ -44,22 +53,10 @@ msgstr "Correo gardado"
msgid "Invalid email"
msgstr "correo incorrecto"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "Cambiou o OpenID"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Petición incorrecta"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Non é posíbel eliminar o grupo."
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Produciuse un erro de autenticación"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Non é posíbel eliminar o usuario"
@@ -68,6 +65,10 @@ msgstr "Non é posíbel eliminar o usuario"
msgid "Language changed"
msgstr "O idioma cambiou"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Petición incorrecta"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Os administradores non se pode eliminar a si mesmos do grupo admin"
@@ -82,19 +83,47 @@ msgstr "Non é posíbel engadir o usuario ao grupo %s"
msgid "Unable to remove user from group %s"
msgstr "Non é posíbel eliminar o usuario do grupo %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Desactivar"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Activar"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Erro"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Gardando..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Galego"
@@ -106,18 +135,22 @@ msgstr "Engada o seu aplicativo"
msgid "More Apps"
msgstr "Máis aplicativos"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Escolla un aplicativo"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Consulte a páxina do aplicativo en apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licenciado por<span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Actualizar"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Documentación do usuario"
@@ -147,83 +180,87 @@ msgstr "Asistencia comercial"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Te en uso <strong>%s</strong> do total dispoñíbel de <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clientes"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Descargar clientes para escritorio"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Descargar clientes para Android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Descargar clientes ra iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Contrasinal"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "O seu contrasinal foi cambiado"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Non é posíbel cambiar o seu contrasinal"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Contrasinal actual"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Novo contrasinal"
-#: templates/personal.php:26
-msgid "show"
-msgstr "amosar"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Cambiar o contrasinal"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Correo"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "O seu enderezo de correo"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Escriba un enderezo de correo para activar a recuperación do contrasinal"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Axude na tradución"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Utilice este enderezo para conectarse ao seu ownCloud co administrador de ficheiros"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Versión"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nome"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupos"
@@ -249,26 +286,34 @@ msgstr "Crear"
msgid "Default Storage"
msgstr "Almacenamento predeterminado"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Sen límites"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Outro"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupo Admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Almacenamento"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr "Predeterminado"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Eliminar"
diff --git a/l10n/gl/user_ldap.po b/l10n/gl/user_ldap.po
index 024f611c187..72ec0caf49a 100644
--- a/l10n/gl/user_ldap.po
+++ b/l10n/gl/user_ldap.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-01 00:04+0100\n"
-"PO-Revision-Date: 2012-12-31 08:48+0000\n"
-"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +19,58 @@ msgstr ""
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Fallou o borrado"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -28,158 +80,232 @@ msgstr "<b>Aviso:</b> Os aplicativos user_ldap e user_webdavauth son incompatíb
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Aviso:</b> O módulo PHP LDAP é necesario e non está instalado, a infraestrutura non funcionará. Consulte co administrador do sistema para instalalo."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Servidor"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Pode omitir o protocolo agás que precise de SSL. Nese caso comece con ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN base"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Pode especificar a DN base para usuarios e grupos na lapela de «Avanzado»"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN do usuario"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "O DN do cliente do usuario co que hai que estabelecer unha conexión, p.ex uid=axente, dc=exemplo, dc=com. Para o acceso anónimo deixe o DN e o contrasinal baleiros."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Contrasinal"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Para o acceso anónimo deixe o DN e o contrasinal baleiros."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtro de acceso de usuarios"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Define o filtro que se aplica cando se intenta o acceso. %%uid substitúe o nome de usuario e a acción de acceso."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "usar a marca de posición %%uid, p.ex «uid=%%uid»"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filtro da lista de usuarios"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Define o filtro a aplicar cando se recompilan os usuarios."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "sen ningunha marca de posición, como p.ex «objectClass=persoa»."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtro de grupo"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Define o filtro a aplicar cando se recompilan os grupos."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "sen ningunha marca de posición, como p.ex «objectClass=grupoPosix»."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Porto"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Base da árbore de usuarios"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Base da árbore de grupo"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Asociación de grupos e membros"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Usar TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Non empregalo para conexións SSL: fallará."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Servidor LDAP que non distingue entre maiúsculas e minúsculas (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Desactiva a validación do certificado SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Se a conexión só funciona con esta opción importa o certificado SSL do servidor LDAP no seu servidor ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Non se recomenda. Só para probas."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "en segundos. Calquera cambio baleira a caché."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Campo de mostra do nome de usuario"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "O atributo LDAP a empregar para xerar o nome de usuario de ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Base da árbore de usuarios"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Campo de mostra do nome de grupo"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "O atributo LDAP úsase para xerar os nomes dos grupos de ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Base da árbore de grupo"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Asociación de grupos e membros"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "en bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "en segundos. Calquera cambio baleira a caché."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Deixar baleiro para o nome de usuario (predeterminado). Noutro caso, especifique un atributo LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Axuda"
diff --git a/l10n/gl/user_webdavauth.po b/l10n/gl/user_webdavauth.po
index 5630c82c50e..e16010dc69f 100644
--- a/l10n/gl/user_webdavauth.po
+++ b/l10n/gl/user_webdavauth.po
@@ -3,14 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <mbouzada@gmail.com>, 2013.
# <mbouzada@gmail.com>, 2012.
# Miguel Branco, 2012.
+# Xosé M. Lamas <correo.xmgz@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-01 00:04+0100\n"
-"PO-Revision-Date: 2012-12-31 08:22+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 11:20+0000\n"
"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
@@ -19,13 +21,17 @@ msgstr ""
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Autenticación WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
-#: templates/settings.php:6
+#: templates/settings.php:7
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud enviará as credenciais do usuario a este URL, http 401 e http 403 interpretanse como credenciais incorrectas e todos os outros códigos como credenciais correctas."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud enviará as credenciais do usuario a este URL. Este engadido comproba a resposta e interpretará os códigos de estado HTTP 401 e 403 como credenciais incorrectas, e todas as outras respostas como credenciais correctas."
diff --git a/l10n/he/core.po b/l10n/he/core.po
index 027e2946155..63923beacfc 100644
--- a/l10n/he/core.po
+++ b/l10n/he/core.po
@@ -4,6 +4,7 @@
#
# Translators:
# Dovix Dovix <dovix2003@gmail.com>, 2012.
+# Gilad Naaman <gilad.doom@gmail.com>, 2013.
# <ido.parag@gmail.com>, 2012.
# <tomerc+transifex.net@gmail.com>, 2011.
# Yaron Shahrabani <sh.yaron@gmail.com>, 2011-2012.
@@ -11,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -21,24 +22,24 @@ msgstr ""
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "המשתמש %s שיתף ×תך קובץ"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "המשתמש %s שיתף ×תך תיקייה"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "המשתמש %s שיתף ×תך ×ת הקובץ „%s“. ניתן להוריד ×ת הקובץ מכ×ן: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -54,8 +55,9 @@ msgid "No category to add?"
msgstr "×ין קטגוריה להוספה?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "קטגוריה ×–×ת כבר קיימת: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -83,59 +85,135 @@ msgstr "×œ× × ×‘×—×¨×• קטגוריות למחיקה"
msgid "Error removing %s from favorites."
msgstr "שגי××” בהסרת %s מהמועדפי×."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "×™×•× ×¨×שון"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "×™×•× ×©× ×™"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "×™×•× ×©×œ×™×©×™"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "×™×•× ×¨×‘×™×¢×™"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "×™×•× ×—×ž×™×©×™"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "×™×•× ×©×™×©×™"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "שבת"
+
+#: js/config.php:33
+msgid "January"
+msgstr "ינו×ר"
+
+#: js/config.php:33
+msgid "February"
+msgstr "פברו×ר"
+
+#: js/config.php:33
+msgid "March"
+msgstr "מרץ"
+
+#: js/config.php:33
+msgid "April"
+msgstr "×פריל"
+
+#: js/config.php:33
+msgid "May"
+msgstr "מ××™"
+
+#: js/config.php:33
+msgid "June"
+msgstr "יוני"
+
+#: js/config.php:33
+msgid "July"
+msgstr "יולי"
+
+#: js/config.php:33
+msgid "August"
+msgstr "×וגוסט"
+
+#: js/config.php:33
+msgid "September"
+msgstr "ספטמבר"
+
+#: js/config.php:33
+msgid "October"
+msgstr "×וקטובר"
+
+#: js/config.php:33
+msgid "November"
+msgstr "נובמבר"
+
+#: js/config.php:33
+msgid "December"
+msgstr "דצמבר"
+
+#: js/js.js:284
msgid "Settings"
msgstr "הגדרות"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "שניות"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "לפני דקה ×חת"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "לפני {minutes} דקות"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "לפני שעה"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "לפני {hours} שעות"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "היו×"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "×תמול"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "לפני {days} ימי×"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "חודש שעבר"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "לפני {months} חודשי×"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "חודשי×"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "שנה שעברה"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "שני×"
@@ -165,8 +243,8 @@ msgid "The object type is not specified."
msgstr "סוג הפריט ×œ× ×¦×•×™×Ÿ."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "שגי××”"
@@ -178,123 +256,141 @@ msgstr "×©× ×”×™×™×©×•× ×œ× ×¦×•×™×Ÿ."
msgid "The required file {file} is not installed!"
msgstr "הקובץ הנדרש {file} ×ינו מותקן!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "שתף"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "שגי××” במהלך השיתוף"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "שגי××” במהלך ביטול השיתוף"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "שגי××” במהלך שינוי ההגדרות"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "שותף ×תך ×•×¢× ×”×§×‘×•×¦×” {group} שבבעלות {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "שותף ×תך על ידי {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "שיתוף ×¢×"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "שיתוף ×¢× ×§×™×©×•×¨"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "הגנה בססמה"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "ססמה"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "שליחת קישור בדו×״ל למשתמש"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "שליחה"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "הגדרת ת×ריך תפוגה"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "ת×ריך התפוגה"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "שיתוף ב×מצעות דו×״ל:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "×œ× × ×ž×¦×ו ×נשי×"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "×סור לעשות שיתוף מחדש"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "שותף תחת {item} ×¢× {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "הסר שיתוף"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "ניתן לערוך"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "בקרת גישה"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "יצירה"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "עדכון"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "מחיקה"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "שיתוף"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "מוגן בססמה"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "×ירעה שגי××” בביטול ת×ריך התפוגה"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "×ירעה שגי××” בעת הגדרת ת×ריך התפוגה"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "מתבצעת שליחה ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "הודעת הדו×״ל נשלחה"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "×יפוס הססמה של ownCloud"
@@ -376,7 +472,7 @@ msgstr "עריכת הקטגוריות"
msgid "Add"
msgstr "הוספה"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "×זהרת ×בטחה"
@@ -386,147 +482,75 @@ msgid ""
"OpenSSL extension."
msgstr "×ין מחולל ×ž×¡×¤×¨×™× ×קר××™×™× ×ž×ובטח, × × ×œ×”×¤×¢×™×œ ×ת ההרחבה OpenSSL ב־PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "×œ×œ× ×ž×—×•×œ×œ ×ž×¡×¤×¨×™× ×קר××™×™× ×ž×ובטח תוקף יכול ×œ× ×‘× ×ת מחרוזות ×יפוס הססמה ולהשתלט על החשבון שלך."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "יתכן שתיקיית ×”× ×ª×•× ×™× ×•×”×§×‘×¦×™× ×©×œ×š × ×’×™×©×™× ×“×¨×š ×”×ינטרנט. קובץ ה־‎.htaccess שמסופק על ידי ownCloud כנר××” ×ינו עובד. ×נו ×ž×ž×œ×™×¦×™× ×‘×—×•× ×œ×”×’×“×™×¨ ×ת שרת ×”×ינטרנט שלך בדרך שבה תיקיית ×”× ×ª×•× ×™× ×œ× ×ª×”×™×” זמינה עוד ×ו להעביר ×ת תיקיית ×”× ×ª×•× ×™× ×ž×—×•×¥ לספריית העל של שרת ×”×ינטרנט."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "יצירת <strong>חשבון מנהל</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "מתקד×"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "תיקיית נתוני×"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "הגדרת מסד הנתוני×"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "ינוצלו"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "×©× ×ž×©×ª×ž×© במסד הנתוני×"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "ססמת מסד הנתוני×"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "×©× ×ž×¡×“ הנתוני×"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "מרחב הכתובות של מסד הנתוני×"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "שרת בסיס נתוני×"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "×¡×™×•× ×”×ª×§× ×”"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "×™×•× ×¨×שון"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "×™×•× ×©× ×™"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "×™×•× ×©×œ×™×©×™"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "×™×•× ×¨×‘×™×¢×™"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "×™×•× ×—×ž×™×©×™"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "×™×•× ×©×™×©×™"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "שבת"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "ינו×ר"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "פברו×ר"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "מרץ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "×פריל"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "מ××™"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "יוני"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "יולי"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "×וגוסט"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "ספטמבר"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "×וקטובר"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "נובמבר"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "דצמבר"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "שירותי רשת בשליטתך"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "התנתקות"
@@ -548,17 +572,17 @@ msgstr "× × ×œ×©× ×•×ª ×ת הססמה שלך כדי ל×בטח ×ת חשבונ
msgid "Lost your password?"
msgstr "שכחת ×ת ססמתך?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "שמירת הססמה"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "כניסה"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "×œ× ×”×ª×—×‘×¨×ª."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,18 +595,4 @@ msgstr "הב×"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "×זהרת ×בטחה!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "× × ×œ×מת ×ת הססמה שלך. <br/>מטעמי ×בטחה יתכן שתופיע בקשה להזין ×ת הססמה שוב."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "×ימות"
+msgstr "מעדכן ×ת ownCloud ×ל ×’×¨×¡× %s, ×–×” עלול לקחת זמן מה."
diff --git a/l10n/he/files.po b/l10n/he/files.po
index cbf762beda7..8a109378c45 100644
--- a/l10n/he/files.po
+++ b/l10n/he/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -26,55 +26,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "×œ× ×”×•×¢×œ×” קובץ. טעות בלתי מזוהה."
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "×œ× ×ירעה תקלה, ×”×§×‘×¦×™× ×”×•×¢×œ×• בהצלחה"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "×”×§×‘×¦×™× ×©× ×©×œ×—×• ×—×•×¨×’×™× ×ž×”×’×•×“×œ שצוין בהגדרה upload_max_filesize שבקובץ php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "הקובץ שהועלה חרג מההנחיה MAX_FILE_SIZE שצוינה בטופס ה־HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "הקובץ שהועלה הועלה בצורה חלקית"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "×œ× ×”×•×¢×œ×• קבצי×"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "תיקייה זמנית חסרה"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "הכתיבה לכונן נכשלה"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -82,149 +82,152 @@ msgstr ""
msgid "Files"
msgstr "קבצי×"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "הסר שיתוף"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "מחיקה"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "שינוי ש×"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "ממתין"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} כבר ×§×™×™×"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "החלפה"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "הצעת ש×"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "ביטול"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} הוחלף"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "ביטול"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} הוחלף ב־{old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "בוטל ×©×™×ª×•×¤× ×©×œ {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} נמחקו"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "×”×©× ×©×’×•×™, ×סור להשתמש ×‘×ª×•×•×™× '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "יוצר קובץ ZIP, ×× × ×”×ž×ª×Ÿ."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "×œ× ×™×›×•×œ להעלות ×ת הקובץ מכיוון שזו תקיה ×ו שמשקל הקובץ 0 בתי×"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "שגי×ת העל××”"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "סגירה"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "ממתין"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "קובץ ×חד נשלח"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} ×§×‘×¦×™× × ×©×œ×—×™×"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "ההעל××” בוטלה."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "מתבצעת כעת העל×ת קבצי×. עזיבה של העמוד תבטל ×ת ההעל××”."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "קישור ×ינו יכול להיות ריק."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} ×§×‘×¦×™× × ×¡×¨×§×•"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "×ירעה שגי××” במהלך הסריקה"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "ש×"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "גודל"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "זמן שינוי"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "תיקייה ×חת"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} תיקיות"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "קובץ ×חד"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} קבצי×"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "העל××”"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "טיפול בקבצי×"
@@ -273,36 +276,44 @@ msgstr "תיקייה"
msgid "From link"
msgstr "מקישור"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "העל××”"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "ביטול ההעל××”"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "×ין ×›×ן ×©×•× ×“×‘×¨. ×ולי ברצונך להעלות משהו?"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "הורדה"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "הסר שיתוף"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "העל××” גדולה מידי"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "×”×§×‘×¦×™× ×©× ×™×¡×™×ª להעלות חרגו מהגודל המקסימלי להעל×ת ×§×‘×¦×™× ×¢×œ שרת ×–×”."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "×”×§×‘×¦×™× × ×¡×¨×§×™×, × × ×œ×”×ž×ª×™×Ÿ."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "הסריקה הנוכחית"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/he/files_encryption.po b/l10n/he/files_encryption.po
index 860989631c4..2c26e96cd12 100644
--- a/l10n/he/files_encryption.po
+++ b/l10n/he/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-27 00:04+0100\n"
-"PO-Revision-Date: 2012-12-26 17:21+0000\n"
-"Last-Translator: Gilad Naaman <gilad.doom@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "הצפנה"
-#: templates/settings.php:6
-msgid "Enable Encryption"
-msgstr "הפעל הצפנה"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
#: templates/settings.php:7
-msgid "None"
-msgstr "כלו×"
+msgid "Exclude the following file types from encryption:"
+msgstr ""
#: templates/settings.php:12
-msgid "Exclude the following file types from encryption"
-msgstr "×”×•×¦× ×ת סוגי ×”×§×‘×¦×™× ×”×‘××™× ×ž×”×¦×¤× ×”"
+msgid "None"
+msgstr "כלו×"
diff --git a/l10n/he/files_trashbin.po b/l10n/he/files_trashbin.po
new file mode 100644
index 00000000000..4291039ce16
--- /dev/null
+++ b/l10n/he/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "ש×"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "תיקייה ×חת"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} תיקיות"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "קובץ ×חד"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} קבצי×"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/he/files_versions.po b/l10n/he/files_versions.po
index 6c4367359de..4d1caaf1149 100644
--- a/l10n/he/files_versions.po
+++ b/l10n/he/files_versions.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-02 00:02+0100\n"
-"PO-Revision-Date: 2012-12-01 07:21+0000\n"
-"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "הפגת תוקף כל הגרס×ות"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "היסטוריה"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "גרס×ות"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "פעולה זו תמחק ×ת כל גיבויי הגרס×ות ×”×§×™×™×ž×™× ×©×œ ×”×§×‘×¦×™× ×©×œ×š"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/he/lib.po b/l10n/he/lib.po
index de97f2df884..499a5bf35a6 100644
--- a/l10n/he/lib.po
+++ b/l10n/he/lib.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-02 00:02+0100\n"
-"PO-Revision-Date: 2012-12-01 06:32+0000\n"
-"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +19,55 @@ msgstr ""
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "עזרה"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "×ישי"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "הגדרות"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "משתמשי×"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "יישומי×"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "מנהל"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "הורדת ZIP כבויה"
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "יש להוריד ×ת ×”×§×‘×¦×™× ×חד ×חרי השני."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "חזרה לקבצי×"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "×”×§×‘×¦×™× ×”× ×‘×—×¨×™× ×’×“×•×œ×™× ×ž×™×“×™ ליצירת קובץ zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "×™×™×©×•×ž×™× ××™× × ×ž×•×¤×¢×œ×™×"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "שגי×ת הזדהות"
@@ -83,55 +87,152 @@ msgstr "טקסט"
msgid "Images"
msgstr "תמונות"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "שניות"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "לפני דקה ×חת"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "לפני %d דקות"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "לפני שעה"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "לפני %d שעות"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "היו×"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "×תמול"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "לפני %d ימי×"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "חודש שעבר"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "לפני %d חודשי×"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "שנה שעברה"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "שני×"
diff --git a/l10n/he/settings.po b/l10n/he/settings.po
index 4dd6b3fe8d4..be030e636cd 100644
--- a/l10n/he/settings.po
+++ b/l10n/he/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -25,6 +25,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "×œ× × ×™×ª×Ÿ לטעון רשימה מה־App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "שגי×ת הזדהות"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "הקבוצה כבר קיימת"
@@ -33,7 +42,7 @@ msgstr "הקבוצה כבר קיימת"
msgid "Unable to add group"
msgstr "×œ× × ×™×ª×Ÿ להוסיף קבוצה"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "×œ× × ×™×ª×Ÿ להפעיל ×ת היישו×"
@@ -45,22 +54,10 @@ msgstr "הדו×״ל נשמר"
msgid "Invalid email"
msgstr "דו×״ל ×œ× ×—×•×§×™"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID השתנה"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "בקשה ×œ× ×—×•×§×™×ª"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "×œ× × ×™×ª×Ÿ למחוק ×ת הקבוצה"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "שגי×ת הזדהות"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "×œ× × ×™×ª×Ÿ למחוק ×ת המשתמש"
@@ -69,6 +66,10 @@ msgstr "×œ× × ×™×ª×Ÿ למחוק ×ת המשתמש"
msgid "Language changed"
msgstr "שפה השתנתה"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "בקשה ×œ× ×—×•×§×™×ª"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "×ž× ×”×œ×™× ×œ× ×™×›×•×œ×™× ×œ×”×¡×™×¨ ×ת ×¢×¦×ž× ×ž×§×‘×•×¦×ª המנהלי×"
@@ -83,19 +84,47 @@ msgstr "×œ× × ×™×ª×Ÿ להוסיף משתמש לקבוצה %s"
msgid "Unable to remove user from group %s"
msgstr "×œ× × ×™×ª×Ÿ להסיר משתמש מהקבוצה %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "בטל"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "הפעל"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "שגי××”"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "שומר.."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "עברית"
@@ -107,18 +136,22 @@ msgstr "הוספת ×”×™×™×©×•× ×©×œ×š"
msgid "More Apps"
msgstr "×™×™×©×•×ž×™× × ×•×¡×¤×™×"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "בחירת יישו×"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "צפה בעמוד ×”×™×©×•× ×‘ apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "ברישיון <span class=\"licence\"></span>לטובת <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "עדכון"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "תיעוד משתמש"
@@ -148,83 +181,87 @@ msgstr "תמיכה בתשלו×"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "השתמשת ב־<strong>%s</strong> מתוך <strong>%s</strong> ×”×–×ž×™× ×™× ×œ×š"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "לקוחות"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "הורד לתוכנה למחשב"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "הורד תוכנה ל×נדרו×יד"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "הורד תוכנה לiOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "ססמה"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "הססמה שלך הוחלפה"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "×œ× × ×™×ª×Ÿ לשנות ×ת הססמה שלך"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "ססמה נוכחית"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "ססמה חדשה"
-#: templates/personal.php:26
-msgid "show"
-msgstr "הצגה"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "שינוי ססמה"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "דו×״ל"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "כתובת הדו×״ל שלך"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "× × ×œ×ž×œ× ×ת כתובת הדו×״ל שלך כדי ל×פשר שחזור ססמה"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "פה"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "עזרה בתרגו×"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "השתמש בכתובת ×–×ת על מנת להתחבר ×ל ownCloud דרך סייר קבצי×."
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "גרס×"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -234,11 +271,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "פותח על די <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "ש×"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "קבוצות"
@@ -250,26 +287,34 @@ msgstr "יצירה"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "×חר"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "מנהל הקבוצה"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "מחיקה"
diff --git a/l10n/he/user_ldap.po b/l10n/he/user_ldap.po
index fb4f06d8441..cd67250d867 100644
--- a/l10n/he/user_ldap.po
+++ b/l10n/he/user_ldap.po
@@ -3,12 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Gilad Naaman <gilad.doom@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +18,58 @@ msgstr ""
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "מחיקה נכשלה"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
-msgid "Host"
+msgid "Server configuration"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Host"
+msgstr "מ×רח"
+
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
-msgstr ""
+msgstr "DN משתמש"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
-msgstr ""
+msgstr "סיסמ×"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
-msgstr ""
+msgstr "לגישה ×נונימית, הש×ר ×ת ×”DM ×•×”×¡×™×¡×ž× ×¨×™×§×™×."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
-msgstr ""
+msgstr "סנן כניסת משתמש"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
-msgstr ""
+msgstr "סנן רשימת משתמשי×"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
-msgstr ""
+msgstr "סנן קבוצה"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "בשניות. שינוי מרוקן ×ת המטמון."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr "בבתי×"
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "עזרה"
diff --git a/l10n/he/user_webdavauth.po b/l10n/he/user_webdavauth.po
index e9a1a74eb85..65a279ed44f 100644
--- a/l10n/he/user_webdavauth.po
+++ b/l10n/he/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/hi/core.po b/l10n/hi/core.po
index 9e21f4363b7..4706ee1f2cd 100644
--- a/l10n/hi/core.po
+++ b/l10n/hi/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
@@ -19,24 +19,24 @@ msgstr ""
"Language: hi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -52,7 +52,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -81,59 +82,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:284
msgid "Settings"
msgstr ""
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -163,8 +240,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr ""
@@ -176,123 +253,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "पासवरà¥à¤¡"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr ""
@@ -374,7 +469,7 @@ msgstr ""
msgid "Add"
msgstr ""
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -384,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• खाता बनाà¤à¤"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "उनà¥à¤¨à¤¤"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr ""
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "डेटाबेस कॉनà¥à¤«à¤¼à¤¿à¤—र करें "
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr ""
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "डेटाबेस उपयोगकरà¥à¤¤à¤¾"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "डेटाबेस पासवरà¥à¤¡"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr ""
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr ""
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "सेटअप समापà¥à¤¤ करे"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr ""
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr ""
@@ -546,17 +569,17 @@ msgstr ""
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr ""
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "आप लोग आउट कर दिठगठहैं."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,17 +593,3 @@ msgstr "अगला"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/hi/files.po b/l10n/hi/files.po
index c555c20841b..fe4e56b565b 100644
--- a/l10n/hi/files.po
+++ b/l10n/hi/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
@@ -22,55 +22,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -78,149 +78,152 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:290
-msgid "deleted {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr ""
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -269,36 +272,44 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
+#: templates/index.php:40
+msgid "Trash bin"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr ""
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/hi/files_encryption.po b/l10n/hi/files_encryption.po
index e6ff91a68b5..94768da1fcc 100644
--- a/l10n/hi/files_encryption.po
+++ b/l10n/hi/files_encryption.po
@@ -7,28 +7,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-29 02:01+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hi\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/hi/files_trashbin.po b/l10n/hi/files_trashbin.po
new file mode 100644
index 00000000000..a0b6e4cede0
--- /dev/null
+++ b/l10n/hi/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/hi/files_versions.po b/l10n/hi/files_versions.po
index 1f21f8aca78..65790b4d6ba 100644
--- a/l10n/hi/files_versions.po
+++ b/l10n/hi/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: hi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/hi/lib.po b/l10n/hi/lib.po
index 310d410a6e9..fe9cd8b3887 100644
--- a/l10n/hi/lib.po
+++ b/l10n/hi/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: hi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr ""
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr ""
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr ""
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr ""
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,152 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po
index 5bf27381000..2388add5fdd 100644
--- a/l10n/hi/settings.po
+++ b/l10n/hi/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
@@ -21,6 +21,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -29,7 +38,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -41,22 +50,10 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr ""
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -65,6 +62,10 @@ msgstr ""
msgid "Language changed"
msgstr ""
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -79,19 +80,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr ""
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr ""
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr ""
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr ""
@@ -103,18 +132,22 @@ msgstr ""
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr ""
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -144,83 +177,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr ""
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "पासवरà¥à¤¡"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr ""
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr ""
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "नया पासवरà¥à¤¡"
-#: templates/personal.php:26
-msgid "show"
+#: templates/personal.php:42
+msgid "Change password"
msgstr ""
-#: templates/personal.php:27
-msgid "Change password"
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
msgstr ""
-#: templates/personal.php:33
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr ""
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr ""
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr ""
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr ""
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr ""
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -230,11 +267,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr ""
@@ -246,26 +283,34 @@ msgstr ""
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr ""
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr ""
diff --git a/l10n/hi/user_ldap.po b/l10n/hi/user_ldap.po
index ae9f03b0212..b37e24b8292 100644
--- a/l10n/hi/user_ldap.po
+++ b/l10n/hi/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: hi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr ""
diff --git a/l10n/hi/user_webdavauth.po b/l10n/hi/user_webdavauth.po
index aa784d7aad0..cc71e94d7f6 100644
--- a/l10n/hi/user_webdavauth.po
+++ b/l10n/hi/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: hi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/hr/core.po b/l10n/hr/core.po
index afe9e17a5b2..ebbeae5639d 100644
--- a/l10n/hr/core.po
+++ b/l10n/hr/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -21,24 +21,24 @@ msgstr ""
"Language: hr\n"
"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;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -54,8 +54,9 @@ msgid "No category to add?"
msgstr "Nemate kategorija koje možete dodati?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Ova kategorija već postoji: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -83,59 +84,135 @@ msgstr "Nema odabranih kategorija za brisanje."
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "nedelja"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "ponedeljak"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "utorak"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "srijeda"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Äetvrtak"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "petak"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "subota"
+
+#: js/config.php:33
+msgid "January"
+msgstr "SijeÄanj"
+
+#: js/config.php:33
+msgid "February"
+msgstr "VeljaÄa"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Ožujak"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Travanj"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Svibanj"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Lipanj"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Srpanj"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Kolovoz"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Rujan"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Listopad"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Studeni"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Prosinac"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Postavke"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "sekundi prije"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "danas"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "juÄer"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "prošli mjesec"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "mjeseci"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "prošlu godinu"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "godina"
@@ -165,8 +242,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Pogreška"
@@ -178,123 +255,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Podijeli"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Greška prilikom djeljenja"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "GreÅ¡ka prilikom iskljuÄivanja djeljenja"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Greška prilikom promjena prava"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Djeli sa"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Djeli preko link-a"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Zaštiti lozinkom"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Lozinka"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Postavi datum isteka"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Datum isteka"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Dijeli preko email-a:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Osobe nisu pronađene"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Ponovo dijeljenje nije dopušteno"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Makni djeljenje"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "može mjenjat"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "kontrola pristupa"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "kreiraj"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "ažuriraj"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "izbriši"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "djeli"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Zaštita lozinkom"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Greška prilikom brisanja datuma isteka"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Greška prilikom postavljanja datuma isteka"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud resetiranje lozinke"
@@ -376,7 +471,7 @@ msgstr "Uredi kategorije"
msgid "Add"
msgstr "Dodaj"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -386,147 +481,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Stvori <strong>administratorski raÄun</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Dodatno"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Mapa baze podataka"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfiguriraj bazu podataka"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "će se koristiti"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Korisnik baze podataka"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Lozinka baze podataka"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Ime baze podataka"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Database tablespace"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Poslužitelj baze podataka"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Završi postavljanje"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "nedelja"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "ponedeljak"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "utorak"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "srijeda"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Äetvrtak"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "petak"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "subota"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "SijeÄanj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "VeljaÄa"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Ožujak"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Travanj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Svibanj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Lipanj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Srpanj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Kolovoz"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Rujan"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Listopad"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Studeni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Prosinac"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "web usluge pod vašom kontrolom"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Odjava"
@@ -548,17 +571,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "Izgubili ste lozinku?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "zapamtiti"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Prijava"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Odjavljeni ste."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -572,17 +595,3 @@ msgstr "sljedeći"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/hr/files.po b/l10n/hr/files.po
index e69aea6cf78..4e58c45f936 100644
--- a/l10n/hr/files.po
+++ b/l10n/hr/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -25,55 +25,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Datoteka je poslana uspješno i bez pogrešaka"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Poslana datoteka izlazi iz okvira MAX_FILE_SIZE direktive postavljene u HTML obrascu"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Datoteka je poslana samo djelomiÄno"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ni jedna datoteka nije poslana"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Nedostaje privremena mapa"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Neuspjelo pisanje na disk"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -81,149 +81,152 @@ msgstr ""
msgid "Files"
msgstr "Datoteke"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Prekini djeljenje"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Briši"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Promjeni ime"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "U tijeku"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "zamjeni"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "predloži ime"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "odustani"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "vrati"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "generiranje ZIP datoteke, ovo može potrajati."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nemoguće poslati datoteku jer je prazna ili je direktorij"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Pogreška pri slanju"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Zatvori"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "U tijeku"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 datoteka se uÄitava"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Slanje poništeno."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "UÄitavanje datoteke. NapuÅ¡tanjem stranice će prekinuti uÄitavanje."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "greÄka prilikom skeniranja"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Naziv"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "VeliÄina"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Zadnja promjena"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Pošalji"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "datoteka za rukovanje"
@@ -272,36 +275,44 @@ msgstr "mapa"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Pošalji"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Prekini upload"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nema niÄega u ovoj mapi. PoÅ¡alji neÅ¡to!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Preuzmi"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Prekini djeljenje"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Prijenos je preobiman"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Datoteke koje pokuÅ¡avate prenijeti prelaze maksimalnu veliÄinu za prijenos datoteka na ovom poslužitelju."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Datoteke se skeniraju, molimo priÄekajte."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Trenutno skeniranje"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/hr/files_encryption.po b/l10n/hr/files_encryption.po
index d2734fd9fd2..434831e8abe 100644
--- a/l10n/hr/files_encryption.po
+++ b/l10n/hr/files_encryption.po
@@ -7,28 +7,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hr\n"
-"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\n"
+"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;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/hr/files_trashbin.po b/l10n/hr/files_trashbin.po
new file mode 100644
index 00000000000..a5e90a28bb2
--- /dev/null
+++ b/l10n/hr/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"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;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Ime"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/hr/files_versions.po b/l10n/hr/files_versions.po
index 557b2117806..a1fb9209e3b 100644
--- a/l10n/hr/files_versions.po
+++ b/l10n/hr/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: hr\n"
"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;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/hr/lib.po b/l10n/hr/lib.po
index 80301078e43..33cacb70eeb 100644
--- a/l10n/hr/lib.po
+++ b/l10n/hr/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: hr\n"
"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;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Pomoć"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Osobno"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Postavke"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Korisnici"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Greška kod autorizacije"
@@ -81,55 +85,152 @@ msgstr "Tekst"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "sekundi prije"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "danas"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "juÄer"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "prošli mjesec"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "prošlu godinu"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "godina"
diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po
index 530e4e42e1e..842287d3fc5 100644
--- a/l10n/hr/settings.po
+++ b/l10n/hr/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Nemogićnost uÄitavanja liste sa Apps Stora"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Greška kod autorizacije"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -32,7 +41,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -44,22 +53,10 @@ msgstr "Email spremljen"
msgid "Invalid email"
msgstr "Neispravan email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID promijenjen"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Neispravan zahtjev"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Greška kod autorizacije"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -68,6 +65,10 @@ msgstr ""
msgid "Language changed"
msgstr "Jezik promijenjen"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Neispravan zahtjev"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -82,19 +83,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "IskljuÄi"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "UkljuÄi"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Greška"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Spremanje..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__ime_jezika__"
@@ -106,18 +135,22 @@ msgstr "Dodajte vašu aplikaciju"
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Odaberite Aplikaciju"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Pogledajte stranicu s aplikacijama na apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -147,83 +180,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klijenti"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Lozinka"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Nemoguće promijeniti lozinku"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Trenutna lozinka"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nova lozinka"
-#: templates/personal.php:26
-msgid "show"
-msgstr "prikaz"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Izmjena lozinke"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "e-mail adresa"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Vaša e-mail adresa"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Ispunite vase e-mail adresa kako bi se omogućilo oporavak lozinke"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Jezik"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Pomoć prevesti"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Ime"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupe"
@@ -249,26 +286,34 @@ msgstr "Izradi"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "ostali"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupa Admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Obriši"
diff --git a/l10n/hr/user_ldap.po b/l10n/hr/user_ldap.po
index 5861922d336..eb75fed54a8 100644
--- a/l10n/hr/user_ldap.po
+++ b/l10n/hr/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: hr\n"
"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;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Pomoć"
diff --git a/l10n/hr/user_webdavauth.po b/l10n/hr/user_webdavauth.po
index ec8c6a5f26a..d33ff57a3a1 100644
--- a/l10n/hr/user_webdavauth.po
+++ b/l10n/hr/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: hr\n"
"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;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/hu/core.po b/l10n/hu/core.po
index 34ccef27dd1..d2bfb48813a 100644
--- a/l10n/hu/core.po
+++ b/l10n/hu/core.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/owncloud/language/hu/)\n"
"MIME-Version: 1.0\n"
@@ -83,55 +83,55 @@ msgstr ""
msgid "Settings"
msgstr ""
-#: js/js.js:704
+#: js/js.js:711
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:712
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:713
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:714
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:715
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:716
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:717
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:718
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:719
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:720
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:721
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:722
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:723
msgid "years ago"
msgstr ""
@@ -207,7 +207,6 @@ msgid "Password protect"
msgstr ""
#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
msgid "Password"
msgstr ""
@@ -552,10 +551,6 @@ msgstr ""
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr ""
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr ""
@@ -568,17 +563,3 @@ msgstr ""
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/hu/files.po b/l10n/hu/files.po
index 4956069f94d..bcba1270024 100644
--- a/l10n/hu/files.po
+++ b/l10n/hu/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:05+0000\n"
+"POT-Creation-Date: 2013-01-20 00:05+0100\n"
+"PO-Revision-Date: 2013-01-19 23:05+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/owncloud/language/hu/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,11 @@ msgstr ""
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/delete.php:28 ajax/getstoragestats.php:11 ajax/upload.php:17
+#: ajax/upload.php:76 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
@@ -31,46 +36,46 @@ msgstr ""
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:20
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:30
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:31
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:33
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:35
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:36
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:37
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:38
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
+#: ajax/upload.php:57
msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:91
msgid "Invalid directory."
msgstr ""
@@ -126,98 +131,100 @@ msgstr ""
msgid "deleted {files}"
msgstr ""
-#: js/files.js:31
+#: js/files.js:48
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:53
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:62
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:204
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
msgstr ""
-#: js/files.js:224
+#: js/files.js:242
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:242
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:259
msgid "Close"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
+#: js/files.js:278 js/files.js:397 js/files.js:431
msgid "Pending"
msgstr ""
-#: js/files.js:280
+#: js/files.js:298
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:301 js/files.js:357 js/files.js:372
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:376 js/files.js:414
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:486
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:559
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:565
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
+#: js/files.js:775
msgid "{count} files scanned"
msgstr ""
-#: js/files.js:735
+#: js/files.js:783
msgid "error while scanning"
msgstr ""
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:857 templates/index.php:64
msgid "Name"
msgstr ""
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:858 templates/index.php:75
msgid "Size"
msgstr ""
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:859 templates/index.php:77
msgid "Modified"
msgstr ""
-#: js/files.js:829
+#: js/files.js:878
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:880
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:888
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:890
msgid "{count} files"
msgstr ""
@@ -269,10 +276,6 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr ""
-
#: templates/index.php:41
msgid "Cancel upload"
msgstr ""
diff --git a/l10n/hu/files_versions.po b/l10n/hu/files_versions.po
index 8fb51cf6202..6f8e34c98c3 100644
--- a/l10n/hu/files_versions.po
+++ b/l10n/hu/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-08-12 22:37+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/owncloud/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +17,10 @@ msgstr ""
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:7
-msgid "Expire all versions"
-msgstr ""
-
#: js/versions.js:16
msgid "History"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr ""
-
-#: templates/settings-personal.php:10
-msgid "This will delete all existing backup versions of your files"
-msgstr ""
-
#: templates/settings.php:3
msgid "Files Versioning"
msgstr ""
diff --git a/l10n/hu/lib.po b/l10n/hu/lib.po
index 0dc080f7db0..dc349f094e9 100644
--- a/l10n/hu/lib.po
+++ b/l10n/hu/lib.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-07-27 22:23+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-17 00:26+0100\n"
+"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/owncloud/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,27 +17,27 @@ msgstr ""
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:301
msgid "Help"
msgstr ""
-#: app.php:294
+#: app.php:308
msgid "Personal"
msgstr ""
-#: app.php:299
+#: app.php:313
msgid "Settings"
msgstr ""
-#: app.php:304
+#: app.php:318
msgid "Users"
msgstr ""
-#: app.php:311
+#: app.php:325
msgid "Apps"
msgstr ""
-#: app.php:313
+#: app.php:327
msgid "Admin"
msgstr ""
@@ -57,11 +57,15 @@ msgstr ""
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:228
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,55 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/hu/settings.po b/l10n/hu/settings.po
index 934e419f787..7234cca6386 100644
--- a/l10n/hu/settings.po
+++ b/l10n/hu/settings.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2011-07-25 16:05+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-12 00:09+0100\n"
+"PO-Revision-Date: 2013-01-11 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/owncloud/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -29,7 +29,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -41,14 +41,6 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
@@ -65,6 +57,10 @@ msgstr ""
msgid "Language changed"
msgstr ""
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
diff --git a/l10n/hu/user_ldap.po b/l10n/hu/user_ldap.po
index e2abecc29af..2c265cccc0e 100644
--- a/l10n/hu/user_ldap.po
+++ b/l10n/hu/user_ldap.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-08-12 22:45+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 23:20+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/owncloud/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,8 +26,8 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
@@ -44,6 +44,10 @@ msgid "Base DN"
msgstr ""
#: templates/settings.php:16
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:16
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
@@ -114,10 +118,18 @@ msgstr ""
msgid "Base User Tree"
msgstr ""
+#: templates/settings.php:25
+msgid "One User Base DN per line"
+msgstr ""
+
#: templates/settings.php:26
msgid "Base Group Tree"
msgstr ""
+#: templates/settings.php:26
+msgid "One Group Base DN per line"
+msgstr ""
+
#: templates/settings.php:27
msgid "Group-Member association"
msgstr ""
diff --git a/l10n/hu/user_webdavauth.po b/l10n/hu/user_webdavauth.po
index d6235e0472c..87b7d322df8 100644
--- a/l10n/hu/user_webdavauth.po
+++ b/l10n/hu/user_webdavauth.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2012-11-09 09:06+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/owncloud/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po
index 50ba444d42d..9cd13d6adf5 100644
--- a/l10n/hu_HU/core.po
+++ b/l10n/hu_HU/core.po
@@ -4,14 +4,16 @@
#
# Translators:
# Adam Toth <adazlord@gmail.com>, 2012.
+# Laszlo Tornoci <torlasz@gmail.com>, 2013.
# <mail@tamas-nagy.net>, 2011.
# Peter Borsa <peter.borsa@gmail.com>, 2012.
+# Tamas Nagy <mail@tamas-nagy.net>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
@@ -20,24 +22,24 @@ msgstr ""
"Language: hu_HU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "%s felhasználó megosztott Önnel egy fájlt"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "%s felhasználó megosztott Önnel egy mappát"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "%s felhasználó megosztotta ezt az állományt Önnel: %s. A fájl innen tölthető le: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,8 +55,9 @@ msgid "No category to add?"
msgstr "Nincs hozzáadandó kategória?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Ez a kategória már létezik: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -82,59 +85,135 @@ msgstr "Nincs törlésre jelölt kategória"
msgid "Error removing %s from favorites."
msgstr "Nem sikerült a kedvencekből törölni ezt: %s"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "vasárnap"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "hétfő"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "kedd"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "szerda"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "csütörtök"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "péntek"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "szombat"
+
+#: js/config.php:33
+msgid "January"
+msgstr "január"
+
+#: js/config.php:33
+msgid "February"
+msgstr "február"
+
+#: js/config.php:33
+msgid "March"
+msgstr "március"
+
+#: js/config.php:33
+msgid "April"
+msgstr "április"
+
+#: js/config.php:33
+msgid "May"
+msgstr "május"
+
+#: js/config.php:33
+msgid "June"
+msgstr "június"
+
+#: js/config.php:33
+msgid "July"
+msgstr "július"
+
+#: js/config.php:33
+msgid "August"
+msgstr "augusztus"
+
+#: js/config.php:33
+msgid "September"
+msgstr "szeptember"
+
+#: js/config.php:33
+msgid "October"
+msgstr "október"
+
+#: js/config.php:33
+msgid "November"
+msgstr "november"
+
+#: js/config.php:33
+msgid "December"
+msgstr "december"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Beállítások"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "pár másodperce"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 perce"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} perce"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 órája"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} órája"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "ma"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "tegnap"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} napja"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "múlt hónapban"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} hónapja"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "több hónapja"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "tavaly"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "több éve"
@@ -164,8 +243,8 @@ msgid "The object type is not specified."
msgstr "Az objektum típusa nincs megadva."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Hiba"
@@ -177,123 +256,141 @@ msgstr "Az alkalmazás neve nincs megadva."
msgid "The required file {file} is not installed!"
msgstr "A szükséges fájl: {file} nincs telepítve!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Megosztás"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Nem sikerült létrehozni a megosztást"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Nem sikerült visszavonni a megosztást"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Nem sikerült módosítani a jogosultságokat"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Megosztotta Önnel és a(z) {group} csoporttal: {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Megosztotta Önnel: {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Kivel osztom meg"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Link megadásával osztom meg"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Jelszóval is védem"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
-msgstr "Jelszó (tetszőleges)"
+msgstr "Jelszó"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Email címre küldjük el"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Küldjük el"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Legyen lejárati idő"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "A lejárati idő"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Megosztás emaillel:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Nincs találat"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Ezt az állományt csak a tulajdonosa oszthatja meg másokkal"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Megosztva {item}-ben {user}-rel"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "A megosztás visszavonása"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "módosíthat"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "jogosultság"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "létrehoz"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "szerkeszt"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "töröl"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "megoszt"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Jelszóval van védve"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Nem sikerült a lejárati időt törölni"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Nem sikerült a lejárati időt beállítani"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Küldés ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Az emailt elküldtük"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud jelszó-visszaállítás"
@@ -375,7 +472,7 @@ msgstr "Kategóriák szerkesztése"
msgid "Add"
msgstr "Hozzáadás"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Biztonsági figyelmeztetés"
@@ -385,147 +482,75 @@ msgid ""
"OpenSSL extension."
msgstr "Nem érhető el megfelelő véletlenszám-generátor, telepíteni kellene a PHP OpenSSL kiegészítését."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Megfelelő véletlenszám-generátor hiányában egy támadó szándékú idegen képes lehet megjósolni a jelszóvisszaállító tokent, és Ön helyett belépni."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Az adatkönytára és az itt levő fájlok valószínűleg elérhetők az internetről. Az ownCloud által beillesztett .htaccess fájl nem működik. Nagyon fontos, hogy a webszervert úgy konfigurálja, hogy az adatkönyvtár nem legyen közvetlenül kívülről elérhető, vagy az adatkönyvtárt tegye a webszerver dokumentumfáján kívülre."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "<strong>Rendszergazdai belépés</strong> létrehozása"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Haladó"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Adatkönyvtár"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Adatbázis konfigurálása"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "adatbázist fogunk használni"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Adatbázis felhasználónév"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Adatbázis jelszó"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Az adatbázis neve"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Az adatbázis táblázattér (tablespace)"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Adatbázis szerver"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "A beállítások befejezése"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "vasárnap"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "hétfő"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "kedd"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "szerda"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "csütörtök"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "péntek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "szombat"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "január"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "február"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "március"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "április"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "május"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "június"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "július"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "augusztus"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "szeptember"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "október"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "november"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "december"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "webszolgáltatások saját kézben"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Kilépés"
@@ -547,17 +572,17 @@ msgstr "A biztonsága érdekében változtassa meg a jelszavát!"
msgid "Lost your password?"
msgstr "Elfelejtette a jelszavát?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "emlékezzen"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Bejelentkezés"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Kilépett."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,18 +595,4 @@ msgstr "következő"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Biztonsági figyelmeztetés!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Kérjük írja be a jelszavát! <br/>Biztonsági okokból néha a bejelentkezést követően is ellenőrzésképpen meg kell adnia a jelszavát."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Ellenőrzés"
+msgstr "Owncloud frissítés a %s verzióra folyamatban. Kis türelmet."
diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po
index bf6a28272e1..5a793b84bff 100644
--- a/l10n/hu_HU/files.po
+++ b/l10n/hu_HU/files.po
@@ -4,15 +4,18 @@
#
# Translators:
# Adam Toth <adazlord@gmail.com>, 2012.
+# Akos <nagy.akos@libreoffice.ro>, 2013.
+# <gyonkibendeguz@gmail.com>, 2013.
# <gyonkibendeguz@gmail.com>, 2013.
+# Laszlo Tornoci <torlasz@gmail.com>, 2013.
# <mail@tamas-nagy.net>, 2011.
# Peter Borsa <peter.borsa@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
@@ -24,57 +27,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Nem sikerült %s áthelyezése"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Nem lehet átnevezni a fájlt"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Nem történt feltöltés. Ismeretlen hiba"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "A fájlt sikerült feltölteni"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "A feltöltött fájl mérete meghaladja a php.ini állományban megadott upload_max_filesize paraméter értékét."
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "A feltöltött fájl mérete meghaladja a MAX_FILE_SIZE paramétert, ami a HTML formban került megadásra."
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Az eredeti fájlt csak részben sikerült feltölteni."
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Nem töltődött fel semmi"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Hiányzik egy ideiglenes mappa"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Nem sikerült a lemezre történő írás"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Nincs elég szabad hely"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Nincs elég szabad hely."
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Érvénytelen mappa."
@@ -82,149 +85,152 @@ msgstr "Érvénytelen mappa."
msgid "Files"
msgstr "Fájlok"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Megosztás visszavonása"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Törlés"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Ãtnevezés"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Folyamatban"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} már létezik"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "írjuk fölül"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "legyen más neve"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "mégse"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "a(z) {new_name} állományt kicseréltük"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "visszavonás"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} fájlt kicseréltük ezzel: {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "{files} fájl megosztása visszavonva"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} fájl törölve"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' fájlnév érvénytelen."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "A fájlnév nem lehet semmi."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'"
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "ZIP-fájl generálása, ez eltarthat egy ideig."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben."
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "A tároló majdnem tele van ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Feltöltési hiba"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Bezárás"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Folyamatban"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 fájl töltődik föl"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} fájl töltődik föl"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "A feltöltést megszakítottuk."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "Az URL nem lehet semmi."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
+msgstr "Érvénytelen mappanév. A név használata csak a Owncloud számára lehetséges."
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} fájlt találtunk"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "Hiba a fájllista-ellenőrzés során"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Név"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Méret"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Módosítva"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 mappa"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} mappa"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 fájl"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} fájl"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Feltöltés"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Fájlkezelés"
@@ -273,36 +279,44 @@ msgstr "Mappa"
msgid "From link"
msgstr "Feltöltés linkről"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Feltöltés"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "A feltöltés megszakítása"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Itt nincs semmi. Töltsön fel valamit!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Letöltés"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Megosztás visszavonása"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "A feltöltés túl nagy"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "A fájllista ellenőrzése zajlik, kis türelmet!"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Ellenőrzés alatt"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/hu_HU/files_encryption.po b/l10n/hu_HU/files_encryption.po
index 896e96e2c73..3a5ec713fb1 100644
--- a/l10n/hu_HU/files_encryption.po
+++ b/l10n/hu_HU/files_encryption.po
@@ -3,14 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Akos <nagy.akos@libreoffice.ro>, 2013.
# Csaba Orban <vicsabi@gmail.com>, 2012.
+# <gyonkibendeguz@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 17:43+0000\n"
-"Last-Translator: Laszlo Tornoci <torlasz@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +20,22 @@ msgstr ""
"Language: hu_HU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Titkosítás"
-#: templates/settings.php:6
-msgid "Enable Encryption"
-msgstr "A titkosítás engedélyezése"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
#: templates/settings.php:7
-msgid "None"
-msgstr "Egyik sem"
+msgid "Exclude the following file types from encryption:"
+msgstr ""
#: templates/settings.php:12
-msgid "Exclude the following file types from encryption"
-msgstr "A következő fájltípusok kizárása a titkosításból"
+msgid "None"
+msgstr "Egyik sem"
diff --git a/l10n/hu_HU/files_trashbin.po b/l10n/hu_HU/files_trashbin.po
new file mode 100644
index 00000000000..0f7239c2cdc
--- /dev/null
+++ b/l10n/hu_HU/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Név"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 mappa"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} mappa"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 fájl"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} fájl"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Visszaállítás"
diff --git a/l10n/hu_HU/files_versions.po b/l10n/hu_HU/files_versions.po
index 0a39722ad7f..f2b3829c7aa 100644
--- a/l10n/hu_HU/files_versions.po
+++ b/l10n/hu_HU/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 17:24+0000\n"
-"Last-Translator: Laszlo Tornoci <torlasz@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,21 +17,44 @@ msgstr ""
"Language: hu_HU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:7
-msgid "Expire all versions"
-msgstr "Az összes korábbi változat törlése"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Korábbi változatok"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Az állományok korábbi változatai"
-
-#: templates/settings-personal.php:10
-msgid "This will delete all existing backup versions of your files"
-msgstr "Itt törölni tudja állományainak összes korábbi verzióját"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/hu_HU/lib.po b/l10n/hu_HU/lib.po
index 1a78f30958a..09fe7b2dce1 100644
--- a/l10n/hu_HU/lib.po
+++ b/l10n/hu_HU/lib.po
@@ -4,13 +4,15 @@
#
# Translators:
# Adam Toth <adazlord@gmail.com>, 2012.
+# <gyonkibendeguz@gmail.com>, 2013.
+# Laszlo Tornoci <torlasz@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 09:34+0000\n"
-"Last-Translator: Laszlo Tornoci <torlasz@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +20,55 @@ msgstr ""
"Language: hu_HU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Súgó"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Személyes"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Beállítások"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Felhasználók"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Alkalmazások"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
-msgstr "A ZIP-letöltés nem engedélyezett."
+msgstr "A ZIP-letöltés nincs engedélyezve."
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "A fájlokat egyenként kell letölteni"
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Vissza a Fájlokhoz"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
-msgstr "A kiválasztott fájlok túl nagy a zip tömörítéshez."
+msgstr "A kiválasztott fájlok túl nagyok a zip tömörítéshez."
+
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "nem határozható meg"
#: json.php:28
msgid "Application is not enabled"
msgstr "Az alkalmazás nincs engedélyezve"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Hitelesítési hiba"
@@ -82,55 +88,152 @@ msgstr "Szöveg"
msgid "Images"
msgstr "Képek"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "másodperce"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 perce"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d perce"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 órája"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d órája"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "ma"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "tegnap"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d napja"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "múlt hónapban"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d hónapja"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "tavaly"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "éve"
diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po
index b307301795c..858bd01dcd8 100644
--- a/l10n/hu_HU/settings.po
+++ b/l10n/hu_HU/settings.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-09 00:04+0100\n"
-"PO-Revision-Date: 2013-01-08 16:35+0000\n"
-"Last-Translator: gyeben <gyonkibendeguz@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Nem tölthető le a lista az App Store-ból"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Azonosítási hiba"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "A csoport már létezik"
@@ -32,7 +41,7 @@ msgstr "A csoport már létezik"
msgid "Unable to add group"
msgstr "A csoport nem hozható létre"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "A program nem aktiválható."
@@ -44,22 +53,10 @@ msgstr "Email mentve"
msgid "Invalid email"
msgstr "Hibás email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID megváltozott"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Érvénytelen kérés"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "A csoport nem törölhető"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Azonosítási hiba"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "A felhasználó nem törölhető"
@@ -68,6 +65,10 @@ msgstr "A felhasználó nem törölhető"
msgid "Language changed"
msgstr "A nyelv megváltozott"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Érvénytelen kérés"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Adminisztrátorok nem távolíthatják el magukat az admin csoportból."
@@ -82,19 +83,47 @@ msgstr "A felhasználó nem adható hozzá ehhez a csoporthoz: %s"
msgid "Unable to remove user from group %s"
msgstr "A felhasználó nem távolítható el ebből a csoportból: %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Letiltás"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Engedélyezés"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Hiba"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Mentés..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -106,18 +135,22 @@ msgstr "Az alkalmazás hozzáadása"
msgid "More Apps"
msgstr "További alkalmazások"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Válasszon egy alkalmazást"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Lásd apps.owncloud.com, alkalmazások oldal"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-a jogtuladonos <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Frissítés"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Felhasználói leírás"
@@ -147,83 +180,87 @@ msgstr "Megvásárolható támogatás"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Az Ön tárterület-felhasználása jelenleg: <strong>%s</strong>. Maximálisan ennyi áll rendelkezésére: <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Kliensek"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Desktop kliensprogramok letöltése"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Android kliens letöltése"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "iOS kliens letöltése"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Jelszó"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "A jelszava megváltozott"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "A jelszó nem változtatható meg"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "A jelenlegi jelszó"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Az új jelszó"
-#: templates/personal.php:26
-msgid "show"
-msgstr "lássam"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "A jelszó megváltoztatása"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Az Ön email címe"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Adja meg az email címét, hogy jelszó-emlékeztetőt kérhessen, ha elfelejtette a jelszavát!"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Nyelv"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Segítsen a fordításban!"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Ennek a címnek a megadásával a WebDAV-protokollon keresztül saját gépének fájlkezelőjével is is elérheti az állományait."
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Verzió"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Név"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Csoportok"
@@ -249,26 +286,34 @@ msgstr "Létrehozás"
msgid "Default Storage"
msgstr "Alapértelmezett tárhely"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Korlátlan"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Más"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Csoportadminisztrátor"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Tárhely"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr "Alapértelmezett"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Törlés"
diff --git a/l10n/hu_HU/user_ldap.po b/l10n/hu_HU/user_ldap.po
index 3e8274293c3..1b2cd9d4f82 100644
--- a/l10n/hu_HU/user_ldap.po
+++ b/l10n/hu_HU/user_ldap.po
@@ -4,13 +4,14 @@
#
# Translators:
# <gyonkibendeguz@gmail.com>, 2013.
+# Laszlo Tornoci <torlasz@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-09 00:04+0100\n"
-"PO-Revision-Date: 2013-01-08 16:35+0000\n"
-"Last-Translator: gyeben <gyonkibendeguz@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +19,58 @@ msgstr ""
"Language: hu_HU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "A törlés nem sikerült"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +80,232 @@ msgstr "<b>Figyelem:</b> a user_ldap és user_webdavauth alkalmazások nem kompa
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Figyelem:</b> a szükséges PHP LDAP modul nincs telepítve. Enélkül az LDAP azonosítás nem fog működni. Kérje meg a rendszergazdát, hogy telepítse a szükséges modult!"
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Figyelmeztetés:</b> Az LDAP PHP modul nincs telepítve, ezért ez az alrendszer nem fog működni. Kérje meg a rendszergazdát, hogy telepítse!"
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Kiszolgáló"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "A protokoll előtag elhagyható, kivéve, ha SSL-t kíván használni. Ebben az esetben kezdje így: ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN-gyökér"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Soronként egy DN-gyökér"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "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"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "A kapcsolódó felhasználó DN-je"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
-msgstr ""
+msgstr "Annak a felhasználónak a DN-je, akinek a nevében bejelentkezve kapcsolódunk a kiszolgálóhoz, pl. uid=agent,dc=example,dc=com. Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Jelszó"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!"
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Szűrő a bejelentkezéshez"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Ez a szűrő érvényes a bejelentkezés megkísérlésekor. Ekkor az %%uid változó helyére a bejelentkezési név kerül."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "használja az %%uid változót, pl. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "A felhasználók szűrője"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Ez a szűrő érvényes a felhasználók listázásakor."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "itt ne használjon változót, pl. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "A csoportok szűrője"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Ez a szűrő érvényes a csoportok listázásakor."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "itt ne használjunk változót, pl. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "A felhasználói fa gyökere"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "A csoportfa gyökere"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "A csoporttagság attribútuma"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Használjunk TLS-t"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ne használjuk SSL-kapcsolat esetén, mert nem fog működni!"
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Az LDAP-kiszolgáló nem tesz különbséget a kis- és nagybetűk között (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Ne ellenőrizzük az SSL-tanúsítvány érvényességét"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Ha a kapcsolat csak ezzel a beállítással működik, akkor importálja az LDAP-kiszolgáló SSL tanúsítványát az ownCloud kiszolgálóra!"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Nem javasolt, csak tesztelésre érdemes használni."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "másodpercben. A változtatás törli a cache tartalmát."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "A felhasználónév mezője"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Ebből az LDAP attribútumból képződik a felhasználó elnevezése, ami megjelenik az ownCloudban."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "A felhasználói fa gyökere"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Soronként egy felhasználói fa gyökerét adhatjuk meg"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "A csoport nevének mezője"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Ebből az LDAP attribútumból képződik a csoport elnevezése, ami megjelenik az ownCloudban."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "A csoportfa gyökere"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Soronként egy csoportfa gyökerét adhatjuk meg"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "A csoporttagság attribútuma"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "bájtban"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "másodpercben. A változtatás törli a cache tartalmát."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Hagyja üresen, ha a felhasználónevet kívánja használni. Ellenkező esetben adjon meg egy LDAP/AD attribútumot!"
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Súgó"
diff --git a/l10n/hu_HU/user_webdavauth.po b/l10n/hu_HU/user_webdavauth.po
index 5d89219034f..f661c0e4ee0 100644
--- a/l10n/hu_HU/user_webdavauth.po
+++ b/l10n/hu_HU/user_webdavauth.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Akos <nagy.akos@libreoffice.ro>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 20:47+0000\n"
-"Last-Translator: Laszlo Tornoci <torlasz@gmail.com>\n"
+"POT-Creation-Date: 2013-01-29 00:04+0100\n"
+"PO-Revision-Date: 2013-01-28 11:27+0000\n"
+"Last-Translator: akoscomp <nagy.akos@libreoffice.ro>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,13 +18,17 @@ msgstr ""
"Language: hu_HU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV hitelesítés"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "Az ownCloud rendszer erre a címre fogja elküldeni a felhasználók bejelentkezési adatait. Ha 401-es vagy 403-as http kódot kap vissza, azt sikertelen azonosításként fogja értelmezni, minden más kódot sikeresnek fog tekinteni."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "Az ownCloud elküldi a felhasználói fiók adatai a következő URL-re. Ez a bővítőmodul leellenőrzi a választ és ha a HTTP hibakód nem 401 vagy 403 azaz érvénytelen hitelesítő, akkor minden más válasz érvényes lesz."
diff --git a/l10n/ia/core.po b/l10n/ia/core.po
index 29a834b73e8..385d32959dc 100644
--- a/l10n/ia/core.po
+++ b/l10n/ia/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +18,24 @@ msgstr ""
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,8 +51,9 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Iste categoria jam existe:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -80,59 +81,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Dominica"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Lunedi"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Martedi"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Mercuridi"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Jovedi"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Venerdi"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sabbato"
+
+#: js/config.php:33
+msgid "January"
+msgstr "januario"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februario"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Martio"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Junio"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Julio"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Augusto"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Septembre"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Octobre"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembre"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Decembre"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Configurationes"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -162,8 +239,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr ""
@@ -175,123 +252,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Compartir"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Contrasigno"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Reinitialisation del contrasigno de ownCLoud"
@@ -373,7 +468,7 @@ msgstr "Modificar categorias"
msgid "Add"
msgstr "Adder"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -383,147 +478,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Crear un <strong>conto de administration</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avantiate"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Dossier de datos"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configurar le base de datos"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "essera usate"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Usator de base de datos"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Contrasigno de base de datos"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nomine de base de datos"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Hospite de base de datos"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr ""
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Dominica"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Lunedi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Martedi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Mercuridi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Jovedi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Venerdi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sabbato"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "januario"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februario"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Martio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Junio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Julio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Augusto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Septembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Octobre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Novembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Decembre"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "servicios web sub tu controlo"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Clauder le session"
@@ -545,17 +568,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "Tu perdeva le contrasigno?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "memora"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Aperir session"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Tu session ha essite claudite."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +592,3 @@ msgstr "prox"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/ia/files.po b/l10n/ia/files.po
index 48fee82947c..bbc3d82ed75 100644
--- a/l10n/ia/files.po
+++ b/l10n/ia/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -24,55 +24,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Le file incargate solmente esseva incargate partialmente"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Nulle file esseva incargate"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Manca un dossier temporari"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -80,149 +80,152 @@ msgstr ""
msgid "Files"
msgstr "Files"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Deler"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Clauder"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nomine"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Dimension"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Modificate"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Incargar"
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -271,36 +274,44 @@ msgstr "Dossier"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Incargar"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nihil hic. Incarga alcun cosa!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Discargar"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Incargamento troppo longe"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ia/files_encryption.po b/l10n/ia/files_encryption.po
index 8b85b14f5c1..11e4cc8eb8c 100644
--- a/l10n/ia/files_encryption.po
+++ b/l10n/ia/files_encryption.po
@@ -7,28 +7,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ia\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/ia/files_trashbin.po b/l10n/ia/files_trashbin.po
new file mode 100644
index 00000000000..a6fdefcf405
--- /dev/null
+++ b/l10n/ia/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nomine"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ia/files_versions.po b/l10n/ia/files_versions.po
index d0287f45fff..f3b805ad932 100644
--- a/l10n/ia/files_versions.po
+++ b/l10n/ia/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/ia/lib.po b/l10n/ia/lib.po
index ac4ffabd499..bcd34dae7d3 100644
--- a/l10n/ia/lib.po
+++ b/l10n/ia/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Adjuta"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personal"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Configurationes"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Usatores"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,152 @@ msgstr "Texto"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po
index 5030c5a00a3..e63d5efd076 100644
--- a/l10n/ia/settings.po
+++ b/l10n/ia/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -23,6 +23,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -31,7 +40,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -43,22 +52,10 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID cambiate"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Requesta invalide"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr ""
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -67,6 +64,10 @@ msgstr ""
msgid "Language changed"
msgstr "Linguage cambiate"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Requesta invalide"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -81,19 +82,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr ""
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr ""
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr ""
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Interlingua"
@@ -105,18 +134,22 @@ msgstr "Adder tu application"
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Selectionar un app"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Actualisar"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -146,83 +179,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clientes"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Contrasigno"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Non pote cambiar tu contrasigno"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Contrasigno currente"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nove contrasigno"
-#: templates/personal.php:26
-msgid "show"
-msgstr "monstrar"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Cambiar contrasigno"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-posta"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Tu adresse de e-posta"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr ""
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Linguage"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Adjuta a traducer"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +269,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nomine"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Gruppos"
@@ -248,26 +285,34 @@ msgstr "Crear"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Altere"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Deler"
diff --git a/l10n/ia/user_ldap.po b/l10n/ia/user_ldap.po
index cae53dce374..4c35ec08299 100644
--- a/l10n/ia/user_ldap.po
+++ b/l10n/ia/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Adjuta"
diff --git a/l10n/ia/user_webdavauth.po b/l10n/ia/user_webdavauth.po
index d14ab08ef72..cee575b4381 100644
--- a/l10n/ia/user_webdavauth.po
+++ b/l10n/ia/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/id/core.po b/l10n/id/core.po
index bc8894d1f01..315f226f156 100644
--- a/l10n/id/core.po
+++ b/l10n/id/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -21,24 +21,24 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -54,8 +54,9 @@ msgid "No category to add?"
msgstr "Tidak ada kategori yang akan ditambahkan?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Kategori ini sudah ada:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -83,59 +84,135 @@ msgstr "Tidak ada kategori terpilih untuk penghapusan."
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "minggu"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "senin"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "selasa"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "rabu"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "kamis"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "jumat"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "sabtu"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januari"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februari"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Maret"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mei"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Agustus"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Nopember"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Desember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Setelan"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "beberapa detik yang lalu"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 menit lalu"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "hari ini"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "kemarin"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "bulan kemarin"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "beberapa bulan lalu"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "tahun kemarin"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "beberapa tahun lalu"
@@ -165,8 +242,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "gagal"
@@ -178,123 +255,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "berbagi"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "gagal ketika membagikan"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "gagal ketika membatalkan pembagian"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "gagal ketika merubah perijinan"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "dibagikan dengan anda dan grup {group} oleh {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "dibagikan dengan anda oleh {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "bagikan dengan"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "bagikan dengan tautan"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "lindungi dengan kata kunci"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Password"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "set tanggal kadaluarsa"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "tanggal kadaluarsa"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "berbagi memlalui surel:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "tidak ada orang ditemukan"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "berbagi ulang tidak diperbolehkan"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "dibagikan dalam {item} dengan {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "batalkan berbagi"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "dapat merubah"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "kontrol akses"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "buat baru"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "baharui"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "hapus"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "bagikan"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "dilindungi kata kunci"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "gagal melepas tanggal kadaluarsa"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "gagal memasang tanggal kadaluarsa"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "reset password ownCloud"
@@ -376,7 +471,7 @@ msgstr "Edit kategori"
msgid "Add"
msgstr "Tambahkan"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "peringatan keamanan"
@@ -386,147 +481,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "tanpa generator angka acak, penyerang mungkin dapat menebak token reset kata kunci dan mengambil alih akun anda."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Buat sebuah <strong>akun admin</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Tingkat Lanjut"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Folder data"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfigurasi database"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "akan digunakan"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Pengguna database"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Password database"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nama database"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "tablespace basis data"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Host database"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Selesaikan instalasi"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "minggu"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "senin"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "selasa"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "rabu"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "kamis"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "jumat"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "sabtu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januari"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februari"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Maret"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mei"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Agustus"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Nopember"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Desember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "web service dibawah kontrol anda"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Keluar"
@@ -548,17 +571,17 @@ msgstr "mohon ubah kata kunci untuk mengamankan akun anda"
msgid "Lost your password?"
msgstr "Lupa password anda?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "selalu login"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Masuk"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Anda telah keluar."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -572,17 +595,3 @@ msgstr "selanjutnya"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "peringatan keamanan!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "mohon periksa kembali kata kunci anda. <br/>untuk alasan keamanan,anda akan sesekali diminta untuk memasukan kata kunci lagi."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "periksa kembali"
diff --git a/l10n/id/files.po b/l10n/id/files.po
index cd2442d53bd..e8dd16f5fad 100644
--- a/l10n/id/files.po
+++ b/l10n/id/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -25,55 +25,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Tidak ada galat, berkas sukses diunggah"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "File yang diunggah melampaui directive MAX_FILE_SIZE yang disebutan dalam form HTML."
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Berkas hanya diunggah sebagian"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Tidak ada berkas yang diunggah"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Kehilangan folder temporer"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Gagal menulis ke disk"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -81,149 +81,152 @@ msgstr ""
msgid "Files"
msgstr "Berkas"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "batalkan berbagi"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Hapus"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Menunggu"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "mengganti"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "batalkan"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "batal dikerjakan"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:290
-msgid "deleted {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "membuat berkas ZIP, ini mungkin memakan waktu."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Terjadi Galat Pengunggahan"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "tutup"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Menunggu"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Pengunggahan dibatalkan."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "tautan tidak boleh kosong"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nama"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Ukuran"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Dimodifikasi"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Unggah"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Penanganan berkas"
@@ -272,36 +275,44 @@ msgstr "Folder"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Unggah"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Batal mengunggah"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Tidak ada apa-apa di sini. Unggah sesuatu!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Unduh"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "batalkan berbagi"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Unggahan terlalu besar"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Berkas yang anda coba unggah melebihi ukuran maksimum untuk pengunggahan berkas di server ini."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Berkas sedang dipindai, silahkan tunggu."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Sedang memindai"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/id/files_encryption.po b/l10n/id/files_encryption.po
index 5ab924354cb..28191e4f23c 100644
--- a/l10n/id/files_encryption.po
+++ b/l10n/id/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-21 02:03+0200\n"
-"PO-Revision-Date: 2012-10-20 23:08+0000\n"
-"Last-Translator: elmakong <mr.pige_ina@yahoo.co.id>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "enkripsi"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "pengecualian untuk tipe file berikut dari enkripsi"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "tidak ada"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "aktifkan enkripsi"
diff --git a/l10n/id/files_trashbin.po b/l10n/id/files_trashbin.po
new file mode 100644
index 00000000000..70eaf1fc216
--- /dev/null
+++ b/l10n/id/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "nama"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/id/files_versions.po b/l10n/id/files_versions.po
index 5b9201c347e..490e0fc8163 100644
--- a/l10n/id/files_versions.po
+++ b/l10n/id/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-21 02:03+0200\n"
-"PO-Revision-Date: 2012-10-20 23:40+0000\n"
-"Last-Translator: elmakong <mr.pige_ina@yahoo.co.id>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "kadaluarsakan semua versi"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "riwayat"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "versi"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "ini akan menghapus semua versi backup yang ada dari file anda"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/id/lib.po b/l10n/id/lib.po
index 4987faad0d4..32d4cfd14ee 100644
--- a/l10n/id/lib.po
+++ b/l10n/id/lib.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Mohamad Hasan Al Banna <se7entime@gmail.com>, 2013.
# <mr.pige_ina@yahoo.co.id>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -18,51 +19,55 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "bantu"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "perseorangan"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "pengaturan"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "pengguna"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "aplikasi"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "admin"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "download ZIP sedang dimatikan"
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "file harus di unduh satu persatu"
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "kembali ke daftar file"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "file yang dipilih terlalu besar untuk membuat file zip"
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "aplikasi tidak diaktifkan"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "autentikasi bermasalah"
@@ -72,7 +77,7 @@ msgstr "token kadaluarsa.mohon perbaharui laman."
#: search/provider/file.php:17 search/provider/file.php:35
msgid "Files"
-msgstr ""
+msgstr "Berkas"
#: search/provider/file.php:26 search/provider/file.php:33
msgid "Text"
@@ -80,57 +85,154 @@ msgstr "teks"
#: search/provider/file.php:29
msgid "Images"
+msgstr "Gambar"
+
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
msgstr ""
-#: template.php:103
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "beberapa detik yang lalu"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 menit lalu"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d menit lalu"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
-msgstr ""
+msgstr "1 jam yang lalu"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
-msgstr ""
+msgstr "%d jam yang lalu"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "hari ini"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "kemarin"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d hari lalu"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "bulan kemarin"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
-msgstr ""
+msgstr "%d bulan yang lalu"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "tahun kemarin"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "beberapa tahun lalu"
@@ -150,4 +252,4 @@ msgstr "pengecekan pembaharuan sedang non-aktifkan"
#: vcategories.php:188 vcategories.php:249
#, php-format
msgid "Could not find category \"%s\""
-msgstr ""
+msgstr "Tidak dapat menemukan kategori \"%s\""
diff --git a/l10n/id/settings.po b/l10n/id/settings.po
index 1abd347dc88..78a5b777e3d 100644
--- a/l10n/id/settings.po
+++ b/l10n/id/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -25,6 +25,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "autentikasi bermasalah"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -33,7 +42,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -45,22 +54,10 @@ msgstr "Email tersimpan"
msgid "Invalid email"
msgstr "Email tidak sah"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID telah dirubah"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Permintaan tidak valid"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "autentikasi bermasalah"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -69,6 +66,10 @@ msgstr ""
msgid "Language changed"
msgstr "Bahasa telah diganti"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Permintaan tidak valid"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -83,19 +84,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "NonAktifkan"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Aktifkan"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "kesalahan"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Menyimpan..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -107,18 +136,22 @@ msgstr "Tambahkan App anda"
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Pilih satu aplikasi"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Lihat halaman aplikasi di apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Pembaruan"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -148,83 +181,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klien"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Password"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Tidak dapat merubah password anda"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Password saat ini"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "kata kunci baru"
-#: templates/personal.php:26
-msgid "show"
-msgstr "perlihatkan"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Rubah password"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Alamat email anda"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Masukkan alamat email untuk mengaktifkan pemulihan password"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Bahasa"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Bantu menerjemahkan"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -234,11 +271,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nama"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Group"
@@ -250,26 +287,34 @@ msgstr "Buat"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Lain-lain"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Admin Grup"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Hapus"
diff --git a/l10n/id/user_ldap.po b/l10n/id/user_ldap.po
index 193df390395..c105afaa81b 100644
--- a/l10n/id/user_ldap.po
+++ b/l10n/id/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "penghapusan gagal"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "kata kunci"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "gunakan saringan login"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "saringan grup"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "port"
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "gunakan TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "jangan gunakan untuk koneksi SSL, itu akan gagal."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "matikan validasi sertivikat SSL"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "tidak disarankan, gunakan hanya untuk pengujian."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "dalam detik. perubahan mengosongkan cache"
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "dalam bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "dalam detik. perubahan mengosongkan cache"
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "bantuan"
diff --git a/l10n/id/user_webdavauth.po b/l10n/id/user_webdavauth.po
index fc5b698ce72..9ae62e5a2cf 100644
--- a/l10n/id/user_webdavauth.po
+++ b/l10n/id/user_webdavauth.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Widya Walesa <walecha99@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-05 00:19+0100\n"
+"PO-Revision-Date: 2013-02-04 02:30+0000\n"
+"Last-Translator: w41l <walecha99@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,13 +18,17 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Otentikasi WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "URL: http://"
-#: templates/settings.php:6
+#: templates/settings.php:7
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud akan mengirimkan informasi pengguna ke URL ini. Pengaya akan mengecek respon dan menginterpretasikan kode status HTTP 401 serta 403 sebagai informasi yang keliru, sedangkan respon lainnya dianggap benar."
diff --git a/l10n/is/core.po b/l10n/is/core.po
index ae7fa02d39f..5dd96b65d4b 100644
--- a/l10n/is/core.po
+++ b/l10n/is/core.po
@@ -4,13 +4,13 @@
#
# Translators:
# <kaztraz@gmail.com>, 2012.
-# <sveinng@gmail.com>, 2012.
+# <sveinng@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
@@ -19,24 +19,24 @@ msgstr ""
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Notandinn %s deildi skrá með þér"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Notandinn %s deildi möppu með þér"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Notandinn %s deildi skránni \"%s\" með þér. Hægt er að hlaða henni niður hér: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -49,11 +49,12 @@ msgstr "Flokkur ekki gefin"
#: ajax/vcategories/add.php:30
msgid "No category to add?"
-msgstr "Enginn flokkur til að <strong>bæta við</strong>?"
+msgstr "Enginn flokkur til að bæta við?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Þessi flokkur er þegar til:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -81,59 +82,135 @@ msgstr "Enginn flokkur valinn til eyðingar."
msgid "Error removing %s from favorites."
msgstr "Villa við að fjarlægja %s úr eftirlæti."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Sunnudagur"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Mánudagur"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Þriðjudagur"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Miðvikudagur"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Fimmtudagur"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Föstudagur"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Laugardagur"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Janúar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Febrúar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Mars"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Apríl"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maí"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Júní"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Júlí"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Ãgúst"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Október"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Nóvember"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Desember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Stillingar"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "sek síðan"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 min síðan"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} min síðan"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "Fyrir 1 klst."
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "fyrir {hours} klst."
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "í dag"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "í gær"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} dagar síðan"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "síðasta mánuði"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "fyrir {months} mánuðum"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "mánuðir síðan"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "síðasta ári"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "árum síðan"
@@ -163,10 +240,10 @@ msgid "The object type is not specified."
msgstr "Tegund ekki tilgreind"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
-msgstr "<strong>Villa</strong>"
+msgstr "Villa"
#: js/oc-vcategories.js:179
msgid "The app name is not specified."
@@ -176,126 +253,144 @@ msgstr "Nafn forrits ekki tilgreint"
msgid "The required file {file} is not installed!"
msgstr "Umbeðina skráin {file} ekki tiltæk!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Deila"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Villa við deilingu"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Villa við að hætta deilingu"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Villa við að breyta aðgangsheimildum"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Deilt með þér og hópnum {group} af {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Deilt með þér af {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Deila með"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Deila með veftengli"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Verja með lykilorði"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Lykilorð"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Senda vefhlekk í tölvupóstu til notenda"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Senda"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Setja gildistíma"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Gildir til"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Deila með tölvupósti:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Engir notendur fundust"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Endurdeiling er ekki leyfð"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Deilt með {item} ásamt {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Hætta deilingu"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "getur breytt"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "aðgangsstýring"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "mynda"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "uppfæra"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "eyða"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "deila"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Verja með lykilorði"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Villa við að aftengja gildistíma"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Villa við að setja gildistíma"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Sendi ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Tölvupóstur sendur"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
-msgstr "endursetja ownCloud <strong>lykilorð</strong>"
+msgstr "endursetja ownCloud lykilorð"
#: lostpassword/templates/email.php:2
msgid "Use the following link to reset your password: {link}"
@@ -356,7 +451,7 @@ msgstr "Vefstjórn"
#: strings.php:9
msgid "Help"
-msgstr "Help"
+msgstr "Hjálp"
#: templates/403.php:12
msgid "Access forbidden"
@@ -364,7 +459,7 @@ msgstr "Aðgangur bannaður"
#: templates/404.php:12
msgid "Cloud not found"
-msgstr "Skýið finnst eigi"
+msgstr "Ský finnst ekki"
#: templates/edit_categories_dialog.php:4
msgid "Edit categories"
@@ -374,7 +469,7 @@ msgstr "Breyta flokkum"
msgid "Add"
msgstr "Bæta"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Öryggis aðvörun"
@@ -384,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr "Enginn traustur slembitölugjafi í boði, vinsamlegast virkjaðu PHP OpenSSL viðbótina."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Ãn öruggs slembitölugjafa er mögulegt að sjá fyrir öryggis auðkenni til að endursetja lykilorð og komast inn á aðganginn þinn."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Gagnamappan þín er að öllum líkindum aðgengileg frá internetinu. Skráin .htaccess sem fylgir með ownCloud er ekki að virka. Við mælum eindregið með því að þú stillir vefþjóninn þannig að gagnamappan verði ekki aðgengileg frá internetinu eða færir hana út fyrir vefrótina."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Útbúa <strong>vefstjóra aðgang</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Ãtarlegt"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Gagnamappa"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Stilla gagnagrunn"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "verður notað"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
-msgstr "Notandi gagnagrunns"
+msgstr "Gagnagrunns notandi"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
-msgstr "Lykilorð gagnagrunns"
+msgstr "Gagnagrunns lykilorð"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nafn gagnagrunns"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Töflusvæði gagnagrunns"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Netþjónn gagnagrunns"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
-msgstr "Ljúka uppsetningu"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Sunnudagur"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Mánudagur"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Þriðjudagur"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Miðvikudagur"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Fimmtudagur"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Föstudagur"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Laugardagur"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Janúar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Febrúar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Mars"
+msgstr "Virkja uppsetningu"
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Apríl"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maí"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Júní"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Júlí"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Ãgúst"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Október"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Nóvember"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Desember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "vefþjónusta undir þinni stjórn"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Útskrá"
@@ -546,17 +569,17 @@ msgstr "Vinsamlegast breyttu lykilorðinu þínu til að tryggja öryggi þitt."
msgid "Lost your password?"
msgstr "Týndir þú lykilorðinu?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "muna eftir mér"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "<strong>Skrá inn</strong>"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Þú ert útskráð(ur)."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,18 +592,4 @@ msgstr "næsta"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Öryggis aðvörun!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Vinsamlegast staðfestu lykilorðið þitt.<br/>à öryggisskyni munum við biðja þig um að skipta um lykilorð af og til."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Staðfesta"
+msgstr "Uppfæri ownCloud í útgáfu %s, það gæti tekið smá stund."
diff --git a/l10n/is/files.po b/l10n/is/files.po
index d627daf38bf..c4b5238a062 100644
--- a/l10n/is/files.po
+++ b/l10n/is/files.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <sveinng@gmail.com>, 2012.
+# <sveinng@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
@@ -21,207 +21,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Gat ekki fært %s - Skrá með þessu nafni er þegar til"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Gat ekki fært %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Gat ekki endurskýrt skrá"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Engin skrá var send inn. Óþekkt villa."
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Engin villa, innsending heppnaðist"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Innsend skrá er stærri en upload_max stillingin í php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Innsenda skráin er stærri en MAX_FILE_SIZE sem skilgreint er í HTML sniðinu."
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Einungis hluti af innsendri skrá skilaði sér"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Engin skrá skilaði sér"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Vantar bráðabirgðamöppu"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Tókst ekki að skrifa á disk"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Ógild mappa."
#: appinfo/app.php:10
msgid "Files"
msgstr "Skrár"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Hætta deilingu"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Eyða"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Endurskýra"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Bíður"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} er þegar til"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "yfirskrifa"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "stinga upp á nafni"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "hætta við"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "endurskýrði {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "afturkalla"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "yfirskrifaði {new_name} með {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "Hætti við deilingu á {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "eyddi {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' er ekki leyfilegt nafn."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Nafn skráar má ekki vera tómt"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ógilt nafn, táknin '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' eru ekki leyfð."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "bý til ZIP skrá, það gæti tekið smá stund."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skráin er 0 bæti."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Villa við innsendingu"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Loka"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Bíður"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 skrá innsend"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} skrár innsendar"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Hætt við innsendingu."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "Vefslóð má ekki vera tóm."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} skrár skimaðar"
+msgstr "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud"
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "villa við skimun"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nafn"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Stærð"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Breytt"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 mappa"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} möppur"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 skrá"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} skrár"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Senda inn"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Meðhöndlun skrár"
@@ -270,36 +273,44 @@ msgstr "Mappa"
msgid "From link"
msgstr "Af tengli"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Senda inn"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Hætta við innsendingu"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
-msgstr "Ekkert hér. Sendu eitthvað inn!"
+msgstr "Ekkert hér. Settu eitthvað inn!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Niðurhal"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Hætta deilingu"
+
+#: templates/index.php:105
msgid "Upload too large"
-msgstr "Innsend skrá of stór"
+msgstr "Innsend skrá er of stór"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Verið er að skima skrár, vinsamlegast hinkraðu."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Er að skima"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/is/files_encryption.po b/l10n/is/files_encryption.po
index 3dfd91e61ab..63f151c73c1 100644
--- a/l10n/is/files_encryption.po
+++ b/l10n/is/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 19:56+0000\n"
-"Last-Translator: sveinn <sveinng@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Dulkóðun"
-#: templates/settings.php:6
-msgid "Enable Encryption"
-msgstr "Virkja dulkóðun"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
#: templates/settings.php:7
-msgid "None"
-msgstr "Ekkert"
+msgid "Exclude the following file types from encryption:"
+msgstr ""
#: templates/settings.php:12
-msgid "Exclude the following file types from encryption"
-msgstr "Undanskilja eftirfarandi skráartegundir frá dulkóðun"
+msgid "None"
+msgstr "Ekkert"
diff --git a/l10n/is/files_trashbin.po b/l10n/is/files_trashbin.po
new file mode 100644
index 00000000000..808dfe5a4c3
--- /dev/null
+++ b/l10n/is/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: is\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nafn"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 mappa"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} möppur"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 skrá"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} skrár"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/is/files_versions.po b/l10n/is/files_versions.po
index bc2e72de575..5ee90ab20db 100644
--- a/l10n/is/files_versions.po
+++ b/l10n/is/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 17:42+0000\n"
-"Last-Translator: sveinn <sveinng@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:7
-msgid "Expire all versions"
-msgstr "Úrelda allar útgáfur"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Saga"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Útgáfur"
-
-#: templates/settings-personal.php:10
-msgid "This will delete all existing backup versions of your files"
-msgstr "Þetta mun eyða öllum afritum af skránum þínum"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/is/lib.po b/l10n/is/lib.po
index 0e7cb461873..034f5b7edab 100644
--- a/l10n/is/lib.po
+++ b/l10n/is/lib.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 15:15+0000\n"
-"Last-Translator: sveinn <sveinng@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Hjálp"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Um mig"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Stillingar"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Notendur"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Forrit"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Stjórnun"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Slökkt á ZIP niðurhali."
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Skrárnar verður að sækja eina og eina"
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Aftur í skrár"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Valdar skrár eru of stórar til að búa til ZIP skrá."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Forrit ekki virkt"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Villa við auðkenningu"
@@ -82,55 +86,152 @@ msgstr "Texti"
msgid "Images"
msgstr "Myndir"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "sek."
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "Fyrir 1 mínútu"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "fyrir %d mínútum"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Fyrir 1 klst."
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "fyrir %d klst."
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "í dag"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "í gær"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "fyrir %d dögum"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "síðasta mánuði"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "fyrir %d mánuðum"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "síðasta ári"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "einhverjum árum"
diff --git a/l10n/is/settings.po b/l10n/is/settings.po
index 5b2d7ad671a..985e8df4f92 100644
--- a/l10n/is/settings.po
+++ b/l10n/is/settings.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <sveinng@gmail.com>, 2012.
+# <sveinng@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 17:53+0000\n"
-"Last-Translator: sveinn <sveinng@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,6 +22,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Ekki tókst að hlaða lista frá forrita síðu"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Villa við auðkenningu"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Hópur er þegar til"
@@ -30,7 +39,7 @@ msgstr "Hópur er þegar til"
msgid "Unable to add group"
msgstr "Ekki tókst að bæta við hóp"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Gat ekki virkjað forrit"
@@ -42,22 +51,10 @@ msgstr "Netfang vistað"
msgid "Invalid email"
msgstr "Ógilt netfang"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID breytt"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ógild fyrirspurn"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ekki tókst að eyða hóp"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Villa við auðkenningu"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ekki tókst að eyða notenda"
@@ -66,6 +63,10 @@ msgstr "Ekki tókst að eyða notenda"
msgid "Language changed"
msgstr "Tungumáli breytt"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ógild fyrirspurn"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp"
@@ -80,19 +81,47 @@ msgstr "Ekki tókst að bæta notenda við hópinn %s"
msgid "Unable to remove user from group %s"
msgstr "Ekki tókst að fjarlægja notanda úr hópnum %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Gera óvirkt"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Virkja"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Villa"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Er að vista ..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__nafn_tungumáls__"
@@ -104,17 +133,21 @@ msgstr "Bæta við forriti"
msgid "More Apps"
msgstr "Fleiri forrit"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Veldu forrit"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
-msgstr "Skoða forrita síðuna hjá apps.owncloud.com"
+msgstr "Skoða síðu forrits hjá apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
-msgstr ""
+msgstr "<span class=\"licence\"></span>-leyfi skráð af <span class=\"author\"></span>"
+
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Uppfæra"
#: templates/help.php:3
msgid "User Documentation"
@@ -145,83 +178,87 @@ msgstr "Borgaður stuðningur"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Þú hefur notað <strong>%s</strong> af tiltæku <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Notendahugbúnaður"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Hlaða niður notendahugbúnaði"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Hlaða niður Andoid hugbúnaði"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Hlaða niður iOS hugbúnaði"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Lykilorð"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Lykilorði þínu hefur verið breytt"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ekki tókst að breyta lykilorðinu þínu"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Núverandi lykilorð"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nýtt lykilorð"
-#: templates/personal.php:26
-msgid "show"
-msgstr "sýna"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Breyta lykilorði"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Netfang"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Netfangið þitt"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Sláðu inn netfangið þitt til að virkja endurheimt á lykilorði"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Tungumál"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Hjálpa við þýðingu"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Notaðu þessa vefslóð til að tengjast ownCloud svæðinu þínu"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Útgáfa"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -231,11 +268,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "Þ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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nafn"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Hópar"
@@ -247,26 +284,34 @@ msgstr "Búa til"
msgid "Default Storage"
msgstr "Sjálfgefin gagnageymsla"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Ótakmarkað"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Annað"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
-msgstr "Hópa stjóri"
+msgstr "Hópstjóri"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "gagnapláss"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr "Sjálfgefið"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Eyða"
diff --git a/l10n/is/user_ldap.po b/l10n/is/user_ldap.po
index 828b0b2693a..7bc782a7b3c 100644
--- a/l10n/is/user_ldap.po
+++ b/l10n/is/user_ldap.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 19:00+0000\n"
-"Last-Translator: sveinn <sveinng@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Netþjónn"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Lykilorð"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Hjálp"
diff --git a/l10n/is/user_webdavauth.po b/l10n/is/user_webdavauth.po
index 859ebae1986..8bf05572184 100644
--- a/l10n/is/user_webdavauth.po
+++ b/l10n/is/user_webdavauth.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 21:13+0000\n"
-"Last-Translator: sveinn <sveinng@gmail.com>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "Vefslóð: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud mun senda auðkenni notenda á þessa vefslóð og túkla svörin http 401 og http 403 sem rangar auðkenniupplýsingar og öll önnur svör sem rétt."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr ""
diff --git a/l10n/it/core.po b/l10n/it/core.po
index e2b2ba2f565..bca11b8fb89 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -6,14 +6,15 @@
# <cosenal@gmail.com>, 2011.
# Francesco Apruzzese <cescoap@gmail.com>, 2011, 2012.
# <marco@carnazzo.it>, 2011, 2012.
+# <pgcloud@imballaggi.net>, 2013.
# <rb.colombo@gmail.com>, 2011.
# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 05:14+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 00:44+0000\n"
"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
@@ -22,24 +23,24 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "L'utente %s ha condiviso un file con te"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "L'utente %s ha condiviso una cartella con te"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "L'utente %s ha condiviso il file \"%s\" con te. È disponibile per lo scaricamento qui: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -55,8 +56,9 @@ msgid "No category to add?"
msgstr "Nessuna categoria da aggiungere?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Questa categoria esiste già: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Questa categoria esiste già: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -84,59 +86,135 @@ msgstr "Nessuna categoria selezionata per l'eliminazione."
msgid "Error removing %s from favorites."
msgstr "Errore durante la rimozione di %s dai preferiti."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Domenica"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Lunedì"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Martedì"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Mercoledì"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Giovedì"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Venerdì"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sabato"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Gennaio"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Febbraio"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Marzo"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Aprile"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maggio"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Giugno"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Luglio"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Agosto"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Settembre"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Ottobre"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembre"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Dicembre"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Impostazioni"
-#: js/js.js:704
+#: js/js.js:766
msgid "seconds ago"
msgstr "secondi fa"
-#: js/js.js:705
+#: js/js.js:767
msgid "1 minute ago"
msgstr "Un minuto fa"
-#: js/js.js:706
+#: js/js.js:768
msgid "{minutes} minutes ago"
msgstr "{minutes} minuti fa"
-#: js/js.js:707
+#: js/js.js:769
msgid "1 hour ago"
msgstr "1 ora fa"
-#: js/js.js:708
+#: js/js.js:770
msgid "{hours} hours ago"
msgstr "{hours} ore fa"
-#: js/js.js:709
+#: js/js.js:771
msgid "today"
msgstr "oggi"
-#: js/js.js:710
+#: js/js.js:772
msgid "yesterday"
msgstr "ieri"
-#: js/js.js:711
+#: js/js.js:773
msgid "{days} days ago"
msgstr "{days} giorni fa"
-#: js/js.js:712
+#: js/js.js:774
msgid "last month"
msgstr "mese scorso"
-#: js/js.js:713
+#: js/js.js:775
msgid "{months} months ago"
msgstr "{months} mesi fa"
-#: js/js.js:714
+#: js/js.js:776
msgid "months ago"
msgstr "mesi fa"
-#: js/js.js:715
+#: js/js.js:777
msgid "last year"
msgstr "anno scorso"
-#: js/js.js:716
+#: js/js.js:778
msgid "years ago"
msgstr "anni fa"
@@ -166,8 +244,8 @@ msgid "The object type is not specified."
msgstr "Il tipo di oggetto non è specificato."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Errore"
@@ -179,123 +257,141 @@ msgstr "Il nome dell'applicazione non è specificato."
msgid "The required file {file} is not installed!"
msgstr "Il file richiesto {file} non è installato!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Condividi"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Condivisi"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Errore durante la condivisione"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Errore durante la rimozione della condivisione"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Errore durante la modifica dei permessi"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Condiviso con te e con il gruppo {group} da {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Condiviso con te da {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Condividi con"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Condividi con collegamento"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Proteggi con password"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Password"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Invia collegamento via email"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Invia"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Imposta data di scadenza"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Data di scadenza"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Condividi tramite email:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Non sono state trovate altre persone"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "La ri-condivisione non è consentita"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Condiviso in {item} con {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Rimuovi condivisione"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "può modificare"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "controllo d'accesso"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "creare"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "aggiornare"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "eliminare"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "condividere"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Protetta da password"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Errore durante la rimozione della data di scadenza"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Errore durante l'impostazione della data di scadenza"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "Invio in corso..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "Messaggio inviato"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "L'aggiornamento non è riuscito. Segnala il problema alla <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">comunità di ownCloud</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "L'aggiornamento è stato effettuato correttamente. Stai per essere reindirizzato a ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Ripristino password di ownCloud"
@@ -377,7 +473,7 @@ msgstr "Modifica le categorie"
msgid "Add"
msgstr "Aggiungi"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Avviso di sicurezza"
@@ -387,147 +483,75 @@ msgid ""
"OpenSSL extension."
msgstr "Non è disponibile alcun generatore di numeri casuali sicuro. Abilita l'estensione OpenSSL di PHP"
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebbe riuscire a individuare i token di ripristino delle password e impossessarsi del tuo account."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet. Il file .htaccess fornito da ownCloud non funziona. Ti suggeriamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o sposta tale cartella fuori dalla radice del sito."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Per informazioni su come configurare correttamente il server, vedi la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentazione</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Crea un <strong>account amministratore</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avanzate"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Cartella dati"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configura il database"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "sarà utilizzato"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Utente del database"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Password del database"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nome del database"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Spazio delle tabelle del database"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Host del database"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Termina la configurazione"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Domenica"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Lunedì"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Martedì"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Mercoledì"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Giovedì"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Venerdì"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sabato"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Gennaio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Febbraio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Marzo"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Aprile"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maggio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Giugno"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Luglio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Agosto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Settembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Ottobre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Novembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Dicembre"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "servizi web nelle tue mani"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Esci"
@@ -539,7 +563,7 @@ msgstr "Accesso automatico rifiutato."
msgid ""
"If you did not change your password recently, your account may be "
"compromised!"
-msgstr "Se non hai cambiato la password recentemente, il tuo account potrebbe essere stato compromesso."
+msgstr "Se non hai cambiato la password recentemente, il tuo account potrebbe essere compromesso."
#: templates/login.php:13
msgid "Please change your password to secure your account again."
@@ -549,17 +573,17 @@ msgstr "Cambia la password per rendere nuovamente sicuro il tuo account."
msgid "Lost your password?"
msgstr "Hai perso la password?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "ricorda"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Accedi"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Sei uscito."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Accessi alternativi"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -572,18 +596,4 @@ msgstr "successivo"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr "Aggiornamento di ownCloud alla versione %s in corso, potrebbe richiedere del tempo."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Avviso di sicurezza"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Verifica la tua password.<br/>Per motivi di sicurezza, potresti ricevere una richiesta di digitare nuovamente la password."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verifica"
+msgstr "Aggiornamento di ownCloud alla versione %s in corso, ciò potrebbe richiedere del tempo."
diff --git a/l10n/it/files.po b/l10n/it/files.po
index 162104cd8c2..206c29c0481 100644
--- a/l10n/it/files.po
+++ b/l10n/it/files.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-09 23:50+0000\n"
+"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,57 +24,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Impossibile spostare %s - un file con questo nome esiste già"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Impossibile spostare %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Impossibile rinominare il file"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Nessun file è stato inviato. Errore sconosciuto"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Non ci sono errori, file caricato con successo"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Il file caricato supera la direttiva upload_max_filesize in php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Il file caricato supera il valore MAX_FILE_SIZE definito nel form HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Il file è stato parzialmente caricato"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Nessun file è stato caricato"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Cartella temporanea mancante"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Scrittura su disco non riuscita"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Spazio disponibile insufficiente"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Spazio di archiviazione insufficiente"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Cartella non valida."
@@ -82,149 +82,152 @@ msgstr "Cartella non valida."
msgid "Files"
msgstr "File"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Rimuovi condivisione"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Elimina definitivamente"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Elimina"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Rinomina"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "In corso"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} esiste già"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "sostituisci"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "suggerisci nome"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "annulla"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "sostituito {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "annulla"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "sostituito {new_name} con {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "non condivisi {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "esegui l'operazione di eliminazione"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "eliminati {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' non è un nome file valido."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Il nome del file non può essere vuoto."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "creazione file ZIP, potrebbe richiedere del tempo."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Errore di invio"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Chiudi"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "In corso"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 file in fase di caricamento"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} file in fase di caricamentoe"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Invio annullato"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "L'URL non può essere vuoto."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} file analizzati"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "errore durante la scansione"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Nome"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Dimensione"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Modificato"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 cartella"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} cartelle"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 file"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} file"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Carica"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Gestione file"
@@ -273,36 +276,44 @@ msgstr "Cartella"
msgid "From link"
msgstr "Da collegamento"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Carica"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Cestino"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Annulla invio"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Non c'è niente qui. Carica qualcosa!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Scarica"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Rimuovi condivisione"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Il file caricato è troppo grande"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "I file che stai provando a caricare superano la dimensione massima consentita su questo server."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Scansione dei file in corso, attendi"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Scansione corrente"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Aggiornamento della cache del filesystem in corso..."
diff --git a/l10n/it/files_encryption.po b/l10n/it/files_encryption.po
index 573a32a14a5..e94b7892213 100644
--- a/l10n/it/files_encryption.po
+++ b/l10n/it/files_encryption.po
@@ -3,33 +3,37 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-15 02:02+0200\n"
-"PO-Revision-Date: 2012-08-14 11:49+0000\n"
-"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Cifratura"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Escludi i seguenti tipi di file dalla cifratura"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "La cifratura dei file è abilitata."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "I seguenti tipi di file non saranno cifrati:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Escludi i seguenti tipi di file dalla cifratura:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Nessuna"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Abilita cifratura"
diff --git a/l10n/it/files_trashbin.po b/l10n/it/files_trashbin.po
new file mode 100644
index 00000000000..f023541c851
--- /dev/null
+++ b/l10n/it/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Vincenzo Reale <vinx.reale@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-07 23:30+0000\n"
+"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
+"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "Impossibile eliminare %s definitivamente"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Impossibile ripristinare %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "esegui operazione di ripristino"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "elimina il file definitivamente"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nome"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Eliminati"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 cartella"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} cartelle"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 file"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} file"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Qui non c'è niente. Il tuo cestino è vuoto."
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Ripristina"
diff --git a/l10n/it/files_versions.po b/l10n/it/files_versions.po
index 273bdef29b0..8953241ed54 100644
--- a/l10n/it/files_versions.po
+++ b/l10n/it/files_versions.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-23 02:01+0200\n"
-"PO-Revision-Date: 2012-09-22 06:40+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-07 23:40+0000\n"
"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Scadenza di tutte le versioni"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Impossibild ripristinare: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "completata"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "Il file %s è stato ripristinato alla versione %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "non riuscita"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Il file %s non può essere ripristinato alla versione %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Non sono disponibili versioni precedenti"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Nessun percorso specificato"
#: js/versions.js:16
msgid "History"
msgstr "Cronologia"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versioni"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Ciò eliminerà tutte le versioni esistenti dei tuoi file"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Ripristina un file a una versione precedente facendo clic sul rispettivo pulsante di ripristino"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/it/lib.po b/l10n/it/lib.po
index 093eca463d1..0a332f9d91d 100644
--- a/l10n/it/lib.po
+++ b/l10n/it/lib.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-17 00:01+0100\n"
-"PO-Revision-Date: 2012-11-15 23:21+0000\n"
-"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Aiuto"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personale"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Impostazioni"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Utenti"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Applicazioni"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Lo scaricamento in formato ZIP è stato disabilitato."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "I file devono essere scaricati uno alla volta."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Torna ai file"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "I file selezionati sono troppo grandi per generare un file zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "non può essere determinato"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "L'applicazione non è abilitata"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Errore di autenticazione"
@@ -82,55 +86,152 @@ msgstr "Testo"
msgid "Images"
msgstr "Immagini"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Leggi attentamente le <a href='%s'>guide d'installazione</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "secondi fa"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minuto fa"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minuti fa"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 ora fa"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d ore fa"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "oggi"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ieri"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d giorni fa"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "il mese scorso"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d mesi fa"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "l'anno scorso"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "anni fa"
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index 046096abda4..59d52e0b9d5 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -7,15 +7,15 @@
# Francesco Apruzzese <cescoap@gmail.com>, 2011.
# <icewind1991@gmail.com>, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
-# <marco@carnazzo.it>, 2011, 2012.
+# <marco@carnazzo.it>, 2011-2013.
# <rb.colombo@gmail.com>, 2011.
-# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 07:47+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
@@ -28,6 +28,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Impossibile caricare l'elenco dall'App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Errore di autenticazione"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Impossibile cambiare il nome visualizzato"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Il gruppo esiste già"
@@ -36,7 +45,7 @@ msgstr "Il gruppo esiste già"
msgid "Unable to add group"
msgstr "Impossibile aggiungere il gruppo"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Impossibile abilitare l'applicazione."
@@ -48,22 +57,10 @@ msgstr "Email salvata"
msgid "Invalid email"
msgstr "Email non valida"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID modificato"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Richiesta non valida"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Impossibile eliminare il gruppo"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Errore di autenticazione"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Impossibile eliminare l'utente"
@@ -72,6 +69,10 @@ msgstr "Impossibile eliminare l'utente"
msgid "Language changed"
msgstr "Lingua modificata"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Richiesta non valida"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione"
@@ -86,19 +87,47 @@ msgstr "Impossibile aggiungere l'utente al gruppo %s"
msgid "Unable to remove user from group %s"
msgstr "Impossibile rimuovere l'utente dal gruppo %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Impossibile aggiornate l'applicazione."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Aggiorna a {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Disabilita"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Abilita"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Attendere..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Aggiornamento in corso..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Errore durante l'aggiornamento"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Errore"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Aggiornato"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Salvataggio in corso..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Italiano"
@@ -110,18 +139,22 @@ msgstr "Aggiungi la tua applicazione"
msgid "More Apps"
msgstr "Altre applicazioni"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Seleziona un'applicazione"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Vedere la pagina dell'applicazione su apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licenziato da <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Aggiorna"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Documentazione utente"
@@ -151,83 +184,87 @@ msgstr "Supporto commerciale"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Hai utilizzato <strong>%s</strong> dei <strong>%s</strong> disponibili"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Client"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Scarica client desktop"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Scarica client Android"
+msgid "Get the apps to sync your files"
+msgstr "Scarica le applicazioni per sincronizzare i tuoi file"
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Scarica client iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Password"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "La tua password è cambiata"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Modifica password non riuscita"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Password attuale"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nuova password"
-#: templates/personal.php:26
-msgid "show"
-msgstr "mostra"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Modifica password"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Nome visualizzato"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Il tuo nome visualizzato è stato cambiato"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Impossibile cambiare il tuo nome visualizzato"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Cambia il nome visualizzato"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Il tuo indirizzo email"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Inserisci il tuo indirizzo email per abilitare il recupero della password"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Lingua"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Migliora la traduzione"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Usa questo indirizzo per connetterti al tuo ownCloud dal tuo gestore file"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Versione"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -237,11 +274,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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> è licenziato nei termini della <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nome"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Nome utente"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Gruppi"
@@ -253,26 +290,34 @@ msgstr "Crea"
msgid "Default Storage"
msgstr "Archiviazione predefinita"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Illimitata"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Altro"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
-msgstr "Gruppo di amministrazione"
+msgstr "Gruppi amministrati"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Archiviazione"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "cambia il nome visualizzato"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "imposta una nuova password"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Predefinito"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Elimina"
diff --git a/l10n/it/user_ldap.po b/l10n/it/user_ldap.po
index 9dc0007050a..9dcf0043194 100644
--- a/l10n/it/user_ldap.po
+++ b/l10n/it/user_ldap.po
@@ -4,13 +4,13 @@
#
# Translators:
# Innocenzo Ventre <el.diabl09@gmail.com>, 2012.
-# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-16 00:11+0100\n"
-"PO-Revision-Date: 2012-12-15 10:28+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-07 23:40+0000\n"
"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
@@ -19,6 +19,58 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Eliminazione della configurazione del server non riuscita"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "La configurazione è valida e la connessione può essere stabilita."
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "La configurazione è valida, ma il Bind non è riuscito. Controlla le impostazioni del server e le credenziali."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "La configurazione non è valida. Controlla il log di ownCloud per ulteriori dettagli."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Eliminazione non riuscita"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Vuoi recuperare le impostazioni dalla configurazione recente del server?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Vuoi mantenere le impostazioni?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Impossibile aggiungere la configurazione del server"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Prova di connessione riuscita"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Prova di connessione non riuscita"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Vuoi davvero eliminare la configurazione attuale del server?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Conferma l'eliminazione"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -28,158 +80,232 @@ msgstr "<b>Avviso:</b> le applicazioni user_ldap e user_webdavauth sono incompat
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Avviso:</b> il modulo PHP LDAP richiesto non è installato, il motore non funzionerà. Chiedi al tuo amministratore di sistema di installarlo."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Avviso:</b> il modulo PHP LDAP non è installato, il motore non funzionerà. Chiedi al tuo amministratore di sistema di installarlo."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Configurazione del server"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Aggiungi configurazione del server"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "È possibile omettere il protocollo, ad eccezione se è necessario SSL. Quindi inizia con ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN base"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Un DN base per riga"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Puoi specificare una DN base per gli utenti ed i gruppi nella scheda Avanzate"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN utente"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agent,dc=example,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Password"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Per l'accesso anonimo, lasciare vuoti i campi DN e Password"
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtro per l'accesso utente"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Specifica quale filtro utilizzare quando si tenta l'accesso. %%uid sostituisce il nome utente all'atto dell'accesso."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "utilizza il segnaposto %%uid, ad esempio \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filtro per l'elenco utenti"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Specifica quale filtro utilizzare durante il recupero degli utenti."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "senza nessun segnaposto, per esempio \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtro per il gruppo"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Specifica quale filtro utilizzare durante il recupero dei gruppi."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "senza nessun segnaposto, per esempio \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Impostazioni di connessione"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Configurazione attiva"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Se deselezionata, questa configurazione sarà saltata."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Porta"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Struttura base dell'utente"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Host di backup (Replica)"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Struttura base del gruppo"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Fornisci un host di backup opzionale. Deve essere una replica del server AD/LDAP principale."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Associazione gruppo-utente "
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Porta di backup (Replica)"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Disabilita server principale"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Se abilitata, ownCloud si collegherà solo al server di replica."
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Usa TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Non utilizzare per le connessioni SSL, fallirà."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "Da non utilizzare per le connessioni LDAPS, non funzionerà."
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Case insensitve LDAP server (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Disattiva il controllo del certificato SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Se la connessione funziona esclusivamente con questa opzione, importa il certificato SSL del server LDAP nel tuo server ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Non consigliato, utilizzare solo per test."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "in secondi. Il cambio svuota la cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Impostazioni delle cartelle"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Campo per la visualizzazione del nome utente"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "L'attributo LDAP da usare per generare il nome dell'utente ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Struttura base dell'utente"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Un DN base utente per riga"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Attributi di ricerca utente"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Opzionale; un attributo per riga"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Campo per la visualizzazione del nome del gruppo"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "L'attributo LDAP da usare per generare il nome del gruppo ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Struttura base del gruppo"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Un DN base gruppo per riga"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Attributi di ricerca gruppo"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Associazione gruppo-utente "
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Attributi speciali"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "in byte"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "in secondi. Il cambio svuota la cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Lascia vuoto per il nome utente (predefinito). Altrimenti, specifica un attributo LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Aiuto"
diff --git a/l10n/it/user_webdavauth.po b/l10n/it/user_webdavauth.po
index 074902ec724..ba6bfbe7d44 100644
--- a/l10n/it/user_webdavauth.po
+++ b/l10n/it/user_webdavauth.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-22 00:24+0100\n"
-"PO-Revision-Date: 2012-12-21 08:45+0000\n"
+"POT-Creation-Date: 2013-01-17 00:26+0100\n"
+"PO-Revision-Date: 2013-01-16 06:51+0000\n"
"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Autenticazione WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud invierà le credenziali dell'utente a questo URL. Interpreta i codici http 401 e http 403 come credenziali errate e tutti gli altri codici come credenziali corrette."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud invierà le credenziali dell'utente a questo URL. Questa estensione controlla la risposta e interpreta i codici di stato 401 e 403 come credenziali non valide, e tutte le altre risposte come credenziali valide."
diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po
index d4c31fe92b0..312d7f72cef 100644
--- a/l10n/ja_JP/core.po
+++ b/l10n/ja_JP/core.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 00:41+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,24 +20,24 @@ msgstr ""
"Language: ja_JP\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "ユーザ %s ã¯ã‚ãªãŸã¨ãƒ•ァイルを共有ã—ã¦ã„ã¾ã™"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "ユーザ %s ã¯ã‚ãªãŸã¨ãƒ•ォルダを共有ã—ã¦ã„ã¾ã™"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "ユーザ %s ã¯ã‚ãªãŸã¨ãƒ•ァイル \"%s\" を共有ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,8 +53,9 @@ msgid "No category to add?"
msgstr "追加ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªã¯ã‚りã¾ã›ã‚“ã‹ï¼Ÿ"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "ã“ã®ã‚«ãƒ†ã‚´ãƒªã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr "ã“ã®ã‚«ãƒ†ã‚´ãƒªã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -82,59 +83,135 @@ msgstr "削除ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。"
msgid "Error removing %s from favorites."
msgstr "ãŠæ°—ã«å…¥ã‚Šã‹ã‚‰ %s ã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "æ—¥"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "月"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "ç«"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "æ°´"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "木"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "金"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "土"
+
+#: js/config.php:33
+msgid "January"
+msgstr "1月"
+
+#: js/config.php:33
+msgid "February"
+msgstr "2月"
+
+#: js/config.php:33
+msgid "March"
+msgstr "3月"
+
+#: js/config.php:33
+msgid "April"
+msgstr "4月"
+
+#: js/config.php:33
+msgid "May"
+msgstr "5月"
+
+#: js/config.php:33
+msgid "June"
+msgstr "6月"
+
+#: js/config.php:33
+msgid "July"
+msgstr "7月"
+
+#: js/config.php:33
+msgid "August"
+msgstr "8月"
+
+#: js/config.php:33
+msgid "September"
+msgstr "9月"
+
+#: js/config.php:33
+msgid "October"
+msgstr "10月"
+
+#: js/config.php:33
+msgid "November"
+msgstr "11月"
+
+#: js/config.php:33
+msgid "December"
+msgstr "12月"
+
+#: js/js.js:284
msgid "Settings"
msgstr "設定"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "ç§’å‰"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 分å‰"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} 分å‰"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 時間å‰"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} 時間å‰"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "今日"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "昨日"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} æ—¥å‰"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "一月å‰"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} 月å‰"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "月å‰"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "一年å‰"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "å¹´å‰"
@@ -164,8 +241,8 @@ msgid "The object type is not specified."
msgstr "ã‚ªãƒ–ã‚¸ã‚§ã‚¯ã‚¿ã‚¤ãƒ—ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "エラー"
@@ -177,123 +254,141 @@ msgstr "アプリåãŒã—ã¦ã„ã•れã¦ã„ã¾ã›ã‚“。"
msgid "The required file {file} is not installed!"
msgstr "å¿…è¦ãªãƒ•ァイル {file} ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“ï¼"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "共有"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "共有中"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "共有ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "共有解除ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "権é™å¤‰æ›´ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "ã‚ãªãŸã¨ {owner} ã®ã‚°ãƒ«ãƒ¼ãƒ— {group} ã§å…±æœ‰ä¸­"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "{owner} ã¨å…±æœ‰ä¸­"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "共有者"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "URLリンクã§å…±æœ‰"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "パスワードä¿è­·"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "パスワード"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "メールリンク"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "é€ä¿¡"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "有効期é™ã‚’設定"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "有効期é™"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "メール経由ã§å…±æœ‰:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "ユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "å†å…±æœ‰ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "{item} 内㧠{user} ã¨å…±æœ‰ä¸­"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "共有解除"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "編集å¯èƒ½"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "アクセス権é™"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "作æˆ"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "æ›´æ–°"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "削除"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "共有"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "パスワードä¿è­·"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "有効期é™ã®æœªè¨­å®šã‚¨ãƒ©ãƒ¼"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "有効期é™ã®è¨­å®šã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "é€ä¿¡ä¸­..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "メールをé€ä¿¡ã—ã¾ã—ãŸ"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "æ›´æ–°ã«æˆåŠŸã—ã¾ã—ãŸã€‚ã“ã®å•題を <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a> ã«ãƒ¬ãƒãƒ¼ãƒˆã—ã¦ãã ã•ã„。"
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "æ›´æ–°ã«æˆåŠŸã—ã¾ã—ãŸã€‚今ã™ãownCloudã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã€‚"
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloudã®ãƒ‘スワードをリセットã—ã¾ã™"
@@ -375,7 +470,7 @@ msgstr "カテゴリを編集"
msgid "Add"
msgstr "追加"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "セキュリティ警告"
@@ -385,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr "セキュアãªä¹±æ•°ç”Ÿæˆå™¨ãŒåˆ©ç”¨å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“。PHPã®OpenSSL拡張を有効ã«ã—ã¦ä¸‹ã•ã„。"
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "セキュアãªä¹±æ•°ç”Ÿæˆå™¨ãŒç„¡ã„å ´åˆã€æ”»æ’ƒè€…ã¯ãƒ‘スワードリセットã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’予測ã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ä¹—ã£å–られるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚"
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "データディレクトリã¨ãƒ•ã‚¡ã‚¤ãƒ«ãŒæã‚‰ãインターãƒãƒƒãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ownCloudãŒæä¾›ã™ã‚‹ .htaccessãƒ•ã‚¡ã‚¤ãƒ«ãŒæ©Ÿèƒ½ã—ã¦ã„ã¾ã›ã‚“。データディレクトリを全ãアクセスã§ããªã„よã†ã«ã™ã‚‹ã‹ã€ãƒ‡ãƒ¼ã‚¿ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’ウェブサーãƒã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ«ãƒ¼ãƒˆã®å¤–ã«ç½®ãよã†ã«ã‚¦ã‚§ãƒ–サーãƒã‚’設定ã™ã‚‹ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€‚ "
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "<strong>管ç†è€…アカウント</strong>を作æˆã—ã¦ãã ã•ã„"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "詳細設定"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "データフォルダ"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "データベースを設定ã—ã¦ãã ã•ã„"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "ãŒä½¿ç”¨ã•れã¾ã™"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "データベースã®ãƒ¦ãƒ¼ã‚¶å"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "データベースã®ãƒ‘スワード"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "データベースå"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "データベースã®è¡¨é ˜åŸŸ"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "データベースã®ãƒ›ã‚¹ãƒˆå"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "セットアップを完了ã—ã¾ã™"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "æ—¥"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "月"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "ç«"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "æ°´"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "木"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "金"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "土"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "1月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "2月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "3月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "4月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "5月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "6月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "7月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "8月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "9月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "10月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "11月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "12月"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "管ç†ä¸‹ã«ã‚るウェブサービス"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "ログアウト"
@@ -547,17 +570,17 @@ msgstr "アカウントä¿è­·ã®ç‚ºã€ãƒ‘スワードをå†åº¦ã®å¤‰æ›´ã‚’ãŠé¡˜
msgid "Lost your password?"
msgstr "パスワードを忘れã¾ã—ãŸã‹ï¼Ÿ"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "パスワードを記憶ã™ã‚‹"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "ログイン"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "ログアウトã—ã¾ã—ãŸã€‚"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "代替ログイン"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,17 +594,3 @@ msgstr "次"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "ownCloud ã‚’ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã«æ›´æ–°ã—ã¦ã„ã¾ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ä¸‹ã•ã„。"
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "セキュリティ警告ï¼"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "パスワードã®ç¢ºèª<br/>セキュリティ上ã®ç†ç”±ã«ã‚ˆã‚Šãƒ‘スワードã®å†å…¥åŠ›ã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚"
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "確èª"
diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po
index 9f417264265..ff098adc1ba 100644
--- a/l10n/ja_JP/files.po
+++ b/l10n/ja_JP/files.po
@@ -7,12 +7,13 @@
# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2012-2013.
# <tetuyano+transi@gmail.com>, 2012.
# <tetuyano+transi@gmail.com>, 2012.
+# YANO Tetsu <tetuyano+transi@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
@@ -24,57 +25,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s を移動ã§ãã¾ã›ã‚“ã§ã—㟠― ã“ã®åå‰ã®ãƒ•ァイルã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "%s を移動ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "ファイルåã®å¤‰æ›´ãŒã§ãã¾ã›ã‚“"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "ファイルã¯ä½•もアップロードã•れã¦ã„ã¾ã›ã‚“ã€‚ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "エラーã¯ã‚りã¾ã›ã‚“。ファイルã®ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ã¯æˆåŠŸã—ã¾ã—ãŸ"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "アップロードã•れãŸãƒ•ァイルã¯php.ini ã® upload_max_filesize ã«è¨­å®šã•れãŸã‚µã‚¤ã‚ºã‚’è¶…ãˆã¦ã„ã¾ã™:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "アップロードã•れãŸãƒ•ァイルã¯HTMLã®ãƒ•ォームã«è¨­å®šã•れãŸMAX_FILE_SIZEã«è¨­å®šã•れãŸã‚µã‚¤ã‚ºã‚’è¶…ãˆã¦ã„ã¾ã™"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "ファイルã¯ä¸€éƒ¨åˆ†ã—ã‹ã‚¢ãƒƒãƒ—ロードã•れã¾ã›ã‚“ã§ã—ãŸ"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "ファイルã¯ã‚¢ãƒƒãƒ—ロードã•れã¾ã›ã‚“ã§ã—ãŸ"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "テンãƒãƒ©ãƒªãƒ•ォルダãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "ディスクã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "利用å¯èƒ½ãªã‚¹ãƒšãƒ¼ã‚¹ãŒå分ã«ã‚りã¾ã›ã‚“"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "ストレージã«å分ãªç©ºã容é‡ãŒã‚りã¾ã›ã‚“"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "無効ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚"
@@ -82,149 +83,152 @@ msgstr "無効ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚"
msgid "Files"
msgstr "ファイル"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "共有ã—ãªã„"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "完全ã«å‰Šé™¤ã™ã‚‹"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "削除"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "åå‰ã®å¤‰æ›´"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "ä¿ç•™"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} ã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "ç½®ãæ›ãˆ"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "推奨åç§°"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "キャンセル"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} ã‚’ç½®æ›"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "å…ƒã«æˆ»ã™"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name} ã‚’ {new_name} ã«ç½®æ›"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "未共有 {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "削除を実行"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "削除 {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' ã¯ç„¡åйãªãƒ•ァイルåã§ã™ã€‚"
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "ファイルåを空ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "無効ãªåå‰ã€'\\', '/', '<', '>', ':', '\"', '|', '?', '*' ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。"
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "ZIPファイルを生æˆä¸­ã§ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "ã‚ãªãŸã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã¯ä¸€æ¯ã§ã™ã€‚ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›´æ–°ã¨åŒæœŸã¯ã‚‚ã†ã§ãã¾ã›ã‚“ï¼"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "ã‚ãªãŸã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã¯ã»ã¼ä¸€æ¯ã§ã™ï¼ˆ{usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®æº–備中ã§ã™ã€‚ファイルサイズãŒå¤§ãã„å ´åˆã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。"
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ディレクトリもã—ãã¯0ãƒã‚¤ãƒˆã®ãƒ•ァイルã¯ã‚¢ãƒƒãƒ—ロードã§ãã¾ã›ã‚“"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "アップロードエラー"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "é–‰ã˜ã‚‹"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "ä¿ç•™"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "ファイルを1ã¤ã‚¢ãƒƒãƒ—ロード中"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} ファイルをアップロード中"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "アップロードã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã—ãŸã€‚"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "ファイル転é€ã‚’実行中ã§ã™ã€‚今ã“ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ç§»å‹•ã™ã‚‹ã¨ã‚¢ãƒƒãƒ—ロードãŒä¸­æ­¢ã•れã¾ã™ã€‚"
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URLã¯ç©ºã«ã§ãã¾ã›ã‚“。"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "無効ãªãƒ•ォルダåã§ã™ã€‚'Shared' ã®åˆ©ç”¨ã¯ ownCloud ãŒäºˆç´„済ã¿ã§ã™ã€‚"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} ファイルをスキャン"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "スキャン中ã®ã‚¨ãƒ©ãƒ¼"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "åå‰"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "サイズ"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "更新日時"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 フォルダ"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} フォルダ"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 ファイル"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} ファイル"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "アップロード"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "ファイルæ“作"
@@ -273,36 +277,44 @@ msgstr "フォルダ"
msgid "From link"
msgstr "リンク"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "アップロード"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "アップロードをキャンセル"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ã“ã“ã«ã¯ä½•ã‚‚ã‚りã¾ã›ã‚“。何ã‹ã‚¢ãƒƒãƒ—ロードã—ã¦ãã ã•ã„。"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "ダウンロード"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "共有ã—ãªã„"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "ファイルサイズãŒå¤§ãã™ãŽã¾ã™"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "アップロードã—よã†ã¨ã—ã¦ã„るファイルã¯ã€ã‚µãƒ¼ãƒã§è¦å®šã•ã‚ŒãŸæœ€å¤§ã‚µã‚¤ã‚ºã‚’è¶…ãˆã¦ã„ã¾ã™ã€‚"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "ファイルをスキャンã—ã¦ã„ã¾ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "スキャン中"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "ファイルシステムキャッシュを更新中..."
diff --git a/l10n/ja_JP/files_encryption.po b/l10n/ja_JP/files_encryption.po
index c9941a81c9c..6d5a563dfe0 100644
--- a/l10n/ja_JP/files_encryption.po
+++ b/l10n/ja_JP/files_encryption.po
@@ -4,32 +4,37 @@
#
# Translators:
# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
+# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-16 02:04+0200\n"
-"PO-Revision-Date: 2012-08-15 02:43+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ja_JP\n"
-"Plural-Forms: nplurals=1; plural=0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "æš—å·åŒ–"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "æš—å·åŒ–ã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ•ァイルタイプ"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã®æš—å·åŒ–ã¯æœ‰åйã§ã™ã€‚"
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "次ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—ã¯æš—å·åŒ–ã•れã¾ã›ã‚“:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "次ã®ãƒ•ァイルタイプを暗å·åŒ–ã‹ã‚‰é™¤å¤–:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "ãªã—"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "æš—å·åŒ–を有効ã«ã™ã‚‹"
diff --git a/l10n/ja_JP/files_trashbin.po b/l10n/ja_JP/files_trashbin.po
new file mode 100644
index 00000000000..81066069c86
--- /dev/null
+++ b/l10n/ja_JP/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 04:10+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "%s を完全ã«å‰Šé™¤å‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "%s を復元出æ¥ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "復元æ“作を実行ã™ã‚‹"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "ファイルを完全ã«å‰Šé™¤ã™ã‚‹"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "åå‰"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "削除済ã¿"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 フォルダ"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} フォルダ"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 ファイル"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} ファイル"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "ã“ã“ã«ã¯ä½•ã‚‚ã‚りã¾ã›ã‚“。ゴミ箱ã¯ç©ºã§ã™ï¼"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "復元"
diff --git a/l10n/ja_JP/files_versions.po b/l10n/ja_JP/files_versions.po
index 9c717bd2fa4..79e1e19a465 100644
--- a/l10n/ja_JP/files_versions.po
+++ b/l10n/ja_JP/files_versions.po
@@ -4,14 +4,15 @@
#
# Translators:
# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
+# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2013.
# <tetuyano+transi@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-23 02:01+0200\n"
-"PO-Revision-Date: 2012-09-22 00:30+0000\n"
-"Last-Translator: ttyn <tetuyano+transi@gmail.com>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 04:20+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +20,44 @@ msgstr ""
"Language: ja_JP\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã™ã‚‹"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "å…ƒã«æˆ»ã›ã¾ã›ã‚“ã§ã—ãŸ: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "æˆåŠŸ"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "ファイル %s ã‚’ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã«æˆ»ã—ã¾ã—ãŸ"
+
+#: history.php:49
+msgid "failure"
+msgstr "失敗"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "ファイル %s ã‚’ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã«æˆ»ã›ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "利用å¯èƒ½ãªå¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã‚りã¾ã›ã‚“"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "ãƒ‘ã‚¹ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“"
#: js/versions.js:16
msgid "History"
msgstr "履歴"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "ã“れã¯ã€ã‚ãªãŸã®ãƒ•ァイルã®ã™ã¹ã¦ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã—ã¾ã™"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "ã‚‚ã¨ã«æˆ»ã™ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨ã€ãƒ•ァイルをéŽåŽ»ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æˆ»ã—ã¾ã™"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ja_JP/lib.po b/l10n/ja_JP/lib.po
index 2f16f657540..b7ce6d23725 100644
--- a/l10n/ja_JP/lib.po
+++ b/l10n/ja_JP/lib.po
@@ -4,13 +4,14 @@
#
# Translators:
# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
+# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-15 00:37+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +19,55 @@ msgstr ""
"Language: ja_JP\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "ヘルプ"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "個人設定"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "設定"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "ユーザ"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "アプリ"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "管ç†è€…"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIPダウンロードã¯ç„¡åйã§ã™ã€‚"
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "ファイルã¯1ã¤ãšã¤ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã«æˆ»ã‚‹"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "é¸æŠžã—ãŸãƒ•ァイルã¯ZIPファイルã®ç”Ÿæˆã«ã¯å¤§ãã™ãŽã¾ã™ã€‚"
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "測定ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "アプリケーションã¯ç„¡åйã§ã™"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼"
@@ -82,55 +87,152 @@ msgstr "TTY TDD"
msgid "Images"
msgstr "ç”»åƒ"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "ç§’å‰"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1分å‰"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d 分å‰"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 時間å‰"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d 時間å‰"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "今日"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "昨日"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d æ—¥å‰"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "先月"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d 分å‰"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "昨年"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "å¹´å‰"
diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po
index 7f6ee2171c9..a106c529861 100644
--- a/l10n/ja_JP/settings.po
+++ b/l10n/ja_JP/settings.po
@@ -7,13 +7,14 @@
# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2012-2013.
# <tetuyano+transi@gmail.com>, 2012.
# <tetuyano+transi@gmail.com>, 2012.
+# YANO Tetsu <tetuyano+transi@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-04 13:22+0100\n"
-"PO-Revision-Date: 2013-01-04 01:31+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,6 +26,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "アプリストアã‹ã‚‰ãƒªã‚¹ãƒˆã‚’ロードã§ãã¾ã›ã‚“"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "表示åを変更ã§ãã¾ã›ã‚“"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "ã‚°ãƒ«ãƒ¼ãƒ—ã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™"
@@ -33,7 +43,7 @@ msgstr "ã‚°ãƒ«ãƒ¼ãƒ—ã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™"
msgid "Unable to add group"
msgstr "グループを追加ã§ãã¾ã›ã‚“"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "アプリを有効ã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
@@ -45,22 +55,10 @@ msgstr "メールアドレスをä¿å­˜ã—ã¾ã—ãŸ"
msgid "Invalid email"
msgstr "無効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenIDãŒå¤‰æ›´ã•れã¾ã—ãŸ"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "無効ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "グループを削除ã§ãã¾ã›ã‚“"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "ユーザを削除ã§ãã¾ã›ã‚“"
@@ -69,6 +67,10 @@ msgstr "ユーザを削除ã§ãã¾ã›ã‚“"
msgid "Language changed"
msgstr "言語ãŒå¤‰æ›´ã•れã¾ã—ãŸ"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "無効ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "管ç†è€…ã¯è‡ªèº«ã‚’管ç†è€…グループã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“。"
@@ -83,19 +85,47 @@ msgstr "ユーザをグループ %s ã«è¿½åŠ ã§ãã¾ã›ã‚“"
msgid "Unable to remove user from group %s"
msgstr "ユーザをグループ %s ã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "アプリを更新出æ¥ã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "{appversion} ã«æ›´æ–°"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "無効"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "有効"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。"
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "更新中...."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "ã‚¢ãƒ—ãƒªã®æ›´æ–°ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿ"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "エラー"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "更新済ã¿"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "ä¿å­˜ä¸­..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Japanese (日本語)"
@@ -107,18 +137,22 @@ msgstr "アプリを追加"
msgid "More Apps"
msgstr "ã•らã«ã‚¢ãƒ—リを表示"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "ã‚¢ãƒ—ãƒªã‚’é¸æŠžã—ã¦ãã ã•ã„"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "apps.owncloud.com ã§ã‚¢ãƒ—リケーションã®ãƒšãƒ¼ã‚¸ã‚’見ã¦ãã ã•ã„"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-ライセンス: <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "æ›´æ–°"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "ユーザドキュメント"
@@ -148,83 +182,87 @@ msgstr "コマーシャルサãƒãƒ¼ãƒˆ"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "ç¾åœ¨ã€<strong>%s</strong> / <strong>%s</strong> を利用ã—ã¦ã„ã¾ã™"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "顧客"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "デスクトップクライアントをダウンロード"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Androidクライアントをダウンロード"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "iOSクライアントをダウンロード"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "パスワード"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "パスワードを変更ã—ã¾ã—ãŸ"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "パスワードを変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "ç¾åœ¨ã®ãƒ‘スワード"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "æ–°ã—ã„パスワード"
-#: templates/personal.php:26
-msgid "show"
-msgstr "表示"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "パスワードを変更"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "表示å"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "ã‚ãªãŸã®è¡¨ç¤ºåを変更ã—ã¾ã—ãŸ"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "ã‚ãªãŸã®è¡¨ç¤ºåを変更ã§ãã¾ã›ã‚“"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "表示åを変更"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "ã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "※パスワード回復を有効ã«ã™ã‚‹ã«ã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å…¥åŠ›ãŒå¿…è¦ã§ã™"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "言語"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "翻訳ã«å”力ã™ã‚‹"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ã§ownCloudã«æŽ¥ç¶šã™ã‚‹éš›ã¯ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’利用ã—ã¦ãã ã•ã„"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -234,11 +272,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</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> ライセンスã«ã‚ˆã‚Šæä¾›ã•れã¦ã„ã¾ã™ã€‚"
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "åå‰"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "ログインå"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "グループ"
@@ -250,26 +288,34 @@ msgstr "作æˆ"
msgid "Default Storage"
msgstr "デフォルトストレージ"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "無制é™"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "ãã®ä»–"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "グループ管ç†è€…"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "ストレージ"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "表示åを変更"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "æ–°ã—ã„パスワードを設定"
+
+#: templates/users.php:137
msgid "Default"
msgstr "デフォルト"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "削除"
diff --git a/l10n/ja_JP/user_ldap.po b/l10n/ja_JP/user_ldap.po
index 39aa1002f7e..0a8dc594153 100644
--- a/l10n/ja_JP/user_ldap.po
+++ b/l10n/ja_JP/user_ldap.po
@@ -4,14 +4,15 @@
#
# Translators:
# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
-# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2012.
+# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2012-2013.
# <tetuyano+transi@gmail.com>, 2012.
+# YANO Tetsu <tetuyano+transi@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-16 00:11+0100\n"
-"PO-Revision-Date: 2012-12-15 06:21+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 04:10+0000\n"
"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
@@ -20,6 +21,58 @@ msgstr ""
"Language: ja_JP\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "サーãƒè¨­å®šã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "è¨­å®šã¯æœ‰åйã§ã‚ã‚Šã€æŽ¥ç¶šã‚’ç¢ºç«‹ã—ã¾ã—ãŸï¼"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "è¨­å®šã¯æœ‰åйã§ã™ãŒã€æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸã€‚サーãƒè¨­å®šã¨è³‡æ ¼æƒ…報を確èªã—ã¦ä¸‹ã•ã„。"
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "設定ã¯ç„¡åйã§ã™ã€‚詳細㯠ownCloud ã®ãƒ­ã‚°ã‚’見ã¦ä¸‹ã•ã„。"
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "削除ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "最近ã®ã‚µãƒ¼ãƒè¨­å®šã‹ã‚‰è¨­å®šã‚’引ãç¶™ãŽã¾ã™ã‹ï¼Ÿ"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "è¨­å®šã‚’ä¿æŒã—ã¾ã™ã‹ï¼Ÿ"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "サーãƒè¨­å®šã‚’追加ã§ãã¾ã›ã‚“"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "æŽ¥ç¶šãƒ†ã‚¹ãƒˆã«æˆåŠŸã—ã¾ã—ãŸ"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "接続テストã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "ç¾åœ¨ã®ã‚µãƒ¼ãƒè¨­å®šã‚’本当ã«å‰Šé™¤ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "削除ã®ç¢ºèª"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -29,158 +82,232 @@ msgstr "<b>警告:</b> user_ldap 㨠user_webdavauth ã®ã‚¢ãƒ—リã«ã¯äº’æ›æ€§
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>警告:</b> PHP LDAP モジュールãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒæ­£ã—ãã©ã†ã•ã—ã¾ã›ã‚“。システム管ç†è€…ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚ˆã†å•ã„åˆã‚ã›ã¦ãã ã•ã„。"
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>警告:</b> PHP LDAP モジュールãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒæ­£ã—ã動作ã—ã¾ã›ã‚“。システム管ç†è€…ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚ˆã†å•ã„åˆã‚ã›ã¦ãã ã•ã„。"
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "サーãƒè¨­å®š"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "サーãƒè¨­å®šã‚’追加"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "ホスト"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "SSL通信ã—ãªã„å ´åˆã«ã¯ã€ãƒ—ロトコルåã‚’çœç•¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã«ã¯ã€ldaps:// ã‹ã‚‰å§‹ã‚ã¦ãã ã•ã„。"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "ベースDN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "1行ã«1ã¤ã®ãƒ™ãƒ¼ã‚¹DN"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "拡張タブã§ãƒ¦ãƒ¼ã‚¶ã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ™ãƒ¼ã‚¹DNを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "ユーザDN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "クライアントユーザーã®DNã¯ã€ç‰¹å®šã®ã‚‚ã®ã«çµã³ã¤ã‘ã‚‹ã“ã¨ã¯ã—ã¾ã›ã‚“。 例ãˆã° uid=agent,dc=example,dc=com. ã ã¨åŒ¿åアクセスã®å ´åˆã€DNã¨ãƒ‘スワードã¯ç©ºã®ã¾ã¾ã§ã™ã€‚"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "パスワード"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "匿åアクセスã®å ´åˆã¯ã€DNã¨ãƒ‘スワードを空ã«ã—ã¦ãã ã•ã„。"
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "ユーザログインフィルタ"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "ログインã™ã‚‹ã¨ãã«é©ç”¨ã™ã‚‹ãƒ•ィルターを定義ã™ã‚‹ã€‚%%uid ãŒãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼åã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "%%uid プレースホルダーを利用ã—ã¦ãã ã•ã„。例 \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "ユーザリストフィルタ"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "ユーザーをå–å¾—ã™ã‚‹ã¨ãã«é©ç”¨ã™ã‚‹ãƒ•ィルターを定義ã™ã‚‹ã€‚"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "プレースホルダーを利用ã—ãªã„ã§ãã ã•ã„。例 \"objectClass=person\""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "グループフィルタ"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "グループをå–å¾—ã™ã‚‹ã¨ãã«é©ç”¨ã™ã‚‹ãƒ•ィルターを定義ã™ã‚‹ã€‚"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "プレースホルダーを利用ã—ãªã„ã§ãã ã•ã„。例 \"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "接続設定"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "設定ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã™"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ã€ã“ã®è¨­å®šã¯ã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚"
+
+#: templates/settings.php:34
msgid "Port"
msgstr "ãƒãƒ¼ãƒˆ"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "ベースユーザツリー"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—(レプリカ)ホスト"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "ベースグループツリー"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãƒ›ã‚¹ãƒˆã‚’ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚メインã®LDAP/ADサーãƒã®ãƒ¬ãƒ—リカã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "グループã¨ãƒ¡ãƒ³ãƒãƒ¼ã®é–¢é€£ä»˜ã‘"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—(レプリカ)ãƒãƒ¼ãƒˆ"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "メインサーãƒã‚’無効ã«ã™ã‚‹"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "有効ã«ã™ã‚‹ã¨ã€ownCloudã¯ãƒ¬ãƒ—リカサーãƒã«ã®ã¿æŽ¥ç¶šã—ã¾ã™ã€‚"
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "TLSを利用"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "SSL接続ã«åˆ©ç”¨ã—ãªã„ã§ãã ã•ã„ã€å¤±æ•—ã—ã¾ã™ã€‚"
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "LDAPS接続ã®ãŸã‚ã«è¿½åŠ ã§ãれを利用ã—ãªã„ã§ä¸‹ã•ã„。失敗ã—ã¾ã™ã€‚"
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "大文字ï¼å°æ–‡å­—を区別ã—ãªã„LDAPサーãƒï¼ˆWindows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "SSL証明書ã®ç¢ºèªã‚’無効ã«ã™ã‚‹ã€‚"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "接続ãŒã“ã®ã‚ªãƒ—ションã§ã®ã¿å‹•作ã™ã‚‹å ´åˆã¯ã€LDAPサーãƒã®SSL証明書をownCloudサーãƒã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ãã ã•ã„。"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "推奨ã—ã¾ã›ã‚“ã€ãƒ†ã‚¹ãƒˆç›®çš„ã§ã®ã¿åˆ©ç”¨ã—ã¦ãã ã•ã„。"
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "秒。変更後ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚"
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "ディレクトリ設定"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "ユーザ表示åã®ãƒ•ィールド"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "ユーザã®ownCloudåã®ç”Ÿæˆã«åˆ©ç”¨ã™ã‚‹LDAP属性。"
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "ベースユーザツリー"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "1行ã«1ã¤ã®ãƒ¦ãƒ¼ã‚¶ãƒ™ãƒ¼ã‚¹DN"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "ユーザ検索属性"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "オプション:1行ã«1属性"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "グループ表示åã®ãƒ•ィールド"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "グループã®ownCloudåã®ç”Ÿæˆã«åˆ©ç”¨ã™ã‚‹LDAP属性。"
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "ベースグループツリー"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "1行ã«1ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ベースDN"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "グループ検索属性"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "グループã¨ãƒ¡ãƒ³ãƒãƒ¼ã®é–¢é€£ä»˜ã‘"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "特殊属性"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "ãƒã‚¤ãƒˆ"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "秒。変更後ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚"
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "ユーザåを空ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„(デフォルト)。ãã†ã§ãªã„å ´åˆã¯ã€LDAPã‚‚ã—ãã¯ADã®å±žæ€§ã‚’指定ã—ã¦ãã ã•ã„。"
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "ヘルプ"
diff --git a/l10n/ja_JP/user_webdavauth.po b/l10n/ja_JP/user_webdavauth.po
index b6499e4ce5f..966cae84162 100644
--- a/l10n/ja_JP/user_webdavauth.po
+++ b/l10n/ja_JP/user_webdavauth.po
@@ -4,13 +4,13 @@
#
# Translators:
# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
-# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2012.
+# Daisuke Deguchi <ddeguchi@nagoya-u.jp>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-21 00:10+0100\n"
-"PO-Revision-Date: 2012-12-20 03:51+0000\n"
+"POT-Creation-Date: 2013-01-17 00:26+0100\n"
+"PO-Revision-Date: 2013-01-16 05:50+0000\n"
"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
@@ -19,13 +19,17 @@ msgstr ""
"Language: ja_JP\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV èªè¨¼"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloudã®ã“ã®URLã¸ã®ãƒ¦ãƒ¼ã‚¶è³‡æ ¼æƒ…å ±ã®é€ä¿¡ã¯ã€è³‡æ ¼æƒ…å ±ãŒé–“é•ã£ã¦ã„ã‚‹å ´åˆã¯HTTP401ã‚‚ã—ãã¯403ã‚’è¿”ã—ã€æ­£ã—ã„å ´åˆã¯å…¨ã¦ã®ã‚³ãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚"
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloudã¯ã“ã®URLã«ãƒ¦ãƒ¼ã‚¶è³‡æ ¼æƒ…報をé€ä¿¡ã—ã¾ã™ã€‚ã“ã®ãƒ—ラグインã¯å¿œç­”ã‚’ãƒã‚§ãƒƒã‚¯ã—ã€HTTP状態コード㌠401 㨠403 ã®å ´åˆã¯ç„¡åйãªè³‡æ ¼æƒ…å ±ã¨ã—ã€ä»–ã®å¿œç­”ã¯ã™ã¹ã¦æœ‰åйãªè³‡æ ¼æƒ…å ±ã¨ã—ã¦å‡¦ç†ã—ã¾ã™ã€‚"
diff --git a/l10n/ka_GE/core.po b/l10n/ka_GE/core.po
index 8af6e0abca8..9874547f038 100644
--- a/l10n/ka_GE/core.po
+++ b/l10n/ka_GE/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +18,24 @@ msgstr ""
"Language: ka_GE\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,8 +51,9 @@ msgid "No category to add?"
msgstr "áƒáƒ  áƒáƒ áƒ˜áƒ¡ კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ დáƒáƒ¡áƒáƒ›áƒáƒ¢áƒ”ბლáƒáƒ“?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -80,59 +81,135 @@ msgstr "სáƒáƒ áƒ”დáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბელი კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "კვირáƒ"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "ხუთშáƒáƒ‘áƒáƒ—ი"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "შáƒáƒ‘áƒáƒ—ი"
+
+#: js/config.php:33
+msgid "January"
+msgstr "იáƒáƒœáƒ•áƒáƒ áƒ˜"
+
+#: js/config.php:33
+msgid "February"
+msgstr "თებერვáƒáƒšáƒ˜"
+
+#: js/config.php:33
+msgid "March"
+msgstr "მáƒáƒ áƒ¢áƒ˜"
+
+#: js/config.php:33
+msgid "April"
+msgstr "áƒáƒžáƒ áƒ˜áƒšáƒ˜"
+
+#: js/config.php:33
+msgid "May"
+msgstr "მáƒáƒ˜áƒ¡áƒ˜"
+
+#: js/config.php:33
+msgid "June"
+msgstr "ივნისი"
+
+#: js/config.php:33
+msgid "July"
+msgstr "ივლისი"
+
+#: js/config.php:33
+msgid "August"
+msgstr "áƒáƒ’ვისტáƒ"
+
+#: js/config.php:33
+msgid "September"
+msgstr "სექტემბერი"
+
+#: js/config.php:33
+msgid "October"
+msgstr "áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი"
+
+#: js/config.php:33
+msgid "November"
+msgstr "ნáƒáƒ”მბერი"
+
+#: js/config.php:33
+msgid "December"
+msgstr "დეკემბერი"
+
+#: js/js.js:284
msgid "Settings"
msgstr "პáƒáƒ áƒáƒ›áƒ”ტრები"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "წáƒáƒ›áƒ˜áƒ¡ წინ"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 წუთის წინ"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} წუთის წინ"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "დღეს"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "გუშინ"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} დღის წინ"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "გáƒáƒ¡áƒ£áƒš თვეში"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "თვის წინ"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "ბáƒáƒšáƒ წელს"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "წლის წინ"
@@ -162,8 +239,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "შეცდáƒáƒ›áƒ"
@@ -175,123 +252,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "გáƒáƒ–იáƒáƒ áƒ”ბáƒ"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "შეცდáƒáƒ›áƒ გáƒáƒ–იáƒáƒ áƒ”ბის დრáƒáƒ¡"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "შეცდáƒáƒ›áƒ გáƒáƒ–იáƒáƒ áƒ”ბის გáƒáƒ£áƒ¥áƒ›áƒ”ბის დრáƒáƒ¡"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "შეცდáƒáƒ›áƒ დáƒáƒ¨áƒ•ების ცვლილების დრáƒáƒ¡"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "გáƒáƒ£áƒ–იáƒáƒ áƒ”"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "გáƒáƒ£áƒ–იáƒáƒ áƒ” ლინკით"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "პáƒáƒ áƒáƒšáƒ˜áƒ— დáƒáƒªáƒ•áƒ"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "პáƒáƒ áƒáƒšáƒ˜"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "მიუთითე ვáƒáƒ“ის გáƒáƒ¡áƒ•ლის დრáƒ"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "ვáƒáƒ“ის გáƒáƒ¡áƒ•ლის დრáƒ"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "გáƒáƒáƒ–იáƒáƒ áƒ” მეილზე"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "გვერდი áƒáƒ  áƒáƒ áƒ˜áƒ¡ ნáƒáƒžáƒáƒ•ნი"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "მეáƒáƒ áƒ”ჯერ გáƒáƒ–იáƒáƒ áƒ”ბრáƒáƒ  áƒáƒ áƒ˜áƒ¡ დáƒáƒ¨áƒ•ებული"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "გáƒáƒ–იáƒáƒ áƒ”ბის მáƒáƒ®áƒ¡áƒœáƒ"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "შეგიძლირშეცვლáƒ"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "დáƒáƒ¨áƒ•ების კáƒáƒœáƒ¢áƒ áƒáƒšáƒ˜"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "შექმნáƒ"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "წáƒáƒ¨áƒšáƒ"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "გáƒáƒ–იáƒáƒ áƒ”ბáƒ"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "პáƒáƒ áƒáƒšáƒ˜áƒ— დáƒáƒªáƒ£áƒšáƒ˜"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "შეცდáƒáƒ›áƒ ვáƒáƒ“ის გáƒáƒ¡áƒ•ლის მáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ დრáƒáƒ¡"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "შეცდáƒáƒ›áƒ ვáƒáƒ“ის გáƒáƒ¡áƒ•ლის მითითების დრáƒáƒ¡"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud პáƒáƒ áƒáƒšáƒ˜áƒ¡ შეცვლáƒ"
@@ -373,7 +468,7 @@ msgstr "კáƒáƒ¢áƒ”გáƒáƒ áƒ˜áƒ”ბის რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ"
msgid "Add"
msgstr "დáƒáƒ›áƒáƒ¢áƒ”ბáƒ"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის გáƒáƒ¤áƒ áƒ—ხილებáƒ"
@@ -383,147 +478,75 @@ msgid ""
"OpenSSL extension."
msgstr "შემთხვევითი სიმბáƒáƒšáƒáƒ”ბის გენერáƒáƒ¢áƒáƒ áƒ˜ áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს, გთხáƒáƒ•თ ჩáƒáƒ áƒ—áƒáƒ— PHP OpenSSL გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბáƒ."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "შემთხვევითი სიმბáƒáƒšáƒáƒ”ბის გენერáƒáƒ¢áƒáƒ áƒ˜áƒ¡ გáƒáƒ áƒ”შე, შემტევმრშეიძლებრáƒáƒ›áƒáƒ˜áƒªáƒœáƒáƒ¡ თქვენი პáƒáƒ áƒáƒšáƒ˜ შეგიცვáƒáƒšáƒáƒ— ის დრდáƒáƒ”უფლáƒáƒ¡ თქვენს ექáƒáƒ£áƒœáƒ—ს."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "შექმენი áƒáƒ“მინ ექáƒáƒ£áƒœáƒ¢áƒ˜"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Advanced"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "მáƒáƒœáƒáƒªáƒ”მთრსáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "ბáƒáƒ–ის კáƒáƒœáƒ¤áƒ˜áƒ’ურირებáƒ"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "გáƒáƒ›áƒáƒ§áƒ”ნებული იქნებáƒ"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "ბáƒáƒ–ის მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "ბáƒáƒ–ის პáƒáƒ áƒáƒšáƒ˜"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "ბáƒáƒ–ის სáƒáƒ®áƒ”ლი"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "ბáƒáƒ–ის ცხრილის ზáƒáƒ›áƒ"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "ბáƒáƒ–ის ჰáƒáƒ¡áƒ¢áƒ˜"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ˜áƒ¡ დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბáƒ"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "კვირáƒ"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "ხუთშáƒáƒ‘áƒáƒ—ი"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "შáƒáƒ‘áƒáƒ—ი"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "იáƒáƒœáƒ•áƒáƒ áƒ˜"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "თებერვáƒáƒšáƒ˜"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "მáƒáƒ áƒ¢áƒ˜"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "áƒáƒžáƒ áƒ˜áƒšáƒ˜"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "მáƒáƒ˜áƒ¡áƒ˜"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "ივნისი"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "ივლისი"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "áƒáƒ’ვისტáƒ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "სექტემბერი"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "ნáƒáƒ”მბერი"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "დეკემბერი"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "თქვენი კáƒáƒœáƒ¢áƒ áƒáƒšáƒ˜áƒ¡ ქვეშ მყáƒáƒ¤áƒ˜ ვებ სერვისები"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "გáƒáƒ›áƒáƒ¡áƒ•ლáƒ"
@@ -545,17 +568,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "დáƒáƒ’áƒáƒ•იწყდáƒáƒ— პáƒáƒ áƒáƒšáƒ˜?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "დáƒáƒ›áƒáƒ®áƒ¡áƒáƒ•რებáƒ"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "შესვლáƒ"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "თქვენ გáƒáƒ›áƒáƒ®áƒ•ედით სისტემიდáƒáƒœ"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +592,3 @@ msgstr "შემდეგი"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის გáƒáƒ¤áƒ áƒ—ხილებáƒ!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "შემáƒáƒ¬áƒ›áƒ”ბáƒ"
diff --git a/l10n/ka_GE/files.po b/l10n/ka_GE/files.po
index 27c92e92ba5..c9b22c6c9c5 100644
--- a/l10n/ka_GE/files.po
+++ b/l10n/ka_GE/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -23,55 +23,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "ჭáƒáƒªáƒ“áƒáƒ›áƒ áƒáƒ  დáƒáƒ¤áƒ˜áƒ¥áƒ¡áƒ˜áƒ áƒ“áƒ, ფáƒáƒ˜áƒšáƒ˜ წáƒáƒ áƒ›áƒáƒ¢áƒ”ბით áƒáƒ˜áƒ¢áƒ•ირთáƒ"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "áƒáƒ¢áƒ•ირთული ფáƒáƒ˜áƒšáƒ˜ áƒáƒ­áƒáƒ áƒ‘ებს MAX_FILE_SIZE დირექტივáƒáƒ¡, რáƒáƒ›áƒ”ლიც მითითებულირHTML ფáƒáƒ áƒ›áƒáƒ¨áƒ˜"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "áƒáƒ¢áƒ•ირთული ფáƒáƒ˜áƒšáƒ˜ მხáƒáƒšáƒáƒ“ ნáƒáƒ¬áƒ˜áƒšáƒáƒ‘რივ áƒáƒ˜áƒ¢áƒ•ირთáƒ"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "ფáƒáƒ˜áƒšáƒ˜ áƒáƒ  áƒáƒ˜áƒ¢áƒ•ირთáƒ"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "დრáƒáƒ”ბითი სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "შეცდáƒáƒ›áƒ დისკზე ჩáƒáƒ¬áƒ”რისáƒáƒ¡"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -79,149 +79,152 @@ msgstr ""
msgid "Files"
msgstr "ფáƒáƒ˜áƒšáƒ”ბი"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "გáƒáƒ–იáƒáƒ áƒ”ბის მáƒáƒ®áƒ¡áƒœáƒ"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "წáƒáƒ¨áƒšáƒ"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვáƒ"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "მáƒáƒªáƒ“ის რეჟიმში"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "შეცვლáƒ"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "სáƒáƒ®áƒ”ლის შემáƒáƒ—áƒáƒ•áƒáƒ–ებáƒ"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "უáƒáƒ áƒ§áƒáƒ¤áƒ"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} შეცვლილიáƒ"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "დáƒáƒ‘რუნებáƒ"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} შეცვლილირ{old_name}–ით"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "გáƒáƒ–იáƒáƒ áƒ”ბრმáƒáƒ®áƒ¡áƒœáƒ˜áƒšáƒ˜ {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "წáƒáƒ¨áƒšáƒ˜áƒšáƒ˜ {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "ZIP-ფáƒáƒ˜áƒšáƒ˜áƒ¡ გენერირებáƒ, áƒáƒ›áƒáƒ¡ ჭირდებრგáƒáƒ áƒ™áƒ•ეული დრáƒ."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "თქვენი ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•ირთვრვერ მáƒáƒ®áƒ”რხდáƒ. ის áƒáƒ áƒ˜áƒ¡ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე დრშეიცáƒáƒ•ს 0 ბáƒáƒ˜áƒ¢áƒ¡"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "შეცდáƒáƒ›áƒ áƒáƒ¢áƒ•ირთვისáƒáƒ¡"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "დáƒáƒ®áƒ£áƒ áƒ•áƒ"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "მáƒáƒªáƒ“ის რეჟიმში"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•ირთვáƒ"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} ფáƒáƒ˜áƒšáƒ˜ იტვირთებáƒ"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "áƒáƒ¢áƒ•ირთვრშეჩერებულ იქნáƒ."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "მიმდინáƒáƒ áƒ”áƒáƒ‘ს ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•ირთვáƒ. სხვრგვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლრგáƒáƒ›áƒáƒ˜áƒ¬áƒ•ევს áƒáƒ¢áƒ•ირთვის შეჩერებáƒáƒ¡"
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} ფáƒáƒ˜áƒšáƒ˜ სკáƒáƒœáƒ˜áƒ áƒ”ბულიáƒ"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "შეცდáƒáƒ›áƒ სკáƒáƒœáƒ˜áƒ áƒ”ბისáƒáƒ¡"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "სáƒáƒ®áƒ”ლი"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "ზáƒáƒ›áƒ"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "შეცვლილიáƒ"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 ფáƒáƒ˜áƒšáƒ˜"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} ფáƒáƒ˜áƒšáƒ˜"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "áƒáƒ¢áƒ•ირთვáƒ"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ დáƒáƒ›áƒ£áƒ¨áƒáƒ•ებáƒ"
@@ -270,36 +273,44 @@ msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "áƒáƒ¢áƒ•ირთვáƒ"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "áƒáƒ¢áƒ•ირთვის გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "áƒáƒ¥ áƒáƒ áƒáƒ¤áƒ”რი áƒáƒ  áƒáƒ áƒ˜áƒ¡. áƒáƒ¢áƒ•ირთე რáƒáƒ›áƒ”!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•ირთვáƒ"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "გáƒáƒ–იáƒáƒ áƒ”ბის მáƒáƒ®áƒ¡áƒœáƒ"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "áƒáƒ¡áƒáƒ¢áƒ•ირთი ფáƒáƒ˜áƒšáƒ˜ ძáƒáƒšáƒ˜áƒáƒœ დიდიáƒ"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ზáƒáƒ›áƒ რáƒáƒ›áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•ირთვáƒáƒ¡áƒáƒª თქვენ áƒáƒžáƒ˜áƒ áƒ”ბთ, áƒáƒ­áƒáƒ áƒ‘ებს სერვერზე დáƒáƒ¨áƒ•ებულ მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒ£áƒ›áƒ¡."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "მიმდინáƒáƒ áƒ”áƒáƒ‘ს ფáƒáƒ˜áƒšáƒ”ბის სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ, გთხáƒáƒ•თ დáƒáƒ”ლáƒáƒ“áƒáƒ—."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "მიმდინáƒáƒ áƒ” სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ka_GE/files_encryption.po b/l10n/ka_GE/files_encryption.po
index 3cdf3ae4e91..81a4932c140 100644
--- a/l10n/ka_GE/files_encryption.po
+++ b/l10n/ka_GE/files_encryption.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-22 02:02+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,18 +17,22 @@ msgstr ""
"Language: ka_GE\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/ka_GE/files_trashbin.po b/l10n/ka_GE/files_trashbin.po
new file mode 100644
index 00000000000..0b9d8c59f9c
--- /dev/null
+++ b/l10n/ka_GE/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ka_GE\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "სáƒáƒ®áƒ”ლი"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 ფáƒáƒ˜áƒšáƒ˜"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} ფáƒáƒ˜áƒšáƒ˜"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ka_GE/files_versions.po b/l10n/ka_GE/files_versions.po
index 8d38b072b0f..56f77fc8527 100644
--- a/l10n/ka_GE/files_versions.po
+++ b/l10n/ka_GE/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-22 02:02+0200\n"
-"PO-Revision-Date: 2012-08-12 22:37+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: ka_GE\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/ka_GE/lib.po b/l10n/ka_GE/lib.po
index 3011c8854f7..8bdb5af258a 100644
--- a/l10n/ka_GE/lib.po
+++ b/l10n/ka_GE/lib.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: ka_GE\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "პირáƒáƒ“ი"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "პáƒáƒ áƒáƒ›áƒ”ტრები"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ”ბი"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "áƒáƒ“მინისტრáƒáƒ¢áƒáƒ áƒ˜"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "áƒáƒ•თენტიფიკáƒáƒªáƒ˜áƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
@@ -82,55 +86,152 @@ msgstr "ტექსტი"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "წáƒáƒ›áƒ˜áƒ¡ წინ"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 წუთის წინ"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "დღეს"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "გუშინ"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "გáƒáƒ¡áƒ£áƒš თვეში"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "ბáƒáƒšáƒ წელს"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "წლის წინ"
diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po
index 8d92cc3af03..39d86db4d3e 100644
--- a/l10n/ka_GE/settings.po
+++ b/l10n/ka_GE/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -22,6 +22,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ”ბის სირვერ ჩáƒáƒ›áƒáƒ˜áƒ¢áƒ•ირთრApp Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "áƒáƒ•თენტიფიკáƒáƒªáƒ˜áƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "ჯგუფი უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
@@ -30,7 +39,7 @@ msgstr "ჯგუფი უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
msgid "Unable to add group"
msgstr "ჯგუფის დáƒáƒ›áƒáƒ¢áƒ”ბრვერ მáƒáƒ®áƒ”რხდáƒ"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "ვერ მáƒáƒ®áƒ”რხდრáƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ ჩáƒáƒ áƒ—ვáƒ."
@@ -42,22 +51,10 @@ msgstr "იმეილი შენáƒáƒ®áƒ£áƒšáƒ˜áƒ"
msgid "Invalid email"
msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ იმეილი"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID შეცვლილიáƒ"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ მáƒáƒ—ხáƒáƒ•ნáƒ"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "ჯგუფის წáƒáƒ¨áƒšáƒ ვერ მáƒáƒ®áƒ”რხდáƒ"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "áƒáƒ•თენტიფიკáƒáƒªáƒ˜áƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის წáƒáƒ¨áƒšáƒ ვერ მáƒáƒ®áƒ”რხდáƒ"
@@ -66,6 +63,10 @@ msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის წáƒáƒ¨áƒšáƒ ვერ მáƒáƒ®
msgid "Language changed"
msgstr "ენრშეცვლილიáƒ"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ მáƒáƒ—ხáƒáƒ•ნáƒ"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -80,19 +81,47 @@ msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის დáƒáƒ›áƒáƒ¢áƒ”ბრვერ
msgid "Unable to remove user from group %s"
msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის წáƒáƒ¨áƒšáƒ ვერ მáƒáƒ®áƒ”ხდრჯგუფიდáƒáƒœ %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "გáƒáƒ›áƒáƒ áƒ—ვáƒ"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "ჩáƒáƒ áƒ—ვáƒ"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "შეცდáƒáƒ›áƒ"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "შენáƒáƒ®áƒ•áƒ..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -104,18 +133,22 @@ msgstr "დáƒáƒáƒ›áƒáƒ¢áƒ” შენი áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ"
msgid "More Apps"
msgstr "უფრრმეტი áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ”ბი"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "ნáƒáƒ®áƒ”თ áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ გვერდი apps.owncloud.com –ზე"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-ლიცენსირებულირ<span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -145,83 +178,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "კლიენტები"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "პáƒáƒ áƒáƒšáƒ˜"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "თქვენი პáƒáƒ áƒáƒšáƒ˜ შეიცვáƒáƒšáƒ"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "თქვენი პáƒáƒ áƒáƒšáƒ˜ áƒáƒ  შეიცვáƒáƒšáƒ"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "მიმდინáƒáƒ áƒ” პáƒáƒ áƒáƒšáƒ˜"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "áƒáƒ®áƒáƒšáƒ˜ პáƒáƒ áƒáƒšáƒ˜"
-#: templates/personal.php:26
-msgid "show"
-msgstr "გáƒáƒ›áƒáƒáƒ©áƒ˜áƒœáƒ”"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "პáƒáƒ áƒáƒšáƒ˜áƒ¡ შეცვლáƒ"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "იმეილი"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "თქვენი იმეილ მისáƒáƒ›áƒáƒ áƒ—ი"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "შეáƒáƒ•სეთ იმეილ მისáƒáƒ›áƒáƒ áƒ—ის ველი პáƒáƒ áƒáƒšáƒ˜áƒ¡ áƒáƒ¦áƒ¡áƒáƒ“გენáƒáƒ“"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "ენáƒ"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "თáƒáƒ áƒ’მნის დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -231,11 +268,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "სáƒáƒ®áƒ”ლი"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "ჯგუფი"
@@ -247,26 +284,34 @@ msgstr "შექმნáƒ"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "სხვáƒ"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "ჯგუფის áƒáƒ“მინისტრáƒáƒ¢áƒáƒ áƒ˜"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "წáƒáƒ¨áƒšáƒ"
diff --git a/l10n/ka_GE/user_ldap.po b/l10n/ka_GE/user_ldap.po
index 0df8aa5b1a4..2e2cd16393e 100644
--- a/l10n/ka_GE/user_ldap.po
+++ b/l10n/ka_GE/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: ka_GE\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "წáƒáƒ¨áƒšáƒ˜áƒ¡ ველი"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ"
diff --git a/l10n/ka_GE/user_webdavauth.po b/l10n/ka_GE/user_webdavauth.po
index 4582092b83e..b7a0b557630 100644
--- a/l10n/ka_GE/user_webdavauth.po
+++ b/l10n/ka_GE/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: ka_GE\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/ko/core.po b/l10n/ko/core.po
index 24948c06769..72fae94a3df 100644
--- a/l10n/ko/core.po
+++ b/l10n/ko/core.po
@@ -6,14 +6,15 @@
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
# <limonade83@gmail.com>, 2012.
+# Park Shinjo <kde@peremen.name>, 2013.
# Shinjo Park <kde@peremen.name>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 10:03+0000\n"
-"Last-Translator: aoiob4305 <aoiob4305@gmail.com>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,29 +22,29 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr "User %s ê°€ 당신과 파ì¼ì„ 공유하였습니다."
+msgstr "%s ë‹˜ì´ íŒŒì¼ì„ 공유하였습니다"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr "User %s ê°€ 당신과 í´ë”를 공유하였습니다."
+msgstr "%s ë‹˜ì´ í´ë”를 공유하였습니다"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr "User %s ê°€ íŒŒì¼ \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s í•  수 있습니다."
+msgstr "%s ë‹˜ì´ íŒŒì¼ \"%s\"ì„(를) 공유하였습니다. 여기ì—서 다운로드할 수 있습니다: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr "User %s ê°€ í´ë” \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s í•  수 있습니다."
+msgstr "%s ë‹˜ì´ í´ë” \"%s\"ì„(를) 공유하였습니다. 여기ì—서 다운로드할 수 있습니다: %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -54,8 +55,9 @@ msgid "No category to add?"
msgstr "추가할 분류가 없습니까?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "ì´ ë¶„ë¥˜ëŠ” ì´ë¯¸ 존재합니다:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -83,59 +85,135 @@ msgstr "삭제할 분류를 ì„ íƒí•˜ì§€ 않았습니다."
msgid "Error removing %s from favorites."
msgstr "책갈피ì—서 %sì„(를) 삭제할 수 없었습니다."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "ì¼ìš”ì¼"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "월요ì¼"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "화요ì¼"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "수요ì¼"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "목요ì¼"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "금요ì¼"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "토요ì¼"
+
+#: js/config.php:33
+msgid "January"
+msgstr "1ì›”"
+
+#: js/config.php:33
+msgid "February"
+msgstr "2ì›”"
+
+#: js/config.php:33
+msgid "March"
+msgstr "3ì›”"
+
+#: js/config.php:33
+msgid "April"
+msgstr "4ì›”"
+
+#: js/config.php:33
+msgid "May"
+msgstr "5ì›”"
+
+#: js/config.php:33
+msgid "June"
+msgstr "6ì›”"
+
+#: js/config.php:33
+msgid "July"
+msgstr "7ì›”"
+
+#: js/config.php:33
+msgid "August"
+msgstr "8ì›”"
+
+#: js/config.php:33
+msgid "September"
+msgstr "9ì›”"
+
+#: js/config.php:33
+msgid "October"
+msgstr "10ì›”"
+
+#: js/config.php:33
+msgid "November"
+msgstr "11ì›”"
+
+#: js/config.php:33
+msgid "December"
+msgstr "12ì›”"
+
+#: js/js.js:284
msgid "Settings"
msgstr "설정"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "ì´ˆ ì „"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1ë¶„ ì „"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes}ë¶„ ì „"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1시간 전"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours}시간 전"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "오늘"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "어제"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days}ì¼ ì „"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "지난 달"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months}개월 전"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "개월 전"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "작년"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "ë…„ ì „"
@@ -165,8 +243,8 @@ msgid "The object type is not specified."
msgstr "ê°ì²´ ìœ í˜•ì´ ì§€ì •ë˜ì§€ 않았습니다."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "오류"
@@ -178,123 +256,141 @@ msgstr "앱 ì´ë¦„ì´ ì§€ì •ë˜ì§€ 않았습니다."
msgid "The required file {file} is not installed!"
msgstr "필요한 íŒŒì¼ {file}ì´(ê°€) 설치ë˜ì§€ 않았습니다!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "공유"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "공유ë¨"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "공유하는 중 오류 ë°œìƒ"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "공유 해제하는 중 오류 ë°œìƒ"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "권한 변경하는 중 오류 ë°œìƒ"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "{owner} ë‹˜ì´ ì—¬ëŸ¬ë¶„ ë° ê·¸ë£¹ {group}와(ê³¼) 공유 중"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "{owner} ë‹˜ì´ ê³µìœ  중"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "다ìŒìœ¼ë¡œ 공유"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "URL ë§í¬ë¡œ 공유"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "암호 보호"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "암호"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "ì´ë©”ì¼ ì£¼ì†Œ"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "전송"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "만료 날짜 설정"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "만료 날짜"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "ì´ë©”ì¼ë¡œ 공유:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "ë°œê²¬ëœ ì‚¬ëžŒ ì—†ìŒ"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "다시 공유할 수 없습니다"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "{user} 님과 {item}ì—서 공유 중"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "공유 해제"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "편집 가능"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "접근 제어"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "만들기"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "ì—…ë°ì´íЏ"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "삭제"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "공유"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "암호로 보호ë¨"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "만료 날짜 해제 오류"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "만료 날짜 설정 오류"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "전송 중..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "ì´ë©”ì¼ ë°œì†¡ë¨"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "ì—…ë°ì´íŠ¸ê°€ 실패하였습니다. ì´ ë¬¸ì œë¥¼ <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud 커뮤니티</a>ì— ë³´ê³ í•´ 주십시오."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "ì—…ë°ì´íŠ¸ê°€ 성공하였습니다. ownCloud로 ëŒì•„갑니다."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud 암호 재설정"
@@ -376,7 +472,7 @@ msgstr "분류 편집"
msgid "Add"
msgstr "추가"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "보안 경고"
@@ -386,147 +482,75 @@ msgid ""
"OpenSSL extension."
msgstr "안전한 난수 ìƒì„±ê¸°ë¥¼ 사용할 수 없습니다. PHPì˜ OpenSSL í™•ìž¥ì„ í™œì„±í™”í•´ 주십시오."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "안전한 난수 ìƒì„±ê¸°ë¥¼ 사용하지 않으면 공격ìžê°€ 암호 초기화 토í°ì„ 추측하여 ê³„ì •ì„ íƒˆì·¨í•  수 있습니다."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "ë°ì´í„° 디렉터리와 파ì¼ì„ ì¸í„°ë„·ì—서 접근할 수 있는 것 같습니다. ownCloudì—서 제공한 .htaccess 파ì¼ì´ ìž‘ë™í•˜ì§€ 않습니다. 웹 서버를 다시 설정하여 ë°ì´í„° ë””ë ‰í„°ë¦¬ì— ì ‘ê·¼í•  수 ì—†ë„ë¡ í•˜ê±°ë‚˜ 문서 루트 바깥쪽으로 옮기는 ê²ƒì„ ì¶”ì²œí•©ë‹ˆë‹¤."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "<strong>ê´€ë¦¬ìž ê³„ì •</strong> 만들기"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "고급"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "ë°ì´í„° í´ë”"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "ë°ì´í„°ë² ì´ìФ 설정"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "ì‚¬ìš©ë  ì˜ˆì •"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "ë°ì´í„°ë² ì´ìФ 사용ìž"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "ë°ì´í„°ë² ì´ìФ 암호"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "ë°ì´í„°ë² ì´ìФ ì´ë¦„"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "ë°ì´í„°ë² ì´ìФ í…Œì´ë¸” 공간"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "ë°ì´í„°ë² ì´ìФ 호스트"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "설치 완료"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "ì¼ìš”ì¼"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "월요ì¼"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "화요ì¼"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "수요ì¼"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "목요ì¼"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "금요ì¼"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "토요ì¼"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "1ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "2ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "3ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "4ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "5ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "6ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "7ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "8ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "9ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "10ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "11ì›”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "12ì›”"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "내가 관리하는 웹 서비스"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "로그아웃"
@@ -548,17 +572,17 @@ msgstr "ê³„ì •ì˜ ì•ˆì „ì„ ìœ„í•˜ì—¬ 암호를 변경하십시오."
msgid "Lost your password?"
msgstr "암호를 잊으셨습니까?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "기억하기"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "로그ì¸"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "로그아웃ë˜ì—ˆìŠµë‹ˆë‹¤."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,18 +595,4 @@ msgstr "다ìŒ"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr "ownCloud 를 버젼 %s로 ì—…ë°ì´íЏ 하는 중, ì‹œê°„ì´ ì†Œìš”ë©ë‹ˆë‹¤."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "보안 경고!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "암호를 확ì¸í•´ 주십시오.<br/>보안ìƒì˜ ì´ìœ ë¡œ 종종 암호를 물어볼 것입니다."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "확ì¸"
+msgstr "ownCloud를 버전 %s(으)로 ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. 잠시 기다려 주십시오."
diff --git a/l10n/ko/files.po b/l10n/ko/files.po
index 1cbad6bb34e..4fc91abaeef 100644
--- a/l10n/ko/files.po
+++ b/l10n/ko/files.po
@@ -5,14 +5,16 @@
# Translators:
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
+# Harim Park <fofwisdom@gmail.com>, 2013.
# <limonade83@gmail.com>, 2012.
+# Park Shinjo <kde@peremen.name>, 2013.
# Shinjo Park <kde@peremen.name>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
@@ -24,207 +26,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s í•­ëª©ì„ ì´ë™ì‹œí‚¤ì§€ ëª»í•˜ì˜€ìŒ - íŒŒì¼ ì´ë¦„ì´ ì´ë¯¸ 존재함"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "%s í•­ëª©ì„ ì´ë”©ì‹œí‚¤ì§€ 못하였ìŒ"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "íŒŒì¼ ì´ë¦„바꾸기 í•  수 ì—†ìŒ"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "파ì¼ì´ 업로드ë˜ì§€ 않았습니다. 알 수 없는 오류입니다"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "ì—…ë¡œë“œì— ì„±ê³µí•˜ì˜€ìŠµë‹ˆë‹¤."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "업로드한 파ì¼ì´ php.iniì˜ upload_max_filesize보다 í½ë‹ˆë‹¤:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "업로드한 파ì¼ì´ HTML ë¬¸ì„œì— ì§€ì •í•œ MAX_FILE_SIZE보다 ë” í¼"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "파ì¼ì´ 부분ì ìœ¼ë¡œ 업로드ë¨"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "ì—…ë¡œë“œëœ íŒŒì¼ ì—†ìŒ"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "임시 í´ë”ê°€ 사ë¼ì§"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "디스í¬ì— ì“°ì§€ 못했습니다"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "ì—¬ìœ ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr "올바르지 ì•Šì€ ë””ë ‰í† ë¦¬ìž…ë‹ˆë‹¤."
+msgstr "올바르지 ì•Šì€ ë””ë ‰í„°ë¦¬ìž…ë‹ˆë‹¤."
#: appinfo/app.php:10
msgid "Files"
msgstr "파ì¼"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "공유 해제"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "삭제"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "ì´ë¦„ 바꾸기"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "보류 중"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name}ì´(ê°€) ì´ë¯¸ 존재함"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "바꾸기"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "ì´ë¦„ 제안"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "취소"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name}ì„(를) 대체함"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "실행 취소"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name}ì´(ê°€) {new_name}(으)로 대체ë¨"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "{files} 공유 í•´ì œë¨"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} ì‚­ì œë¨"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' 는 올바르지 ì•Šì€ íŒŒì¼ ì´ë¦„ 입니다."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr "파ì¼ì´ë¦„ì€ ê³µëž€ì´ ë  ìˆ˜ 없습니다."
+msgstr "íŒŒì¼ ì´ë¦„ì´ ë¹„ì–´ ìžˆì„ ìˆ˜ 없습니다."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "í´ë” ì´ë¦„ì´ ì˜¬ë°”ë¥´ì§€ 않습니다. ì´ë¦„ì— ë¬¸ìž '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "ZIP 파ì¼ì„ ìƒì„±í•˜ê³  있습니다. ì‹œê°„ì´ ê±¸ë¦´ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "저장 ê³µê°„ì´ ê°€ë“ ì°¼ìŠµë‹ˆë‹¤. 파ì¼ì„ ì—…ë°ì´íŠ¸í•˜ê±°ë‚˜ ë™ê¸°í™”í•  수 없습니다!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "저장 ê³µê°„ì´ ê±°ì˜ ê°€ë“ ì°¼ìŠµë‹ˆë‹¤ ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "다운로드가 준비 중입니다. íŒŒì¼ í¬ê¸°ê°€ í¬ë‹¤ë©´ ì‹œê°„ì´ ì˜¤ëž˜ 걸릴 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ì´ íŒŒì¼ì€ 디렉터리ì´ê±°ë‚˜ 비어 있기 ë•Œë¬¸ì— ì—…ë¡œë“œí•  수 없습니다"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "업로드 오류"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "닫기"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "보류 중"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "íŒŒì¼ 1ê°œ 업로드 중"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "íŒŒì¼ {count}ê°œ 업로드 중"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "업로드가 취소ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "íŒŒì¼ ì—…ë¡œë“œê°€ ì§„í–‰ 중입니다. ì´ íŽ˜ì´ì§€ë¥¼ 벗어나면 업로드가 취소ë©ë‹ˆë‹¤."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URLì„ ìž…ë ¥í•´ì•¼ 합니다."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "íŒŒì¼ {count}ê°œ 검색ë¨"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "검색 중 오류 ë°œìƒ"
+msgstr "í´ë” ì´ë¦„ì´ ìœ íš¨í•˜ì§€ 않습니다. "
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "ì´ë¦„"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "í¬ê¸°"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "수정ë¨"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "í´ë” 1ê°œ"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "í´ë” {count}ê°œ"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "íŒŒì¼ 1ê°œ"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "íŒŒì¼ {count}ê°œ"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "업로드"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "íŒŒì¼ ì²˜ë¦¬"
@@ -273,36 +278,44 @@ msgstr "í´ë”"
msgid "From link"
msgstr "ë§í¬ì—서"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "업로드"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "업로드 취소"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤. 업로드할 수 있습니다!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "다운로드"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "공유 해제"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "업로드 용량 초과"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ì´ íŒŒì¼ì´ 서버ì—서 허용하는 최대 업로드 가능 용량보다 í½ë‹ˆë‹¤."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "파ì¼ì„ 검색하고 있습니다. 기다려 주십시오."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "현재 검색"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œ ìºì‹œ 업그레ì´ë“œ 중..."
diff --git a/l10n/ko/files_encryption.po b/l10n/ko/files_encryption.po
index 7317bd55f1d..79f1c6ae607 100644
--- a/l10n/ko/files_encryption.po
+++ b/l10n/ko/files_encryption.po
@@ -4,14 +4,14 @@
#
# Translators:
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
-# Shinjo Park <kde@peremen.name>, 2012.
+# Shinjo Park <kde@peremen.name>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-10 00:11+0100\n"
-"PO-Revision-Date: 2012-12-09 06:13+0000\n"
-"Last-Translator: Shinjo Park <kde@peremen.name>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,18 +19,22 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "암호화"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "ë‹¤ìŒ íŒŒì¼ í˜•ì‹ì€ 암호화하지 않ìŒ"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
-#: templates/settings.php:5
-msgid "None"
-msgstr "ì—†ìŒ"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
#: templates/settings.php:12
-msgid "Enable Encryption"
-msgstr "암호화 사용"
+msgid "None"
+msgstr "ì—†ìŒ"
diff --git a/l10n/ko/files_external.po b/l10n/ko/files_external.po
index f43b8963773..0c7bf2da326 100644
--- a/l10n/ko/files_external.po
+++ b/l10n/ko/files_external.po
@@ -5,14 +5,15 @@
# Translators:
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
+# Park Shinjo <peremen@gmail.com>, 2013.
# Shinjo Park <kde@peremen.name>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 10:07+0000\n"
-"Last-Translator: aoiob4305 <aoiob4305@gmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:10+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -28,11 +29,11 @@ msgstr "ì ‘ê·¼ 허가ë¨"
msgid "Error configuring Dropbox storage"
msgstr "Dropbox 저장소 설정 오류"
-#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41
msgid "Grant access"
msgstr "접근 권한 부여"
-#: js/dropbox.js:73 js/google.js:72
+#: js/dropbox.js:73 js/google.js:73
msgid "Fill out all required fields"
msgstr "모든 필수 í•­ëª©ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤"
@@ -40,22 +41,22 @@ msgstr "모든 필수 í•­ëª©ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤"
msgid "Please provide a valid Dropbox app key and secret."
msgstr "올바른 Dropbox 앱 키와 암호를 입력하십시오."
-#: js/google.js:26 js/google.js:73 js/google.js:78
+#: js/google.js:26 js/google.js:74 js/google.js:79
msgid "Error configuring Google Drive storage"
msgstr "Google 드ë¼ì´ë¸Œ 저장소 설정 오류"
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr "<b>경고</b>\"smbclient\"ê°€ 설치ë˜ì§€ 않았습니다. CIFS/SMB 공유애 ì—°ê²°ì´ ë¶ˆê°€ëŠ¥ 합니다.. 시스템 관리ìžì—게 요청하여 설치하시기 ë°”ëžë‹ˆë‹¤."
+msgstr "<b>경고:</b> \"smbclient\"ê°€ 설치ë˜ì§€ 않았습니다. CIFS/SMB 공유 ìžì›ì— ì—°ê²°í•  수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오."
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
"install it."
-msgstr "<b>경고</b>PHPìš© FTP ì§€ì›ì´ 사용 불가능 하거나 설치ë˜ì§€ 않았습니다. FTP ê³µìœ ì— ì—°ê²°ì´ ë¶ˆê°€ëŠ¥ 합니다. 시스템 관리ìžì—게 요청하여 설치하시기 ë°”ëžë‹ˆë‹¤. "
+msgstr "<b>경고:</b> PHP FTP ì§€ì›ì´ 비활성화ë˜ì–´ 있거나 설치ë˜ì§€ 않았습니다. FTP 공유를 마운트할 수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오."
#: templates/settings.php:3
msgid "External Storage"
diff --git a/l10n/ko/files_trashbin.po b/l10n/ko/files_trashbin.po
new file mode 100644
index 00000000000..85904a36e17
--- /dev/null
+++ b/l10n/ko/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "ì´ë¦„"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "í´ë” 1ê°œ"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "í´ë” {count}ê°œ"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "íŒŒì¼ 1ê°œ"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "íŒŒì¼ {count}ê°œ"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "ë³µì›"
diff --git a/l10n/ko/files_versions.po b/l10n/ko/files_versions.po
index 20d3071b548..9e99e48e771 100644
--- a/l10n/ko/files_versions.po
+++ b/l10n/ko/files_versions.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-10 00:11+0100\n"
-"PO-Revision-Date: 2012-12-09 06:11+0000\n"
-"Last-Translator: Shinjo Park <kde@peremen.name>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "모든 버전 삭제"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "역사"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "버전"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "ì´ íŒŒì¼ì˜ 모든 백업 ë²„ì „ì„ ì‚­ì œí•©ë‹ˆë‹¤"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ko/lib.po b/l10n/ko/lib.po
index 3870ebda87f..eeaa4b93c12 100644
--- a/l10n/ko/lib.po
+++ b/l10n/ko/lib.po
@@ -4,14 +4,15 @@
#
# Translators:
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
+# Park Shinjo <kde@peremen.name>, 2013.
# Shinjo Park <kde@peremen.name>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-10 00:11+0100\n"
-"PO-Revision-Date: 2012-12-09 06:06+0000\n"
-"Last-Translator: Shinjo Park <kde@peremen.name>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +20,55 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "ë„움ë§"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "ê°œì¸"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "설정"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "사용ìž"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "앱"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "관리ìž"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP 다운로드가 비활성화ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "파ì¼ì„ 개별ì ìœ¼ë¡œ 다운로드해야 합니다."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "파ì¼ë¡œ ëŒì•„가기"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "ì„ íƒí•œ 파ì¼ë“¤ì€ ZIP 파ì¼ì„ ìƒì„±í•˜ê¸°ì— 너무 í½ë‹ˆë‹¤."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "ê²°ì •í•  수 ì—†ìŒ"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "ì•±ì´ í™œì„±í™”ë˜ì§€ 않았습니다"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "ì¸ì¦ 오류"
@@ -83,55 +88,152 @@ msgstr "í…스트"
msgid "Images"
msgstr "그림"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "ì´ˆ ì „"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1ë¶„ ì „"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%dë¶„ ì „"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1시간 전"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d시간 전"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "오늘"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "어제"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%dì¼ ì „"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "지난 달"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d개월 전"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "작년"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "ë…„ ì „"
diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po
index 0d027d7cdfc..967be75964f 100644
--- a/l10n/ko/settings.po
+++ b/l10n/ko/settings.po
@@ -5,15 +5,16 @@
# Translators:
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
+# Harim Park <fofwisdom@gmail.com>, 2013.
# <limonade83@gmail.com>, 2012.
-# Shinjo Park <kde@peremen.name>, 2012.
+# Shinjo Park <kde@peremen.name>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 10:26+0000\n"
-"Last-Translator: aoiob4305 <aoiob4305@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,6 +26,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "앱 스토어ì—서 목ë¡ì„ 가져올 수 없습니다"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "ì¸ì¦ 오류"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "ê·¸ë£¹ì´ ì´ë¯¸ 존재합니다."
@@ -33,7 +43,7 @@ msgstr "ê·¸ë£¹ì´ ì´ë¯¸ 존재합니다."
msgid "Unable to add group"
msgstr "ê·¸ë£¹ì„ ì¶”ê°€í•  수 없습니다."
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "ì•±ì„ í™œì„±í™”í•  수 없습니다."
@@ -45,22 +55,10 @@ msgstr "ì´ë©”ì¼ ì €ìž¥ë¨"
msgid "Invalid email"
msgstr "ìž˜ëª»ëœ ì´ë©”ì¼ ì£¼ì†Œ"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID 변경ë¨"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "ìž˜ëª»ëœ ìš”ì²­"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "ê·¸ë£¹ì„ ì‚­ì œí•  수 없습니다."
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "ì¸ì¦ 오류"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "사용ìžë¥¼ 삭제할 수 없습니다."
@@ -69,6 +67,10 @@ msgstr "사용ìžë¥¼ 삭제할 수 없습니다."
msgid "Language changed"
msgstr "언어가 변경ë˜ì—ˆìŠµë‹ˆë‹¤"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "ìž˜ëª»ëœ ìš”ì²­"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "ê´€ë¦¬ìž ìžì‹ ì„ ê´€ë¦¬ìž ê·¸ë£¹ì—서 삭제할 수 없습니다"
@@ -83,19 +85,47 @@ msgstr "그룹 %sì— ì‚¬ìš©ìžë¥¼ 추가할 수 없습니다."
msgid "Unable to remove user from group %s"
msgstr "그룹 %sì—서 사용ìžë¥¼ 삭제할 수 없습니다."
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "비활성화"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "활성화"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "오류"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "저장 중..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "한국어"
@@ -107,21 +137,25 @@ msgstr "앱 추가"
msgid "More Apps"
msgstr "ë” ë§Žì€ ì•±"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "앱 ì„ íƒ"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "apps.owncloud.comì— ìžˆëŠ” 앱 페ì´ì§€ë¥¼ 참고하십시오"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
-msgstr "<span class=\"licence\"></span>-ë¼ì´ì„ ìФ ë³´ìœ ìž <span class=\"author\"></span>"
+msgstr "<span class=\"licence\"></span>-ë¼ì´ì„ ìФë¨: <span class=\"author\"></span>"
+
+#: templates/apps.php:31
+msgid "Update"
+msgstr "ì—…ë°ì´íЏ"
#: templates/help.php:3
msgid "User Documentation"
-msgstr "유저 문서"
+msgstr "ì‚¬ìš©ìž ë¬¸ì„œ"
#: templates/help.php:4
msgid "Administrator Documentation"
@@ -137,94 +171,98 @@ msgstr "í¬ëŸ¼"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr "버그트래커"
+msgstr "버그 트래커"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "ìƒì—…ìš© ì§€ì›"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "현재 공간 <strong>%s</strong>/<strong>%s</strong>ì„(를) 사용 중입니다"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "ê³ ê°"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "ë°ìФí¬íƒ‘ í´ë¼ì´ì–¸íЏ 다운로드"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "안드로ì´ë“œ í´ë¼ì´ì–¸íЏ 다운로드"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "iOS í´ë¼ì´ì–¸íЏ 다운로드"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "암호"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "암호가 변경ë˜ì—ˆìŠµë‹ˆë‹¤"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "암호를 변경할 수 ì—†ìŒ"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "현재 암호"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "새 암호"
-#: templates/personal.php:26
-msgid "show"
-msgstr "ë³´ì´ê¸°"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "암호 변경"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "표시 ì´ë¦„"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "ì´ë©”ì¼"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "ì´ë©”ì¼ ì£¼ì†Œ"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "암호 찾기 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ ì´ë©”ì¼ ì£¼ì†Œë¥¼ 입력하십시오."
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "언어"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "번역 ë•기"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—서 사용ìžì˜ ownCloudì— ì ‘ì†í•˜ê¸° 위해 ì´ ì£¼ì†Œë¥¼ 사용하십시요."
+msgstr "íŒŒì¼ ê´€ë¦¬ìžì—서 ownCloudì— ì ‘ì†í•˜ë ¤ë©´ ì´ ì£¼ì†Œë¥¼ 사용하십시오."
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr "버젼"
+msgstr "버전"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -234,11 +272,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "<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>ì— ë”°ë¼ ì‚¬ìš©ì´ í—ˆê°€ë©ë‹ˆë‹¤."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "ì´ë¦„"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "ë¡œê·¸ì¸ ì´ë¦„"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "그룹"
@@ -250,26 +288,34 @@ msgstr "만들기"
msgid "Default Storage"
msgstr "기본 저장소"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "무제한"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "기타"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "그룹 관리ìž"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "저장소"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "표시 ì´ë¦„ 변경"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "새 암호 설정"
+
+#: templates/users.php:137
msgid "Default"
msgstr "기본값"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "삭제"
diff --git a/l10n/ko/user_ldap.po b/l10n/ko/user_ldap.po
index f4012dc7305..1402718d755 100644
--- a/l10n/ko/user_ldap.po
+++ b/l10n/ko/user_ldap.po
@@ -5,14 +5,14 @@
# Translators:
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
-# Shinjo Park <kde@peremen.name>, 2012.
+# Shinjo Park <kde@peremen.name>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 09:58+0000\n"
-"Last-Translator: aoiob4305 <aoiob4305@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,167 +20,293 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "삭제 실패"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
" experience unexpected behaviour. Please ask your system administrator to "
"disable one of them."
-msgstr "<b>경고</b>user_ldap 앱과 user_webdavauth ì•±ì€ í˜¸í™˜ë˜ì§€ 않습니다. 오ë™ìž‘ì„ ì¼ìœ¼í‚¬ 수 있으므로, 시스템 관리ìžì—게 요청하여, 둘 중 하나를 비활성화 하시기 ë°”ëžë‹ˆë‹¤."
+msgstr "<b>경고:</b> user_ldap 앱과 user_webdavauth ì•±ì€ í˜¸í™˜ë˜ì§€ 않습니다. 오ë™ìž‘ì„ ì¼ìœ¼í‚¬ 수 있으므로, 시스템 관리ìžì—게 요청하여 둘 중 하나만 사용하ë„ë¡ í•˜ì‹­ì‹œì˜¤."
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>경고</b>PHP LDAP ëª¨ë“ˆì´ ì„¤ì¹˜ë˜ì§€ 않았습니다. 백엔드가 ë™ìž‘하지 ì•Šì„ ê²ƒ 입니다. 시스템관리ìžì—게 요청하여 해당 ëª¨ë“ˆì„ ì„¤ì¹˜í•˜ì‹œê¸° ë°”ëžë‹ˆë‹¤."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>경고:</b> PHP LDAP ëª¨ë“ˆì´ ë¹„í™œì„±í™”ë˜ì–´ 있거나 설치ë˜ì–´ 있지 않습니다. 백엔드를 사용할 수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "호스트"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "SSLì„ ì‚¬ìš©í•˜ëŠ” 경우가 아니ë¼ë©´ í”„ë¡œí† ì½œì„ ìž…ë ¥í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. SSLì„ ì‚¬ìš©í•˜ë ¤ë©´ ldaps://를 입력하십시오."
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "기본 DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "기본 DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "고급 탭ì—서 ì‚¬ìš©ìž ë° ê·¸ë£¹ì— ëŒ€í•œ 기본 DNì„ ì§€ì •í•  수 있습니다."
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "ì‚¬ìš©ìž DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "ë°”ì¸ë”© ìž‘ì—…ì„ ìˆ˜í–‰í•  í´ë¼ì´ì–¸íЏ ì‚¬ìš©ìž DN입니다. 예를 들어서 uid=agent,dc=example,dc=com입니다. ìµëª… ì ‘ê·¼ì„ í—ˆìš©í•˜ë ¤ë©´ DNê³¼ 암호를 비워 ë‘십시오."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "암호"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "ìµëª… ì ‘ê·¼ì„ í—ˆìš©í•˜ë ¤ë©´ DNê³¼ 암호를 비워 ë‘십시오."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "ì‚¬ìš©ìž ë¡œê·¸ì¸ í•„í„°"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "로그ì¸ì„ 시ë„í•  때 ì ìš©í•  필터입니다. %%uid는 ë¡œê·¸ì¸ ìž‘ì—…ì—ì„œì˜ ì‚¬ìš©ìž ì´ë¦„으로 대체ë©ë‹ˆë‹¤."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "%%uid ìžë¦¬ 비움ìžë¥¼ 사용하십시오. 예제: \"uid=%%uid\"\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "ì‚¬ìš©ìž ëª©ë¡ í•„í„°"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "사용ìžë¥¼ 검색할 때 ì ìš©í•  필터를 ì •ì˜í•©ë‹ˆë‹¤."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "ìžë¦¬ 비움ìžë¥¼ 사용할 수 없습니다. 예제: \"objectClass=person\""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "그룹 필터"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "ê·¸ë£¹ì„ ê²€ìƒ‰í•  때 ì ìš©í•  필터를 ì •ì˜í•©ë‹ˆë‹¤."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "ìžë¦¬ 비움ìžë¥¼ 사용할 수 없습니다. 예제: \"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "í¬íЏ"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "기본 ì‚¬ìš©ìž íŠ¸ë¦¬"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "기본 그룹 트리"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "그룹-íšŒì› ì—°ê²°"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "TLS 사용"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "SSL ì—°ê²° 시 사용하는 경우 ì—°ê²°ë˜ì§€ 않습니다."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "서버ì—서 대소문ìžë¥¼ 구분하지 ì•ŠìŒ (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "SSL ì¸ì¦ì„œ 유효성 검사를 해제합니다."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "ì´ ì˜µì…˜ì„ ì‚¬ìš©í•´ì•¼ ì—°ê²°í•  수 있는 경우ì—는 LDAP ì„œë²„ì˜ SSL ì¸ì¦ì„œë¥¼ ownCloud로 가져올 수 있습니다."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "추천하지 않ìŒ, 테스트로만 사용하십시오."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "ì´ˆ. 항목 변경 시 ìºì‹œê°€ 갱신ë©ë‹ˆë‹¤."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "사용ìžì˜ 표시 ì´ë¦„ 필드"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "LDAP ì†ì„±ì€ 사용ìžì˜ ownCloud ì´ë¦„ì„ ìƒì„±í•˜ê¸° 위해 사용합니다."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "기본 ì‚¬ìš©ìž íŠ¸ë¦¬"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "ì‚¬ìš©ìž DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "ê·¸ë£¹ì˜ í‘œì‹œ ì´ë¦„ 필드"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "LDAP ì†ì„±ì€ ê·¸ë£¹ì˜ ownCloud ì´ë¦„ì„ ìƒì„±í•˜ê¸° 위해 사용합니다."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "기본 그룹 트리"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "그룹 기본 DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "그룹-íšŒì› ì—°ê²°"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "ë°”ì´íЏ"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "ì´ˆ. 항목 변경 시 ìºì‹œê°€ 갱신ë©ë‹ˆë‹¤."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "ì‚¬ìš©ìž ì´ë¦„ì„ ì‚¬ìš©í•˜ë ¤ë©´ 비워 ë‘십시오(기본값). 기타 경우 LDAP/AD ì†ì„±ì„ 지정하십시오."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "ë„움ë§"
diff --git a/l10n/ko/user_webdavauth.po b/l10n/ko/user_webdavauth.po
index 7baa17ed715..f10bd76454e 100644
--- a/l10n/ko/user_webdavauth.po
+++ b/l10n/ko/user_webdavauth.po
@@ -5,13 +5,14 @@
# Translators:
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
+# Park Shinjo <kde@peremen.name>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 10:31+0000\n"
-"Last-Translator: aoiob4305 <aoiob4305@gmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:10+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +20,17 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV ì¸ì¦"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud는 ì´ URL로 유저 ì¸ì¦ì„ 보내게 ë˜ë©°, http 401 ê³¼ http 403ì€ ì¸ì¦ 오류로, ê·¸ 외 코드는 ì¸ì¦ì´ 올바른 것으로 í•´ì„합니다."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloudì—서 ì´ URL로 ì‚¬ìš©ìž ì¸ì¦ 정보를 보냅니다. ì´ í”ŒëŸ¬ê·¸ì¸ì€ ì‘ë‹µì„ í™•ì¸í•˜ì—¬ HTTP ìƒíƒœ 코드 401ì´ë‚˜ 403ì´ ëŒì•„온 ê²½ìš°ì— ìž˜ëª»ëœ ì¸ì¦ 정보로 간주합니다. 다른 모든 ìƒíƒœ 코드는 올바른 ì¸ì¦ 정보로 간주합니다."
diff --git a/l10n/ku_IQ/core.po b/l10n/ku_IQ/core.po
index 1fb884c2fa4..f665ac3e0af 100644
--- a/l10n/ku_IQ/core.po
+++ b/l10n/ku_IQ/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +18,24 @@ msgstr ""
"Language: ku_IQ\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,7 +51,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -80,59 +81,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:284
msgid "Settings"
msgstr "ده‌ستكاری"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -162,8 +239,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "هه‌ڵه"
@@ -175,123 +252,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "وشەی تێپەربو"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr ""
@@ -373,7 +468,7 @@ msgstr ""
msgid "Add"
msgstr "زیادکردن"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -383,147 +478,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr ""
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "هه‌ڵبژاردنی پیشكه‌وتوو"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "زانیاری Ùۆڵده‌ر"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr ""
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr ""
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "به‌كارهێنه‌ری داتابه‌یس"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "وشه‌ی نهێنی داتا به‌یس"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "ناوی داتابه‌یس"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "هۆستی داتابه‌یس"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "كۆتایی هات ده‌ستكاریه‌كان"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr ""
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "چوونەدەرەوە"
@@ -545,16 +568,16 @@ msgstr ""
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr ""
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
+#: templates/login.php:49
+msgid "Alternative Logins"
msgstr ""
#: templates/part.pagenavi.php:3
@@ -569,17 +592,3 @@ msgstr "دواتر"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/ku_IQ/files.po b/l10n/ku_IQ/files.po
index e85f7e13045..e22bec404b1 100644
--- a/l10n/ku_IQ/files.po
+++ b/l10n/ku_IQ/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
@@ -22,55 +22,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -78,149 +78,152 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "داخستن"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "ناو"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "بارکردن"
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -269,36 +272,44 @@ msgstr "بوخچه"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "بارکردن"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "داگرتن"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ku_IQ/files_encryption.po b/l10n/ku_IQ/files_encryption.po
index ebb1c844374..25da3eec3af 100644
--- a/l10n/ku_IQ/files_encryption.po
+++ b/l10n/ku_IQ/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-08 02:02+0200\n"
-"PO-Revision-Date: 2012-10-07 00:06+0000\n"
-"Last-Translator: Hozha Koyi <hozhan@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: ku_IQ\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "نهێنیکردن"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "به‌ربه‌ست کردنی ئه‌م جۆره‌ په‌ڕگانه له‌ نهێنیکردن"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "هیچ"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "چالاکردنی نهێنیکردن"
diff --git a/l10n/ku_IQ/files_trashbin.po b/l10n/ku_IQ/files_trashbin.po
new file mode 100644
index 00000000000..37690656b8b
--- /dev/null
+++ b/l10n/ku_IQ/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ku_IQ\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "ناو"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ku_IQ/files_versions.po b/l10n/ku_IQ/files_versions.po
index 89832609b9c..d241d5d28b9 100644
--- a/l10n/ku_IQ/files_versions.po
+++ b/l10n/ku_IQ/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-07 02:03+0200\n"
-"PO-Revision-Date: 2012-10-07 00:02+0000\n"
-"Last-Translator: Hozha Koyi <hozhan@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: ku_IQ\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "وه‌شانه‌کان گشتیان به‌سه‌رده‌چن"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "مێژوو"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "وه‌شان"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "ئه‌مه‌ سه‌رجه‌م پاڵپشتی وه‌شانه‌ هه‌بووه‌کانی په‌ڕگه‌کانت ده‌سڕینته‌وه"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ku_IQ/lib.po b/l10n/ku_IQ/lib.po
index ab5cb3ada24..e53da4b5939 100644
--- a/l10n/ku_IQ/lib.po
+++ b/l10n/ku_IQ/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: ku_IQ\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "یارمەتی"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr ""
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "ده‌ستكاری"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "به‌كارهێنه‌ر"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,152 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po
index a1dddc85d5d..0b5761e3cbf 100644
--- a/l10n/ku_IQ/settings.po
+++ b/l10n/ku_IQ/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
@@ -21,6 +21,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -29,7 +38,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -41,22 +50,10 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr ""
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -65,6 +62,10 @@ msgstr ""
msgid "Language changed"
msgstr ""
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -79,19 +80,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr ""
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "چالاککردن"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "هه‌ڵه"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "پاشکه‌وتده‌کات..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr ""
@@ -103,18 +132,22 @@ msgstr ""
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr ""
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "نوێکردنه‌وه"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -144,83 +177,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr ""
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "وشەی تێپەربو"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr ""
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr ""
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "وشەی نهێنی نوێ"
-#: templates/personal.php:26
-msgid "show"
+#: templates/personal.php:42
+msgid "Change password"
msgstr ""
-#: templates/personal.php:27
-msgid "Change password"
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
msgstr ""
-#: templates/personal.php:33
+#: templates/personal.php:68
msgid "Email"
msgstr "ئیمه‌یل"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr ""
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr ""
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr ""
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr ""
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -230,11 +267,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "ناو"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr ""
@@ -246,26 +283,34 @@ msgstr ""
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr ""
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr ""
diff --git a/l10n/ku_IQ/user_ldap.po b/l10n/ku_IQ/user_ldap.po
index f4e484f84f7..88137f8ee47 100644
--- a/l10n/ku_IQ/user_ldap.po
+++ b/l10n/ku_IQ/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: ku_IQ\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "یارمەتی"
diff --git a/l10n/ku_IQ/user_webdavauth.po b/l10n/ku_IQ/user_webdavauth.po
index 57ded88a09b..313845a14b2 100644
--- a/l10n/ku_IQ/user_webdavauth.po
+++ b/l10n/ku_IQ/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: ku_IQ\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/lb/core.po b/l10n/lb/core.po
index e1b2e089fc8..a3e8cd581d7 100644
--- a/l10n/lb/core.po
+++ b/l10n/lb/core.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <sim0n@trypill.org>, 2013.
# <sim0n@trypill.org>, 2011-2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +19,24 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,8 +52,9 @@ msgid "No category to add?"
msgstr "Keng Kategorie fir bäizesetzen?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Des Kategorie existéiert schonn:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -80,65 +82,141 @@ msgstr "Keng Kategorien ausgewielt fir ze läschen."
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Sonndes"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Méindes"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Dënschdes"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Mëttwoch"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Donneschdes"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Freides"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Samschdes"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Mäerz"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Abrëll"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mee"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Dezember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Astellungen"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
-msgstr ""
+msgstr "vrun 1 Stonn"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
-msgstr ""
+msgstr "vru {hours} Stonnen"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
-msgstr ""
+msgstr "Läschte Mount"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
-msgstr ""
+msgstr "vru {months} Méint"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
-msgstr ""
+msgstr "Méint hier"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
-msgstr ""
+msgstr "Läscht Joer"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
-msgstr ""
+msgstr "Joren hier"
#: js/oc-dialogs.js:126
msgid "Choose"
-msgstr ""
+msgstr "Auswielen"
#: js/oc-dialogs.js:146 js/oc-dialogs.js:166
msgid "Cancel"
@@ -162,8 +240,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Fehler"
@@ -175,123 +253,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Deelen"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Passwuert"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
-msgstr ""
+msgstr "Net méi deelen"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "erstellen"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
-msgstr ""
+msgstr "läschen"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
-msgstr ""
+msgstr "deelen"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud Passwuert reset"
@@ -373,7 +469,7 @@ msgstr "Kategorien editéieren"
msgid "Add"
msgstr "Bäisetzen"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Sécherheets Warnung"
@@ -383,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "En <strong>Admin Account</strong> uleeën"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
-msgstr "Advanced"
+msgstr "Avancéiert"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Daten Dossier"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Datebank konfiguréieren"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "wärt benotzt ginn"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Datebank Benotzer"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Datebank Passwuert"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Datebank Numm"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Datebank Tabelle-Gréisst"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Datebank Server"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Installatioun ofschléissen"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Sonndes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Méindes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Dënschdes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Mëttwoch"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Donneschdes"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Freides"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Samschdes"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Mäerz"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Abrëll"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mee"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Dezember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Web Servicer ënnert denger Kontroll"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Ausloggen"
@@ -545,17 +569,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "Passwuert vergiess?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "verhalen"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Log dech an"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Du bass ausgeloggt."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +593,3 @@ msgstr "weider"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/lb/files.po b/l10n/lb/files.po
index e664d38cc35..fbd5a7b1bc0 100644
--- a/l10n/lb/files.po
+++ b/l10n/lb/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -23,55 +23,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Keen Feeler, Datei ass komplett ropgelueden ginn"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Déi ropgelueden Datei ass méi grouss wei d'MAX_FILE_SIZE Eegenschaft déi an der HTML form uginn ass"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Déi ropgelueden Datei ass nëmmen hallef ropgelueden ginn"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Et ass keng Datei ropgelueden ginn"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Et feelt en temporären Dossier"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Konnt net op den Disk schreiwen"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -79,149 +79,152 @@ msgstr ""
msgid "Files"
msgstr "Dateien"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Läschen"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "ersetzen"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "ofbriechen"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "réckgängeg man"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Et gëtt eng ZIP-File generéiert, dëst ka bëssen daueren."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss ass."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Fehler beim eroplueden"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Zoumaachen"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Upload ofgebrach."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Numm"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Gréisst"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Geännert"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Eroplueden"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Fichier handling"
@@ -270,36 +273,44 @@ msgstr "Dossier"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Eroplueden"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload ofbriechen"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Hei ass näischt. Lued eppes rop!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Eroflueden"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Net méi deelen"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Upload ze grouss"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Fichieren gi gescannt, war weg."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Momentane Scan"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/lb/files_encryption.po b/l10n/lb/files_encryption.po
index 5446d2366b4..6705693de91 100644
--- a/l10n/lb/files_encryption.po
+++ b/l10n/lb/files_encryption.po
@@ -7,28 +7,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lb\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/lb/files_sharing.po b/l10n/lb/files_sharing.po
index ebdb3f59320..f4d8ed5cc8e 100644
--- a/l10n/lb/files_sharing.po
+++ b/l10n/lb/files_sharing.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-27 00:04+0100\n"
+"PO-Revision-Date: 2013-01-26 13:36+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,27 +19,27 @@ msgstr ""
#: templates/authenticate.php:4
msgid "Password"
-msgstr ""
+msgstr "Passwuert"
#: templates/authenticate.php:6
msgid "Submit"
msgstr ""
-#: templates/public.php:9
+#: templates/public.php:11
#, php-format
msgid "%s shared the folder %s with you"
msgstr ""
-#: templates/public.php:11
+#: templates/public.php:13
#, php-format
msgid "%s shared the file %s with you"
msgstr ""
-#: templates/public.php:14 templates/public.php:30
+#: templates/public.php:16 templates/public.php:32
msgid "Download"
msgstr ""
-#: templates/public.php:29
+#: templates/public.php:31
msgid "No preview available for"
msgstr ""
diff --git a/l10n/lb/files_trashbin.po b/l10n/lb/files_trashbin.po
new file mode 100644
index 00000000000..2d2039da8de
--- /dev/null
+++ b/l10n/lb/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Numm"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/lb/files_versions.po b/l10n/lb/files_versions.po
index 9f3294d11f6..1b9a2bc1c06 100644
--- a/l10n/lb/files_versions.po
+++ b/l10n/lb/files_versions.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <sim0n@trypill.org>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,26 +18,49 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
+msgstr "Historique"
+
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
-msgstr ""
+msgstr "Fichier's Versionéierung "
#: templates/settings.php:4
msgid "Enable"
-msgstr ""
+msgstr "Aschalten"
diff --git a/l10n/lb/lib.po b/l10n/lb/lib.po
index b164e98f222..82f5b5434d7 100644
--- a/l10n/lb/lib.po
+++ b/l10n/lb/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
-msgstr ""
+msgstr "Hëllef"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Perséinlech"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Astellungen"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr ""
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Authentifikatioun's Fehler"
@@ -71,7 +75,7 @@ msgstr ""
#: search/provider/file.php:17 search/provider/file.php:35
msgid "Files"
-msgstr ""
+msgstr "Dateien"
#: search/provider/file.php:26 search/provider/file.php:33
msgid "Text"
@@ -81,57 +85,154 @@ msgstr "SMS"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
-msgstr ""
+msgstr "vrun 1 Stonn"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
-msgstr ""
+msgstr "Läschte Mount"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
-msgstr ""
+msgstr "Läscht Joer"
-#: template.php:114
+#: template.php:124
msgid "years ago"
-msgstr ""
+msgstr "Joren hier"
#: updater.php:75
#, php-format
diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po
index cf0f377fcb9..635adeed391 100644
--- a/l10n/lb/settings.po
+++ b/l10n/lb/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -22,6 +22,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Konnt Lescht net vum App Store lueden"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Authentifikatioun's Fehler"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -30,7 +39,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -42,22 +51,10 @@ msgstr "E-mail gespäichert"
msgid "Invalid email"
msgstr "Ongülteg e-mail"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID huet geännert"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ongülteg Requête"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Authentifikatioun's Fehler"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -66,6 +63,10 @@ msgstr ""
msgid "Language changed"
msgstr "Sprooch huet geännert"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ongülteg Requête"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -80,19 +81,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Ofschalten"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Aschalten"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Fehler"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Speicheren..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -104,18 +133,22 @@ msgstr "Setz deng App bei"
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Wiel eng Applikatioun aus"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Kuck dir d'Applicatioun's Säit op apps.owncloud.com un"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -145,83 +178,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clienten"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Passwuert"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Konnt däin Passwuert net änneren"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Momentan 't Passwuert"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Neit Passwuert"
-#: templates/personal.php:26
-msgid "show"
-msgstr "weisen"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Passwuert änneren"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Deng Email Adress"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Gëff eng Email Adress an fir d'Passwuert recovery ze erlaben"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Sprooch"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Hëllef iwwersetzen"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -231,11 +268,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Numm"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Gruppen"
@@ -247,26 +284,34 @@ msgstr "Erstellen"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Aner"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Gruppen Admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Läschen"
diff --git a/l10n/lb/user_ldap.po b/l10n/lb/user_ldap.po
index be1657cb3d3..dae69e9634d 100644
--- a/l10n/lb/user_ldap.po
+++ b/l10n/lb/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Konnt net läschen"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
-msgstr ""
+msgstr "Passwuert"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Hëllef"
diff --git a/l10n/lb/user_webdavauth.po b/l10n/lb/user_webdavauth.po
index 626112fb833..fb53f7bcb24 100644
--- a/l10n/lb/user_webdavauth.po
+++ b/l10n/lb/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
index a73a86f5f43..423db4d6592 100644
--- a/l10n/lt_LT/core.po
+++ b/l10n/lt_LT/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -19,24 +19,24 @@ msgstr ""
"Language: lt_LT\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -52,8 +52,9 @@ msgid "No category to add?"
msgstr "NepridÄ—site jokios kategorijos?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Tokia kategorija jau yra:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -81,59 +82,135 @@ msgstr "Trynimui nepasirinkta jokia kategorija."
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Sekmadienis"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Pirmadienis"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Antradienis"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "TreÄiadienis"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Ketvirtadienis"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Penktadienis"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Šeštadienis"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Sausis"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Vasaris"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Kovas"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Balandis"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Gegužė"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Birželis"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Liepa"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Rugpjūtis"
+
+#: js/config.php:33
+msgid "September"
+msgstr "RugsÄ—jis"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Spalis"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Lapkritis"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Gruodis"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Nustatymai"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "prieš sekundę"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "Prieš 1 minutę"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "Prieš {count} minutes"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "šiandien"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "vakar"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "Prieš {days} dienas"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "praeitą mėnesį"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "prieš mėnesį"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "praeitais metais"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "prieš metus"
@@ -163,8 +240,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Klaida"
@@ -176,123 +253,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Dalintis"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Klaida, dalijimosi metu"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Klaida, kai atšaukiamas dalijimasis"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Klaida, keiÄiant privilegijas"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Pasidalino su Jumis ir {group} grupe {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Pasidalino su Jumis {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Dalintis su"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Dalintis nuoroda"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Apsaugotas slaptažodžiu"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Slaptažodis"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Nustatykite galiojimo laikÄ…"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Galiojimo laikas"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Dalintis per el. paštą:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Žmonių nerasta"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Dalijinasis išnaujo negalimas"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Pasidalino {item} su {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Nesidalinti"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "gali redaguoti"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "priÄ—jimo kontrolÄ—"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "sukurti"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "atnaujinti"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "ištrinti"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "dalintis"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Apsaugota slaptažodžiu"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Klaida nuimant galiojimo laikÄ…"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Klaida nustatant galiojimo laikÄ…"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud slaptažodžio atkūrimas"
@@ -374,7 +469,7 @@ msgstr "Redaguoti kategorijas"
msgid "Add"
msgstr "PridÄ—ti"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Saugumo pranešimas"
@@ -384,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr "Saugaus atsitiktinių skaiÄių generatoriaus nÄ—ra, praÅ¡ome įjungti PHP OpenSSL modulį."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Be saugaus atsitiktinių skaiÄių generatoriaus, piktavaliai gali atspÄ—ti JÅ«sų slaptažodį ir pasisavinti paskyrÄ…."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Jūsų duomenų aplankalas ir Jūsų failai turbūt yra pasiekiami per internetą. Failas .htaccess, kuris duodamas, neveikia. Mes rekomenduojame susitvarkyti savo nustatymsu taip, kad failai nebūtų pasiekiami per internetą, arba persikelti juos kitur."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Sukurti <strong>administratoriaus paskyrÄ…</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Išplėstiniai"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Duomenų katalogas"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Nustatyti duomenų bazę"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "bus naudojama"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Duomenų bazės vartotojas"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Duomenų bazės slaptažodis"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Duomenų bazės pavadinimas"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Duomenų bazės loginis saugojimas"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Duomenų bazės serveris"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Baigti diegimÄ…"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Sekmadienis"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Pirmadienis"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Antradienis"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "TreÄiadienis"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Ketvirtadienis"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Penktadienis"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Šeštadienis"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Sausis"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Vasaris"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Kovas"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Balandis"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Gegužė"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Birželis"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Liepa"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Rugpjūtis"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "RugsÄ—jis"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Spalis"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Lapkritis"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Gruodis"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "jūsų valdomos web paslaugos"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Atsijungti"
@@ -546,17 +569,17 @@ msgstr "Prašome pasikeisti slaptažodį dar kartą, dėl paskyros saugumo."
msgid "Lost your password?"
msgstr "Pamiršote slaptažodį?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "prisiminti"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Prisijungti"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Jūs atsijungėte."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,17 +593,3 @@ msgstr "kitas"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Saugumo pranešimas!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Prašome patvirtinti savo vartotoją.<br/>Dėl saugumo, slaptažodžio patvirtinimas bus reikalaujamas įvesti kas kiek laiko."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Patvirtinti"
diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po
index 0b5d2d78f5b..966c0c8a348 100644
--- a/l10n/lt_LT/files.po
+++ b/l10n/lt_LT/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -25,55 +25,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Klaidų nėra, failas įkeltas sėkmingai"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Įkeliamo failo dydis viršija MAX_FILE_SIZE parametrą, kuris yra nustatytas HTML formoje"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Failas buvo įkeltas tik dalinai"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Nebuvo įkeltas nė vienas failas"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "NÄ—ra laikinojo katalogo"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Nepavyko įrašyti į diską"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -81,149 +81,152 @@ msgstr ""
msgid "Files"
msgstr "Failai"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Nebesidalinti"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Ištrinti"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Pervadinti"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Laukiantis"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} jau egzistuoja"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "pakeisti"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "pasiūlyti pavadinimą"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "atšaukti"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "pakeiskite {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "anuliuoti"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "pakeiskite {new_name} į {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "nebesidalinti {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "ištrinti {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "kuriamas ZIP archyvas, tai gali užtrukti šiek tiek laiko."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Įkėlimo klaida"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Užverti"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Laukiantis"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "įkeliamas 1 failas"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} įkeliami failai"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Įkėlimas atšauktas."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} praskanuoti failai"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "klaida skanuojant"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Pavadinimas"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Dydis"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Pakeista"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 aplankalas"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} aplankalai"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 failas"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} failai"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Įkelti"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Failų tvarkymas"
@@ -272,36 +275,44 @@ msgstr "Katalogas"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Įkelti"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Atšaukti siuntimą"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ÄŒia tuÅ¡Äia. Ä®kelkite kÄ… nors!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Atsisiųsti"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nebesidalinti"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Įkėlimui failas per didelis"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Skenuojami failai, prašome palaukti."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Å iuo metu skenuojama"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/lt_LT/files_encryption.po b/l10n/lt_LT/files_encryption.po
index 41529366d31..2e398b6292a 100644
--- a/l10n/lt_LT/files_encryption.po
+++ b/l10n/lt_LT/files_encryption.po
@@ -8,28 +8,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-23 02:03+0200\n"
-"PO-Revision-Date: 2012-08-22 12:29+0000\n"
-"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lt_LT\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Å ifravimas"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Nešifruoti pasirinkto tipo failų"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Nieko"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Įjungti šifravimą"
diff --git a/l10n/lt_LT/files_trashbin.po b/l10n/lt_LT/files_trashbin.po
new file mode 100644
index 00000000000..b5e0d72e3f3
--- /dev/null
+++ b/l10n/lt_LT/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Pavadinimas"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 aplankalas"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} aplankalai"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 failas"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} failai"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/lt_LT/files_versions.po b/l10n/lt_LT/files_versions.po
index 2e5b37e12fc..42087e7e323 100644
--- a/l10n/lt_LT/files_versions.po
+++ b/l10n/lt_LT/files_versions.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-23 02:02+0200\n"
-"PO-Revision-Date: 2012-10-22 16:56+0000\n"
-"Last-Translator: andrejuseu <andrejuszl@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: lt_LT\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Panaikinti visų versijų galiojimą"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Istorija"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versijos"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Tai ištrins visas esamas failo versijas"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/lt_LT/lib.po b/l10n/lt_LT/lib.po
index 8ef5110cd74..f27b3d7a45d 100644
--- a/l10n/lt_LT/lib.po
+++ b/l10n/lt_LT/lib.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -19,51 +19,55 @@ msgstr ""
"Language: lt_LT\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Pagalba"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Asmeniniai"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Nustatymai"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Vartotojai"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Programos"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Administravimas"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP atsisiuntimo galimybė yra išjungta."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Failai turi bÅ«ti parsiunÄiami vienas po kito."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Atgal į Failus"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Pasirinkti failai per dideli archyvavimui į ZIP."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Programa neįjungta"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Autentikacijos klaida"
@@ -83,55 +87,152 @@ msgstr "ŽinuÄių"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "prieš kelias sekundes"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "prieš 1 minutę"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "prieÅ¡ %d minuÄių"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "šiandien"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "vakar"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "prieš %d dienų"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "praėjusį mėnesį"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "pereitais metais"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "prieš metus"
diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po
index 8622a3a7a26..8b73d9d7207 100644
--- a/l10n/lt_LT/settings.po
+++ b/l10n/lt_LT/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -23,6 +23,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Neįmanoma įkelti sąrašo iš Programų Katalogo"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Autentikacijos klaida"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -31,7 +40,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Nepavyksta įjungti aplikacijos."
@@ -43,22 +52,10 @@ msgstr "El. paštas išsaugotas"
msgid "Invalid email"
msgstr "Netinkamas el. paštas"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID pakeistas"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Klaidinga užklausa"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Autentikacijos klaida"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -67,6 +64,10 @@ msgstr ""
msgid "Language changed"
msgstr "Kalba pakeista"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Klaidinga užklausa"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -81,19 +82,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Išjungti"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Įjungti"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Klaida"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Saugoma.."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Kalba"
@@ -105,18 +134,22 @@ msgstr "PridÄ—ti programÄ—lÄ™"
msgid "More Apps"
msgstr "Daugiau aplikacijų"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Pasirinkite programÄ…"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>- autorius<span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Atnaujinti"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -146,83 +179,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klientai"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Slaptažodis"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Jūsų slaptažodis buvo pakeistas"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Neįmanoma pakeisti slaptažodžio"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Dabartinis slaptažodis"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Naujas slaptažodis"
-#: templates/personal.php:26
-msgid "show"
-msgstr "rodyti"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Pakeisti slaptažodį"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "El. paštas"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Jūsų el. pašto adresas"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Pamiršto slaptažodžio atkūrimui įveskite savo el. pašto adresą"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Kalba"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Padėkite išversti"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +269,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Vardas"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "GrupÄ—s"
@@ -248,26 +285,34 @@ msgstr "Sukurti"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Kita"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Ištrinti"
diff --git a/l10n/lt_LT/user_ldap.po b/l10n/lt_LT/user_ldap.po
index 9891d24f372..a0eca3ff0fc 100644
--- a/l10n/lt_LT/user_ldap.po
+++ b/l10n/lt_LT/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: lt_LT\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Ištrinti nepavyko"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Slaptažodis"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "GrupÄ—s filtras"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Prievadas"
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Naudoti TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Išjungti SSL sertifikato tikrinimą."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Nerekomenduojama, naudokite tik testavimui."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Pagalba"
diff --git a/l10n/lt_LT/user_webdavauth.po b/l10n/lt_LT/user_webdavauth.po
index d4919105187..f8bc059ae29 100644
--- a/l10n/lt_LT/user_webdavauth.po
+++ b/l10n/lt_LT/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: lt_LT\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/lv/core.po b/l10n/lv/core.po
index 81112f772ff..3b10e4c5c06 100644
--- a/l10n/lv/core.po
+++ b/l10n/lv/core.po
@@ -4,13 +4,14 @@
#
# Translators:
# <aldis@udris.lv>, 2012.
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,287 +19,382 @@ msgstr ""
"Language: lv\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "LietotÄjs %s ar jums dalÄ«jÄs ar datni."
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "LietotÄjs %s ar jums dalÄ«jÄs ar mapi."
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "LietotÄjs %s ar jums dalÄ«jÄs ar datni “%sâ€. To var lejupielÄdÄ“t Å¡eit — %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "LietotÄjs %s ar jums dalÄ«jÄs ar mapi “%sâ€. To var lejupielÄdÄ“t Å¡eit — %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
-msgstr ""
+msgstr "Kategorijas tips nav norÄdÄ«ts."
#: ajax/vcategories/add.php:30
msgid "No category to add?"
-msgstr ""
+msgstr "Nav kategoriju, ko pievienot?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr ""
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Å Äda kategorija jau eksistÄ“ — %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
#: ajax/vcategories/removeFromFavorites.php:26
msgid "Object type not provided."
-msgstr ""
+msgstr "Objekta tips nav norÄdÄ«ts."
#: ajax/vcategories/addToFavorites.php:30
#: ajax/vcategories/removeFromFavorites.php:30
#, php-format
msgid "%s ID not provided."
-msgstr ""
+msgstr "%s ID nav norÄdÄ«ts."
#: ajax/vcategories/addToFavorites.php:35
#, php-format
msgid "Error adding %s to favorites."
-msgstr ""
+msgstr "Kļūda, pievienojot %s izlasei."
#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Neviena kategorija nav izvēlēta dzēšanai"
#: ajax/vcategories/removeFromFavorites.php:35
#, php-format
msgid "Error removing %s from favorites."
-msgstr ""
+msgstr "Kļūda, izņemot %s no izlases."
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Svētdiena"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Pirmdiena"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Otrdiena"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Trešdiena"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Ceturtdiena"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Piektdiena"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sestdiena"
+
+#: js/config.php:33
+msgid "January"
+msgstr "JanvÄris"
+
+#: js/config.php:33
+msgid "February"
+msgstr "FebruÄris"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Marts"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Aprīlis"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maijs"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Jūnijs"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Jūlijs"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Augusts"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Septembris"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktobris"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembris"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:33
+msgid "December"
+msgstr "Decembris"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Iestatījumi"
-#: js/js.js:704
+#: js/js.js:767
msgid "seconds ago"
-msgstr ""
+msgstr "sekundes atpakaļ"
-#: js/js.js:705
+#: js/js.js:768
msgid "1 minute ago"
-msgstr ""
+msgstr "pirms 1 minūtes"
-#: js/js.js:706
+#: js/js.js:769
msgid "{minutes} minutes ago"
-msgstr ""
+msgstr "pirms {minutes} minūtēm"
-#: js/js.js:707
+#: js/js.js:770
msgid "1 hour ago"
-msgstr ""
+msgstr "pirms 1 stundas"
-#: js/js.js:708
+#: js/js.js:771
msgid "{hours} hours ago"
-msgstr ""
+msgstr "pirms {hours} stundÄm"
-#: js/js.js:709
+#: js/js.js:772
msgid "today"
-msgstr ""
+msgstr "šodien"
-#: js/js.js:710
+#: js/js.js:773
msgid "yesterday"
-msgstr ""
+msgstr "vakar"
-#: js/js.js:711
+#: js/js.js:774
msgid "{days} days ago"
-msgstr ""
+msgstr "pirms {days} dienÄm"
-#: js/js.js:712
+#: js/js.js:775
msgid "last month"
-msgstr ""
+msgstr "pagÄjuÅ¡ajÄ mÄ“nesÄ«"
-#: js/js.js:713
+#: js/js.js:776
msgid "{months} months ago"
-msgstr ""
+msgstr "pirms {months} mēnešiem"
-#: js/js.js:714
+#: js/js.js:777
msgid "months ago"
-msgstr ""
+msgstr "mēnešus atpakaļ"
-#: js/js.js:715
+#: js/js.js:778
msgid "last year"
-msgstr ""
+msgstr "gÄjuÅ¡ajÄ gadÄ"
-#: js/js.js:716
+#: js/js.js:779
msgid "years ago"
-msgstr ""
+msgstr "gadus atpakaļ"
#: js/oc-dialogs.js:126
msgid "Choose"
-msgstr ""
+msgstr "Izvēlieties"
#: js/oc-dialogs.js:146 js/oc-dialogs.js:166
msgid "Cancel"
-msgstr ""
+msgstr "Atcelt"
#: js/oc-dialogs.js:162
msgid "No"
-msgstr ""
+msgstr "NÄ“"
#: js/oc-dialogs.js:163
msgid "Yes"
-msgstr ""
+msgstr "JÄ"
#: js/oc-dialogs.js:180
msgid "Ok"
-msgstr ""
+msgstr "Labi"
#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
msgid "The object type is not specified."
-msgstr ""
+msgstr "Nav norÄdÄ«ts objekta tips."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
-msgstr "Kļūme"
+msgstr "Kļūda"
#: js/oc-vcategories.js:179
msgid "The app name is not specified."
-msgstr ""
+msgstr "Nav norÄdÄ«ts lietotnes nosaukums."
#: js/oc-vcategories.js:194
msgid "The required file {file} is not installed!"
-msgstr ""
+msgstr "PieprasÄ«tÄ datne {file} nav instalÄ“ta!"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Dalīties"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Kopīgs"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
-msgstr ""
+msgstr "Kļūda, daloties"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
-msgstr ""
+msgstr "Kļūda, beidzot dalīties"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
-msgstr ""
+msgstr "Kļūda, mainot atļaujas"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
-msgstr ""
+msgstr "{owner} dalÄ«jÄs ar jums un grupu {group}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
-msgstr ""
+msgstr "{owner} dalÄ«jÄs ar jums"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
-msgstr ""
+msgstr "Dalīties ar"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
-msgstr ""
+msgstr "Dalīties ar saiti"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
-msgstr ""
+msgstr "AizsargÄt ar paroli"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Parole"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "Sūtīt saiti personai pa e-pastu"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "Sūtīt"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
-msgstr ""
+msgstr "Iestaties termiņa datumu"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
-msgstr ""
+msgstr "Termiņa datums"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
-msgstr ""
+msgstr "Dalīties, izmantojot e-pastu:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
-msgstr ""
+msgstr "Nav atrastu cilvēku"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
-msgstr ""
+msgstr "AtkÄrtota dalīšanÄs nav atļauta"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
-msgstr ""
+msgstr "DalÄ«jÄs ar {item} ar {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
-msgstr "PÄrtraukt lÄ«dzdalīšanu"
+msgstr "Beigt dalīties"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
-msgstr ""
+msgstr "var rediģēt"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
-msgstr ""
+msgstr "piekļuves vadība"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
-msgstr ""
+msgstr "izveidot"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
-msgstr ""
+msgstr "atjauninÄt"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
-msgstr ""
+msgstr "dzēst"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
-msgstr ""
+msgstr "dalīties"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
-msgstr ""
+msgstr "AizsargÄts ar paroli"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
-msgstr ""
+msgstr "Kļūda, noņemot termiņa datumu"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
-msgstr ""
+msgstr "Kļūda, iestatot termiņa datumu"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
-msgstr ""
+msgstr "Sūta..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
-msgstr ""
+msgstr "Vēstule nosūtīta"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "AtjauninÄÅ¡ana beidzÄs nesekmÄ«gi. LÅ«dzu, ziņojiet par Å¡o problÄ“mu <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud kopienai</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "AtjauninÄÅ¡ana beidzÄs sekmÄ«gi. Tagad pÄrsÅ«ta jÅ«s uz ownCloud."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
-msgstr ""
+msgstr "ownCloud paroles maiņa"
#: lostpassword/templates/email.php:2
msgid "Use the following link to reset your password: {link}"
-msgstr "Izmantojiet šo linku lai mainītu paroli"
+msgstr "Izmantojiet šo saiti, lai mainītu paroli: {link}"
#: lostpassword/templates/lostpassword.php:3
msgid "You will receive a link to reset your password via Email."
@@ -306,11 +402,11 @@ msgstr "JÅ«s savÄ epastÄ saņemsiet interneta saiti, caur kuru varÄ“siet atjau
#: lostpassword/templates/lostpassword.php:5
msgid "Reset email send."
-msgstr ""
+msgstr "Atstatīt e-pasta sūtīšanu."
#: lostpassword/templates/lostpassword.php:8
msgid "Request failed!"
-msgstr ""
+msgstr "PieprasÄ«jums neizdevÄs!"
#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39
#: templates/login.php:28
@@ -347,7 +443,7 @@ msgstr "LietotÄji"
#: strings.php:7
msgid "Apps"
-msgstr "AplikÄcijas"
+msgstr "Lietotnes"
#: strings.php:8
msgid "Admin"
@@ -359,7 +455,7 @@ msgstr "Palīdzība"
#: templates/403.php:12
msgid "Access forbidden"
-msgstr ""
+msgstr "Pieeja ir liegta"
#: templates/404.php:12
msgid "Cloud not found"
@@ -367,13 +463,13 @@ msgstr "MÄkonis netika atrasts"
#: templates/edit_categories_dialog.php:4
msgid "Edit categories"
-msgstr ""
+msgstr "Rediģēt kategoriju"
#: templates/edit_categories_dialog.php:16
msgid "Add"
-msgstr ""
+msgstr "Pievienot"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "BrÄ«dinÄjums par drošību"
@@ -381,181 +477,109 @@ msgstr "BrÄ«dinÄjums par drošību"
msgid ""
"No secure random number generator is available, please enable the PHP "
"OpenSSL extension."
-msgstr ""
+msgstr "Nav pieejams droÅ¡s nejauÅ¡u skaitļu Ä£enerators. LÅ«dzu, aktivÄ“jiet PHP OpenSSL paplaÅ¡inÄjumu."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
-msgstr ""
+msgstr "Bez droÅ¡a nejauÅ¡u skaitļu Ä£eneratora uzbrucÄ“js var paredzÄ“t paroļu atjaunoÅ¡anas marÄ·ierus un pÄrņem jÅ«su kontu."
+
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "VisticamÄk, jÅ«su datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas."
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr ""
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Lai uzzinÄtu, kÄ pareizi jÄkonfigurÄ“ Å¡is serveris, skatiet <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentÄciju</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
-msgstr ""
+msgstr "Izveidot <strong>administratora kontu</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
-msgstr ""
+msgstr "PaplaÅ¡inÄti"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datu mape"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
-msgstr "NokonfigurÄ“t datubÄzi"
+msgstr "KonfigurÄ“t datubÄzi"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "tiks izmantots"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "DatubÄzes lietotÄjs"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "DatubÄzes parole"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "DatubÄzes nosaukums"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
-msgstr ""
+msgstr "DatubÄzes tabulas telpa"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
-msgstr "DatubÄzes mÄjvieta"
+msgstr "DatubÄzes serveris"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
-msgstr "Pabeigt uzstÄdÄ«jumus"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr ""
+msgstr "Pabeigt iestatīšanu"
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
-msgstr ""
+msgstr "jÅ«su vadÄ«bÄ esoÅ¡ie tÄ«mekļa servisi"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
-msgstr "Izlogoties"
+msgstr "Izrakstīties"
#: templates/login.php:10
msgid "Automatic logon rejected!"
-msgstr ""
+msgstr "AutomÄtiskÄ ierakstīšanÄs ir noraidÄ«ta!"
#: templates/login.php:11
msgid ""
"If you did not change your password recently, your account may be "
"compromised!"
-msgstr ""
+msgstr "Ja neesat pÄ“dÄ“jÄ laikÄ mainÄ«jis paroli, iespÄ“jams, ka jÅ«su konts ir kompromitÄ“ts."
#: templates/login.php:13
msgid "Please change your password to secure your account again."
-msgstr ""
+msgstr "LÅ«dzu, nomainiet savu paroli, lai atkal nodroÅ¡inÄtu savu kontu."
#: templates/login.php:19
msgid "Lost your password?"
msgstr "AizmirsÄt paroli?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "atcerēties"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
-msgstr "Ielogoties"
+msgstr "Ierakstīties"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Jūs esat veiksmīgi izlogojies."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "AlternatÄ«vÄs pieteikÅ¡anÄs"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -568,18 +592,4 @@ msgstr "nÄkamÄ"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
+msgstr "Atjaunina ownCloud uz versiju %s. Tas var aizņemt kÄdu laiciņu."
diff --git a/l10n/lv/files.po b/l10n/lv/files.po
index 7b978c86d82..348038ee690 100644
--- a/l10n/lv/files.po
+++ b/l10n/lv/files.po
@@ -5,13 +5,14 @@
# Translators:
# <aldis@udris.lv>, 2012.
# Imants Liepiņš <imzzinator@gmail.com>, 2012.
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,226 +23,229 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "NevarÄ“ja pÄrvietot %s — jau eksistÄ“ datne ar tÄdu nosaukumu"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "NevarÄ“ja pÄrvietot %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "NevarÄ“ja pÄrsaukt datni"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Netika augÅ¡upielÄdÄ“ta neviena datne. NezinÄma kļūda"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
-msgstr "Viss kÄrtÄ«bÄ, augÅ¡upielÄde veiksmÄ«ga"
+msgstr "AugÅ¡upielÄde pabeigta bez kļūdÄm"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
-msgstr ""
+msgstr "AugÅ¡upielÄdÄ“tÄ datne pÄrsniedz upload_max_filesize norÄdÄ«jumu php.ini datnÄ“:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "AugÅ¡upielÄdÄ“tÄ datne pÄrsniedz MAX_FILE_SIZE norÄdi, kas ir norÄdÄ«ta HTML formÄ"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "AugÅ¡upielÄdÄ“tÄ datne ir tikai daļēji augÅ¡upielÄdÄ“ta"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
-msgstr "Neviens fails netika augÅ¡uplÄdÄ“ts"
+msgstr "Neviena datne netika augÅ¡upielÄdÄ“ta"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Trūkst pagaidu mapes"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
-msgstr "Nav iespÄ“jams saglabÄt"
+msgstr "NeizdevÄs saglabÄt diskÄ"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Nav pietiekami daudz vietas"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Nederīga direktorija."
#: appinfo/app.php:10
msgid "Files"
-msgstr "Faili"
+msgstr "Datnes"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "PÄrtraukt lÄ«dzdalīšanu"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Dzēst pavisam"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
-msgstr "Izdzēst"
+msgstr "Dzēst"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
-msgstr "PÄrdÄ“vÄ“t"
+msgstr "PÄrsaukt"
+
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Gaida savu kÄrtu"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
-msgstr ""
+msgstr "{new_name} jau eksistē"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "aizvietot"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
-msgstr "Ieteiktais nosaukums"
+msgstr "ieteiktais nosaukums"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "atcelt"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
-msgstr ""
+msgstr "aizvietots {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
-msgstr "vienu soli atpakaļ"
+msgstr "atsaukt"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
-msgstr ""
+msgstr "aizvietoja {new_name} ar {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "veikt dzēšanas darbību"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' ir nederīgs datnes nosaukums."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Datnes nosaukums nevar būt tukšs."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
-msgstr ""
+msgstr "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'."
+
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "JÅ«su krÄtuve ir pilna, datnes vairs nevar augÅ¡upielÄdÄ“t vai sinhronizÄ“t!"
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "lai uzÄ£enerÄ“tu ZIP failu, kÄds brÄ«dis ir jÄpagaida"
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "JÅ«su krÄtuve ir gandrÄ«z pilna ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Tiek sagatavota lejupielÄde. Tas var aizņemt kÄdu laiciņu, ja datnes ir lielas."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Nav iespÄ“jams augÅ¡uplÄdÄ“t jÅ«su failu, jo tÄds jau eksistÄ“ vai arÄ« failam nav izmÄ“ra (0 baiti)"
+msgstr "Nevar augÅ¡upielÄdÄ“t jÅ«su datni, jo tÄ ir direktorija vai arÄ« tÄs izmÄ“rs ir 0 baiti"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
-msgstr "AugÅ¡uplÄdēšanas laikÄ radÄs kļūda"
+msgstr "Kļūda augÅ¡upielÄdÄ“jot"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
-msgstr ""
+msgstr "Aizvērt"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Gaida savu kÄrtu"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
-msgstr ""
+msgstr "AugÅ¡upielÄdÄ“ 1 datni"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
-msgstr ""
+msgstr "augÅ¡upielÄdÄ“ {count} datnes"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
-msgstr "AugÅ¡uplÄde ir atcelta"
+msgstr "AugÅ¡upielÄde ir atcelta."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Notiek augÅ¡upielÄde. Pametot lapu tagad, tiks atcelta augÅ¡upielÄde."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
-msgstr ""
+msgstr "URL nevar būt tukšs."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
+msgstr "Nederīgs mapes nosaukums. “Koplietots†izmantojums ir rezervēts ownCloud servisam."
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Nosaukums"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Izmērs"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
-msgstr "Izmainīts"
+msgstr "Mainīts"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
-msgstr ""
+msgstr "1 mape"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
-msgstr ""
+msgstr "{count} mapes"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
-msgstr ""
+msgstr "1 datne"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
-msgstr ""
+msgstr "{count} datnes"
+
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "AugÅ¡upielÄdÄ“t"
#: templates/admin.php:5
msgid "File handling"
-msgstr "Failu pÄrvaldÄ«ba"
+msgstr "Datņu pÄrvaldÄ«ba"
#: templates/admin.php:7
msgid "Maximum upload size"
-msgstr "MaksimÄlais failu augÅ¡uplÄdes apjoms"
+msgstr "MaksimÄlais datņu augÅ¡upielÄdes apjoms"
#: templates/admin.php:10
msgid "max. possible: "
-msgstr "maksÄ«mÄlais iespÄ“jamais:"
+msgstr "maksimÄlais iespÄ“jamais:"
#: templates/admin.php:15
msgid "Needed for multi-file and folder downloads."
-msgstr "VajadzÄ«gs vairÄku failu un mapju lejuplÄdei"
+msgstr "VajadzÄ«gs vairÄku datņu un mapju lejupielÄdēšanai."
#: templates/admin.php:17
msgid "Enable ZIP-download"
-msgstr "IespÄ“jot ZIP lejuplÄdi"
+msgstr "AktivÄ“t ZIP lejupielÄdi"
#: templates/admin.php:20
msgid "0 is unlimited"
@@ -249,7 +253,7 @@ msgstr "0 ir neierobežots"
#: templates/admin.php:22
msgid "Maximum input size for ZIP files"
-msgstr ""
+msgstr "MaksimÄlais ievades izmÄ“rs ZIP datnÄ“m"
#: templates/admin.php:26
msgid "Save"
@@ -257,11 +261,11 @@ msgstr "SaglabÄt"
#: templates/index.php:7
msgid "New"
-msgstr "Jauns"
+msgstr "Jauna"
#: templates/index.php:10
msgid "Text file"
-msgstr "Teksta fails"
+msgstr "Teksta datne"
#: templates/index.php:12
msgid "Folder"
@@ -269,38 +273,46 @@ msgstr "Mape"
#: templates/index.php:14
msgid "From link"
-msgstr ""
+msgstr "No saites"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "AugÅ¡uplÄdet"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Miskaste"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
-msgstr "Atcelt augÅ¡uplÄdi"
+msgstr "Atcelt augÅ¡upielÄdi"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
-msgstr "Te vÄ“l nekas nav. RÄ«kojies, sÄc augÅ¡uplÄdÄ“t"
+msgstr "Te vÄ“l nekas nav. RÄ«kojies, sÄc augÅ¡upielÄdÄ“t!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
-msgstr "LejuplÄdÄ“t"
+msgstr "LejupielÄdÄ“t"
+
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "PÄrtraukt dalīšanos"
-#: templates/index.php:102
+#: templates/index.php:105
msgid "Upload too large"
-msgstr "Fails ir par lielu lai to augÅ¡uplÄdetu"
+msgstr "Datne ir par lielu, lai to augÅ¡upielÄdÄ“tu"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr "JÅ«su augÅ¡uplÄdÄ“jamie faili pÄrsniedz servera pieļaujamo failu augÅ¡upielÄdes apjomu"
+msgstr "AugÅ¡upielÄdÄ“jamÄs datnes pÄrsniedz servera pieļaujamo datņu augÅ¡upielÄdes apjomu"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
-msgstr "Faili Å¡obrÄ«d tiek caurskatÄ«ti, nedaudz jÄpagaida."
+msgstr "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
-msgstr "Å obrÄ«d tiek pÄrbaudÄ«ti"
+msgstr "Šobrīd tiek caurskatīts"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Uzlabo datņu sistēmas kešatmiņu..."
diff --git a/l10n/lv/files_encryption.po b/l10n/lv/files_encryption.po
index 6b2dc7673d7..845062cf877 100644
--- a/l10n/lv/files_encryption.po
+++ b/l10n/lv/files_encryption.po
@@ -3,32 +3,37 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lv\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2)\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
-msgstr ""
+msgstr "Šifrēšana"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr ""
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Datņu šifrēšana ir aktivēta."
-#: templates/settings.php:5
-msgid "None"
-msgstr ""
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "SekojoÅ¡Äs datnes netiks Å¡ifrÄ“tas:"
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr ""
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Sekojošos datņu tipus izslēgt no šifrēšanas:"
+
+#: templates/settings.php:12
+msgid "None"
+msgstr "Nav"
diff --git a/l10n/lv/files_external.po b/l10n/lv/files_external.po
index 07979d9b1c8..c4fdcae0744 100644
--- a/l10n/lv/files_external.po
+++ b/l10n/lv/files_external.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-05 00:19+0100\n"
+"PO-Revision-Date: 2013-02-04 18:30+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,76 +20,76 @@ msgstr ""
#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23
msgid "Access granted"
-msgstr ""
+msgstr "Piešķirta pieeja"
#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86
msgid "Error configuring Dropbox storage"
-msgstr ""
+msgstr "Kļūda, konfigurÄ“jot Dropbox krÄtuvi"
#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
msgid "Grant access"
-msgstr ""
+msgstr "Piešķirt pieeju"
#: js/dropbox.js:73 js/google.js:72
msgid "Fill out all required fields"
-msgstr ""
+msgstr "Aizpildīt visus pieprasītos laukus"
#: js/dropbox.js:85
msgid "Please provide a valid Dropbox app key and secret."
-msgstr ""
+msgstr "LÅ«dzu, norÄdiet derÄ«gu Dropbox lietotnes atslÄ“gu un noslÄ“pumu."
#: js/google.js:26 js/google.js:73 js/google.js:78
msgid "Error configuring Google Drive storage"
-msgstr ""
+msgstr "Kļūda, konfigurÄ“jot Google Drive krÄtuvi"
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>BrÄ«dinÄjums:</b> nav uzinstalÄ“ts “smbclientâ€. Nevar montÄ“t CIFS/SMB koplietojumus. LÅ«dzu, vaicÄjiet savam sistÄ“mas administratoram, lai to uzinstalÄ“."
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
"install it."
-msgstr ""
+msgstr "<b>BrÄ«dinÄjums: </b> uz PHP nav aktivÄ“ts vai instalÄ“ts FTP atbalsts. Nevar montÄ“t FTP koplietojumus. LÅ«dzu, vaicÄjiet savam sistÄ“mas administratoram, lai to uzinstalÄ“."
#: templates/settings.php:3
msgid "External Storage"
-msgstr ""
+msgstr "Ä€rÄ“jÄ krÄtuve"
#: templates/settings.php:8 templates/settings.php:22
msgid "Mount point"
-msgstr ""
+msgstr "Montēšanas punkts"
#: templates/settings.php:9
msgid "Backend"
-msgstr ""
+msgstr "Aizmugure"
#: templates/settings.php:10
msgid "Configuration"
-msgstr ""
+msgstr "KonfigurÄcija"
#: templates/settings.php:11
msgid "Options"
-msgstr ""
+msgstr "Opcijas"
#: templates/settings.php:12
msgid "Applicable"
-msgstr ""
+msgstr "Piemērojams"
#: templates/settings.php:27
msgid "Add mount point"
-msgstr ""
+msgstr "Pievienot montēšanas punktu"
#: templates/settings.php:85
msgid "None set"
-msgstr ""
+msgstr "Neviens nav iestatīts"
#: templates/settings.php:86
msgid "All Users"
-msgstr ""
+msgstr "Visi lietotÄji"
#: templates/settings.php:87
msgid "Groups"
@@ -99,22 +100,22 @@ msgid "Users"
msgstr "LietotÄji"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
-msgstr "Izdzēst"
+msgstr "Dzēst"
#: templates/settings.php:124
msgid "Enable User External Storage"
-msgstr ""
+msgstr "AktivÄ“t lietotÄja ÄrÄ“jo krÄtuvi"
#: templates/settings.php:125
msgid "Allow users to mount their own external storage"
-msgstr ""
+msgstr "Ä»aut lietotÄjiem montÄ“t paÅ¡iem savu ÄrÄ“jo krÄtuvi"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
-msgstr ""
+msgstr "SSL saknes sertifikÄti"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
-msgstr ""
+msgstr "ImportÄ“t saknes sertifikÄtus"
diff --git a/l10n/lv/files_sharing.po b/l10n/lv/files_sharing.po
index 77168f1b72c..3e20fdad264 100644
--- a/l10n/lv/files_sharing.po
+++ b/l10n/lv/files_sharing.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-07 00:07+0100\n"
+"PO-Revision-Date: 2013-02-06 21:40+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,30 +20,30 @@ msgstr ""
#: templates/authenticate.php:4
msgid "Password"
-msgstr ""
+msgstr "Parole"
#: templates/authenticate.php:6
msgid "Submit"
-msgstr ""
+msgstr "Iesniegt"
#: templates/public.php:9
#, php-format
msgid "%s shared the folder %s with you"
-msgstr ""
+msgstr "%s ar jums dalÄ«jÄs ar mapi %s"
#: templates/public.php:11
#, php-format
msgid "%s shared the file %s with you"
-msgstr ""
+msgstr "%s ar jums dalÄ«jÄs ar datni %s"
#: templates/public.php:14 templates/public.php:30
msgid "Download"
-msgstr ""
+msgstr "LejupielÄdÄ“t"
#: templates/public.php:29
msgid "No preview available for"
-msgstr ""
+msgstr "Nav pieejams priekšskatījums priekš"
-#: templates/public.php:37
+#: templates/public.php:35
msgid "web services under your control"
-msgstr ""
+msgstr "jÅ«su vadÄ«bÄ esoÅ¡ie tÄ«mekļa servisi"
diff --git a/l10n/lv/files_trashbin.po b/l10n/lv/files_trashbin.po
new file mode 100644
index 00000000000..ef9c6063c3b
--- /dev/null
+++ b/l10n/lv/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 12:20+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
+"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "NevarÄ“ja pilnÄ«bÄ izdzÄ“st %s"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Nevarēja atjaunot %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "veikt atjaunošanu"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "dzēst datni pavisam"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nosaukums"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Dzēsts"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 mape"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} mapes"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 datne"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} datnes"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Å eit nekÄ nav. JÅ«su miskaste ir tukÅ¡a!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Atjaunot"
diff --git a/l10n/lv/files_versions.po b/l10n/lv/files_versions.po
index 8f4cc2911f8..7d9e6940598 100644
--- a/l10n/lv/files_versions.po
+++ b/l10n/lv/files_versions.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 12:20+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,26 +18,49 @@ msgstr ""
"Language: lv\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr ""
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Nevarēja atgriezt — %s"
+
+#: history.php:40
+msgid "success"
+msgstr "veiksme"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "Datne %s tika atgriezt uz versiju %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "neveiksme"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Datni %s nevarēja atgriezt uz versiju %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Nav pieejamu vecÄku versiju"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Nav norÄdÄ«ts ceļš"
#: js/versions.js:16
msgid "History"
-msgstr ""
-
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr ""
+msgstr "Vēsture"
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr ""
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Atgriez datni uz iepriekšēju versiju, spiežot uz tÄs atgrieÅ¡anas pogu"
#: templates/settings.php:3
msgid "Files Versioning"
-msgstr ""
+msgstr "Datņu versiju izskošana"
#: templates/settings.php:4
msgid "Enable"
-msgstr ""
+msgstr "Aktivēt"
diff --git a/l10n/lv/lib.po b/l10n/lv/lib.po
index 8ef8b7d5060..0126539a69f 100644
--- a/l10n/lv/lib.po
+++ b/l10n/lv/lib.po
@@ -3,12 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
@@ -17,136 +18,237 @@ msgstr ""
"Language: lv\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Palīdzība"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personīgi"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Iestatījumi"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "LietotÄji"
-#: app.php:309
+#: app.php:363
msgid "Apps"
-msgstr ""
+msgstr "Lietotnes"
-#: app.php:311
+#: app.php:365
msgid "Admin"
-msgstr ""
+msgstr "Administratori"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
-msgstr ""
+msgstr "ZIP lejupielÄdēšana ir izslÄ“gta."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
-msgstr ""
+msgstr "Datnes var lejupielÄdÄ“t tikai katru atsevišķi."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
-msgstr ""
+msgstr "Atpakaļ pie datnēm"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
-msgstr ""
+msgstr "IzvÄ“lÄ“tÄs datnes ir pÄrÄk lielas, lai izveidotu zip datni."
+
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "nevarēja noteikt"
#: json.php:28
msgid "Application is not enabled"
-msgstr ""
+msgstr "Lietotne nav aktivēta"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
-msgstr "IelogoÅ¡anÄs kļūme"
+msgstr "AutentifikÄcijas kļūda"
#: json.php:51
msgid "Token expired. Please reload page."
-msgstr ""
+msgstr "Pilnvarai ir beidzies termiņš. LÅ«dzu, pÄrlÄdÄ“jiet lapu."
#: search/provider/file.php:17 search/provider/file.php:35
msgid "Files"
-msgstr "Faili"
+msgstr "Datnes"
#: search/provider/file.php:26 search/provider/file.php:33
msgid "Text"
-msgstr ""
+msgstr "Teksts"
#: search/provider/file.php:29
msgid "Images"
+msgstr "Attēli"
+
+#: setup.php:34
+msgid "Set an admin username."
msgstr ""
-#: template.php:103
-msgid "seconds ago"
+#: setup.php:37
+msgid "Set an admin password."
msgstr ""
-#: template.php:104
-msgid "1 minute ago"
+#: setup.php:40
+msgid "Specify a data folder."
msgstr ""
-#: template.php:105
+#: setup.php:53
#, php-format
-msgid "%d minutes ago"
+msgid "%s enter the database username."
msgstr ""
-#: template.php:106
-msgid "1 hour ago"
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
msgstr ""
-#: template.php:107
+#: setup.php:59
#, php-format
-msgid "%d hours ago"
+msgid "%s you may not use dots in the database name"
msgstr ""
-#: template.php:108
-msgid "today"
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
msgstr ""
-#: template.php:109
-msgid "yesterday"
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
msgstr ""
-#: template.php:110
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
#, php-format
-msgid "%d days ago"
+msgid "DB Error: \"%s\""
msgstr ""
-#: template.php:111
-msgid "last month"
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
msgstr ""
-#: template.php:112
+#: setup.php:270
#, php-format
-msgid "%d months ago"
+msgid "MySQL user '%s'@'localhost' exists already."
msgstr ""
-#: template.php:113
-msgid "last year"
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
msgstr ""
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "JÅ«su serveris vÄ“l nav pareizi iestatÄ«ts, lai ļautu sinhronizÄ“t datnes, jo izskatÄs, ka WebDAV saskarne ir salauzta."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "LÅ«dzu, vÄ“lreiz pÄrbaudiet <a href='%s'>instalēšanas palÄ«dzÄ«bu</a>."
+
+#: template.php:113
+msgid "seconds ago"
+msgstr "sekundes atpakaļ"
+
#: template.php:114
+msgid "1 minute ago"
+msgstr "pirms 1 minūtes"
+
+#: template.php:115
+#, php-format
+msgid "%d minutes ago"
+msgstr "pirms %d minūtēm"
+
+#: template.php:116
+msgid "1 hour ago"
+msgstr "pirms 1 stundas"
+
+#: template.php:117
+#, php-format
+msgid "%d hours ago"
+msgstr "pirms %d stundÄm"
+
+#: template.php:118
+msgid "today"
+msgstr "šodien"
+
+#: template.php:119
+msgid "yesterday"
+msgstr "vakar"
+
+#: template.php:120
+#, php-format
+msgid "%d days ago"
+msgstr "pirms %d dienÄm"
+
+#: template.php:121
+msgid "last month"
+msgstr "pagÄjuÅ¡ajÄ mÄ“nesÄ«"
+
+#: template.php:122
+#, php-format
+msgid "%d months ago"
+msgstr "pirms %d mēnešiem"
+
+#: template.php:123
+msgid "last year"
+msgstr "gÄjuÅ¡ajÄ gadÄ"
+
+#: template.php:124
msgid "years ago"
-msgstr ""
+msgstr "gadus atpakaļ"
#: updater.php:75
#, php-format
msgid "%s is available. Get <a href=\"%s\">more information</a>"
-msgstr ""
+msgstr "%s ir pieejams. IegÅ«t <a href=\"%s\">vairÄk informÄcijas</a>"
#: updater.php:77
msgid "up to date"
-msgstr ""
+msgstr "ir aktuÄls"
#: updater.php:80
msgid "updates check is disabled"
-msgstr ""
+msgstr "atjauninÄjumu pÄrbaude ir deaktivÄ“ta"
#: vcategories.php:188 vcategories.php:249
#, php-format
msgid "Could not find category \"%s\""
-msgstr ""
+msgstr "NevarÄ“ja atrast kategoriju “%sâ€"
diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po
index 6bac98259c8..7356dc04710 100644
--- a/l10n/lv/settings.po
+++ b/l10n/lv/settings.po
@@ -5,12 +5,13 @@
# Translators:
# <aldis@udris.lv>, 2012.
# <elwins@inbox.lv>, 2012.
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
@@ -21,7 +22,16 @@ msgstr ""
#: ajax/apps/ocs.php:20
msgid "Unable to load list from App Store"
-msgstr "Nebija iespÄ“jams lejuplÄdÄ“t sarakstu no aplikÄciju veikala"
+msgstr "Nevar lejupielÄdÄ“t sarakstu no lietotņu veikala"
+
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "AutentifikÄcijas kļūda"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "NevarÄ“ja mainÄ«t redzamo vÄrdu"
#: ajax/creategroup.php:10
msgid "Group already exists"
@@ -31,34 +41,22 @@ msgstr "Grupa jau eksistē"
msgid "Unable to add group"
msgstr "Nevar pievienot grupu"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
-msgstr "Nevar ieslÄ“gt aplikÄciju."
+msgstr "Nevarēja aktivēt lietotni."
#: ajax/lostpassword.php:12
msgid "Email saved"
-msgstr "Epasts tika saglabÄts"
+msgstr "E-pasts tika saglabÄts"
#: ajax/lostpassword.php:14
msgid "Invalid email"
-msgstr "Nepareizs epasts"
-
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID nomainīts"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Nepareizs vaicÄjums"
+msgstr "Nederīgs epasts"
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Nevar izdzēst grupu"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "IelogoÅ¡anÄs kļūme"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Nevar izdzÄ“st lietotÄju"
@@ -67,9 +65,13 @@ msgstr "Nevar izdzÄ“st lietotÄju"
msgid "Language changed"
msgstr "Valoda tika nomainīta"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Nederīgs pieprasījums"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
-msgstr ""
+msgstr "Administratori nevar izņemt paši sevi no administratoru grupas"
#: ajax/togglegroups.php:28
#, php-format
@@ -79,150 +81,186 @@ msgstr "Nevar pievienot lietotÄju grupai %s"
#: ajax/togglegroups.php:34
#, php-format
msgid "Unable to remove user from group %s"
-msgstr "Nevar noņemt lietotÄju no grupas %s"
+msgstr "Nevar izņemt lietotÄju no grupas %s"
+
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "NevarÄ“ja atjauninÄt lietotni."
-#: js/apps.js:28 js/apps.js:67
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "AtjauninÄt uz {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
-msgstr "Atvienot"
+msgstr "Deaktivēt"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
-msgstr "Pievienot"
+msgstr "Aktivēt"
+
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Lūdzu, uzgaidiet...."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Atjaunina...."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Kļūda, atjauninot lietotni"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Kļūda"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "AtjauninÄta"
-#: js/personal.js:69
+#: js/personal.js:96
msgid "Saving..."
msgstr "SaglabÄ..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__valodas_nosaukums__"
#: templates/apps.php:10
msgid "Add your App"
-msgstr "Pievieno savu aplikÄciju"
+msgstr "Pievieno savu lietotni"
#: templates/apps.php:11
msgid "More Apps"
-msgstr "VairÄk aplikÄciju"
+msgstr "VairÄk lietotņu"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
-msgstr "IzvÄ“lies aplikÄciju"
+msgstr "Izvēlies lietotni"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
-msgstr "Apskatie aplikÄciju lapu - apps.owncloud.com"
+msgstr "Apskati lietotņu lapu — apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licencēts no <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "AtjauninÄt"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "LietotÄja dokumentÄcija"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "Administratora dokumentÄcija"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "TieÅ¡saistes dokumentÄcija"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "Forums"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr ""
+msgstr "Kļūdu sekotÄjs"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "KomerciÄlais atbalsts"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Jūs lietojat <strong>%s</strong> no pieejamajiem <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr ""
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Parole"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Jūru parole tika nomainīta"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
-msgstr "Nav iespējams nomainīt jūsu paroli"
+msgstr "Nevar nomainīt jūsu paroli"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "PaÅ¡reizÄ“jÄ parole"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Jauna parole"
-#: templates/personal.php:26
-msgid "show"
-msgstr "parÄdÄ«t"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
-msgstr "Nomainīt paroli"
+msgstr "Mainīt paroli"
+
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Redzamais vÄrds"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "JÅ«su redzamais vÄrds tika mainÄ«ts"
-#: templates/personal.php:33
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "NevarÄ“ja mainÄ«t jÅ«su redzamo vÄrdu"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "MainÄ«t redzamo vÄrdu"
+
+#: templates/personal.php:68
msgid "Email"
-msgstr "Epasts"
+msgstr "E-pasts"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
-msgstr "Jūsu epasta adrese"
+msgstr "Jūsu e-pasta adrese"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
-msgstr "Ievadiet epasta adresi, lai vēlak būtu iespēja atgūt paroli, ja būs nepieciešamība"
+msgstr "Ievadiet epasta adresi, lai vÄ“lÄk varÄ“tu atgÅ«t paroli, ja bÅ«s nepiecieÅ¡amÄ«ba"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Valoda"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Palīdzi tulkot"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "Izmanto Å¡o adresi, lai, izmantojot datņu pÄrvaldnieku, savienotos ar savu ownCloud"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "Versija"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "VÄrds"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "IerakstīšanÄs vÄrds"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupas"
@@ -246,28 +284,36 @@ msgstr "Izveidot"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "NoklusÄ“juma krÄtuve"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Neierobežota"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Cits"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupas administrators"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
-msgstr ""
+msgstr "KrÄtuve"
+
+#: templates/users.php:97
+msgid "change display name"
+msgstr "mainÄ«t redzamo vÄrdu"
-#: templates/users.php:133
+#: templates/users.php:101
+msgid "set new password"
+msgstr "iestatīt jaunu paroli"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "Noklusējuma"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
-msgstr "Izdzēst"
+msgstr "Dzēst"
diff --git a/l10n/lv/user_ldap.po b/l10n/lv/user_ldap.po
index b0d8f36bed3..3635e7a2787 100644
--- a/l10n/lv/user_ldap.po
+++ b/l10n/lv/user_ldap.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 12:20+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,167 +18,293 @@ msgstr ""
"Language: lv\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "NeizdevÄs izdzÄ“st servera konfigurÄciju"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "KonfigurÄcija ir derÄ«ga un varÄ“ja izveidot savienojumu!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "KonfigurÄcija ir derÄ«ga, bet sasaiste neizdevÄs. LÅ«dzu, pÄrbaudiet servera iestatÄ«jumus un akreditÄcijas datus."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "KonfigurÄcija ir nederÄ«ga. LÅ«dzu, apskatiet ownCloud žurnÄlu, lai uzzinÄtu vairÄk."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "NeizdevÄs izdzÄ“st"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Paņemt iestatÄ«jumus no nesenas servera konfigurÄcijas?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Paturēt iestatījumus?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Nevar pievienot servera konfigurÄciju"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Savienojuma tests ir veiksmīgs"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Savienojuma tests cieta neveiksmi"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Vai tieÅ¡Äm vÄ“laties dzÄ“st paÅ¡reizÄ“jo servera konfigurÄciju?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "ApstiprinÄt dzēšanu"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
" experience unexpected behaviour. Please ask your system administrator to "
"disable one of them."
-msgstr ""
+msgstr "<b>BrÄ«dinÄjums:</b> lietotnes user_ldap un user_webdavauth ir nesavietojamas. TÄs var izraisÄ«t negaidÄ«tu uzvedÄ«bu. LÅ«dzu, prasiet savam sistÄ“mas administratoram kÄdu no tÄm deaktivÄ“t."
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr ""
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>BrÄ«dinÄjums:</b> PHP LDAP modulis nav uzinstalÄ“ts, aizmugure nedarbosies. LÅ«dzu, prasiet savam sistÄ“mas administratoram kÄdu no tÄm deaktivÄ“t."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Servera konfigurÄcija"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Pievienot servera konfigurÄciju"
+
+#: templates/settings.php:21
msgid "Host"
-msgstr ""
+msgstr "Resursdators"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
-msgstr ""
+msgstr "Var neiekļaut protokolu, izņemot, ja vajag SSL. Tad sÄkums ir ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
-msgstr ""
+msgstr "BÄzes DN"
+
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Viena bÄzes DN rindÄ"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
-msgstr ""
+msgstr "LietotÄjiem un grupÄm bÄzes DN var norÄdÄ«t cilnÄ“ “PaplaÅ¡inÄtiâ€"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
-msgstr ""
+msgstr "LietotÄja DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
-msgstr ""
+msgstr "Klienta lietotÄja DN, ar ko veiks sasaisti, piemÄ“ram, uid=agent,dc=example,dc=com. Lai piekļūtu anonÄ«mi, atstÄjiet DN un paroli tukÅ¡u."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
-msgstr ""
+msgstr "Parole"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
-msgstr ""
+msgstr "Lai piekļūtu anonÄ«mi, atstÄjiet DN un paroli tukÅ¡u."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
-msgstr ""
+msgstr "LietotÄja ierakstīšanÄs filtrs"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
-msgstr ""
+msgstr "DefinÄ“ filtru, ko izmantot, kad mēģina ierakstÄ«ties. %%uid ierakstīšanÄs darbÄ«bÄ aizstÄj lietotÄjvÄrdu."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
-msgstr ""
+msgstr "lieto %%uid vietturi, piemēram, \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
-msgstr ""
+msgstr "LietotÄju saraksta filtrs"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
-msgstr ""
+msgstr "DefinÄ“ filtru, ko izmantot, kad saņem lietotÄju sarakstu."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
-msgstr ""
+msgstr "bez jebkÄdiem vietturiem, piemÄ“ram, \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
-msgstr ""
+msgstr "Grupu filtrs"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
-msgstr ""
+msgstr "Definē filtru, ko izmantot, kad saņem grupu sarakstu."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
-msgstr ""
+msgstr "bez jebkÄdiem vietturiem, piemÄ“ram, \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Savienojuma iestatījumi"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "KonfigurÄcija ir aktÄ«va"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Ja nav atzÄ«mÄ“ts, šī konfigurÄcija tiks izlaista."
+
+#: templates/settings.php:34
msgid "Port"
-msgstr ""
+msgstr "Ports"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr ""
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Rezerves (kopija) serveris"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr ""
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "NorÄdi rezerves serveri (nav obligÄti). Tam ir jÄbÅ«t galvenÄ LDAP/AD servera kopijai."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr ""
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Rezerves (kopijas) ports"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Deaktivēt galveno serveri"
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Kad ieslēgts, ownCloud savienosies tikai ar kopijas serveri."
+
+#: templates/settings.php:38
msgid "Use TLS"
-msgstr ""
+msgstr "Lietot TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr ""
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "Neizmanto papildu LDAPS savienojumus! Tas nestrÄdÄs."
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
-msgstr ""
+msgstr "Reģistrnejutīgs LDAP serveris (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
-msgstr ""
+msgstr "IzslÄ“gt SSL sertifikÄtu validēšanu."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
-msgstr ""
+msgstr "Ja savienojums darbojas ar Å¡o opciju, importÄ“ LDAP serveru SSL sertifikÄtu savÄ ownCloud serverÄ«."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
-msgstr ""
+msgstr "Nav ieteicams, izmanto tikai testēšanai!"
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "sekundēs. Izmaiņas iztukšos kešatmiņu."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Direktorijas iestatījumi"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
-msgstr ""
+msgstr "LietotÄja redzamÄ vÄrda lauks"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
-msgstr ""
+msgstr "LDAP atribÅ«ts, ko izmantot lietotÄja ownCloud vÄrda veidoÅ¡anai."
+
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "BÄzes lietotÄju koks"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Viena lietotÄju bÄzes DN rindÄ"
-#: templates/settings.php:32
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "LietotÄju meklēšanas atribÅ«ts"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "NeobligÄti; viens atribÅ«ts rindÄ"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
-msgstr ""
+msgstr "Grupas redzamÄ nosaukuma lauks"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
-msgstr ""
+msgstr "LDAP atribūts, ko izmantot grupas ownCloud nosaukuma veidošanai."
-#: templates/settings.php:34
-msgid "in bytes"
-msgstr ""
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "BÄzes grupu koks"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr ""
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Viena grupu bÄzes DN rindÄ"
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Grupu meklēšanas atribūts"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Grupu piederÄ«bas asociÄcija"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Īpašie atribūti"
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr "baitos"
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
-msgstr ""
+msgstr "AtstÄt tukÅ¡u lietotÄja vÄrdam (noklusÄ“juma). CitÄdi, norÄdi LDAP/AD atribÅ«tu."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Palīdzība"
diff --git a/l10n/lv/user_webdavauth.po b/l10n/lv/user_webdavauth.po
index c2af7da931a..bac06d9c1e3 100644
--- a/l10n/lv/user_webdavauth.po
+++ b/l10n/lv/user_webdavauth.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-05 00:19+0100\n"
+"PO-Revision-Date: 2013-02-04 11:30+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,13 +18,17 @@ msgstr ""
"Language: lv\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV autentifikÄcija"
+
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "URL: http://"
-#: templates/settings.php:6
+#: templates/settings.php:7
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud sÅ«tÄ«s lietotÄja akreditÄcijas datus uz Å¡o URL. Å is spraudnis pÄrbauda atbildi un interpretÄ“ HTTP statusa kodus 401 un 403 kÄ nederÄ«gus akreditÄcijas datus un visas citas atbildes kÄ derÄ«gus akreditÄcijas datus."
diff --git a/l10n/mk/core.po b/l10n/mk/core.po
index 26defed1f78..547295277d1 100644
--- a/l10n/mk/core.po
+++ b/l10n/mk/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
@@ -20,24 +20,24 @@ msgstr ""
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "КориÑникот %s Ñподели датотека Ñо ВаÑ"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "КориÑникот %s Ñподели папка Ñо ВаÑ"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "КориÑникот %s ја Ñподели датотека „%s“ Ñо ВаÑ. ДоÑтапна е за преземање тука: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,8 +53,9 @@ msgid "No category to add?"
msgstr "Ðема категорија да Ñе додаде?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Оваа категорија веќе поÑтои:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -82,59 +83,135 @@ msgstr "Ðе е одбрана категорија за бришење."
msgid "Error removing %s from favorites."
msgstr "Грешка при бришење на %s од омилени."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Ðедела"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Понеделник"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Вторник"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Среда"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Четврток"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Петок"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Сабота"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Јануари"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Февруари"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Март"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Ðприл"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Мај"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Јуни"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Јули"
+
+#: js/config.php:33
+msgid "August"
+msgstr "ÐвгуÑÑ‚"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Септември"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Октомври"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Ðоември"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Декември"
+
+#: js/js.js:284
msgid "Settings"
msgstr "ПоÑтавки"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "пред Ñекунди"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "пред 1 минута"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "пред {minutes} минути"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "пред 1 чаÑ"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "пред {hours} чаÑови"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "денеÑка"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "вчера"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "пред {days} денови"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "минатиот меÑец"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "пред {months} меÑеци"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "пред меÑеци"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "минатата година"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "пред години"
@@ -164,8 +241,8 @@ msgid "The object type is not specified."
msgstr "Ðе е Ñпецифициран типот на објект."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Грешка"
@@ -177,123 +254,141 @@ msgstr "Името на апликацијата не е ÑпецифицираÐ
msgid "The required file {file} is not installed!"
msgstr "Задолжителната датотека {file} не е инÑталирана!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Сподели"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Грешка при Ñподелување"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Грешка при прекин на Ñподелување"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Грешка при промена на привилегии"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Споделено Ñо Ð’Ð°Ñ Ð¸ групата {group} од {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Споделено Ñо Ð’Ð°Ñ Ð¾Ð´ {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Сподели Ñо"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Сподели Ñо врÑка"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Заштити Ñо лозинка"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Лозинка"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Прати врÑка по е-пошта на личноÑÑ‚"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Прати"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "ПоÑтави рок на траење"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Рок на траење"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Сподели по е-пошта:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ðе Ñе најдени луѓе"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Повторно Ñподелување не е дозволено"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Споделено во {item} Ñо {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Ðе Ñподелувај"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "може да Ñе измени"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "контрола на приÑтап"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "креирај"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "ажурирај"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "избриши"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "Ñподели"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Заштитено Ñо лозинка"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Грешка при тргање на рокот на траење"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Грешка при поÑтавување на рок на траење"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Праќање..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Е-порака пратена"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "реÑетирање на лозинка за ownCloud"
@@ -375,7 +470,7 @@ msgstr "Уреди категории"
msgid "Add"
msgstr "Додади"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "БезбедноÑно предупредување"
@@ -385,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr "Ðе е доÑтапен безбеден генератор на Ñлучајни броеви, Ве молам озвоможете го OpenSSL PHP додатокот."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Без Ñигурен генератор на Ñлучајни броеви напаѓач може да ги предвиди жетоните за реÑетирање на лозинка и да преземе контрола врз Вашата Ñметка. "
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Вашата папка Ñо податоци и датотеките е најверојатно доÑтапна од интернет. .htaccess датотеката што ја овозможува ownCloud не фунционира. Силно препорачуваме да го иÑконфигурирате вашиот Ñервер за вашата папка Ñо податоци не е доÑтапна преку интернетт или премеÑтете ја надвор од коренот на веб Ñерверот."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Ðаправете <strong>админиÑтраторÑка Ñметка</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Ðапредно"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Фолдер Ñо податоци"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Конфигурирај ја базата"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "ќе биде кориÑтено"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "КориÑник на база"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Лозинка на база"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Име на база"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Табела во базата на податоци"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Сервер Ñо база"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Заврши го подеÑувањето"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Ðедела"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Понеделник"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Вторник"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Среда"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Четврток"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Петок"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Сабота"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Јануари"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Февруари"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Март"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Ðприл"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Мај"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Јуни"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Јули"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "ÐвгуÑÑ‚"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Септември"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Октомври"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Ðоември"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Декември"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "веб ÑервиÑи под Ваша контрола"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Одјава"
@@ -547,17 +570,17 @@ msgstr "Ве молам Ñменете ја лозинката да ја обеÐ
msgid "Lost your password?"
msgstr "Ја заборавивте лозинката?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "запамти"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Ðајава"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Одјавени Ñте."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,17 +594,3 @@ msgstr "Ñледно"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "БезбедноÑно предупредување."
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Ве молам потврдете ја вашата лозинка. <br />Од безбедноÑни причини од време на време може да биде побарано да ја внеÑете вашата лозинка повторно."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Потврди"
diff --git a/l10n/mk/files.po b/l10n/mk/files.po
index 5c3bf733238..1d5a2ed386e 100644
--- a/l10n/mk/files.po
+++ b/l10n/mk/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
@@ -25,55 +25,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Ðиту еден фајл не Ñе вчита. Ðепозната грешка"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Ðема грешка, датотеката беше подигната уÑпешно"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Подигнатата датотека ја надминува upload_max_filesize директивата во php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Подигнатата датотеката ја надминува MAX_FILE_SIZE директивата која беше поÑтавена во HTML формата"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Датотеката беше Ñамо делумно подигната."
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ðе беше подигната датотека"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Ðе поÑтои привремена папка"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "ÐеуÑпеав да запишам на диÑк"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -81,149 +81,152 @@ msgstr ""
msgid "Files"
msgstr "Датотеки"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Ðе Ñподелувај"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Избриши"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Преименувај"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Чека"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} веќе поÑтои"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "замени"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "предложи име"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "откажи"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "земенета {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "врати"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "заменета {new_name} Ñо {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "без Ñподелување {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "избришани {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ðеправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не Ñе дозволени."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Се генерира ZIP фајлот, ќе треба извеÑно време."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðе може да Ñе преземе вашата датотека бидејќи фолдерот во кој Ñе наоѓа фајлот има големина од 0 бајти"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Грешка при преземање"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Затвои"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Чека"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 датотека Ñе подига"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} датотеки Ñе подигаат"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Преземањето е прекинато."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Подигање на датотека е во тек. Ðапуштење на Ñтраницата ќе го прекине."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "ÐдреÑата неможе да биде празна."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} датотеки Ñкенирани"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "грешка при Ñкенирање"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Име"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Големина"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Променето"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 папка"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} папки"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 датотека"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} датотеки"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Подигни"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Ракување Ñо датотеки"
@@ -272,36 +275,44 @@ msgstr "Папка"
msgid "From link"
msgstr "Од врÑка"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Подигни"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Откажи прикачување"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Тука нема ништо. Снимете нешто!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Преземи"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Ðе Ñподелувај"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Датотеката е премногу голема"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Датотеките кои Ñе обидувате да ги подигнете ја надминуваат макÑималната големина за подигнување датотеки на овој Ñервер."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Се Ñкенираат датотеки, ве молам почекајте."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Моментално Ñкенирам"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/mk/files_encryption.po b/l10n/mk/files_encryption.po
index 2b4f5dfb57a..3eab97885bd 100644
--- a/l10n/mk/files_encryption.po
+++ b/l10n/mk/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-18 00:13+0100\n"
-"PO-Revision-Date: 2012-12-17 13:14+0000\n"
-"Last-Translator: Georgi Stanojevski <glisha@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Енкрипција"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "ИÑклучи ги Ñледните типови на датотеки од енкрипција"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
-#: templates/settings.php:5
-msgid "None"
-msgstr "Ðишто"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
#: templates/settings.php:12
-msgid "Enable Encryption"
-msgstr "Овозможи енкрипција"
+msgid "None"
+msgstr "Ðишто"
diff --git a/l10n/mk/files_trashbin.po b/l10n/mk/files_trashbin.po
new file mode 100644
index 00000000000..6fe48847d75
--- /dev/null
+++ b/l10n/mk/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mk\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Име"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 папка"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} папки"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 датотека"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} датотеки"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/mk/files_versions.po b/l10n/mk/files_versions.po
index bbe751713aa..3ea9e4d20c3 100644
--- a/l10n/mk/files_versions.po
+++ b/l10n/mk/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-18 00:13+0100\n"
-"PO-Revision-Date: 2012-12-17 13:19+0000\n"
-"Last-Translator: Georgi Stanojevski <glisha@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "ИÑтечи ги Ñите верзии"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "ИÑторија"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "ВерÑии"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Ова ќе ги избрише Ñите поÑтоечки резервни копии од вашите датотеки"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/mk/lib.po b/l10n/mk/lib.po
index a315a725a96..ca43b14fecd 100644
--- a/l10n/mk/lib.po
+++ b/l10n/mk/lib.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-18 00:13+0100\n"
-"PO-Revision-Date: 2012-12-17 13:04+0000\n"
-"Last-Translator: Georgi Stanojevski <glisha@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Помош"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Лично"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Параметри"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "КориÑници"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Ðппликации"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Ðдмин"
-#: files.php:366
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Преземање во ZIP е иÑклучено"
-#: files.php:367
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Датотеките треба да Ñе Ñимнат една по една."
-#: files.php:367 files.php:392
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Ðазад кон датотеки"
-#: files.php:391
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Избраните датотеки Ñе преголеми за да Ñе генерира zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Ðпликацијата не е овозможена"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Грешка во автентикација"
@@ -82,55 +86,152 @@ msgstr "ТекÑÑ‚"
msgid "Images"
msgstr "Слики"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "пред Ñекунди"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "пред 1 минута"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "пред %d минути"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "пред 1 чаÑ"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "пред %d чаÑови"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "денеÑка"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "вчера"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "пред %d денови"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "минатиот меÑец"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "пред %d меÑеци"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "минатата година"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "пред години"
diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po
index 0f4d756335e..a53f1fbe2c0 100644
--- a/l10n/mk/settings.po
+++ b/l10n/mk/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Ðеможам да вчитам лиÑта од App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Грешка во автентикација"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Групата веќе поÑтои"
@@ -32,7 +41,7 @@ msgstr "Групата веќе поÑтои"
msgid "Unable to add group"
msgstr "Ðеможе да додадам група"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Ðеможе да овозможам апликација."
@@ -44,22 +53,10 @@ msgstr "ЕлектронÑката пошта е Ñнимена"
msgid "Invalid email"
msgstr "ÐеиÑправна електронÑка пошта"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID Ñменето"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "неправилно барање"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ðеможе да избришам група"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Грешка во автентикација"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ðеможам да избришам кориÑник"
@@ -68,6 +65,10 @@ msgstr "Ðеможам да избришам кориÑник"
msgid "Language changed"
msgstr "Јазикот е Ñменет"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "неправилно барање"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "ÐдминиÑтраторите неможе да Ñе избришат ÑебеÑи од админ групата"
@@ -82,19 +83,47 @@ msgstr "Ðеможе да додадам кориÑник во група %s"
msgid "Unable to remove user from group %s"
msgstr "Ðеможе да избришам кориÑник од група %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Оневозможи"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Овозможи"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Грешка"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Снимам..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -106,18 +135,22 @@ msgstr "Додадете ја Вашата апликација"
msgid "More Apps"
msgstr "Повеќе аппликации"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Избери аппликација"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Види ја Ñтраницата Ñо апликации на apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-лиценцирано од <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Ðжурирај"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "КориÑничка документација"
@@ -147,83 +180,87 @@ msgstr "Комерцијална подршка"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Имате иÑкориÑтено <strong>%s</strong> од доÑтапните <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Клиенти"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Преземи клиенти за деÑктоп"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Преземи клиент за Ðндроид"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Преземи iOS клиент"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Лозинка"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Вашата лозинка беше променета."
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Вашата лозинка неможе да Ñе Ñмени"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Моментална лозинка"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Ðова лозинка"
-#: templates/personal.php:26
-msgid "show"
-msgstr "прикажи"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Смени лозинка"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Е-пошта"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Вашата адреÑа за е-пошта"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Пополни ја адреÑата за е-пошта за да може да ја обновуваш лозинката"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Јазик"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Помогни во преводот"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "КориÑтете ја оваа адреÑа да "
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Верзија"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "Развој од <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Име"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Групи"
@@ -249,26 +286,34 @@ msgstr "Создај"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "ОÑтанато"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "ÐдминиÑтратор на група"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Избриши"
diff --git a/l10n/mk/user_ldap.po b/l10n/mk/user_ldap.po
index 3b3498bce1c..78d3ca3305f 100644
--- a/l10n/mk/user_ldap.po
+++ b/l10n/mk/user_ldap.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-29 00:07+0100\n"
-"PO-Revision-Date: 2012-12-28 09:25+0000\n"
-"Last-Translator: Georgi Stanojevski <glisha@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Бришењето е неуÑпешно"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Домаќин"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Може да го Ñкокнете протколот оÑвен ако не ви треба SSL. Тогаш Ñтавете ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Лозинка"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Помош"
diff --git a/l10n/mk/user_webdavauth.po b/l10n/mk/user_webdavauth.po
index 20fbb4d7b33..19b5d3df58e 100644
--- a/l10n/mk/user_webdavauth.po
+++ b/l10n/mk/user_webdavauth.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-29 00:07+0100\n"
-"PO-Revision-Date: 2012-12-28 09:21+0000\n"
-"Last-Translator: Georgi Stanojevski <glisha@gmail.com>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po
index 4d033dbb5fb..e52ed670306 100644
--- a/l10n/ms_MY/core.po
+++ b/l10n/ms_MY/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -20,24 +20,24 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,8 +53,9 @@ msgid "No category to add?"
msgstr "Tiada kategori untuk di tambah?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Kategori ini telah wujud"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -82,59 +83,135 @@ msgstr "tiada kategori dipilih untuk penghapusan"
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Ahad"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Isnin"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Selasa"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Rabu"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Khamis"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Jumaat"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sabtu"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januari"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februari"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Mac"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mei"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Jun"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Julai"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Ogos"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Disember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Tetapan"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -164,8 +241,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Ralat"
@@ -177,123 +254,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Kongsi"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Kata laluan"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Set semula kata lalaun ownCloud"
@@ -375,7 +470,7 @@ msgstr "Edit kategori"
msgid "Add"
msgstr "Tambah"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Amaran keselamatan"
@@ -385,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "buat <strong>akaun admin</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Maju"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Fail data"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfigurasi pangkalan data"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "akan digunakan"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Nama pengguna pangkalan data"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Kata laluan pangkalan data"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nama pangkalan data"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Hos pangkalan data"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Setup selesai"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Ahad"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Isnin"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Selasa"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Rabu"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Khamis"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Jumaat"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sabtu"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januari"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februari"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Mac"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mei"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Jun"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Julai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Ogos"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Disember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Perkhidmatan web di bawah kawalan anda"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Log keluar"
@@ -547,17 +570,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "Hilang kata laluan?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "ingat"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Log masuk"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Anda telah log keluar."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,17 +594,3 @@ msgstr "seterus"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po
index 5ae3ad9c1a6..8498ceb3027 100644
--- a/l10n/ms_MY/files.po
+++ b/l10n/ms_MY/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -26,55 +26,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Tiada fail dimuatnaik. Ralat tidak diketahui."
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Tiada ralat, fail berjaya dimuat naik."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Fail yang dimuat naik melebihi MAX_FILE_SIZE yang dinyatakan dalam form HTML "
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Sebahagian daripada fail telah dimuat naik. "
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Tiada fail yang dimuat naik"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Folder sementara hilang"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Gagal untuk disimpan"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -82,149 +82,152 @@ msgstr ""
msgid "Files"
msgstr "fail"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Padam"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Dalam proses"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "ganti"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "Batal"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "sedang menghasilkan fail ZIP, mungkin mengambil sedikit masa."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Muat naik ralat"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Tutup"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Dalam proses"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Muatnaik dibatalkan."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nama "
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Saiz"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Dimodifikasi"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Muat naik"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Pengendalian fail"
@@ -273,36 +276,44 @@ msgstr "Folder"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Muat naik"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Batal muat naik"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Tiada apa-apa di sini. Muat naik sesuatu!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Muat turun"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Muat naik terlalu besar"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Fail sedang diimbas, harap bersabar."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Imbasan semasa"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ms_MY/files_encryption.po b/l10n/ms_MY/files_encryption.po
index 33de1d365d7..b87b0fa030b 100644
--- a/l10n/ms_MY/files_encryption.po
+++ b/l10n/ms_MY/files_encryption.po
@@ -7,28 +7,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ms_MY\n"
-"Plural-Forms: nplurals=1; plural=0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/ms_MY/files_trashbin.po b/l10n/ms_MY/files_trashbin.po
new file mode 100644
index 00000000000..047d892067f
--- /dev/null
+++ b/l10n/ms_MY/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ms_MY\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nama"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ms_MY/files_versions.po b/l10n/ms_MY/files_versions.po
index 46f3f7ed90f..c6fa87619d2 100644
--- a/l10n/ms_MY/files_versions.po
+++ b/l10n/ms_MY/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/ms_MY/lib.po b/l10n/ms_MY/lib.po
index 57990c29b6b..ff74402b4cf 100644
--- a/l10n/ms_MY/lib.po
+++ b/l10n/ms_MY/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
-msgstr ""
+msgstr "Bantuan"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Peribadi"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Tetapan"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Pengguna"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Ralat pengesahan"
@@ -81,55 +85,152 @@ msgstr "Teks"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po
index 444196b7ee8..9ddacb0a789 100644
--- a/l10n/ms_MY/settings.po
+++ b/l10n/ms_MY/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -25,6 +25,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Ralat pengesahan"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -33,7 +42,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -45,22 +54,10 @@ msgstr "Emel disimpan"
msgid "Invalid email"
msgstr "Emel tidak sah"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID diubah"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Permintaan tidak sah"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Ralat pengesahan"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -69,6 +66,10 @@ msgstr ""
msgid "Language changed"
msgstr "Bahasa diubah"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Permintaan tidak sah"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -83,19 +84,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Nyahaktif"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Aktif"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Ralat"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Simpan..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "_nama_bahasa_"
@@ -107,18 +136,22 @@ msgstr "Tambah apps anda"
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Pilih aplikasi"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Lihat halaman applikasi di apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Kemaskini"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -148,83 +181,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "klien"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Kata laluan "
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Gagal mengubah kata laluan anda "
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Kata laluan semasa"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Kata laluan baru"
-#: templates/personal.php:26
-msgid "show"
-msgstr "Papar"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Ubah kata laluan"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Emel"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Alamat emel anda"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Isi alamat emel anda untuk membolehkan pemulihan kata laluan"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Bahasa"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Bantu terjemah"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -234,11 +271,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nama"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Kumpulan"
@@ -250,26 +287,34 @@ msgstr "Buat"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Lain"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Padam"
diff --git a/l10n/ms_MY/user_ldap.po b/l10n/ms_MY/user_ldap.po
index 4509f10da64..5d5fac28738 100644
--- a/l10n/ms_MY/user_ldap.po
+++ b/l10n/ms_MY/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Pemadaman gagal"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Bantuan"
diff --git a/l10n/ms_MY/user_webdavauth.po b/l10n/ms_MY/user_webdavauth.po
index 2974263352c..8e8f74d0a70 100644
--- a/l10n/ms_MY/user_webdavauth.po
+++ b/l10n/ms_MY/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po
index f51cf3fe9bd..014392c6d21 100644
--- a/l10n/nb_NO/core.po
+++ b/l10n/nb_NO/core.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
@@ -24,24 +24,24 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -57,8 +57,9 @@ msgid "No category to add?"
msgstr "Ingen kategorier å legge til?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Denne kategorien finnes allerede:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -86,59 +87,135 @@ msgstr "Ingen kategorier merket for sletting."
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Søndag"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Mandag"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Tirsdag"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Onsdag"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Torsdag"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Fredag"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Lørdag"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Mars"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Desember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Innstillinger"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "sekunder siden"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minutt siden"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} minutter siden"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 time siden"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} timer siden"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "i dag"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "i går"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} dager siden"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "forrige måned"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} måneder siden"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "måneder siden"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "forrige år"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "Ã¥r siden"
@@ -168,8 +245,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Feil"
@@ -181,123 +258,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Del"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Feil under deling"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Del med"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Del med link"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Passordbeskyttet"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Passord"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Send"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Set utløpsdato"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Utløpsdato"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Del på epost"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ingen personer funnet"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Avslutt deling"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "kan endre"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "tilgangskontroll"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "opprett"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "oppdater"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "slett"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "del"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Passordbeskyttet"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Kan ikke sette utløpsdato"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Sender..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "E-post sendt"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Tilbakestill ownCloud passord"
@@ -379,7 +474,7 @@ msgstr "Rediger kategorier"
msgid "Add"
msgstr "Legg til"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Sikkerhetsadvarsel"
@@ -389,147 +484,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "opprett en <strong>administrator-konto</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avansert"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datamappe"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfigurer databasen"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "vil bli brukt"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Databasebruker"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Databasepassord"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Databasenavn"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Database tabellområde"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Databasevert"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Fullfør oppsetting"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Søndag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Mandag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Tirsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Onsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Torsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Fredag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Lørdag"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Mars"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Desember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "nettjenester under din kontroll"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Logg ut"
@@ -551,17 +574,17 @@ msgstr "Vennligst skift passord for å gjøre kontoen din sikker igjen."
msgid "Lost your password?"
msgstr "Mistet passordet ditt?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "husk"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Logg inn"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Du er logget ut"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -575,17 +598,3 @@ msgstr "neste"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Sikkerhetsadvarsel!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verifiser"
diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po
index d6d18d6614c..885b07c549e 100644
--- a/l10n/nb_NO/files.po
+++ b/l10n/nb_NO/files.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
@@ -31,55 +31,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Ingen filer ble lastet opp. Ukjent feil."
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Det er ingen feil. Filen ble lastet opp."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Filstørrelsen overskrider maksgrensen på MAX_FILE_SIZE som ble oppgitt i HTML-skjemaet"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Filopplastningen ble bare delvis gjennomført"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ingen fil ble lastet opp"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Mangler en midlertidig mappe"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Klarte ikke å skrive til disk"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -87,149 +87,152 @@ msgstr ""
msgid "Files"
msgstr "Filer"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Avslutt deling"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Slett"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Omdøp"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ventende"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} finnes allerede"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "erstatt"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "foreslå navn"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "avbryt"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "erstatt {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "angre"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "erstatt {new_name} med {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "slettet {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "opprettet ZIP-fil, dette kan ta litt tid"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Opplasting feilet"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Lukk"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Ventende"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 fil lastes opp"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} filer laster opp"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Opplasting avbrutt."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL-en kan ikke være tom."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} filer lest inn"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "feil under skanning"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Navn"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Størrelse"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Endret"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 mappe"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} mapper"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 fil"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} filer"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Last opp"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Filhåndtering"
@@ -278,36 +281,44 @@ msgstr "Mappe"
msgid "From link"
msgstr "Fra link"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Last opp"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Avbryt opplasting"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ingenting her. Last opp noe!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Last ned"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Avslutt deling"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Opplasting for stor"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filene du prøver å laste opp er for store for å laste opp til denne serveren."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Skanner etter filer, vennligst vent."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Pågående skanning"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/nb_NO/files_encryption.po b/l10n/nb_NO/files_encryption.po
index a74d1bacc7e..7be43b41df8 100644
--- a/l10n/nb_NO/files_encryption.po
+++ b/l10n/nb_NO/files_encryption.po
@@ -8,28 +8,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-24 02:02+0200\n"
-"PO-Revision-Date: 2012-08-23 17:13+0000\n"
-"Last-Translator: Arvid Nornes <arvid.nornes@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nb_NO\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Kryptering"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Ekskluder følgende filer fra kryptering"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Ingen"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Slå på kryptering"
diff --git a/l10n/nb_NO/files_trashbin.po b/l10n/nb_NO/files_trashbin.po
new file mode 100644
index 00000000000..96d6a05b9de
--- /dev/null
+++ b/l10n/nb_NO/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nb_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Navn"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 mappe"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} mapper"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 fil"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} filer"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/nb_NO/files_versions.po b/l10n/nb_NO/files_versions.po
index bd8d0fed59e..4441ba7870d 100644
--- a/l10n/nb_NO/files_versions.po
+++ b/l10n/nb_NO/files_versions.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-31 00:01+0100\n"
-"PO-Revision-Date: 2012-10-30 12:48+0000\n"
-"Last-Translator: hdalgrav <hdalgrav@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historie"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versjoner"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Dette vil slette alle tidligere versjoner av alle filene dine"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/nb_NO/lib.po b/l10n/nb_NO/lib.po
index abaf9fc0847..440e6fdc286 100644
--- a/l10n/nb_NO/lib.po
+++ b/l10n/nb_NO/lib.po
@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 17:26+0000\n"
-"Last-Translator: espenbye <espenbye@me.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,51 +22,55 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Hjelp"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Personlig"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Innstillinger"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Brukere"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Apper"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP-nedlasting av avslått"
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Filene må lastes ned en om gangen"
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Tilbake til filer"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "De valgte filene er for store til å kunne generere ZIP-fil"
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Applikasjon er ikke påslått"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Autentiseringsfeil"
@@ -86,55 +90,152 @@ msgstr "Tekst"
msgid "Images"
msgstr "Bilder"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "sekunder siden"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minutt siden"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minutter siden"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 time siden"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d timer siden"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "i dag"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "i går"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d dager siden"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "forrige måned"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d måneder siden"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "i fjor"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "Ã¥r siden"
diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po
index 36c3224748b..d032a85c9b4 100644
--- a/l10n/nb_NO/settings.po
+++ b/l10n/nb_NO/settings.po
@@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
@@ -29,6 +29,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Lasting av liste fra App Store feilet."
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Autentikasjonsfeil"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Gruppen finnes allerede"
@@ -37,7 +46,7 @@ msgstr "Gruppen finnes allerede"
msgid "Unable to add group"
msgstr "Kan ikke legge til gruppe"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Kan ikke aktivere app."
@@ -49,22 +58,10 @@ msgstr "Epost lagret"
msgid "Invalid email"
msgstr "Ugyldig epost"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID endret"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ugyldig forespørsel"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Kan ikke slette gruppe"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Autentikasjonsfeil"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Kan ikke slette bruker"
@@ -73,6 +70,10 @@ msgstr "Kan ikke slette bruker"
msgid "Language changed"
msgstr "Språk endret"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ugyldig forespørsel"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -87,19 +88,47 @@ msgstr "Kan ikke legge bruker til gruppen %s"
msgid "Unable to remove user from group %s"
msgstr "Kan ikke slette bruker fra gruppen %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Slå avBehandle "
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Slå på"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Feil"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Lagrer..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -111,18 +140,22 @@ msgstr "Legg til din App"
msgid "More Apps"
msgstr "Flere Apps"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Velg en app"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Se applikasjonens side på apps.owncloud.org"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Oppdater"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Brukerdokumentasjon"
@@ -152,83 +185,87 @@ msgstr "Kommersiell støtte"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Du har brukt <strong>%s</strong> av tilgjengelig <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klienter"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Last ned skrivebordsklienter"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Last ned Android-klient"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Last ned iOS-klient"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Passord"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Passord har blitt endret"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Kunne ikke endre passordet ditt"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Nåværende passord"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nytt passord"
-#: templates/personal.php:26
-msgid "show"
-msgstr "vis"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Endre passord"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-post"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Din e-postadresse"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Oppi epostadressen du vil tilbakestille passordet for"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Språk"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Bidra til oversettelsen"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Versjon"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -238,11 +275,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Navn"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupper"
@@ -254,26 +291,34 @@ msgstr "Opprett"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Annet"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Gruppeadministrator"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Slett"
diff --git a/l10n/nb_NO/user_ldap.po b/l10n/nb_NO/user_ldap.po
index b415afa31aa..6b6fa98ff04 100644
--- a/l10n/nb_NO/user_ldap.po
+++ b/l10n/nb_NO/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Sletting feilet"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Passord"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Gruppefilter"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Bruk TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ikke bruk for SSL tilkoblinger, dette vil ikke fungere."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Ikke anbefalt, bruk kun for testing"
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "i sekunder. En endring tømmer bufferen."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "i bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "i sekunder. En endring tømmer bufferen."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Hjelp"
diff --git a/l10n/nb_NO/user_webdavauth.po b/l10n/nb_NO/user_webdavauth.po
index 9d7d3571927..915d27dae8f 100644
--- a/l10n/nb_NO/user_webdavauth.po
+++ b/l10n/nb_NO/user_webdavauth.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 16:42+0000\n"
-"Last-Translator: espenbye <espenbye@me.com>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index e7b0b0ce699..5200e7c3b07 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -21,9 +21,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 20:49+0000\n"
-"Last-Translator: André Koot <meneer@tken.net>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -31,24 +31,24 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Gebruiker %s deelde een bestand met u"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Gebruiker %s deelde een map met u"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Gebruiker %s deelde bestand \"%s\" met u. Het is hier te downloaden: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -64,8 +64,9 @@ msgid "No category to add?"
msgstr "Geen categorie toevoegen?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Deze categorie bestaat al."
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -93,59 +94,135 @@ msgstr "Geen categorie geselecteerd voor verwijdering."
msgid "Error removing %s from favorites."
msgstr "Verwijderen %s van favorieten is mislukt."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Zondag"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Maandag"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Dinsdag"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Woensdag"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Donderdag"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Vrijdag"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Zaterdag"
+
+#: js/config.php:33
+msgid "January"
+msgstr "januari"
+
+#: js/config.php:33
+msgid "February"
+msgstr "februari"
+
+#: js/config.php:33
+msgid "March"
+msgstr "maart"
+
+#: js/config.php:33
+msgid "April"
+msgstr "april"
+
+#: js/config.php:33
+msgid "May"
+msgstr "mei"
+
+#: js/config.php:33
+msgid "June"
+msgstr "juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "augustus"
+
+#: js/config.php:33
+msgid "September"
+msgstr "september"
+
+#: js/config.php:33
+msgid "October"
+msgstr "oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "november"
+
+#: js/config.php:33
+msgid "December"
+msgstr "december"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Instellingen"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "seconden geleden"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minuut geleden"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} minuten geleden"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 uur geleden"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} uren geleden"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "vandaag"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "gisteren"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} dagen geleden"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "vorige maand"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} maanden geleden"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "maanden geleden"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "vorig jaar"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "jaar geleden"
@@ -175,8 +252,8 @@ msgid "The object type is not specified."
msgstr "Het object type is niet gespecificeerd."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Fout"
@@ -188,123 +265,141 @@ msgstr "De app naam is niet gespecificeerd."
msgid "The required file {file} is not installed!"
msgstr "Het vereiste bestand {file} is niet geïnstalleerd!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Delen"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Gedeeld"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Fout tijdens het delen"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Fout tijdens het stoppen met delen"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Fout tijdens het veranderen van permissies"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Gedeeld met u en de groep {group} door {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Gedeeld met u door {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Deel met"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Deel met link"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Wachtwoord beveiliging"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Wachtwoord"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "E-mail link naar persoon"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Versturen"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Stel vervaldatum in"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Vervaldatum"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Deel via email:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Geen mensen gevonden"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Verder delen is niet toegestaan"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Gedeeld in {item} met {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Stop met delen"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "kan wijzigen"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "toegangscontrole"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "maak"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "bijwerken"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "verwijderen"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "deel"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Wachtwoord beveiligd"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Fout tijdens het verwijderen van de verval datum"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Fout tijdens het instellen van de vervaldatum"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Versturen ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "E-mail verzonden"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "De update is niet geslaagd. Meld dit probleem aan bij de <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "De update is geslaagd. U wordt teruggeleid naar uw eigen ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud wachtwoord herstellen"
@@ -386,7 +481,7 @@ msgstr "Wijzigen categorieën"
msgid "Add"
msgstr "Toevoegen"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Beveiligingswaarschuwing"
@@ -396,147 +491,75 @@ msgid ""
"OpenSSL extension."
msgstr "Er kon geen willekeurig nummer worden gegenereerd. Zet de PHP OpenSSL extentie aan."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Zonder random nummer generator is het mogelijk voor een aanvaller om de reset tokens van wachtwoorden te voorspellen. Dit kan leiden tot het inbreken op uw account."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Uw data is waarschijnlijk toegankelijk vanaf net internet. Het .htaccess bestand dat ownCloud levert werkt niet goed. U wordt aangeraden om de configuratie van uw webserver zodanig aan te passen dat de data folders niet meer publiekelijk toegankelijk zijn. U kunt ook de data folder verplaatsen naar een folder buiten de webserver document folder."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Maak een <strong>beheerdersaccount</strong> aan"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Geavanceerd"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Gegevensmap"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configureer de database"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "zal gebruikt worden"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Gebruiker database"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Wachtwoord database"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Naam database"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Database tablespace"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Database server"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Installatie afronden"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Zondag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Maandag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Dinsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Woensdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Donderdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Vrijdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Zaterdag"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "januari"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "februari"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "maart"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "april"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "mei"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "augustus"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "september"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "november"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "december"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Webdiensten in eigen beheer"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Afmelden"
@@ -558,17 +581,17 @@ msgstr "Wijzig uw wachtwoord zodat uw account weer beveiligd is."
msgid "Lost your password?"
msgstr "Uw wachtwoord vergeten?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "onthoud gegevens"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Meld je aan"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "U bent afgemeld."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Alternatieve inlogs"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -582,17 +605,3 @@ msgstr "volgende"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "Updaten ownCloud naar versie %s, dit kan even duren."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Beveiligingswaarschuwing!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Verifieer uw wachtwoord!<br/>Om veiligheidsredenen wordt u regelmatig gevraagd uw wachtwoord in te geven."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verifieer"
diff --git a/l10n/nl/files.po b/l10n/nl/files.po
index 9471312dac3..4d8405dc731 100644
--- a/l10n/nl/files.po
+++ b/l10n/nl/files.po
@@ -14,12 +14,13 @@
# <lenny@weijl.org>, 2012.
# <pietje8501@gmail.com>, 2012.
# Richard Bos <radoeka@gmail.com>, 2012.
+# Wilfred Dijksman <info@wdijksman.nl>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -31,57 +32,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Kon %s niet verplaatsen"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Kan bestand niet hernoemen"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Er was geen bestand geladen. Onbekende fout"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Geen fout opgetreden, bestand successvol geupload."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Het geüploade bestand is groter dan de MAX_FILE_SIZE richtlijn die is opgegeven in de HTML-formulier"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Het bestand is slechts gedeeltelijk geupload"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Geen bestand geüpload"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Een tijdelijke map mist"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Schrijven naar schijf mislukt"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Niet genoeg ruimte beschikbaar"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Ongeldige directory."
@@ -89,149 +90,152 @@ msgstr "Ongeldige directory."
msgid "Files"
msgstr "Bestanden"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Stop delen"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Verwijder definitief"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Verwijder"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Hernoem"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Wachten"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} bestaat al"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "vervang"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "Stel een naam voor"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "annuleren"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "verving {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "ongedaan maken"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "verving {new_name} met {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "delen gestopt {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "uitvoeren verwijderactie"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "verwijderde {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' is een ongeldige bestandsnaam."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Bestandsnaam kan niet leeg zijn."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "aanmaken ZIP-file, dit kan enige tijd duren."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Uw opslagruimte zit vol, Bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Uw download wordt voorbereid. Dit kan enige tijd duren bij grote bestanden."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Upload Fout"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Sluit"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Wachten"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 bestand wordt ge-upload"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} bestanden aan het uploaden"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Uploaden geannuleerd."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL kan niet leeg zijn."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
+msgstr "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} bestanden gescanned"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "Fout tijdens het scannen"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Naam"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Bestandsgrootte"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Laatst aangepast"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 map"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} mappen"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 bestand"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} bestanden"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Upload"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Bestand"
@@ -280,36 +284,44 @@ msgstr "Map"
msgid "From link"
msgstr "Vanaf link"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Upload"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload afbreken"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Er bevindt zich hier niets. Upload een bestand!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Download"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Stop delen"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Bestanden te groot"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Bestanden worden gescand, even wachten."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Er wordt gescand"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Upgraden bestandssysteem cache..."
diff --git a/l10n/nl/files_encryption.po b/l10n/nl/files_encryption.po
index bd80bdcae78..c287efb9f79 100644
--- a/l10n/nl/files_encryption.po
+++ b/l10n/nl/files_encryption.po
@@ -3,33 +3,39 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# André Koot <meneer@tken.net>, 2013.
+# Lennart Weijl <lenny@weijl.org>, 2013.
# Richard Bos <radoeka@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-25 02:04+0200\n"
-"PO-Revision-Date: 2012-08-24 19:11+0000\n"
-"Last-Translator: Richard Bos <radoeka@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Versleuteling"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Versleutel de volgende bestand types niet"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Bestandsversleuteling geactiveerd."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "De volgende bestandstypen zullen niet worden versleuteld:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Sluit de volgende bestandstypen uit van versleuteling:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Geen"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Zet versleuteling aan"
diff --git a/l10n/nl/files_trashbin.po b/l10n/nl/files_trashbin.po
new file mode 100644
index 00000000000..fa20ea01287
--- /dev/null
+++ b/l10n/nl/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# André Koot <meneer@tken.net>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "uitvoeren restore operatie"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "verwijder bestanden definitief"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Naam"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Verwijderd"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 map"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} mappen"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 bestand"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} bestanden"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Niets te vinden. Uw prullenbak is leeg!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Herstellen"
diff --git a/l10n/nl/files_versions.po b/l10n/nl/files_versions.po
index 0328e198c57..106f784b914 100644
--- a/l10n/nl/files_versions.po
+++ b/l10n/nl/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-28 00:01+0200\n"
-"PO-Revision-Date: 2012-10-27 08:43+0000\n"
-"Last-Translator: Richard Bos <radoeka@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Alle versies laten verlopen"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Geschiedenis"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versies"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Dit zal alle bestaande backup versies van uw bestanden verwijderen"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/nl/lib.po b/l10n/nl/lib.po
index f8ebea3c492..a4a27f6bd10 100644
--- a/l10n/nl/lib.po
+++ b/l10n/nl/lib.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# André Koot <meneer@tken.net>, 2013.
# <lenny@weijl.org>, 2012.
# Richard Bos <radoeka@gmail.com>, 2012.
# <transifex@thisnet.nl>, 2012.
@@ -10,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-17 00:01+0100\n"
-"PO-Revision-Date: 2012-11-16 05:45+0000\n"
-"Last-Translator: Len <lenny@weijl.org>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,51 +21,55 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Help"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Persoonlijk"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Instellingen"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Gebruikers"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Apps"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Beheerder"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP download is uitgeschakeld."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Bestanden moeten één voor één worden gedownload."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Terug naar bestanden"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "De geselecteerde bestanden zijn te groot om een zip bestand te maken."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "kon niet worden vastgesteld"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "De applicatie is niet actief"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Authenticatie fout"
@@ -84,55 +89,152 @@ msgstr "Tekst"
msgid "Images"
msgstr "Afbeeldingen"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "seconden geleden"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minuut geleden"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minuten geleden"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 uur geleden"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d uren geleden"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "vandaag"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "gisteren"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d dagen geleden"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "vorige maand"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d maanden geleden"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "vorig jaar"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "jaar geleden"
diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po
index ed543c241b0..272cfe71ac4 100644
--- a/l10n/nl/settings.po
+++ b/l10n/nl/settings.po
@@ -18,9 +18,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 20:48+0000\n"
-"Last-Translator: André Koot <meneer@tken.net>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -32,6 +32,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Kan de lijst niet van de App store laden"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Authenticatie fout"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Kon de weergavenaam niet wijzigen"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Groep bestaat al"
@@ -40,7 +49,7 @@ msgstr "Groep bestaat al"
msgid "Unable to add group"
msgstr "Niet in staat om groep toe te voegen"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Kan de app. niet activeren"
@@ -52,22 +61,10 @@ msgstr "E-mail bewaard"
msgid "Invalid email"
msgstr "Ongeldige e-mail"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID is aangepast"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ongeldig verzoek"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Niet in staat om groep te verwijderen"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Authenticatie fout"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Niet in staat om gebruiker te verwijderen"
@@ -76,6 +73,10 @@ msgstr "Niet in staat om gebruiker te verwijderen"
msgid "Language changed"
msgstr "Taal aangepast"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ongeldig verzoek"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Admins kunnen zichzelf niet uit de admin groep verwijderen"
@@ -90,19 +91,47 @@ msgstr "Niet in staat om gebruiker toe te voegen aan groep %s"
msgid "Unable to remove user from group %s"
msgstr "Niet in staat om gebruiker te verwijderen uit groep %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Kon de app niet bijwerken."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Bijwerken naar {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Uitschakelen"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Inschakelen"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Even geduld aub...."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Bijwerken...."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Fout bij bijwerken app"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Fout"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Bijgewerkt"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Aan het bewaren....."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Nederlands"
@@ -114,18 +143,22 @@ msgstr "App toevoegen"
msgid "More Apps"
msgstr "Meer apps"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Selecteer een app"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Zie de applicatiepagina op apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-Gelicenseerd door <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Bijwerken"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Gebruikersdocumentatie"
@@ -155,83 +188,87 @@ msgstr "Commerciële ondersteuning"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "U heeft <strong>%s</strong> van de <strong>%s</strong> beschikbaren gebruikt"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klanten"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Download Desktop Clients"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Download Android Client"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Wachtwoord"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Je wachtwoord is veranderd"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Niet in staat om uw wachtwoord te wijzigen"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Huidig wachtwoord"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nieuw wachtwoord"
-#: templates/personal.php:26
-msgid "show"
-msgstr "weergeven"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Wijzig wachtwoord"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Weergavenaam"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Uw weergavenaam is gewijzigd"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Kon de weergavenaam niet wijzigen"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Wijzig weergavenaam"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-mailadres"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Uw e-mailadres"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Vul een e-mailadres in om wachtwoord reset uit te kunnen voeren"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Taal"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Help met vertalen"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Gebruik dit adres om te verbinden met uw ownCloud in uw bestandsbeheer"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Versie"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -241,11 +278,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "Ontwikkeld door de <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud gemeenschap</a>, de <a href=\"https://github.com/owncloud\" target=\"_blank\">bron code</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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Naam"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Inlognaam"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Groepen"
@@ -257,26 +294,34 @@ msgstr "Creëer"
msgid "Default Storage"
msgstr "Default opslag"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Ongelimiteerd"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Andere"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Groep beheerder"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Opslag"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "wijzig weergavenaam"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "Instellen nieuw wachtwoord"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Default"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "verwijderen"
diff --git a/l10n/nl/user_ldap.po b/l10n/nl/user_ldap.po
index 840adfacc66..bd1c87f11f0 100644
--- a/l10n/nl/user_ldap.po
+++ b/l10n/nl/user_ldap.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# André Koot <meneer@tken.net>, 2012.
+# André Koot <meneer@tken.net>, 2012-2013.
+# <bart.formosus@gmail.com>, 2013.
# <lenny@weijl.org>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-21 00:10+0100\n"
-"PO-Revision-Date: 2012-12-20 17:25+0000\n"
-"Last-Translator: André Koot <meneer@tken.net>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +20,58 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Verwijderen serverconfiguratie mislukt"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "De configuratie is geldig en de verbinding is geslaagd!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "De configuratie is geldig, maar Bind mislukte. Controleer de serverinstellingen en inloggegevens."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "De configuratie is ongeldig. Controleer de ownCloud log voor meer details."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Verwijderen mislukt"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Overnemen instellingen van de recente serverconfiguratie?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Instellingen bewaren?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Kon de serverconfiguratie niet toevoegen"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Verbindingstest geslaagd"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Verbindingstest mislukt"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Wilt u werkelijk de huidige Serverconfiguratie verwijderen?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Bevestig verwijderen"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -28,158 +81,232 @@ msgstr "<b>Waarschuwing:</b> De Apps user_ldap en user_webdavauth zijn incompati
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Waarschuwing:</b> De PHP LDAP module is niet geïnstalleerd, de backend zal dus niet werken. Vraag uw beheerder de module te installeren."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Waarschuwing:</b> De PHP LDAP module is niet geïnstalleerd, het backend zal niet werken. Vraag uw systeembeheerder om de module te installeren."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Serverconfiguratie"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Toevoegen serverconfiguratie"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Je kunt het protocol weglaten, tenzij je SSL vereist. Start in dat geval met ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
-msgstr "Basis DN"
+msgstr "Base DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Een Base DN per regel"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
-msgstr "Je kunt het standaard DN voor gebruikers en groepen specificeren in het tab Geavanceerd."
+msgstr "Je kunt het Base DN voor gebruikers en groepen specificeren in het tab Geavanceerd."
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
-msgstr "Gebruikers DN"
+msgstr "User DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "De DN van de client gebruiker waarmee de verbinding zal worden gemaakt, bijv. uid=agent,dc=example,dc=com. Voor anonieme toegang laat je het DN en het wachtwoord leeg."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Wachtwoord"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Voor anonieme toegang, laat de DN en het wachtwoord leeg."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Gebruikers Login Filter"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Definiëerd de toe te passen filter indien er geprobeerd wordt in te loggen. %%uid vervangt de gebruikersnaam in de login actie."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "gebruik %%uid placeholder, bijv. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Gebruikers Lijst Filter"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Definiëerd de toe te passen filter voor het ophalen van gebruikers."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "zonder een placeholder, bijv. \"objectClass=person\""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Groep Filter"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Definiëerd de toe te passen filter voor het ophalen van groepen."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "zonder een placeholder, bijv. \"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Verbindingsinstellingen"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Configuratie actief"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Als dit niet is ingeschakeld wordt deze configuratie overgeslagen."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Poort"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Basis Gebruikers Structuur"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Backup (Replica) Host"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Basis Groupen Structuur"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Opgeven optionele backup host. Het moet een replica van de hoofd LDAP/AD server."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Groepslid associatie"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Backup (Replica) Poort"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Deactiveren hoofdserver"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Wanneer ingeschakeld, zal ownCloud allen verbinden met de replicaserver."
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Gebruik TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Gebruik niet voor SSL connecties, deze mislukken."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Niet-hoofdlettergevoelige LDAP server (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Schakel SSL certificaat validatie uit."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Als de connectie alleen werkt met deze optie, importeer dan het LDAP server SSL certificaat naar je ownCloud server."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Niet aangeraden, gebruik alleen voor test doeleinden."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "in seconden. Een verandering maakt de cache leeg."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Mapinstellingen"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Gebruikers Schermnaam Veld"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Het te gebruiken LDAP attribuut voor het genereren van de ownCloud naam voor de gebruikers."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Basis Gebruikers Structuur"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Een User Base DN per regel"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Attributen voor gebruikerszoekopdrachten"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Optioneel; één attribuut per regel"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Groep Schermnaam Veld"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Het te gebruiken LDAP attribuut voor het genereren van de ownCloud naam voor de groepen."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Basis Groupen Structuur"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Een Group Base DN per regel"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Attributen voor groepszoekopdrachten"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Groepslid associatie"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Speciale attributen"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "in bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "in seconden. Een verandering maakt de cache leeg."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Laat leeg voor de gebruikersnaam (standaard). Of, specificeer een LDAP/AD attribuut."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Help"
diff --git a/l10n/nl/user_webdavauth.po b/l10n/nl/user_webdavauth.po
index 81dd911eef5..8606d6f3164 100644
--- a/l10n/nl/user_webdavauth.po
+++ b/l10n/nl/user_webdavauth.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# André Koot <meneer@tken.net>, 2012.
+# André Koot <meneer@tken.net>, 2012-2013.
# Richard Bos <radoeka@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-21 00:10+0100\n"
-"PO-Revision-Date: 2012-12-20 17:23+0000\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 09:56+0000\n"
"Last-Translator: André Koot <meneer@tken.net>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -19,13 +19,17 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV authenticatie"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud zal de inloggegevens naar deze URL als geïnterpreteerde http 401 en http 403 als de inloggegevens onjuist zijn. Andere codes als de inloggegevens correct zijn."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud stuurt de inloggegevens naar deze URL. Deze plugin controleert het antwoord en interpreteert de HTTP statuscodes 401 als 403 als ongeldige inloggegevens, maar alle andere antwoorden als geldige inloggegevens."
diff --git a/l10n/nn_NO/core.po b/l10n/nn_NO/core.po
index aeb254d7386..9146472fcc9 100644
--- a/l10n/nn_NO/core.po
+++ b/l10n/nn_NO/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
@@ -19,24 +19,24 @@ msgstr ""
"Language: nn_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -52,7 +52,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -81,59 +82,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Søndag"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "MÃ¥ndag"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Tysdag"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Onsdag"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Torsdag"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Fredag"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Laurdag"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Mars"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Desember"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Innstillingar"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -163,8 +240,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Feil"
@@ -176,123 +253,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Passord"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr ""
@@ -374,7 +469,7 @@ msgstr ""
msgid "Add"
msgstr "Legg til"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -384,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Lag ein <strong>admin-konto</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avansert"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datamappe"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfigurer databasen"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "vil bli nytta"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Databasebrukar"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Databasepassord"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Databasenamn"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Databasetenar"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Fullfør oppsettet"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Søndag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "MÃ¥ndag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Tysdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Onsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Torsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Fredag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Laurdag"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Mars"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Desember"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Vev tjenester under din kontroll"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Logg ut"
@@ -546,17 +569,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "Gløymt passordet?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "hugs"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Logg inn"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Du er logga ut."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,17 +593,3 @@ msgstr "neste"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po
index 28e98a9cd57..67550c2332e 100644
--- a/l10n/nn_NO/files.po
+++ b/l10n/nn_NO/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
@@ -24,55 +24,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Ingen feil, fila vart lasta opp"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Den opplasta fila er større enn variabelen MAX_FILE_SIZE i HTML-skjemaet"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Fila vart berre delvis lasta opp"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ingen filer vart lasta opp"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Manglar ei mellombels mappe"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -80,149 +80,152 @@ msgstr ""
msgid "Files"
msgstr "Filer"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Slett"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Lukk"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Namn"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Storleik"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Endra"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Last opp"
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -271,36 +274,44 @@ msgstr "Mappe"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Last opp"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ingenting her. Last noko opp!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Last ned"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "For stor opplasting"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filene du prøver å laste opp er større enn maksgrensa til denne tenaren."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/nn_NO/files_encryption.po b/l10n/nn_NO/files_encryption.po
index 8ad39e5cbfb..5b5ba567938 100644
--- a/l10n/nn_NO/files_encryption.po
+++ b/l10n/nn_NO/files_encryption.po
@@ -7,28 +7,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nn_NO\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/nn_NO/files_trashbin.po b/l10n/nn_NO/files_trashbin.po
new file mode 100644
index 00000000000..ba74bb698bb
--- /dev/null
+++ b/l10n/nn_NO/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Namn"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/nn_NO/files_versions.po b/l10n/nn_NO/files_versions.po
index 4e0539875ac..3ed063fcb55 100644
--- a/l10n/nn_NO/files_versions.po
+++ b/l10n/nn_NO/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: nn_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/nn_NO/lib.po b/l10n/nn_NO/lib.po
index ee2fd61fe02..609a1a36241 100644
--- a/l10n/nn_NO/lib.po
+++ b/l10n/nn_NO/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: nn_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Hjelp"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personleg"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Innstillingar"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Brukarar"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Feil i autentisering"
@@ -81,55 +85,152 @@ msgstr "Tekst"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po
index d2de08d4a18..3fc74b3f422 100644
--- a/l10n/nn_NO/settings.po
+++ b/l10n/nn_NO/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
@@ -23,6 +23,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Klarer ikkje å laste inn liste fra App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Feil i autentisering"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -31,7 +40,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -43,22 +52,10 @@ msgstr "E-postadresse lagra"
msgid "Invalid email"
msgstr "Ugyldig e-postadresse"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID endra"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ugyldig førespurnad"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Feil i autentisering"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -67,6 +64,10 @@ msgstr ""
msgid "Language changed"
msgstr "Språk endra"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ugyldig førespurnad"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -81,19 +82,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Slå av"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Slå på"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Feil"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr ""
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Nynorsk"
@@ -105,18 +134,22 @@ msgstr ""
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Vel ein applikasjon"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Oppdater"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -146,83 +179,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klientar"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Passord"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Klarte ikkje å endra passordet"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Passord"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nytt passord"
-#: templates/personal.php:26
-msgid "show"
-msgstr "vis"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Endra passord"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Epost"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Din epost addresse"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Fyll inn din e-post addresse for og kunne motta passord tilbakestilling"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Språk"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Hjelp oss å oversett"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +269,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Namn"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupper"
@@ -248,26 +285,34 @@ msgstr "Lag"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Anna"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Slett"
diff --git a/l10n/nn_NO/user_ldap.po b/l10n/nn_NO/user_ldap.po
index 7f064cb1e25..d2cf7889567 100644
--- a/l10n/nn_NO/user_ldap.po
+++ b/l10n/nn_NO/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: nn_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Hjelp"
diff --git a/l10n/nn_NO/user_webdavauth.po b/l10n/nn_NO/user_webdavauth.po
index 0c942635476..42c4c7ed976 100644
--- a/l10n/nn_NO/user_webdavauth.po
+++ b/l10n/nn_NO/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: nn_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/oc/core.po b/l10n/oc/core.po
index cf638fc7cc4..8860e32037b 100644
--- a/l10n/oc/core.po
+++ b/l10n/oc/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +18,24 @@ msgstr ""
"Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,8 +51,9 @@ msgid "No category to add?"
msgstr "Pas de categoria d'ajustar ?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "La categoria exista ja :"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -80,59 +81,135 @@ msgstr "Pas de categorias seleccionadas per escafar."
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Dimenge"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Diluns"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Dimarç"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Dimecres"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Dijòus"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Divendres"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Dissabte"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Genièr"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Febrièr"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Març"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Abril"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Junh"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Julhet"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Agost"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Septembre"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Octobre"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembre"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Decembre"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Configuracion"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "segonda a"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minuta a"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "uèi"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "ièr"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "mes passat"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "meses a"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "an passat"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "ans a"
@@ -162,8 +239,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Error"
@@ -175,123 +252,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Parteja"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Error al partejar"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Error al non partejar"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Error al cambiar permissions"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Parteja amb"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Parteja amb lo ligam"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Parat per senhal"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Senhal"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Met la data d'expiracion"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Data d'expiracion"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Parteja tras corrièl :"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Deguns trobat"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Tornar partejar es pas permis"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Non parteje"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "pòt modificar"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "Contraròtle d'acces"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "crea"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "met a jorn"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "escafa"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "parteja"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Parat per senhal"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Error al metre de la data d'expiracion"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Error setting expiration date"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "senhal d'ownCloud tornat botar"
@@ -373,7 +468,7 @@ msgstr "Edita categorias"
msgid "Add"
msgstr "Ajusta"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Avertiment de securitat"
@@ -383,147 +478,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Crea un <strong>compte admin</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avançat"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Dorsièr de donadas"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configura la basa de donadas"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "serà utilizat"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Usancièr de la basa de donadas"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Senhal de la basa de donadas"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nom de la basa de donadas"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Espandi de taula de basa de donadas"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Ã’ste de basa de donadas"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Configuracion acabada"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Dimenge"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Diluns"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Dimarç"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Dimecres"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Dijòus"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Divendres"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Dissabte"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Genièr"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Febrièr"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Març"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Abril"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Junh"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Julhet"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Agost"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Septembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Octobre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Novembre"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Decembre"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Services web jos ton contraròtle"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Sortida"
@@ -545,17 +568,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "L'as perdut lo senhal ?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "bremba-te"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Dintrada"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Sias pas dintra (t/ada)"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +592,3 @@ msgstr "venent"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/oc/files.po b/l10n/oc/files.po
index 63681ee8348..46ec34e5476 100644
--- a/l10n/oc/files.po
+++ b/l10n/oc/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -23,55 +23,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Amontcargament capitat, pas d'errors"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Lo fichièr amontcargat es mai gròs que la directiva «MAX_FILE_SIZE» especifiada dins lo formulari HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Lo fichièr foguèt pas completament amontcargat"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Cap de fichièrs son estats amontcargats"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Un dorsièr temporari manca"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "L'escriptura sul disc a fracassat"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -79,149 +79,152 @@ msgstr ""
msgid "Files"
msgstr "Fichièrs"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Non parteja"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Escafa"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Torna nomenar"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Al esperar"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "remplaça"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "nom prepausat"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "anulla"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "defar"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Fichièr ZIP a se far, aquò pòt trigar un briu."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten pas que 0 octet."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Error d'amontcargar"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Al esperar"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 fichièr al amontcargar"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Amontcargar anullat."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. "
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "error pendant l'exploracion"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nom"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Talha"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Modificat"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Amontcarga"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Manejament de fichièr"
@@ -270,36 +273,44 @@ msgstr "Dorsièr"
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Amontcarga"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr " Anulla l'amontcargar"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Pas res dedins. Amontcarga qualquaren"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Avalcarga"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Non parteja"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Amontcargament tròp gròs"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Los fiichièrs son a èsser explorats, "
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Exploracion en cors"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/oc/files_encryption.po b/l10n/oc/files_encryption.po
index d6e0c7a83be..4db4079a8e0 100644
--- a/l10n/oc/files_encryption.po
+++ b/l10n/oc/files_encryption.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-08 02:01+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,18 +17,22 @@ msgstr ""
"Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/oc/files_trashbin.po b/l10n/oc/files_trashbin.po
new file mode 100644
index 00000000000..064f9be30a7
--- /dev/null
+++ b/l10n/oc/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: oc\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nom"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/oc/files_versions.po b/l10n/oc/files_versions.po
index 8ea27eb3243..ed722b60222 100644
--- a/l10n/oc/files_versions.po
+++ b/l10n/oc/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/oc/lib.po b/l10n/oc/lib.po
index 150704cd235..ada37ffbff3 100644
--- a/l10n/oc/lib.po
+++ b/l10n/oc/lib.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Ajuda"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personal"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Configuracion"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Usancièrs"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Apps"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Avalcargar los ZIP es inactiu."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Los fichièrs devan èsser avalcargats un per un."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Torna cap als fichièrs"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Error d'autentificacion"
@@ -82,55 +86,152 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "segonda a"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minuta a"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minutas a"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "uèi"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ièr"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d jorns a"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "mes passat"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "an passat"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "ans a"
diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po
index 36b489b83a8..040e8f2d8ee 100644
--- a/l10n/oc/settings.po
+++ b/l10n/oc/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -22,6 +22,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Pas possible de cargar la tièra dempuèi App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Error d'autentificacion"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Lo grop existís ja"
@@ -30,7 +39,7 @@ msgstr "Lo grop existís ja"
msgid "Unable to add group"
msgstr "Pas capable d'apondre un grop"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Pòt pas activar app. "
@@ -42,22 +51,10 @@ msgstr "Corrièl enregistrat"
msgid "Invalid email"
msgstr "Corrièl incorrècte"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID cambiat"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Demanda invalida"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Pas capable d'escafar un grop"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Error d'autentificacion"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Pas capable d'escafar un usancièr"
@@ -66,6 +63,10 @@ msgstr "Pas capable d'escafar un usancièr"
msgid "Language changed"
msgstr "Lengas cambiadas"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Demanda invalida"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -80,19 +81,47 @@ msgstr "Pas capable d'apondre un usancièr al grop %s"
msgid "Unable to remove user from group %s"
msgstr "Pas capable de tira un usancièr del grop %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Desactiva"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Activa"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Error"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Enregistra..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -104,18 +133,22 @@ msgstr "Ajusta ton App"
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Selecciona una applicacion"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Agacha la pagina d'applications en cò de apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licençiat per <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -145,83 +178,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Practica"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Senhal"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Ton senhal a cambiat"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Pas possible de cambiar ton senhal"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Senhal en cors"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Senhal novèl"
-#: templates/personal.php:26
-msgid "show"
-msgstr "mòstra"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Cambia lo senhal"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Corrièl"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Ton adreiça de corrièl"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Emplena una adreiça de corrièl per permetre lo mandadís del senhal perdut"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Lenga"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Ajuda a la revirada"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -231,11 +268,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nom"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grops"
@@ -247,26 +284,34 @@ msgstr "Crea"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Autres"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grop Admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Escafa"
diff --git a/l10n/oc/user_ldap.po b/l10n/oc/user_ldap.po
index 29bd7864d7e..56fd18cfc33 100644
--- a/l10n/oc/user_ldap.po
+++ b/l10n/oc/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Fracàs d'escafatge"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Ajuda"
diff --git a/l10n/oc/user_webdavauth.po b/l10n/oc/user_webdavauth.po
index 5d411e9dab1..03cdef79eb0 100644
--- a/l10n/oc/user_webdavauth.po
+++ b/l10n/oc/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index d4c9b685578..780d9e45d76 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -17,9 +17,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 08:40+0000\n"
-"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -27,24 +27,24 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Użytkownik %s współdzieli plik z tobą"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Uzytkownik %s wspóldzieli folder z toba"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Użytkownik %s współdzieli plik \"%s\" z tobą. Jest dostępny tutaj: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -60,8 +60,9 @@ msgid "No category to add?"
msgstr "Brak kategorii"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Ta kategoria już istnieje"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -89,59 +90,135 @@ msgstr "Nie ma kategorii zaznaczonych do usunięcia."
msgid "Error removing %s from favorites."
msgstr "Błąd usunięcia %s z ulubionych."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Niedziela"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Poniedziałek"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Wtorek"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Åšroda"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Czwartek"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "PiÄ…tek"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sobota"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Styczeń"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Luty"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Marzec"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Kwiecień"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maj"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Czerwiec"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Lipiec"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Sierpień"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Wrzesień"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Październik"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Listopad"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Grudzień"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Ustawienia"
-#: js/js.js:711
+#: js/js.js:764
msgid "seconds ago"
msgstr "sekund temu"
-#: js/js.js:712
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minute temu"
-#: js/js.js:713
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} minut temu"
-#: js/js.js:714
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 godzine temu"
-#: js/js.js:715
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} godzin temu"
-#: js/js.js:716
+#: js/js.js:769
msgid "today"
msgstr "dziÅ›"
-#: js/js.js:717
+#: js/js.js:770
msgid "yesterday"
msgstr "wczoraj"
-#: js/js.js:718
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} dni temu"
-#: js/js.js:719
+#: js/js.js:772
msgid "last month"
msgstr "ostani miesiÄ…c"
-#: js/js.js:720
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} miesięcy temu"
-#: js/js.js:721
+#: js/js.js:774
msgid "months ago"
msgstr "miesięcy temu"
-#: js/js.js:722
+#: js/js.js:775
msgid "last year"
msgstr "ostatni rok"
-#: js/js.js:723
+#: js/js.js:776
msgid "years ago"
msgstr "lat temu"
@@ -171,8 +248,8 @@ msgid "The object type is not specified."
msgstr "Typ obiektu nie jest określony."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Błąd"
@@ -184,123 +261,141 @@ msgstr "Nazwa aplikacji nie jest określona."
msgid "The required file {file} is not installed!"
msgstr "Żądany plik {file} nie jest zainstalowany!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Udostępnij"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Udostępniono"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Błąd podczas współdzielenia"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Błąd podczas zatrzymywania współdzielenia"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Błąd przy zmianie uprawnień"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Udostępnione Tobie i grupie {group} przez {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Udostępnione Ci przez {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Współdziel z"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Współdziel z link"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Zabezpieczone hasłem"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Hasło"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Email do osoby"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Wyślij"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Ustaw datę wygaśnięcia"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Data wygaśnięcia"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Współdziel poprzez maila"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Nie znaleziono ludzi"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Współdzielenie nie jest możliwe"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Współdzielone w {item} z {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Zatrzymaj współdzielenie"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "można edytować"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "kontrola dostępu"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "utwórz"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "uaktualnij"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "usuń"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "współdziel"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Zabezpieczone hasłem"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Błąd niszczenie daty wygaśnięcia"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Błąd podczas ustawiania daty wygaśnięcia"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Wysyłanie..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Wyślij Email"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "restart hasła"
@@ -382,7 +477,7 @@ msgstr "Edytuj kategoriÄ™"
msgid "Add"
msgstr "Dodaj"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Ostrzeżenie o zabezpieczeniach"
@@ -392,147 +487,75 @@ msgid ""
"OpenSSL extension."
msgstr "Niedostępny bezpieczny generator liczb losowych, należy włączyć rozszerzenie OpenSSL w PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Bez bezpiecznego generatora liczb losowych, osoba atakująca może być w stanie przewidzieć resetujące hasło tokena i przejąć kontrolę nad swoim kontem."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Katalog danych (data) i pliki są prawdopodobnie dostępnego z Internetu. Sprawdź plik .htaccess oraz konfigurację serwera (hosta). Sugerujemy, skonfiguruj swój serwer w taki sposób, żeby dane katalogu nie były dostępne lub przenieść katalog danych spoza głównego dokumentu webserwera."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Tworzenie <strong>konta administratora</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Zaawansowane"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Katalog danych"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfiguracja bazy danych"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "zostanie użyte"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Użytkownik bazy danych"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Hasło do bazy danych"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nazwa bazy danych"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Obszar tabel bazy danych"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Komputer bazy danych"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Zakończ konfigurowanie"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Niedziela"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Poniedziałek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Wtorek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Åšroda"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Czwartek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "PiÄ…tek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sobota"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Styczeń"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Luty"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Marzec"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Kwiecień"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Czerwiec"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Lipiec"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Sierpień"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Wrzesień"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Październik"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Listopad"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Grudzień"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "usługi internetowe pod kontrolą"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Wylogowuje użytkownika"
@@ -554,17 +577,17 @@ msgstr "Proszę zmienić swoje hasło, aby zabezpieczyć swoje konto ponownie."
msgid "Lost your password?"
msgstr "Nie pamiętasz hasła?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "Zapamiętanie"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Zaloguj"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Wylogowano użytkownika."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -578,17 +601,3 @@ msgstr "naprzód"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "Aktualizowanie ownCloud do wersji %s, może to potrwać chwilę."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Ostrzeżenie o zabezpieczeniach!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Sprawdź swoje hasło.<br/>Ze względów bezpieczeństwa możesz zostać czasami poproszony o wprowadzenie hasła ponownie."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Zweryfikowane"
diff --git a/l10n/pl/files.po b/l10n/pl/files.po
index 64357ad8259..f49e1712ec6 100644
--- a/l10n/pl/files.po
+++ b/l10n/pl/files.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <bbartlomiej@gmail.com>, 2013.
# Cyryl Sochacki <>, 2012.
# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2012-2013.
# Marcin Małecki <gerber@tkdami.net>, 2011-2012.
@@ -14,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
@@ -27,57 +28,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nie można było przenieść %s - Plik o takiej nazwie już istnieje"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Nie można było przenieść %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Nie można zmienić nazwy pliku"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Plik nie został załadowany. Nieznany błąd"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Przesłano plik"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini: "
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Rozmiar przesłanego pliku przekracza maksymalną wartość dyrektywy upload_max_filesize, zawartą formularzu HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Plik przesłano tylko częściowo"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Nie przesłano żadnego pliku"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Brak katalogu tymczasowego"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Błąd zapisu na dysk"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Za mało miejsca"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Zła ścieżka."
@@ -85,149 +86,152 @@ msgstr "Zła ścieżka."
msgid "Files"
msgstr "Pliki"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Nie udostępniaj"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Usuwa element"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Zmień nazwę"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "OczekujÄ…ce"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} już istnieje"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "zastap"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "zasugeruj nazwÄ™"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "anuluj"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "zastÄ…piony {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "wróć"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "zastÄ…piony {new_name} z {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "Udostępniane wstrzymane {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "usunięto {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' jest nieprawidłową nazwą pliku."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Nazwa pliku nie może być pusta."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Niepoprawna nazwa, Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*'sÄ… niedozwolone."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Generowanie pliku ZIP, może potrwać pewien czas."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Błąd wczytywania"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Zamknij"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "OczekujÄ…ce"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 plik wczytany"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} przesyłanie plików"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Wczytywanie anulowane."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL nie może być pusty."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nazwa folderu nieprawidłowa. Wykorzystanie \"Shared\" jest zarezerwowane przez Owncloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} pliki skanowane"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "Wystąpił błąd podczas skanowania"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nazwa"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Rozmiar"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Czas modyfikacji"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 folder"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} foldery"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 plik"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} pliki"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Prześlij"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "ZarzÄ…dzanie plikami"
@@ -276,36 +280,44 @@ msgstr "Katalog"
msgid "From link"
msgstr "Z linku"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Prześlij"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Przestań wysyłać"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Brak zawartości. Proszę wysłać pliki!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Pobiera element"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nie udostępniaj"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Wysyłany plik ma za duży rozmiar"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Pliki które próbujesz przesłać, przekraczają maksymalną, dopuszczalną wielkość."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Skanowanie plików, proszę czekać."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Aktualnie skanowane"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/pl/files_encryption.po b/l10n/pl/files_encryption.po
index fbb12dbe1fb..414c6659d9b 100644
--- a/l10n/pl/files_encryption.po
+++ b/l10n/pl/files_encryption.po
@@ -8,28 +8,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-13 12:15+0000\n"
-"Last-Translator: Cyryl Sochacki <>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Szyfrowanie"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Wyłącz następujące typy plików z szyfrowania"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Brak"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Włącz szyfrowanie"
diff --git a/l10n/pl/files_trashbin.po b/l10n/pl/files_trashbin.po
new file mode 100644
index 00000000000..3f85b77dcc2
--- /dev/null
+++ b/l10n/pl/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nazwa"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 folder"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} foldery"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 plik"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} pliki"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Przywróć"
diff --git a/l10n/pl/files_versions.po b/l10n/pl/files_versions.po
index adfdc97439a..4d5b44af343 100644
--- a/l10n/pl/files_versions.po
+++ b/l10n/pl/files_versions.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-26 13:19+0200\n"
-"PO-Revision-Date: 2012-09-26 10:42+0000\n"
-"Last-Translator: emc <mplichta@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "WygasajÄ… wszystkie wersje"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Historia"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Wersje"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Spowoduje to usunięcie wszystkich istniejących wersji kopii zapasowych plików"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/pl/lib.po b/l10n/pl/lib.po
index 0cebd731831..39c053a1578 100644
--- a/l10n/pl/lib.po
+++ b/l10n/pl/lib.po
@@ -5,14 +5,14 @@
# Translators:
# Cyryl Sochacki <>, 2012.
# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2012.
-# Marcin Małecki <gerber@tkdami.net>, 2012.
+# Marcin Małecki <gerber@tkdami.net>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-28 00:10+0100\n"
-"PO-Revision-Date: 2012-11-27 08:54+0000\n"
-"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,51 +20,55 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Pomoc"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Osobiste"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Ustawienia"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Użytkownicy"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplikacje"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Administrator"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Pobieranie ZIP jest wyłączone."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Pliki muszą zostać pobrane pojedynczo."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Wróć do plików"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Wybrane pliki są zbyt duże, aby wygenerować plik zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "nie może zostać znaleziony"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Aplikacja nie jest włączona"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Błąd uwierzytelniania"
@@ -84,55 +88,152 @@ msgstr "Połączenie tekstowe"
msgid "Images"
msgstr "Obrazy"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "sekund temu"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minutÄ™ temu"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minut temu"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 godzine temu"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d godzin temu"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "dzisiaj"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "wczoraj"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d dni temu"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "ostatni miesiÄ…c"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d miesiecy temu"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "ostatni rok"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "lat temu"
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index 5f22822bc4d..4b2274a5847 100644
--- a/l10n/pl/settings.po
+++ b/l10n/pl/settings.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <b13n1u@gmail.com>, 2013.
# Cyryl Sochacki <>, 2012.
# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2012-2013.
# <icewind1991@gmail.com>, 2012.
@@ -17,9 +18,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 08:51+0000\n"
-"Last-Translator: Cyryl Sochacki <cyrylsochacki@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -31,6 +32,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Nie mogę załadować listy aplikacji"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Błąd uwierzytelniania"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Grupa już istnieje"
@@ -39,7 +49,7 @@ msgstr "Grupa już istnieje"
msgid "Unable to add group"
msgstr "Nie można dodać grupy"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Nie można włączyć aplikacji."
@@ -51,22 +61,10 @@ msgstr "Email zapisany"
msgid "Invalid email"
msgstr "Niepoprawny email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "Zmieniono OpenID"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Nieprawidłowe żądanie"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Nie można usunąć grupy"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Błąd uwierzytelniania"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Nie można usunąć użytkownika"
@@ -75,6 +73,10 @@ msgstr "Nie można usunąć użytkownika"
msgid "Language changed"
msgstr "Język zmieniony"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Nieprawidłowe żądanie"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Administratorzy nie mogą usunąć się sami z grupy administratorów."
@@ -89,19 +91,47 @@ msgstr "Nie można dodać użytkownika do grupy %s"
msgid "Unable to remove user from group %s"
msgstr "Nie można usunąć użytkownika z grupy %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Wyłącz"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Włącz"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Błąd"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Zapisywanie..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Polski"
@@ -113,18 +143,22 @@ msgstr "Dodaj aplikacje"
msgid "More Apps"
msgstr "Więcej aplikacji"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Zaznacz aplikacje"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Zobacz stronÄ™ aplikacji na apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licencjonowane przez <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Zaktualizuj"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Dokumentacja użytkownika"
@@ -154,83 +188,87 @@ msgstr "Wsparcie komercyjne"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Korzystasz z <strong>%s</strong> z dostępnych <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klienci"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Pobierz klienta dla Komputera"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Pobierz klienta dla Androida"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Pobierz klienta dla iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Hasło"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Twoje hasło zostało zmienione"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Nie można zmienić hasła"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Bieżące hasło"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nowe hasło"
-#: templates/personal.php:26
-msgid "show"
-msgstr "Wyświetlanie"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Zmień hasło"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Adres e-mail użytkownika"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Proszę wprowadzić adres e-mail, aby uzyskać możliwość odzyskania hasła"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Język"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Pomóż w tłumaczeniu"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Użyj tego adresu aby podłączyć zasób ownCloud w menedżerze plików"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Wersja"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -238,13 +276,13 @@ msgid ""
"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>."
-msgstr "Stwirzone przez <a href=\"http://ownCloud.org/contact\" target=\"_blank\"> społeczność ownCloud</a>, the <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>."
+msgstr "Stworzone przez <a href=\"http://ownCloud.org/contact\" target=\"_blank\"> społeczność ownCloud</a>, the <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nazwa"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupy"
@@ -256,26 +294,34 @@ msgstr "Utwórz"
msgid "Default Storage"
msgstr "Domyślny magazyn"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Bez limitu"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Inne"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupa Admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Magazyn"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr "Domyślny"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "UsunÌ"
diff --git a/l10n/pl/user_ldap.po b/l10n/pl/user_ldap.po
index 25b35d770df..375849b6dc2 100644
--- a/l10n/pl/user_ldap.po
+++ b/l10n/pl/user_ldap.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-19 00:03+0100\n"
-"PO-Revision-Date: 2012-12-18 18:12+0000\n"
-"Last-Translator: Marcin Małecki <gerber@tkdami.net>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,6 +20,58 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Skasowanie nie powiodło się"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -29,158 +81,232 @@ msgstr "<b>Ostrzeżenie:</b> Aplikacje user_ldap i user_webdavauth nie są komp
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Ostrzeżenie:</b> Moduł PHP LDAP nie jest zainstalowany i nie będzie działał. Poproś administratora o włączenie go."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Można pominąć protokół, z wyjątkiem wymaganego protokołu SSL. Następnie uruchom z ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Baza DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Bazę DN można określić dla użytkowników i grup w karcie Zaawansowane"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Użytkownik DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN użytkownika klienta, z którym powiązanie wykonuje się, np. uid=agent,dc=example,dc=com. Dla dostępu anonimowego pozostawić DN i hasło puste"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Hasło"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Dla dostępu anonimowego pozostawić DN i hasło puste."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtr logowania użytkownika"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Definiuje filtr do zastosowania, gdy podejmowana jest próba logowania. %%uid zastępuje nazwę użytkownika w działaniu logowania."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "Użyj %%uid zastępczy, np. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Lista filtrów użytkownika"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Definiuje filtry do zastosowania, podczas pobierania użytkowników."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "bez żadnych symboli zastępczych np. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Grupa filtrów"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Definiuje filtry do zastosowania, podczas pobierania grup."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "bez żadnych symboli zastępczych np. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Drzewo bazy użytkowników"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Drzewo bazy grup"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Członek grupy stowarzyszenia"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Użyj TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Nie używaj SSL dla połączeń, jeśli się nie powiedzie."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Wielkość liter serwera LDAP (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Wyłączyć sprawdzanie poprawności certyfikatu SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Jeśli połączenie działa tylko z tą opcją, zaimportuj certyfikat SSL serwera LDAP w serwerze ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Niezalecane, użyj tylko testowo."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "w sekundach. Zmiana opróżnia pamięć podręczną."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Pole wyświetlanej nazwy użytkownika"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Atrybut LDAP służy do generowania nazwy użytkownika ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Drzewo bazy użytkowników"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Pole wyświetlanej nazwy grupy"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Atrybut LDAP służy do generowania nazwy grup ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Drzewo bazy grup"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Członek grupy stowarzyszenia"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "w bajtach"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "w sekundach. Zmiana opróżnia pamięć podręczną."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Pozostaw puste dla user name (domyślnie). W przeciwnym razie podaj atrybut LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Pomoc"
diff --git a/l10n/pl/user_webdavauth.po b/l10n/pl/user_webdavauth.po
index f745f1f1320..44e963a5a43 100644
--- a/l10n/pl/user_webdavauth.po
+++ b/l10n/pl/user_webdavauth.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <bbartlomiej@gmail.com>, 2013.
# Cyryl Sochacki <cyrylsochacki@gmail.com>, 2012.
# Marcin Małecki <gerber@tkdami.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-21 00:10+0100\n"
-"PO-Revision-Date: 2012-12-20 11:39+0000\n"
-"Last-Translator: Marcin Małecki <gerber@tkdami.net>\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 08:54+0000\n"
+"Last-Translator: bbartlomiej <bbartlomiej@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +20,17 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Uwierzytelnienie WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud wyśle dane uwierzytelniające do tego URL. Ten plugin sprawdza odpowiedź i zinterpretuje kody HTTP 401 oraz 403 jako nieprawidłowe dane uwierzytelniające, a każdy inny kod odpowiedzi jako poprawne dane."
diff --git a/l10n/pl_PL/core.po b/l10n/pl_PL/core.po
index 2341f21b246..fd6666ba2dd 100644
--- a/l10n/pl_PL/core.po
+++ b/l10n/pl_PL/core.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
@@ -17,24 +17,24 @@ msgstr ""
"Language: pl_PL\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -50,7 +50,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -79,59 +80,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:284
msgid "Settings"
msgstr "Ustawienia"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -161,8 +238,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr ""
@@ -174,123 +251,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr ""
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr ""
@@ -372,7 +467,7 @@ msgstr ""
msgid "Add"
msgstr ""
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -382,147 +477,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr ""
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr ""
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr ""
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr ""
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr ""
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr ""
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr ""
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr ""
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr ""
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr ""
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr ""
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr ""
@@ -544,16 +567,16 @@ msgstr ""
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr ""
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
+#: templates/login.php:49
+msgid "Alternative Logins"
msgstr ""
#: templates/part.pagenavi.php:3
@@ -568,17 +591,3 @@ msgstr ""
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/pl_PL/files.po b/l10n/pl_PL/files.po
index 4c12f2aa8c2..e1e81886800 100644
--- a/l10n/pl_PL/files.po
+++ b/l10n/pl_PL/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
@@ -22,55 +22,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -78,149 +78,152 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:290
-msgid "deleted {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr ""
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -269,36 +272,44 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
+#: templates/index.php:40
+msgid "Trash bin"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr ""
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/pl_PL/files_encryption.po b/l10n/pl_PL/files_encryption.po
index 6512705ecbc..d41a8cb3da5 100644
--- a/l10n/pl_PL/files_encryption.po
+++ b/l10n/pl_PL/files_encryption.po
@@ -7,28 +7,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-31 02:02+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl_PL\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/pl_PL/files_trashbin.po b/l10n/pl_PL/files_trashbin.po
new file mode 100644
index 00000000000..d35b236c8f8
--- /dev/null
+++ b/l10n/pl_PL/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl_PL\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/pl_PL/files_versions.po b/l10n/pl_PL/files_versions.po
index 40053b76ef7..4423dd3512d 100644
--- a/l10n/pl_PL/files_versions.po
+++ b/l10n/pl_PL/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: pl_PL\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/pl_PL/lib.po b/l10n/pl_PL/lib.po
index 3ce2989bb99..2d0b9569078 100644
--- a/l10n/pl_PL/lib.po
+++ b/l10n/pl_PL/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: pl_PL\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr ""
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr ""
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Ustawienia"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr ""
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,152 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/pl_PL/settings.po b/l10n/pl_PL/settings.po
index 6a6ddb24fbd..bc0086b23a3 100644
--- a/l10n/pl_PL/settings.po
+++ b/l10n/pl_PL/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
@@ -21,6 +21,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -29,7 +38,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -41,22 +50,10 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr ""
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -65,6 +62,10 @@ msgstr ""
msgid "Language changed"
msgstr ""
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -79,19 +80,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr ""
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr ""
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr ""
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr ""
@@ -103,18 +132,22 @@ msgstr ""
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr ""
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Uaktualnienie"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -144,83 +177,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr ""
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr ""
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr ""
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr ""
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr ""
-#: templates/personal.php:26
-msgid "show"
+#: templates/personal.php:42
+msgid "Change password"
msgstr ""
-#: templates/personal.php:27
-msgid "Change password"
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
msgstr ""
-#: templates/personal.php:33
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr ""
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr ""
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr ""
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr ""
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -230,11 +267,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr ""
@@ -246,26 +283,34 @@ msgstr ""
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr ""
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr ""
diff --git a/l10n/pl_PL/user_ldap.po b/l10n/pl_PL/user_ldap.po
index de4bd2f3523..6fecd479fb5 100644
--- a/l10n/pl_PL/user_ldap.po
+++ b/l10n/pl_PL/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: pl_PL\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr ""
diff --git a/l10n/pl_PL/user_webdavauth.po b/l10n/pl_PL/user_webdavauth.po
index 77261b85639..2ffe7523c4d 100644
--- a/l10n/pl_PL/user_webdavauth.po
+++ b/l10n/pl_PL/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: pl_PL\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index 075f189c2ca..bf4e2100d62 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -10,6 +10,7 @@
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
# <henrique@meira.net>, 2012.
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
# Unforgiving Fallout <>, 2012.
# Van Der Fran <transifex@vanderland.com>, 2011, 2012.
@@ -17,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -27,29 +28,29 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "O usuário %s compartilhou um arquivo com você"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "O usuário %s compartilhou uma pasta com você"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "O usuário %s compartilhou com você o arquivo \"%s\", que está disponível para download em: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "O usuário %s compartilhou com você a pasta \"%s\", que está disponível para download em: %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -60,8 +61,9 @@ msgid "No category to add?"
msgstr "Nenhuma categoria adicionada?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Essa categoria já existe"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -89,59 +91,135 @@ msgstr "Nenhuma categoria selecionada para deletar."
msgid "Error removing %s from favorites."
msgstr "Erro ao remover %s dos favoritos."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Domingo"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Segunda-feira"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Terça-feira"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Quarta-feira"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Quinta-feira"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Sexta-feira"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sábado"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Janeiro"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Fevereiro"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Março"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Abril"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maio"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Junho"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Julho"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Agosto"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Setembro"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Outubro"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembro"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Dezembro"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Configurações"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "segundos atrás"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minuto atrás"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} minutos atrás"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 hora atrás"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} horas atrás"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "hoje"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "ontem"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} dias atrás"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "último mês"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} meses atrás"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "meses atrás"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "último ano"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "anos atrás"
@@ -171,8 +249,8 @@ msgid "The object type is not specified."
msgstr "O tipo de objeto não foi especificado."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Erro"
@@ -184,122 +262,140 @@ msgstr "O nome do app não foi especificado."
msgid "The required file {file} is not installed!"
msgstr "O arquivo {file} necessário não está instalado!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Compartilhar"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Compartilhados"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Erro ao compartilhar"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Erro ao descompartilhar"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Erro ao mudar permissões"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Compartilhado com você e com o grupo {group} por {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Compartilhado com você por {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Compartilhar com"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Compartilhar com link"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Proteger com senha"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Senha"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "Enviar link por e-mail"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "Enviar"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Definir data de expiração"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Data de expiração"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Compartilhar via e-mail:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Nenhuma pessoa encontrada"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Não é permitido re-compartilhar"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Compartilhado em {item} com {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Descompartilhar"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "pode editar"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "controle de acesso"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "criar"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "atualizar"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "remover"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "compartilhar"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Protegido com senha"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Erro ao remover data de expiração"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Erro ao definir data de expiração"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
-msgstr ""
+msgstr "Enviando ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
-msgstr ""
+msgstr "E-mail enviado"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "A atualização falhou. Por favor, relate este problema para a <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">comunidade ownCloud</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "A atualização teve êxito. Você será redirecionado ao ownCloud agora."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
@@ -382,7 +478,7 @@ msgstr "Editar categorias"
msgid "Add"
msgstr "Adicionar"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Aviso de Segurança"
@@ -392,147 +488,75 @@ msgid ""
"OpenSSL extension."
msgstr "Nenhum gerador de número aleatório de segurança disponível. Habilite a extensão OpenSSL do PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Sem um gerador de número aleatório de segurança, um invasor pode ser capaz de prever os símbolos de redefinição de senhas e assumir sua conta."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Seu diretório de dados e seus arquivos estão, provavelmente, acessíveis a partir da internet. O .htaccess que o ownCloud fornece não está funcionando. Nós sugerimos que você configure o seu servidor web de uma forma que o diretório de dados esteja mais acessível ou que você mova o diretório de dados para fora da raiz do servidor web."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Criar uma <strong>conta</strong> de <strong>administrador</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avançado"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Pasta de dados"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configurar o banco de dados"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "será usado"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Usuário de banco de dados"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Senha do banco de dados"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nome do banco de dados"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Espaço de tabela do banco de dados"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Banco de dados do host"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Concluir configuração"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Domingo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Segunda-feira"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Terça-feira"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Quarta-feira"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Quinta-feira"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Sexta-feira"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sábado"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Janeiro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Fevereiro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Março"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Abril"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Junho"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Julho"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Agosto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Setembro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Outubro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Novembro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Dezembro"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "web services sob seu controle"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Sair"
@@ -554,17 +578,17 @@ msgstr "Por favor troque sua senha para tornar sua conta segura novamente."
msgid "Lost your password?"
msgstr "Esqueçeu sua senha?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "lembrete"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Log in"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Você está desconectado."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -577,18 +601,4 @@ msgstr "próximo"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Aviso de Segurança!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Por favor, verifique a sua senha.<br />Por motivos de segurança, você deverá ser solicitado a muda-la ocasionalmente."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verificar"
+msgstr "Atualizando ownCloud para a versão %s, isto pode levar algum tempo."
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index 105d7c96385..2fd721d545f 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -7,6 +7,7 @@
# <fred.maranhao@gmail.com>, 2012.
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
# <targinosilveira@gmail.com>, 2012.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
# Unforgiving Fallout <>, 2012.
@@ -15,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -28,207 +29,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Não possível mover %s - Um arquivo com este nome já existe"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Não possível mover %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Impossível renomear arquivo"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Nenhum arquivo foi transferido. Erro desconhecido"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Não houve nenhum erro, o arquivo foi transferido com sucesso"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "O arquivo enviado excede a diretiva upload_max_filesize no php.ini: "
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "O arquivo carregado excede o MAX_FILE_SIZE que foi especificado no formulário HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "O arquivo foi transferido parcialmente"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Nenhum arquivo foi transferido"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Pasta temporária não encontrada"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Falha ao escrever no disco"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Espaço de armazenamento insuficiente"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Diretório inválido."
#: appinfo/app.php:10
msgid "Files"
msgstr "Arquivos"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Descompartilhar"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Excluir"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Renomear"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendente"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} já existe"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "substituir"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "sugerir nome"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "cancelar"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "substituído {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "desfazer"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "Substituído {old_name} por {new_name} "
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "{files} não compartilhados"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} apagados"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' é um nome de arquivo inválido."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "O nome do arquivo não pode estar vazio."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "gerando arquivo ZIP, isso pode levar um tempo."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Erro de envio"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Fechar"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Pendente"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "enviando 1 arquivo"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "Enviando {count} arquivos"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Envio cancelado."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do envio."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL não pode ficar em branco"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} arquivos scaneados"
+msgstr "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud"
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "erro durante verificação"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nome"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Tamanho"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 pasta"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} pastas"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 arquivo"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} arquivos"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Carregar"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Tratamento de Arquivo"
@@ -277,36 +281,44 @@ msgstr "Pasta"
msgid "From link"
msgstr "Do link"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Carregar"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar upload"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nada aqui.Carrege alguma coisa!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Baixar"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Descompartilhar"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Arquivo muito grande"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Arquivos sendo escaneados, por favor aguarde."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Scanning atual"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/pt_BR/files_encryption.po b/l10n/pt_BR/files_encryption.po
index 250fed658f3..ee2e192fb41 100644
--- a/l10n/pt_BR/files_encryption.po
+++ b/l10n/pt_BR/files_encryption.po
@@ -4,13 +4,14 @@
#
# Translators:
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-24 02:01+0200\n"
-"PO-Revision-Date: 2012-09-23 16:57+0000\n"
-"Last-Translator: sedir <philippi.sedir@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Criptografia"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Excluir os seguintes tipos de arquivo da criptografia"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Nenhuma"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Habilitar Criptografia"
diff --git a/l10n/pt_BR/files_external.po b/l10n/pt_BR/files_external.po
index cb394018175..3c17453294e 100644
--- a/l10n/pt_BR/files_external.po
+++ b/l10n/pt_BR/files_external.po
@@ -4,13 +4,14 @@
#
# Translators:
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 15:50+0000\n"
+"Last-Translator: rodrigost23 <rodrigo.st23@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,11 +27,11 @@ msgstr "Acesso concedido"
msgid "Error configuring Dropbox storage"
msgstr "Erro ao configurar armazenamento do Dropbox"
-#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41
msgid "Grant access"
msgstr "Permitir acesso"
-#: js/dropbox.js:73 js/google.js:72
+#: js/dropbox.js:73 js/google.js:73
msgid "Fill out all required fields"
msgstr "Preencha todos os campos obrigatórios"
@@ -38,22 +39,22 @@ msgstr "Preencha todos os campos obrigatórios"
msgid "Please provide a valid Dropbox app key and secret."
msgstr "Por favor forneça um app key e secret válido do Dropbox"
-#: js/google.js:26 js/google.js:73 js/google.js:78
+#: js/google.js:26 js/google.js:74 js/google.js:79
msgid "Error configuring Google Drive storage"
msgstr "Erro ao configurar armazenamento do Google Drive"
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Aviso:</b> \"smbclient\" não está instalado. Não será possível montar compartilhamentos de CIFS/SMB. Por favor, peça ao seu administrador do sistema para instalá-lo."
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
"install it."
-msgstr ""
+msgstr "<b>Aviso:</b> O suporte para FTP do PHP não está ativado ou instalado. Não será possível montar compartilhamentos FTP. Por favor, peça ao seu administrador do sistema para instalá-lo."
#: templates/settings.php:3
msgid "External Storage"
@@ -100,7 +101,7 @@ msgid "Users"
msgstr "Usuários"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "Remover"
@@ -112,10 +113,10 @@ msgstr "Habilitar Armazenamento Externo do Usuário"
msgid "Allow users to mount their own external storage"
msgstr "Permitir usuários a montar seus próprios armazenamentos externos"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr "Certificados SSL raíz"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr "Importar Certificado Raíz"
diff --git a/l10n/pt_BR/files_trashbin.po b/l10n/pt_BR/files_trashbin.po
new file mode 100644
index 00000000000..785b8eddbe5
--- /dev/null
+++ b/l10n/pt_BR/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "realizar operação de restauração"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nome"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Excluído"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 pasta"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} pastas"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 arquivo"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} arquivos"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Nada aqui. Sua lixeira está vazia!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Restaurar"
diff --git a/l10n/pt_BR/files_versions.po b/l10n/pt_BR/files_versions.po
index f310a86a675..d47f04d6cfb 100644
--- a/l10n/pt_BR/files_versions.po
+++ b/l10n/pt_BR/files_versions.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-24 02:01+0200\n"
-"PO-Revision-Date: 2012-09-23 15:33+0000\n"
-"Last-Translator: sedir <philippi.sedir@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Expirar todas as versões"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Histórico"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versões"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Isso removerá todas as versões de backup existentes dos seus arquivos"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po
index a42adb315bc..52305f64035 100644
--- a/l10n/pt_BR/lib.po
+++ b/l10n/pt_BR/lib.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-02 00:02+0100\n"
-"PO-Revision-Date: 2012-12-01 18:47+0000\n"
-"Last-Translator: Schopfer <glauber.guimaraes@poli.ufrj.br>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,51 +20,55 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Ajuda"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Pessoal"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Ajustes"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Usuários"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplicações"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Download ZIP está desligado."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Arquivos precisam ser baixados um de cada vez."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Voltar para Arquivos"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Arquivos selecionados são muito grandes para gerar arquivo zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Aplicação não está habilitada"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Erro de autenticação"
@@ -84,55 +88,152 @@ msgstr "Texto"
msgid "Images"
msgstr "Imagens"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "segundos atrás"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minuto atrás"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minutos atrás"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 hora atrás"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d horas atrás"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "hoje"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ontem"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d dias atrás"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "último mês"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d meses atrás"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "último ano"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "anos atrás"
diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po
index 912c636340a..9613f0dcd15 100644
--- a/l10n/pt_BR/settings.po
+++ b/l10n/pt_BR/settings.po
@@ -7,6 +7,7 @@
# <fred.maranhao@gmail.com>, 2012.
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
# Sandro Venezuela <sandrovenezuela@gmail.com>, 2012.
# <targinosilveira@gmail.com>, 2012.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
@@ -16,8 +17,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -28,7 +29,16 @@ msgstr ""
#: ajax/apps/ocs.php:20
msgid "Unable to load list from App Store"
-msgstr "Não foi possivel carregar lista da App Store"
+msgstr "Não foi possível carregar lista da App Store"
+
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Erro de autenticação"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
#: ajax/creategroup.php:10
msgid "Group already exists"
@@ -36,43 +46,35 @@ msgstr "Grupo já existe"
#: ajax/creategroup.php:19
msgid "Unable to add group"
-msgstr "Não foi possivel adicionar grupo"
+msgstr "Não foi possível adicionar grupo"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
-msgstr "Não pôde habilitar aplicação"
+msgstr "Não foi possível habilitar aplicativo."
#: ajax/lostpassword.php:12
msgid "Email saved"
-msgstr "Email gravado"
+msgstr "E-mail guardado"
#: ajax/lostpassword.php:14
msgid "Invalid email"
-msgstr "Email inválido"
-
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "Mudou OpenID"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Pedido inválido"
+msgstr "E-mail inválido"
#: ajax/removegroup.php:13
msgid "Unable to delete group"
-msgstr "Não foi possivel remover grupo"
-
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "erro de autenticação"
+msgstr "Não foi possível remover grupo"
#: ajax/removeuser.php:24
msgid "Unable to delete user"
-msgstr "Não foi possivel remover usuário"
+msgstr "Não foi possível remover usuário"
#: ajax/setlanguage.php:15
msgid "Language changed"
-msgstr "Mudou Idioma"
+msgstr "Idioma alterado"
+
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Pedido inválido"
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
@@ -81,28 +83,56 @@ msgstr "Admins não podem se remover do grupo admin"
#: ajax/togglegroups.php:28
#, php-format
msgid "Unable to add user to group %s"
-msgstr "Não foi possivel adicionar usuário ao grupo %s"
+msgstr "Não foi possível adicionar usuário ao grupo %s"
#: ajax/togglegroups.php:34
#, php-format
msgid "Unable to remove user from group %s"
-msgstr "Não foi possivel remover usuário ao grupo %s"
+msgstr "Não foi possível remover usuário do grupo %s"
+
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
-msgstr "Desabilitado"
+msgstr "Desabilitar"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
-msgstr "Habilitado"
+msgstr "Habilitar"
+
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
-#: js/personal.js:69
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Erro"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
-msgstr "Gravando..."
+msgstr "Guardando..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
-msgstr "Português"
+msgstr "Português (Brasil)"
#: templates/apps.php:10
msgid "Add your App"
@@ -112,33 +142,37 @@ msgstr "Adicione seu Aplicativo"
msgid "More Apps"
msgstr "Mais Apps"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
-msgstr "Selecione uma Aplicação"
+msgstr "Selecione um Aplicativo"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Ver página do aplicativo em apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Atualizar"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "Documentação de Usuário"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "Documentação de Administrador"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "Documentação Online"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "Fórum"
#: templates/help.php:9
msgid "Bugtracker"
@@ -146,90 +180,94 @@ msgstr ""
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "Suporte Comercial"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Você usou <strong>%s</strong> do seu espaço de <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clientes"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Senha"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Sua senha foi alterada"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Não é possivel alterar a sua senha"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Senha atual"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nova senha"
-#: templates/personal.php:26
-msgid "show"
-msgstr "mostrar"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Alterar senha"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Nome de Exibição"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
-msgstr "Email"
+msgstr "E-mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
-msgstr "Seu endereço de email"
+msgstr "Seu endereço de e-mail"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
-msgstr "Preencha um endereço de email para habilitar a recuperação de senha"
+msgstr "Preencha um endereço de e-mail para habilitar a recuperação de senha"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Ajude a traduzir"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "Usar este endereço para conectar-se ao seu ownCloud no seu gerenciador de arquivos"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "Versão"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -239,11 +277,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nome"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Nome de Login"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupos"
@@ -253,28 +291,36 @@ msgstr "Criar"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Armazenamento Padrão"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Ilimitado"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Outro"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupo Administrativo"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
+msgstr "Armazenamento"
+
+#: templates/users.php:97
+msgid "change display name"
msgstr ""
-#: templates/users.php:133
-msgid "Default"
+#: templates/users.php:101
+msgid "set new password"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:137
+msgid "Default"
+msgstr "Padrão"
+
+#: templates/users.php:165
msgid "Delete"
msgstr "Apagar"
diff --git a/l10n/pt_BR/user_ldap.po b/l10n/pt_BR/user_ldap.po
index fdd9c02d90a..6abc8f57af7 100644
--- a/l10n/pt_BR/user_ldap.po
+++ b/l10n/pt_BR/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Remoção falhou"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Host"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Você pode omitir o protocolo, exceto quando requerer SSL. Então inicie com ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN Base"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Você pode especificar DN Base para usuários e grupos na guia Avançada"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN Usuário"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "O DN do cliente usuário com qual a ligação deverá ser feita, ex. uid=agent,dc=example,dc=com. Para acesso anônimo, deixe DN e Senha vazios."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Senha"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Para acesso anônimo, deixe DN e Senha vazios."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtro de Login de Usuário"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Define o filtro pra aplicar ao efetuar uma tentativa de login. %%uuid substitui o nome de usuário na ação de login."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "use %%uid placeholder, ex. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filtro de Lista de Usuário"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Define filtro a aplicar ao obter usuários."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "sem nenhum espaço reservado, ex. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtro de Grupo"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Define o filtro a aplicar ao obter grupos."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "sem nenhum espaço reservado, ex. \"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Porta"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Ãrvore de Usuário Base"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Ãrvore de Grupo Base"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Associação Grupo-Membro"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Usar TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Não use-o para conexões SSL, pois falhará."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Servidor LDAP sensível à caixa alta (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Desligar validação de certificado SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Se a conexão só funciona com essa opção, importe o certificado SSL do servidor LDAP no seu servidor ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Não recomendado, use somente para testes."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "em segundos. Uma mudança esvaziará o cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Campo Nome de Exibição de Usuário"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "O atributo LDAP para usar para gerar nome ownCloud do usuário."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Ãrvore de Usuário Base"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Campo Nome de Exibição de Grupo"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "O atributo LDAP para usar para gerar nome ownCloud do grupo."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Ãrvore de Grupo Base"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Associação Grupo-Membro"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "em bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "em segundos. Uma mudança esvaziará o cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Deixe vazio para nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Ajuda"
diff --git a/l10n/pt_BR/user_webdavauth.po b/l10n/pt_BR/user_webdavauth.po
index febd61f9ee5..be539b59a8a 100644
--- a/l10n/pt_BR/user_webdavauth.po
+++ b/l10n/pt_BR/user_webdavauth.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
# <thoriumbr@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 16:22+0000\n"
+"Last-Translator: rodrigost23 <rodrigo.st23@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +19,17 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Autenticação WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "O ownCloud enviará as credenciais do usuário para esta URL. Este plugin verifica a resposta e interpreta o os códigos de status do HTTP 401 e 403 como credenciais inválidas, e todas as outras respostas como credenciais válidas."
diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po
index 55b05e3b899..7b19a970580 100644
--- a/l10n/pt_PT/core.po
+++ b/l10n/pt_PT/core.po
@@ -4,17 +4,19 @@
#
# Translators:
# <daniel@mouxy.net>, 2012-2013.
+# Daniel Pinto <daniel@mouxy.net>, 2013.
+# <duartegrilo@gmail.com>, 2013.
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
# <helder.meneses@gmail.com>, 2011, 2012.
-# Helder Meneses <helder.meneses@gmail.com>, 2012.
+# Helder Meneses <helder.meneses@gmail.com>, 2012-2013.
# Nelson Rosado <nelsontrosado@gmail.com>, 2012.
# <rjgpp.1994@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-09 00:04+0100\n"
-"PO-Revision-Date: 2013-01-08 00:22+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
"Last-Translator: Mouxy <daniel@mouxy.net>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
@@ -23,24 +25,24 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "O utilizador %s partilhou um ficheiro consigo."
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "O utilizador %s partilhou uma pasta consigo."
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "O utilizador %s partilhou o ficheiro \"%s\" consigo. Está disponível para download aqui: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -56,8 +58,9 @@ msgid "No category to add?"
msgstr "Nenhuma categoria para adicionar?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Esta categoria já existe:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "A categoria já existe: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -78,66 +81,142 @@ msgstr "Erro a adicionar %s aos favoritos"
#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
msgid "No categories selected for deletion."
-msgstr "Nenhuma categoria seleccionar para eliminar"
+msgstr "Nenhuma categoria seleccionada para apagar"
#: ajax/vcategories/removeFromFavorites.php:35
#, php-format
msgid "Error removing %s from favorites."
msgstr "Erro a remover %s dos favoritos."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Domingo"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Segunda"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Terça"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Quarta"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Quinta"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Sexta"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sábado"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Janeiro"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Fevereiro"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Março"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Abril"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maio"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Junho"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Julho"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Agosto"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Setembro"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Outubro"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembro"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Dezembro"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Definições"
-#: js/js.js:711
+#: js/js.js:767
msgid "seconds ago"
msgstr "Minutos atrás"
-#: js/js.js:712
+#: js/js.js:768
msgid "1 minute ago"
-msgstr "Falta 1 minuto"
+msgstr "Há 1 minuto"
-#: js/js.js:713
+#: js/js.js:769
msgid "{minutes} minutes ago"
msgstr "{minutes} minutos atrás"
-#: js/js.js:714
+#: js/js.js:770
msgid "1 hour ago"
msgstr "Há 1 hora"
-#: js/js.js:715
+#: js/js.js:771
msgid "{hours} hours ago"
msgstr "Há {hours} horas atrás"
-#: js/js.js:716
+#: js/js.js:772
msgid "today"
msgstr "hoje"
-#: js/js.js:717
+#: js/js.js:773
msgid "yesterday"
msgstr "ontem"
-#: js/js.js:718
+#: js/js.js:774
msgid "{days} days ago"
msgstr "{days} dias atrás"
-#: js/js.js:719
+#: js/js.js:775
msgid "last month"
msgstr "ultímo mês"
-#: js/js.js:720
+#: js/js.js:776
msgid "{months} months ago"
msgstr "Há {months} meses atrás"
-#: js/js.js:721
+#: js/js.js:777
msgid "months ago"
msgstr "meses atrás"
-#: js/js.js:722
+#: js/js.js:778
msgid "last year"
msgstr "ano passado"
-#: js/js.js:723
+#: js/js.js:779
msgid "years ago"
msgstr "anos atrás"
@@ -167,8 +246,8 @@ msgid "The object type is not specified."
msgstr "O tipo de objecto não foi especificado"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Erro"
@@ -180,122 +259,140 @@ msgstr "O nome da aplicação não foi especificado"
msgid "The required file {file} is not installed!"
msgstr "O ficheiro necessário {file} não está instalado!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Partilhar"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Partilhado"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Erro ao partilhar"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Erro ao deixar de partilhar"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Erro ao mudar permissões"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Partilhado consigo e com o grupo {group} por {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Partilhado consigo por {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Partilhar com"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Partilhar com link"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Proteger com palavra-passe"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Palavra chave"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Enviar o link por e-mail"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Enviar"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Especificar data de expiração"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Data de expiração"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Partilhar via email:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Não foi encontrado ninguém"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Não é permitido partilhar de novo"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Partilhado em {item} com {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Deixar de partilhar"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "pode editar"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "Controlo de acesso"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "criar"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "actualizar"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "apagar"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "partilhar"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Protegido com palavra-passe"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Erro ao retirar a data de expiração"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Erro ao aplicar a data de expiração"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "A Enviar..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
-msgstr "E-mail enviado com sucesso!"
+msgstr "E-mail enviado"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "A actualização falhou. Por favor reporte este incidente seguindo este link <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
@@ -332,7 +429,7 @@ msgstr "A sua password foi reposta"
#: lostpassword/templates/resetpassword.php:5
msgid "To login page"
-msgstr "Para a página de conexão"
+msgstr "Para a página de entrada"
#: lostpassword/templates/resetpassword.php:8
msgid "New password"
@@ -378,7 +475,7 @@ msgstr "Editar categorias"
msgid "Add"
msgstr "Adicionar"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Aviso de Segurança"
@@ -388,147 +485,75 @@ msgid ""
"OpenSSL extension."
msgstr "Não existe nenhum gerador seguro de números aleatórios, por favor, active a extensão OpenSSL no PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Sem nenhum gerador seguro de números aleatórios, uma pessoa mal intencionada pode prever a sua password, reiniciar as seguranças adicionais e tomar conta da sua conta. "
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Criar uma <strong>conta administrativa</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avançado"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Pasta de dados"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configure a base de dados"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "vai ser usada"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Utilizador da base de dados"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Password da base de dados"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Nome da base de dados"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Tablespace da base de dados"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
-msgstr "Host da base de dados"
+msgstr "Anfitrião da base de dados"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Acabar instalação"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Domingo"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Segunda"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Terça"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Quarta"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Quinta"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Sexta"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sábado"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Janeiro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Fevereiro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Março"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Abril"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maio"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Junho"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Julho"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Agosto"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Setembro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Outubro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Novembro"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Dezembro"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "serviços web sob o seu controlo"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Sair"
@@ -548,19 +573,19 @@ msgstr "Por favor mude a sua palavra-passe para assegurar a sua conta de novo."
#: templates/login.php:19
msgid "Lost your password?"
-msgstr "Esqueceu a sua password?"
+msgstr "Esqueceu-se da sua password?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "lembrar"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Entrar"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Estás desconetado."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Contas de acesso alternativas"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -573,18 +598,4 @@ msgstr "seguinte"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr "A Actualizar o ownCloud para a versão %s, esta operação pode demorar."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Aviso de Segurança!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Por favor verifique a sua palavra-passe. <br/>Por razões de segurança, pode ser-lhe perguntada, ocasionalmente, a sua palavra-passe de novo."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verificar"
+msgstr "A actualizar o ownCloud para a versão %s, esta operação pode demorar."
diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po
index 0ae481a5b93..9e6b511ab92 100644
--- a/l10n/pt_PT/files.po
+++ b/l10n/pt_PT/files.po
@@ -4,17 +4,20 @@
#
# Translators:
# <daniel@mouxy.net>, 2012-2013.
+# Daniel Pinto <daniel@mouxy.net>, 2013.
+# <duartegrilo@gmail.com>, 2013.
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
# <geral@ricardolameiro.pt>, 2012.
-# Helder Meneses <helder.meneses@gmail.com>, 2012.
+# Helder Meneses <helder.meneses@gmail.com>, 2012-2013.
+# Miguel Sousa <migueljorgesousa@sapo.pt>, 2013.
# <rjgpp.1994@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,57 +28,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Não foi possível move o ficheiro %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Não foi possível renomear o ficheiro"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Nenhum ficheiro foi carregado. Erro desconhecido"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Sem erro, ficheiro enviado com sucesso"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "O ficheiro enviado excede o limite permitido na directiva do php.ini upload_max_filesize"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "O ficheiro enviado excede o diretivo MAX_FILE_SIZE especificado no formulário HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "O ficheiro enviado só foi enviado parcialmente"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Não foi enviado nenhum ficheiro"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Falta uma pasta temporária"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Falhou a escrita no disco"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Espaço em disco insuficiente!"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Não há espaço suficiente em disco"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Directório Inválido"
@@ -83,149 +86,152 @@ msgstr "Directório Inválido"
msgid "Files"
msgstr "Ficheiros"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Deixar de partilhar"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Eliminar permanentemente"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Apagar"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Renomear"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendente"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "O nome {new_name} já existe"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "substituir"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
-msgstr "Sugira um nome"
+msgstr "sugira um nome"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "cancelar"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "{new_name} substituido"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "desfazer"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "substituido {new_name} por {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "{files} não partilhado(s)"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "Executar a tarefa de apagar"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "{files} eliminado(s)"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' não é um nome de ficheiro válido!"
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "O nome do ficheiro não pode estar vazio."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nome Inválido, os caracteres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "a gerar o ficheiro ZIP, poderá demorar algum tempo."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "O seu armazenamento está cheio, os ficheiros não podem ser sincronizados."
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "O seu espaço de armazenamento está quase cheiro ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "O seu download está a ser preparado. Este processo pode demorar algum tempo se os ficheiros forem grandes."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Erro no envio"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Fechar"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Pendente"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "A enviar 1 ficheiro"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "A carregar {count} ficheiros"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
-msgstr "O envio foi cancelado."
+msgstr "Envio cancelado."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "O URL não pode estar vazio."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
+msgstr "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} ficheiros analisados"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "erro ao analisar"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Nome"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Tamanho"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 pasta"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} pastas"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 ficheiro"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} ficheiros"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Enviar"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Manuseamento de ficheiros"
@@ -274,36 +280,44 @@ msgstr "Pasta"
msgid "From link"
msgstr "Da ligação"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Enviar"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Reciclagem"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar envio"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Vazio. Envie alguma coisa!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Transferir"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Deixar de partilhar"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Envio muito grande"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Os ficheiros que está a tentar enviar excedem o tamanho máximo de envio permitido neste servidor."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Os ficheiros estão a ser analisados, por favor aguarde."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Análise actual"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Atualizar cache do sistema de ficheiros..."
diff --git a/l10n/pt_PT/files_encryption.po b/l10n/pt_PT/files_encryption.po
index 803037caf42..461a5030b77 100644
--- a/l10n/pt_PT/files_encryption.po
+++ b/l10n/pt_PT/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Daniel Pinto <daniel@mouxy.net>, 2013.
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-27 02:01+0200\n"
-"PO-Revision-Date: 2012-09-26 13:24+0000\n"
-"Last-Translator: Duarte Velez Grilo <duartegrilo@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Encriptação"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Excluir da encriptação os seguintes tipo de ficheiros"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "A encriptação de ficheiros está ligada"
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Os seguintes ficheiros não serão encriptados:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Excluir da encriptação os seguintes tipos de ficheiro:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Nenhum"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Activar Encriptação"
diff --git a/l10n/pt_PT/files_trashbin.po b/l10n/pt_PT/files_trashbin.po
new file mode 100644
index 00000000000..5e720d8b5ce
--- /dev/null
+++ b/l10n/pt_PT/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Daniel Pinto <daniel@mouxy.net>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
+"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_PT\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "Não foi possível eliminar %s de forma permanente"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Não foi possível restaurar %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "Restaurar"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "Eliminar permanentemente o(s) ficheiro(s)"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nome"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Apagado"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 pasta"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} pastas"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 ficheiro"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} ficheiros"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Não ha ficheiros. O lixo está vazio"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Restaurar"
diff --git a/l10n/pt_PT/files_versions.po b/l10n/pt_PT/files_versions.po
index 0a78dc0df95..9e0c86ead32 100644
--- a/l10n/pt_PT/files_versions.po
+++ b/l10n/pt_PT/files_versions.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Daniel Pinto <daniel@mouxy.net>, 2013.
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-01 02:04+0200\n"
-"PO-Revision-Date: 2012-09-30 22:21+0000\n"
-"Last-Translator: Duarte Velez Grilo <duartegrilo@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +19,44 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Expirar todas as versões"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Não foi possível reverter: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "Sucesso"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "O ficheiro %s foi revertido para a versão %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "Falha"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Não foi possível reverter o ficheiro %s para a versão %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Não existem versões mais antigas"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Nenhum caminho especificado"
#: js/versions.js:16
msgid "History"
msgstr "Histórico"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versões"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Isto irá apagar todas as versões de backup do seus ficheiros"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Reverter um ficheiro para uma versão anterior clicando no seu botão reverter."
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po
index fe66807cc3a..583e386d61b 100644
--- a/l10n/pt_PT/lib.po
+++ b/l10n/pt_PT/lib.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <daniel@mouxy.net>, 2012.
+# <daniel@mouxy.net>, 2012-2013.
+# Daniel Pinto <daniel@mouxy.net>, 2013.
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-17 00:01+0100\n"
-"PO-Revision-Date: 2012-11-16 00:33+0000\n"
-"Last-Translator: Mouxy <daniel@mouxy.net>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +20,55 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Ajuda"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Pessoal"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Configurações"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Utilizadores"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplicações"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Descarregamento em ZIP está desligado."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Os ficheiros precisam de ser descarregados um por um."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Voltar a Ficheiros"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Os ficheiros seleccionados são grandes demais para gerar um ficheiro zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "Não foi possível determinar"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "A aplicação não está activada"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Erro na autenticação"
@@ -83,55 +88,152 @@ msgstr "Texto"
msgid "Images"
msgstr "Imagens"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Por favor verifique <a href='%s'>installation guides</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "há alguns segundos"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "há 1 minuto"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "há %d minutos"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Há 1 horas"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "Há %d horas"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "hoje"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ontem"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "há %d dias"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "mês passado"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Há %d meses atrás"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "ano passado"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "há anos"
diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po
index 5318d06fed8..b7d330e5f7c 100644
--- a/l10n/pt_PT/settings.po
+++ b/l10n/pt_PT/settings.po
@@ -4,17 +4,20 @@
#
# Translators:
# <daniel@mouxy.net>, 2012.
+# Daniel Pinto <daniel@mouxy.net>, 2013.
+# <duartegrilo@gmail.com>, 2013.
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012-2013.
# <geral@ricardolameiro.pt>, 2012.
# Helder Meneses <helder.meneses@gmail.com>, 2012.
+# Miguel Sousa <migueljorgesousa@sapo.pt>, 2013.
# <rjgpp.1994@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-03 00:04+0100\n"
-"PO-Revision-Date: 2013-01-02 14:00+0000\n"
-"Last-Translator: Duarte Velez Grilo <duartegrilo@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,6 +29,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Incapaz de carregar a lista da App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Erro de autenticação"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Não foi possível alterar o nome"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "O grupo já existe"
@@ -34,7 +46,7 @@ msgstr "O grupo já existe"
msgid "Unable to add group"
msgstr "Impossível acrescentar o grupo"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Não foi possível activar a app."
@@ -46,22 +58,10 @@ msgstr "Email guardado"
msgid "Invalid email"
msgstr "Email inválido"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID alterado"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Pedido inválido"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Impossível apagar grupo"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Erro de autenticação"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Impossível apagar utilizador"
@@ -70,6 +70,10 @@ msgstr "Impossível apagar utilizador"
msgid "Language changed"
msgstr "Idioma alterado"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Pedido inválido"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Os administradores não se podem remover a eles mesmos do grupo admin."
@@ -84,19 +88,47 @@ msgstr "Impossível acrescentar utilizador ao grupo %s"
msgid "Unable to remove user from group %s"
msgstr "Impossível apagar utilizador do grupo %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Não foi possível actualizar a aplicação."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Actualizar para a versão {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Desactivar"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Activar"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Por favor aguarde..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "A Actualizar..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Erro enquanto actualizava a aplicação"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Erro"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Actualizado"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "A guardar..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -108,18 +140,22 @@ msgstr "Adicione a sua aplicação"
msgid "More Apps"
msgstr "Mais Aplicações"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Selecione uma aplicação"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Ver a página da aplicação em apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Actualizar"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Documentação de Utilizador"
@@ -149,83 +185,87 @@ msgstr "Suporte Comercial"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Usou <strong>%s</strong> do disponivel <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clientes"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Transferir os clientes de sincronização"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Transferir o cliente android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Transferir o cliente iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Palavra-chave"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "A sua palavra-passe foi alterada"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Não foi possivel alterar a sua palavra-chave"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Palavra-chave actual"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nova palavra-chave"
-#: templates/personal.php:26
-msgid "show"
-msgstr "mostrar"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Alterar palavra-chave"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Nome público"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "O seu nome foi alterado"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Não foi possível alterar o seu nome"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Alterar nome"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "endereço de email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "O seu endereço de email"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Preencha com o seu endereço de email para ativar a recuperação da palavra-chave"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Ajude a traduzir"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Use este endereço no seu gestor de ficheiros para ligar à sua ownCloud"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Versão"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -235,11 +275,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nome"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Nome de utilizador"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupos"
@@ -251,26 +291,34 @@ msgstr "Criar"
msgid "Default Storage"
msgstr "Armazenamento Padrão"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Ilimitado"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Outro"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupo Administrador"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Armazenamento"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "modificar nome exibido"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "definir nova palavra-passe"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Padrão"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Apagar"
diff --git a/l10n/pt_PT/user_ldap.po b/l10n/pt_PT/user_ldap.po
index 2ecb6bd3751..3a798d9e6a0 100644
--- a/l10n/pt_PT/user_ldap.po
+++ b/l10n/pt_PT/user_ldap.po
@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <daniel@mouxy.net>, 2012.
+# <daniel@mouxy.net>, 2012-2013.
+# Daniel Pinto <daniel@mouxy.net>, 2013.
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
-# Helder Meneses <helder.meneses@gmail.com>, 2012.
+# Helder Meneses <helder.meneses@gmail.com>, 2012-2013.
# Nelson Rosado <nelsontrosado@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-18 00:13+0100\n"
-"PO-Revision-Date: 2012-12-17 01:25+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
"Last-Translator: Mouxy <daniel@mouxy.net>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
@@ -21,6 +22,58 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Erro ao eliminar as configurações do servidor"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "A configuração está correcta e foi possível estabelecer a ligação!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "A configuração está correcta, mas não foi possível estabelecer o \"laço\", por favor, verifique as configurações do servidor e as credenciais."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "A configuração é inválida. Por favor, veja o log do ownCloud para mais detalhes."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Erro ao apagar"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Assumir as configurações da configuração do servidor mais recente?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Manter as definições?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Não foi possível adicionar as configurações do servidor."
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Teste de conecção passado com sucesso."
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Erro no teste de conecção."
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Deseja realmente apagar as configurações de servidor actuais?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Confirmar a operação de apagar"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -30,158 +83,232 @@ msgstr "<b>Aviso:</b> A aplicação user_ldap e user_webdavauth são incompative
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Aviso:</b> O módulo PHP LDAP necessário não está instalado, o backend não irá funcionar. Peça ao seu administrador para o instalar."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Aviso:</b> O módulo PHP LDAP não está instalado, logo não irá funcionar. Por favor peça ao administrador para o instalar."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Configurações do servidor"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Adicionar configurações do servidor"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Anfitrião"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Pode omitir o protocolo, excepto se necessitar de SSL. Neste caso, comece com ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN base"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Uma base DN por linho"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Pode especificar o ND Base para utilizadores e grupos no separador Avançado"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN do utilizador"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "O DN to cliente "
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Palavra-passe"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Para acesso anónimo, deixe DN e a Palavra-passe vazios."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtro de login de utilizador"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Define o filtro a aplicar, para aquando de uma tentativa de login. %%uid substitui o nome de utilizador utilizado."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "Use a variável %%uid , exemplo: \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Utilizar filtro"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Defina o filtro a aplicar, ao recuperar utilizadores."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "Sem variável. Exemplo: \"objectClass=pessoa\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filtrar por grupo"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Defina o filtro a aplicar, ao recuperar grupos."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "Sem nenhuma variável. Exemplo: \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Definições de ligação"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Configuração activa"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Se não estiver marcada, esta definição não será tida em conta."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Porto"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Base da árvore de utilizadores."
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Servidor de Backup (Réplica)"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Base da árvore de grupos."
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Forneça um servidor (anfitrião) de backup. Deve ser uma réplica do servidor principal de LDAP/AD "
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Associar utilizador ao grupo."
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Porta do servidor de backup (Replica)"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Desactivar servidor principal"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Se estiver ligado, o ownCloud vai somente ligar-se a este servidor de réplicas."
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Usar TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Não use para ligações SSL, irá falhar."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "Não utilize para adicionar ligações LDAP, irá falhar!"
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Servidor LDAP (Windows) não sensível a maiúsculas."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Desligar a validação de certificado SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Se a ligação apenas funcionar com está opção, importe o certificado SSL do servidor LDAP para o seu servidor do ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Não recomendado, utilizado apenas para testes!"
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "em segundos. Uma alteração esvazia a cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Definições de directorias"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Mostrador do nome de utilizador."
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Atributo LDAP para gerar o nome de utilizador do ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Base da árvore de utilizadores."
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Uma base de utilizador DN por linha"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Utilizar atributos de pesquisa"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Opcional; Um atributo por linha"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Mostrador do nome do grupo."
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Atributo LDAP para gerar o nome do grupo do ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Base da árvore de grupos."
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Uma base de grupo DN por linha"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Atributos de pesquisa de grupo"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Associar utilizador ao grupo."
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Atributos especiais"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "em bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "em segundos. Uma alteração esvazia a cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Deixe vazio para nome de utilizador (padrão). De outro modo, especifique um atributo LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Ajuda"
diff --git a/l10n/pt_PT/user_webdavauth.po b/l10n/pt_PT/user_webdavauth.po
index f34c1b223df..6f6d78b3df7 100644
--- a/l10n/pt_PT/user_webdavauth.po
+++ b/l10n/pt_PT/user_webdavauth.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <daniel@mouxy.net>, 2012.
+# <daniel@mouxy.net>, 2012-2013.
# Helder Meneses <helder.meneses@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-22 00:24+0100\n"
-"PO-Revision-Date: 2012-12-20 23:46+0000\n"
+"POT-Creation-Date: 2013-01-18 00:03+0100\n"
+"PO-Revision-Date: 2013-01-17 00:54+0000\n"
"Last-Translator: Mouxy <daniel@mouxy.net>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
@@ -19,13 +19,17 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Autenticação WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "O ownCloud vai enviar as credenciais para este URL. Todos os códigos http 401 e 403 serão interpretados como credenciais inválidas, todos os restantes códigos http serão interpretados como credenciais correctas."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "O ownCloud vai enviar as credenciais do utilizador através deste URL. Este plugin verifica a resposta e vai interpretar os códigos de estado HTTP 401 e 403 como credenciais inválidas, e todas as outras como válidas."
diff --git a/l10n/ro/core.po b/l10n/ro/core.po
index bc3d07b17c3..ef9d59ed883 100644
--- a/l10n/ro/core.po
+++ b/l10n/ro/core.po
@@ -5,6 +5,7 @@
# Translators:
# Claudiu <claudiu@tanaselia.ro>, 2011, 2012.
# Dimon Pockemon <>, 2012.
+# Dumitru Ursu <>, 2013.
# Eugen Mihalache <eugemjj@gmail.com>, 2012.
# <g.ciprian@osn.ro>, 2012.
# <laur.cristescu@gmail.com>, 2012.
@@ -12,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
@@ -22,29 +23,29 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "Utilizatorul %s a partajat un fișier cu tine"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "Utilizatorul %s a partajat un dosar cu tine"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "Utilizatorul %s a partajat fișierul \"%s\" cu tine. Îl poți descărca de aici: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "Utilizatorul %s a partajat dosarul \"%s\" cu tine. Îl poți descărca de aici: %s "
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -55,8 +56,9 @@ msgid "No category to add?"
msgstr "Nici o categorie de adăugat?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Această categorie deja există:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -68,12 +70,12 @@ msgstr "Tipul obiectului nu este prevazut"
#: ajax/vcategories/removeFromFavorites.php:30
#, php-format
msgid "%s ID not provided."
-msgstr ""
+msgstr "ID-ul %s nu a fost introdus"
#: ajax/vcategories/addToFavorites.php:35
#, php-format
msgid "Error adding %s to favorites."
-msgstr ""
+msgstr "Eroare la adăugarea %s la favorite"
#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
msgid "No categories selected for deletion."
@@ -82,61 +84,137 @@ msgstr "Nici o categorie selectată pentru ștergere."
#: ajax/vcategories/removeFromFavorites.php:35
#, php-format
msgid "Error removing %s from favorites."
-msgstr ""
+msgstr "Eroare la ștergerea %s din favorite"
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Duminică"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Luni"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Marți"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Miercuri"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Joi"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Vineri"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sâmbătă"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Ianuarie"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februarie"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Martie"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Aprilie"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mai"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Iunie"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Iulie"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Septembrie"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:33
+msgid "October"
+msgstr "Octombrie"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Noiembrie"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Decembrie"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Configurări"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "secunde în urmă"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 minut în urmă"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} minute in urma"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "Acum o ora"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
-msgstr ""
+msgstr "{hours} ore în urmă"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "astăzi"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "ieri"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} zile in urma"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "ultima lună"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
-msgstr ""
+msgstr "{months} luni în urmă"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "luni în urmă"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "ultimul an"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "ani în urmă"
@@ -163,137 +241,155 @@ msgstr "Ok"
#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
msgid "The object type is not specified."
-msgstr ""
+msgstr "Tipul obiectului nu a fost specificat"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Eroare"
#: js/oc-vcategories.js:179
msgid "The app name is not specified."
-msgstr ""
+msgstr "Numele aplicației nu a fost specificat"
#: js/oc-vcategories.js:194
msgid "The required file {file} is not installed!"
+msgstr "Fișierul obligatoriu {file} nu este instalat!"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Partajează"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Eroare la partajare"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Eroare la anularea partajării"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Eroare la modificarea permisiunilor"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Distribuie cu tine si grupul {group} de {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Distribuie cu tine de {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Partajat cu"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Partajare cu legătură"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Protejare cu parolă"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Parola"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "Expediază legătura prin poșta electronică"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "Expediază"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Specifică data expirării"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Data expirării"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Distribuie prin email:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Nici o persoană găsită"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Repartajarea nu este permisă"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Distribuie in {item} si {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Anulare partajare"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "poate edita"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "control acces"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "creare"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "actualizare"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "ștergere"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "partajare"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Protejare cu parolă"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Eroare la anularea datei de expirare"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Eroare la specificarea datei de expirare"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
-msgstr ""
+msgstr "Se expediază..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
+msgstr "Mesajul a fost expediat"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
msgstr ""
#: lostpassword/controller.php:47
@@ -377,7 +473,7 @@ msgstr "Editează categoriile"
msgid "Add"
msgstr "Adaugă"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Avertisment de securitate"
@@ -387,147 +483,75 @@ msgid ""
"OpenSSL extension."
msgstr "Generatorul de numere pentru securitate nu este disponibil, va rog activati extensia PHP OpenSSL"
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Fara generatorul pentru numere de securitate , un atacator poate afla parola si reseta contul tau"
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Directorul tău de date și fișierele tale probabil sunt accesibile prin internet. Fișierul .htaccess oferit de ownCloud nu funcționează. Îți recomandăm să configurezi server-ul tău web într-un mod în care directorul de date să nu mai fie accesibil sau mută directorul de date în afara directorului root al server-ului web."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Crează un <strong>cont de administrator</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avansat"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Director date"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Configurează baza de date"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "vor fi folosite"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Utilizatorul bazei de date"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Parola bazei de date"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Numele bazei de date"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Tabela de spațiu a bazei de date"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Bază date"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Finalizează instalarea"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Duminică"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Luni"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Marți"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Miercuri"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Joi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Vineri"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sâmbătă"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Ianuarie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februarie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Martie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Aprilie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mai"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Iunie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Iulie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Septembrie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Octombrie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Noiembrie"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Decembrie"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "servicii web controlate de tine"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Ieșire"
@@ -549,17 +573,17 @@ msgstr "Te rog schimba parola pentru ca, contul tau sa fie securizat din nou."
msgid "Lost your password?"
msgstr "Ai uitat parola?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "amintește"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Autentificare"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Ai ieșit"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -572,18 +596,4 @@ msgstr "următorul"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Advertisment de Securitate"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Te rog verifica parola. <br/>Pentru securitate va poate fi cerut ocazional introducerea parolei din nou"
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verifica"
+msgstr "Actualizăm ownCloud la versiunea %s, aceasta poate dura câteva momente."
diff --git a/l10n/ro/files.po b/l10n/ro/files.po
index 055036e3d83..4e321298f04 100644
--- a/l10n/ro/files.po
+++ b/l10n/ro/files.po
@@ -3,17 +3,18 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Claudiu <claudiu@tanaselia.ro>, 2011, 2012.
+# Claudiu <claudiu@tanaselia.ro>, 2011-2013.
# Dimon Pockemon <>, 2012.
+# Dumitru Ursu <>, 2013.
# Eugen Mihalache <eugemjj@gmail.com>, 2012.
-# <g.ciprian@osn.ro>, 2012.
+# <g.ciprian@osn.ro>, 2012-2013.
# <laur.cristescu@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
@@ -25,207 +26,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nu se poate de mutat %s - Fișier cu acest nume deja există"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Nu s-a putut muta %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Nu s-a putut redenumi fișierul"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Nici un fișier nu a fost încărcat. Eroare necunoscută"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Nicio eroare, fișierul a fost încărcat cu succes"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Fisierul incarcat depaseste upload_max_filesize permisi in php.ini: "
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Fișierul are o dimensiune mai mare decât variabile MAX_FILE_SIZE specificată în formularul HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Fișierul a fost încărcat doar parțial"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Niciun fișier încărcat"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Lipsește un dosar temporar"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Eroare la scriere pe disc"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Director invalid."
#: appinfo/app.php:10
msgid "Files"
msgstr "Fișiere"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Anulează partajarea"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Șterge"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Redenumire"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "În așteptare"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} deja exista"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "înlocuire"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "sugerează nume"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "anulare"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "inlocuit {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "Anulează ultima acțiune"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} inlocuit cu {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "nedistribuit {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "Sterse {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' este un nume invalid de fișier."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Numele fișierului nu poate rămâne gol."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nume invalid, '\\', '/', '<', '>', ':', '\"', '|', '?' si '*' nu sunt permise."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "se generază fișierul ZIP, va dura ceva timp."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Se pregătește descărcarea. Aceasta poate să dureze ceva timp dacă fișierele sunt mari."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nu s-a putut încărca fișierul tău deoarece pare să fie un director sau are 0 bytes."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Eroare la încărcare"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "ÃŽnchide"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "În așteptare"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "un fișier se încarcă"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} fisiere incarcate"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Încărcare anulată."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "Adresa URL nu poate fi goală."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} fisiere scanate"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "eroare la scanarea"
+msgstr "Invalid folder name. Usage of 'Shared' is reserved by Ownclou"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Nume"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Dimensiune"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Modificat"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 folder"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} foldare"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 fisier"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} fisiere"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Încarcă"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Manipulare fișiere"
@@ -274,36 +278,44 @@ msgstr "Dosar"
msgid "From link"
msgstr "de la adresa"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Încarcă"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Anulează încărcarea"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nimic aici. Încarcă ceva!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Descarcă"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Anulează partajarea"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Fișierul încărcat este prea mare"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Fișierul care l-ai încărcat a depășită limita maximă admisă la încărcare pe acest server."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Fișierele sunt scanate, te rog așteptă."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "ÃŽn curs de scanare"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ro/files_encryption.po b/l10n/ro/files_encryption.po
index 2c3a3ed30b0..ba27a3e08d2 100644
--- a/l10n/ro/files_encryption.po
+++ b/l10n/ro/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Dumitru Ursu <>, 2013.
# <g.ciprian@osn.ro>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-19 02:02+0200\n"
-"PO-Revision-Date: 2012-09-18 11:31+0000\n"
-"Last-Translator: g.ciprian <g.ciprian@osn.ro>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "ÃŽncriptare"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Exclude următoarele tipuri de fișiere de la încriptare"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Niciuna"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Activare încriptare"
diff --git a/l10n/ro/files_external.po b/l10n/ro/files_external.po
index a2cf379cc42..fd43a0fd65b 100644
--- a/l10n/ro/files_external.po
+++ b/l10n/ro/files_external.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Dumitru Ursu <>, 2013.
# <g.ciprian@osn.ro>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-27 00:04+0100\n"
+"PO-Revision-Date: 2013-01-25 23:25+0000\n"
+"Last-Translator: Dimon Pockemon <>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,40 +21,40 @@ msgstr ""
#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23
msgid "Access granted"
-msgstr ""
+msgstr "Acces permis"
#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86
msgid "Error configuring Dropbox storage"
-msgstr ""
+msgstr "Eroare la configurarea mediului de stocare Dropbox"
#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
msgid "Grant access"
-msgstr ""
+msgstr "Permite accesul"
#: js/dropbox.js:73 js/google.js:72
msgid "Fill out all required fields"
-msgstr ""
+msgstr "Completează toate câmpurile necesare"
#: js/dropbox.js:85
msgid "Please provide a valid Dropbox app key and secret."
-msgstr ""
+msgstr "Prezintă te rog o cheie de Dropbox validă și parola"
#: js/google.js:26 js/google.js:73 js/google.js:78
msgid "Error configuring Google Drive storage"
-msgstr ""
+msgstr "Eroare la configurarea mediului de stocare Google Drive"
#: lib/config.php:434
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Atenție:</b> \"smbclient\" nu este instalat. Montarea mediilor CIFS/SMB partajate nu este posibilă. Solicită administratorului sistemului tău să îl instaleaze."
#: lib/config.php:435
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
"install it."
-msgstr ""
+msgstr "<b>Atenție:</b> suportul pentru FTP în PHP nu este activat sau instalat. Montarea mediilor FPT partajate nu este posibilă. Solicită administratorului sistemului tău să îl instaleze."
#: templates/settings.php:3
msgid "External Storage"
@@ -100,7 +101,7 @@ msgid "Users"
msgstr "Utilizatori"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "Șterge"
@@ -112,10 +113,10 @@ msgstr "Permite stocare externă pentru utilizatori"
msgid "Allow users to mount their own external storage"
msgstr "Permite utilizatorilor să monteze stocare externă proprie"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr "Certificate SSL root"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr "Importă certificat root"
diff --git a/l10n/ro/files_trashbin.po b/l10n/ro/files_trashbin.po
new file mode 100644
index 00000000000..252b8a0e7d8
--- /dev/null
+++ b/l10n/ro/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Nume"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 folder"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} foldare"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 fisier"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} fisiere"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ro/files_versions.po b/l10n/ro/files_versions.po
index d3058eb6ed2..46715013ca3 100644
--- a/l10n/ro/files_versions.po
+++ b/l10n/ro/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-27 02:01+0200\n"
-"PO-Revision-Date: 2012-09-26 13:05+0000\n"
-"Last-Translator: g.ciprian <g.ciprian@osn.ro>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Expiră toate versiunile"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Istoric"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versiuni"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Această acțiune va șterge toate versiunile salvate ale fișierelor tale"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ro/lib.po b/l10n/ro/lib.po
index 3cfb1c4c4a0..4380e638e1b 100644
--- a/l10n/ro/lib.po
+++ b/l10n/ro/lib.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Dumitru Ursu <>, 2013.
# <g.ciprian@osn.ro>, 2012.
# <laur.cristescu@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-27 00:04+0100\n"
-"PO-Revision-Date: 2012-12-26 05:14+0000\n"
-"Last-Translator: laurentiucristescu <laur.cristescu@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +20,55 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Ajutor"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "Personal"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Setări"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Utilizatori"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Aplicații"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Descărcarea ZIP este dezactivată."
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Fișierele trebuie descărcate unul câte unul."
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Înapoi la fișiere"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Fișierele selectate sunt prea mari pentru a genera un fișier zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "nu poate fi determinat"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Aplicația nu este activată"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Eroare la autentificare"
@@ -83,55 +88,152 @@ msgstr "Text"
msgid "Images"
msgstr "Imagini"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "secunde în urmă"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minut în urmă"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minute în urmă"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Acum o ora"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d ore in urma"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "astăzi"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ieri"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d zile în urmă"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "ultima lună"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d luni in urma"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "ultimul an"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "ani în urmă"
diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po
index 1d2ba8f01d2..e078fbdc935 100644
--- a/l10n/ro/settings.po
+++ b/l10n/ro/settings.po
@@ -5,16 +5,17 @@
# Translators:
# Claudiu <claudiu@tanaselia.ro>, 2011, 2012.
# Dimon Pockemon <>, 2012.
+# Dumitru Ursu <>, 2013.
# Eugen Mihalache <eugemjj@gmail.com>, 2012.
-# <g.ciprian@osn.ro>, 2012.
+# <g.ciprian@osn.ro>, 2012-2013.
# <icewind1991@gmail.com>, 2012.
# <iuranemo@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
@@ -27,6 +28,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Imposibil de încărcat lista din App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Eroare de autentificare"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Grupul există deja"
@@ -35,7 +45,7 @@ msgstr "Grupul există deja"
msgid "Unable to add group"
msgstr "Nu s-a putut adăuga grupul"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Nu s-a putut activa aplicația."
@@ -47,22 +57,10 @@ msgstr "E-mail salvat"
msgid "Invalid email"
msgstr "E-mail nevalid"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID schimbat"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Cerere eronată"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Nu s-a putut șterge grupul"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Eroare de autentificare"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Nu s-a putut șterge utilizatorul"
@@ -71,9 +69,13 @@ msgstr "Nu s-a putut șterge utilizatorul"
msgid "Language changed"
msgstr "Limba a fost schimbată"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Cerere eronată"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
-msgstr ""
+msgstr "Administratorii nu se pot șterge singuri din grupul admin"
#: ajax/togglegroups.php:28
#, php-format
@@ -85,19 +87,47 @@ msgstr "Nu s-a putut adăuga utilizatorul la grupul %s"
msgid "Unable to remove user from group %s"
msgstr "Nu s-a putut elimina utilizatorul din grupul %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Dezactivați"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Activați"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Eroare"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Salvez..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "_language_name_"
@@ -107,126 +137,134 @@ msgstr "Adaugă aplicația ta"
#: templates/apps.php:11
msgid "More Apps"
-msgstr ""
+msgstr "Mai multe aplicații"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Selectează o aplicație"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Vizualizează pagina applicației pe apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licențiat <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Actualizare"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "Documentație utilizator"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "Documentație administrator"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "Documentație online"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "Forum"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr ""
+msgstr "Urmărire bug-uri"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "Suport comercial"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
-msgstr ""
-
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Clienți"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
+msgstr "Ați utilizat <strong>%s</strong> din <strong>%s</strong> disponibile"
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Parolă"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Parola a fost modificată"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Imposibil de-ați schimbat parola"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Parola curentă"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Noua parolă"
-#: templates/personal.php:26
-msgid "show"
-msgstr "afișează"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Schimbă parola"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Adresa ta de email"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Completează o adresă de mail pentru a-ți putea recupera parola"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Limba"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Ajută la traducere"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "Folosește această adresă pentru a conecta ownCloud cu managerul de fișiere"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "Versiunea"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -236,11 +274,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Nume"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupuri"
@@ -250,28 +288,36 @@ msgstr "Crează"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Stocare implicită"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Nelimitată"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Altele"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Grupul Admin "
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
+msgstr "Stocare"
+
+#: templates/users.php:97
+msgid "change display name"
msgstr ""
-#: templates/users.php:133
-msgid "Default"
+#: templates/users.php:101
+msgid "set new password"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:137
+msgid "Default"
+msgstr "Implicită"
+
+#: templates/users.php:165
msgid "Delete"
msgstr "Șterge"
diff --git a/l10n/ro/user_ldap.po b/l10n/ro/user_ldap.po
index 171e91b27d4..4a97d1b7d6a 100644
--- a/l10n/ro/user_ldap.po
+++ b/l10n/ro/user_ldap.po
@@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Dumitru Ursu <>, 2012.
+# Dumitru Ursu <>, 2012-2013.
# <iuranemo@gmail.com>, 2012.
# <laur.cristescu@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-27 00:04+0100\n"
-"PO-Revision-Date: 2012-12-26 05:09+0000\n"
-"Last-Translator: laurentiucristescu <laur.cristescu@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,6 +20,58 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Ștergerea a eșuat"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -29,158 +81,232 @@ msgstr "<b>Atentie:</b> Apps user_ldap si user_webdavauth sunt incompatibile. Es
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Atentie:</b Modulul PHP LDAP care este necesar nu este instalat. Va rugam intrebati administratorul de sistem instalarea acestuia"
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Atenție</b> Modulul PHP LDAP nu este instalat, infrastructura nu va funcționa. Contactează administratorul sistemului pentru al instala."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Gazdă"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Puteți omite protocolul, decât dacă folosiți SSL. Atunci se începe cu ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN de bază"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Un Base DN pe linie"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Puteți să specificați DN de bază pentru utilizatori și grupuri în fila Avansat"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN al utilizatorului"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN-ul clientului utilizator cu care se va efectua conectarea, d.e. uid=agent,dc=example,dc=com. Pentru acces anonim, lăsăți DN și Parolă libere."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Parolă"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Pentru acces anonim, lăsați DN și Parolă libere."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filtrare după Nume Utilizator"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Definește fitrele care trebuie aplicate, când se încearcă conectarea. %%uid înlocuiește numele utilizatorului în procesul de conectare."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "folosiți substituentul %%uid , d.e. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filtrarea după lista utilizatorilor"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Definește filtrele care trebui aplicate, când se peiau utilzatorii."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "fără substituenți, d.e. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Fitrare Grup"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Definește filtrele care se aplică, când se preiau grupurile."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "fără substituenți, d.e. \"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Portul"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Arborele de bază al Utilizatorilor"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Arborele de bază al Grupurilor"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Asocierea Grup-Membru"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Utilizează TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "A nu se utiliza pentru conexiuni SSL, va eșua."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Server LDAP insensibil la majuscule (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Oprește validarea certificatelor SSL "
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Dacă conexiunea lucrează doar cu această opțiune, importează certificatul SSL al serverului LDAP în serverul ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Nu este recomandat, a se utiliza doar pentru testare."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "în secunde. O schimbare curăță memoria tampon."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Câmpul cu numele vizibil al utilizatorului"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Atributul LDAP folosit pentru a genera numele de utilizator din ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Arborele de bază al Utilizatorilor"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Un User Base DN pe linie"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Câmpul cu numele grupului"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Atributul LDAP folosit pentru a genera numele grupurilor din ownCloud"
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Arborele de bază al Grupurilor"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Un Group Base DN pe linie"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Asocierea Grup-Membru"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "în octeți"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "în secunde. O schimbare curăță memoria tampon."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Lăsați gol pentru numele de utilizator (implicit). În caz contrar, specificați un atribut LDAP / AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Ajutor"
diff --git a/l10n/ro/user_webdavauth.po b/l10n/ro/user_webdavauth.po
index 7c83e127d1c..1f11c76068b 100644
--- a/l10n/ro/user_webdavauth.po
+++ b/l10n/ro/user_webdavauth.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Dumitru Ursu <>, 2013.
# <laur.cristescu@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-27 00:04+0100\n"
-"PO-Revision-Date: 2012-12-26 05:17+0000\n"
-"Last-Translator: laurentiucristescu <laur.cristescu@gmail.com>\n"
+"POT-Creation-Date: 2013-01-27 00:04+0100\n"
+"PO-Revision-Date: 2013-01-26 00:09+0000\n"
+"Last-Translator: Dimon Pockemon <>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +19,17 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Autentificare WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "owncloud va trimite acreditatile de utilizator pentru a interpreta aceasta pagina. Http 401 si Http 403 are acreditarile si orice alt cod gresite ca acreditarile corecte"
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud va trimite datele de autentificare la acest URL. Acest modul verifică răspunsul și va interpreta codurile de status HTTP 401 sau 403 ca fiind date de autentificare invalide, și orice alt răspuns ca fiind date valide."
diff --git a/l10n/ru/core.po b/l10n/ru/core.po
index f6eb332d6be..b9e138452be 100644
--- a/l10n/ru/core.po
+++ b/l10n/ru/core.po
@@ -8,17 +8,20 @@
# <k0ldbl00d@gmail.com>, 2012.
# Mihail Vasiliev <mickvav@gmail.com>, 2012.
# <semen@sam002.net>, 2012.
+# Sergey <sergey@markevich.ru>, 2013.
+# <sharov3@gmail.com>, 2013.
# <skoptev@ukr.net>, 2012.
# <tony.mccourin@gmail.com>, 2011.
# Victor Bravo <>, 2012.
# <victor.dubiniuk@gmail.com>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:40+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,24 +29,24 @@ msgstr ""
"Language: ru\n"
"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);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Пользователь %s поделилÑÑ Ñ Ð²Ð°Ð¼Ð¸ файлом"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Пользователь %s открыл вам доÑтуп к папке"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Пользователь %s открыл вам доÑтуп к файлу \"%s\". Он доÑтупен Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ здеÑÑŒ: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -59,8 +62,9 @@ msgid "No category to add?"
msgstr "Ðет категорий Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -88,59 +92,135 @@ msgstr "Ðет категорий Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ."
msgid "Error removing %s from favorites."
msgstr "Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ %s из избранного"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "ВоÑкреÑенье"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Понедельник"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Вторник"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Среда"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Четверг"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "ПÑтница"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Суббота"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Январь"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Февраль"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Март"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Ðпрель"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Май"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Июнь"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Июль"
+
+#: js/config.php:33
+msgid "August"
+msgstr "ÐвгуÑÑ‚"
+
+#: js/config.php:33
+msgid "September"
+msgstr "СентÑбрь"
+
+#: js/config.php:33
+msgid "October"
+msgstr "ОктÑбрь"
+
+#: js/config.php:33
+msgid "November"
+msgstr "ÐоÑбрь"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Декабрь"
+
+#: js/js.js:286
msgid "Settings"
msgstr "ÐаÑтройки"
-#: js/js.js:704
+#: js/js.js:766
msgid "seconds ago"
msgstr "неÑколько Ñекунд назад"
-#: js/js.js:705
+#: js/js.js:767
msgid "1 minute ago"
msgstr "1 минуту назад"
-#: js/js.js:706
+#: js/js.js:768
msgid "{minutes} minutes ago"
msgstr "{minutes} минут назад"
-#: js/js.js:707
+#: js/js.js:769
msgid "1 hour ago"
msgstr "Ñ‡Ð°Ñ Ð½Ð°Ð·Ð°Ð´"
-#: js/js.js:708
+#: js/js.js:770
msgid "{hours} hours ago"
msgstr "{hours} чаÑов назад"
-#: js/js.js:709
+#: js/js.js:771
msgid "today"
msgstr "ÑегоднÑ"
-#: js/js.js:710
+#: js/js.js:772
msgid "yesterday"
msgstr "вчера"
-#: js/js.js:711
+#: js/js.js:773
msgid "{days} days ago"
msgstr "{days} дней назад"
-#: js/js.js:712
+#: js/js.js:774
msgid "last month"
msgstr "в прошлом меÑÑце"
-#: js/js.js:713
+#: js/js.js:775
msgid "{months} months ago"
msgstr "{months} меÑÑцев назад"
-#: js/js.js:714
+#: js/js.js:776
msgid "months ago"
msgstr "неÑколько меÑÑцев назад"
-#: js/js.js:715
+#: js/js.js:777
msgid "last year"
msgstr "в прошлом году"
-#: js/js.js:716
+#: js/js.js:778
msgid "years ago"
msgstr "неÑколько лет назад"
@@ -170,8 +250,8 @@ msgid "The object type is not specified."
msgstr "Тип объекта не указан"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Ошибка"
@@ -183,123 +263,141 @@ msgstr "Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ указано"
msgid "The required file {file} is not installed!"
msgstr "Ðеобходимый файл {file} не уÑтановлен!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Открыть доÑтуп"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Общие"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Ошибка при открытии доÑтупа"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Ошибка при закрытии доÑтупа"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Ошибка при Ñмене разрешений"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "{owner} открыл доÑтуп Ð´Ð»Ñ Ð’Ð°Ñ Ð¸ группы {group} "
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "{owner} открыл доÑтуп Ð´Ð»Ñ Ð’Ð°Ñ"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "ПоделитьÑÑ Ñ"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "ПоделитьÑÑ Ñ ÑÑылкой"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Защитить паролем"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Пароль"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "ÐŸÐ¾Ñ‡Ñ‚Ð¾Ð²Ð°Ñ ÑÑылка на перÑону"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Отправить"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "УÑтановить Ñрок доÑтупа"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Дата окончаниÑ"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "ПоделитÑÑ Ñ‡ÐµÑ€ÐµÐ· Ñлектронную почту:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ðи один человек не найден"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Общий доÑтуп не разрешен"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Общий доÑтуп к {item} Ñ {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Закрыть общий доÑтуп"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "может редактировать"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "контроль доÑтупа"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "Ñоздать"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "обновить"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "удалить"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "открыть доÑтуп"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Защищено паролем"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Ошибка при отмене Ñрока доÑтупа"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Ошибка при уÑтановке Ñрока доÑтупа"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "ОтправлÑетÑÑ ..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "ПиÑьмо отправлено"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "При обновлении произошла ошибка. ПожалуйÑта Ñообщите об Ñтом в <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud ÑообщеÑтво</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Обновление прошло уÑпешно. ПеренаправлÑемÑÑ Ð² Ваш ownCloud..."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ "
@@ -381,7 +479,7 @@ msgstr "Редактировать категории"
msgid "Add"
msgstr "Добавить"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Предупреждение безопаÑноÑти"
@@ -391,147 +489,75 @@ msgid ""
"OpenSSL extension."
msgstr "Ðет доÑтупного защищенного генератора Ñлучайных чиÑел, пожалуйÑта, включите раÑширение PHP OpenSSL."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Без защищенного генератора Ñлучайных чиÑел злоумышленник может предугадать токены ÑброÑа Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸ завладеть Вашей учетной запиÑью."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "Ваша папка Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и файлы возможно доÑтупны из интернета потому что файл .htaccess не работает."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Ваши каталоги данных и файлы, вероÑтно, доÑтупны из Интернета. Файл .htaccess, предоÑтавлÑемый ownCloud, не работает. Мы наÑтоÑтельно рекомендуем Вам наÑтроить вебÑервер таким образом, чтобы каталоги данных больше не были доÑтупны, или перемеÑтить их за пределы корневого каталога документов веб-Ñервера."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Ð”Ð»Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ как правильно наÑтроить Ваш Ñервер, пожалйÑта заглÑните в <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">документацию</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Создать <strong>учётную запиÑÑŒ админиÑтратора</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Дополнительно"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "ÐаÑтройка базы данных"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "будет иÑпользовано"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð±Ð°Ð·Ñ‹ данных"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Пароль Ð´Ð»Ñ Ð±Ð°Ð·Ñ‹ данных"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Ðазвание базы данных"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Табличое проÑтранÑтво базы данных"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "ХоÑÑ‚ базы данных"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Завершить уÑтановку"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "ВоÑкреÑенье"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Понедельник"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Вторник"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Среда"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Четверг"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "ПÑтница"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Суббота"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Январь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Февраль"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Март"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Ðпрель"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Май"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Июнь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Июль"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "ÐвгуÑÑ‚"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "СентÑбрь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "ОктÑбрь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "ÐоÑбрь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Декабрь"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "Сетевые Ñлужбы под твоим контролем"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Выйти"
@@ -553,17 +579,17 @@ msgstr "ПожалуйÑта, Ñмените пароль, чтобы обезо
msgid "Lost your password?"
msgstr "Забыли пароль?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "запомнить"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Войти"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Вы вышли."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Ðльтернативные имена пользователÑ"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -576,18 +602,4 @@ msgstr "Ñлед"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Предупреждение безопаÑноÑти!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "ПожалуйÑта, проверьте Ñвой ​​пароль. <br/>По ÑоображениÑм безопаÑноÑти, Вам иногда придетÑÑ Ð²Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ñвой пароль Ñнова."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Подтвердить"
+msgstr "ПроизводитÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ðµ ownCloud до верÑии %s. Это может занÑть некоторое времÑ."
diff --git a/l10n/ru/files.po b/l10n/ru/files.po
index 05c00236195..8d0db97a9f6 100644
--- a/l10n/ru/files.po
+++ b/l10n/ru/files.po
@@ -9,16 +9,19 @@
# <mpolr21@gmail.com>, 2012.
# Nick Remeslennikov <homolibere@gmail.com>, 2012.
# <semen@sam002.net>, 2012.
+# Sergey <sergey@markevich.ru>, 2013.
+# <sharov3@gmail.com>, 2013.
# <skoptev@ukr.net>, 2012.
# <tony.mccourin@gmail.com>, 2011.
# Victor Bravo <>, 2012.
# <victor.dubiniuk@gmail.com>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -30,207 +33,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Ðевозможно перемеÑтить %s - файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Ðевозможно перемеÑтить %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Ðевозможно переименовать файл"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Файл не был загружен. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Файл уÑпешно загружен"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Файл превышает размер уÑтановленный upload_max_filesize в php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Файл превышает размер MAX_FILE_SIZE, указаный в HTML-форме"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Файл был загружен не полноÑтью"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Файл не был загружен"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Ðевозможно найти временную папку"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Ошибка запиÑи на диÑк"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "ÐедоÑтаточно доÑтупного меÑта в хранилище"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Ðеправильный каталог."
#: appinfo/app.php:10
msgid "Files"
msgstr "Файлы"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Отменить публикацию"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Удалено навÑегда"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Удалить"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Переименовать"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ожидание"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} уже ÑущеÑтвует"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "заменить"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "предложить название"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "отмена"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "заменено {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "отмена"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "заменено {new_name} на {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "не опубликованные {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "выполнÑетÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "удаленные {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' - неправильное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может быть пуÑтым."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ðеправильное имÑ, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопуÑтимы."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Ñоздание ZIP-файла, Ñто может занÑть некоторое времÑ."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Ваше диÑковое проÑтранÑтво полноÑтью заполнено, произведите очиÑтку перед загрузкой новых файлов."
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Ваше хранилище почти заполнено ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Загрузка началаÑÑŒ. Это может потребовать много времени, еÑли файл большого размера."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ файл размером 0 байт в каталог"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Ошибка загрузки"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Закрыть"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Ожидание"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "загружаетÑÑ 1 файл"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} файлов загружаетÑÑ"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Загрузка отменена."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Файл в процеÑÑе загрузки. Покинув Ñтраницу вы прервёте загрузку."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "СÑылка не может быть пуÑтой."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} файлов проÑканировано"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑанированиÑ"
+msgstr "Ðеправильное Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°. Ð˜Ð¼Ñ 'Shared' зарезервировано."
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Ðазвание"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Размер"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Изменён"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 папка"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} папок"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 файл"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} файлов"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Загрузить"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Управление файлами"
@@ -279,36 +285,44 @@ msgstr "Папка"
msgid "From link"
msgstr "Из ÑÑылки"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Загрузить"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Отмена загрузки"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ЗдеÑÑŒ ничего нет. Загрузите что-нибудь!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Скачать"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Отменить публикацию"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Файл Ñлишком большой"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Файлы, которые Ð’Ñ‹ пытаетеÑÑŒ загрузить, превышают лимит Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² на Ñтом Ñервере."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Подождите, файлы ÑканируютÑÑ."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Текущее Ñканирование"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Обновление кеша файловой ÑиÑтемы..."
diff --git a/l10n/ru/files_encryption.po b/l10n/ru/files_encryption.po
index 5ae5f485223..1244183e43b 100644
--- a/l10n/ru/files_encryption.po
+++ b/l10n/ru/files_encryption.po
@@ -4,32 +4,37 @@
#
# Translators:
# Denis <reg.transifex.net@demitel.ru>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-25 02:04+0200\n"
-"PO-Revision-Date: 2012-08-24 07:47+0000\n"
-"Last-Translator: Denis <reg.transifex.net@demitel.ru>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
-"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)\n"
+"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);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Шифрование"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "ИÑключить шифрование Ñледующих типов файлов"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Шифрование файла включено."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Следующие типы файлов не будут зашифрованы:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "ИÑключить Ñледующие типы файлов из шифрованных:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Ðичего"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Включить шифрование"
diff --git a/l10n/ru/files_trashbin.po b/l10n/ru/files_trashbin.po
new file mode 100644
index 00000000000..2da2f61dbc1
--- /dev/null
+++ b/l10n/ru/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Дмитрий <langaru@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 04:50+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
+"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"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);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "%s не может быть удалён навÑегда"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "%s не может быть воÑÑтановлен"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "выполнить операцию воÑÑтановлениÑ"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "удалить файл навÑегда"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "ИмÑ"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Удалён"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 папка"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} папок"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 файл"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} файлов"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "ЗдеÑÑŒ ничего нет. Ваша корзина пуÑта!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "ВоÑÑтановить"
diff --git a/l10n/ru/files_versions.po b/l10n/ru/files_versions.po
index bb622c0e095..87dce55db7e 100644
--- a/l10n/ru/files_versions.po
+++ b/l10n/ru/files_versions.po
@@ -6,13 +6,14 @@
# Denis <reg.transifex.net@demitel.ru>, 2012.
# <skoptev@ukr.net>, 2012.
# <victor.dubiniuk@gmail.com>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-20 02:02+0200\n"
-"PO-Revision-Date: 2012-10-19 13:09+0000\n"
-"Last-Translator: skoptev <skoptev@ukr.net>\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 06:30+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,21 +21,44 @@ msgstr ""
"Language: ru\n"
"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);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "ПроÑрочить вÑе верÑии"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Ðе может быть возвращён: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "уÑпех"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "Файл %s был возвращён к верÑии %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "провал"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Файл %s не может быть возвращён к верÑии %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Ðет доÑтупных Ñтарых верÑий"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Путь не указан"
#: js/versions.js:16
msgid "History"
msgstr "ИÑториÑ"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "ВерÑии"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "ОчиÑтить ÑпиÑок верÑий ваших файлов"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Вернуть файл к предыдущей верÑии нажатием на кнопку возврата"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ru/lib.po b/l10n/ru/lib.po
index a031a62f802..53b9586115b 100644
--- a/l10n/ru/lib.po
+++ b/l10n/ru/lib.po
@@ -7,14 +7,15 @@
# <k0ldbl00d@gmail.com>, 2012.
# Mihail Vasiliev <mickvav@gmail.com>, 2012.
# <mpolr21@gmail.com>, 2012.
+# Sergey <sergey@markevich.ru>, 2013.
# <victor.dubiniuk@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-22 00:01+0100\n"
-"PO-Revision-Date: 2012-11-21 12:19+0000\n"
-"Last-Translator: Mihail Vasiliev <mickvav@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,51 +23,55 @@ msgstr ""
"Language: ru\n"
"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);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Помощь"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Личное"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "ÐаÑтройки"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Пользователи"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "ПриложениÑ"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP-Ñкачивание отключено."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Файлы должны быть загружены по одному."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Ðазад к файлам"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Выбранные файлы Ñлишком велики, чтобы Ñоздать zip файл."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "Ðевозможно уÑтановить"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Приложение не разрешено"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Ошибка аутентификации"
@@ -86,55 +91,152 @@ msgstr "ТекÑÑ‚"
msgid "Images"
msgstr "ИзображениÑ"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "менее минуты"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 минуту назад"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d минут назад"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Ñ‡Ð°Ñ Ð½Ð°Ð·Ð°Ð´"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d чаÑов назад"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "ÑегоднÑ"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "вчера"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d дней назад"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "в прошлом меÑÑце"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d меÑÑцев назад"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "в прошлом году"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "годы назад"
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index 81feddae6f4..6f05b087c54 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -10,17 +10,19 @@
# Nick Remeslennikov <homolibere@gmail.com>, 2012.
# <rasperepodvipodvert@gmail.com>, 2012.
# <semen@sam002.net>, 2012.
-# <sharov3@gmail.com>, 2012.
+# Sergey <sergey@markevich.ru>, 2013.
+# <sharov3@gmail.com>, 2012-2013.
# <skoptev@ukr.net>, 2012.
# <tony.mccourin@gmail.com>, 2011.
# Victor Bravo <>, 2012.
# <victor.dubiniuk@gmail.com>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -33,6 +35,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Загрузка из App Store запрещена"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Ошибка авторизации"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Ðевозможно изменить отображаемое имÑ"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Группа уже ÑущеÑтвует"
@@ -41,7 +52,7 @@ msgstr "Группа уже ÑущеÑтвует"
msgid "Unable to add group"
msgstr "Ðевозможно добавить группу"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Ðе удалоÑÑŒ включить приложение."
@@ -53,22 +64,10 @@ msgstr "Email Ñохранен"
msgid "Invalid email"
msgstr "Ðеправильный Email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID изменён"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ðеверный запроÑ"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ðевозможно удалить группу"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Ошибка авторизации"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ðевозможно удалить пользователÑ"
@@ -77,6 +76,10 @@ msgstr "Ðевозможно удалить пользователÑ"
msgid "Language changed"
msgstr "Язык изменён"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ðеверный запроÑ"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "ÐдминиÑтратор не может удалить Ñам ÑÐµÐ±Ñ Ð¸Ð· группы admin"
@@ -91,19 +94,47 @@ msgstr "Ðевозможно добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² гру
msgid "Unable to remove user from group %s"
msgstr "Ðевозможно удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· группы %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Ðевозможно обновить приложение"
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Обновить до {верÑÐ¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Выключить"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Включить"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Повремени..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Обновление..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Ошибка в процеÑÑе Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Ошибка"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Обновлено"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Сохранение..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "РуÑÑкий "
@@ -115,29 +146,33 @@ msgstr "Добавить приложение"
msgid "More Apps"
msgstr "Больше приложений"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Выберите приложение"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Смотрите Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ð° apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span> лицензиÑ. Ðвтор <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Обновить"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "ПользовательÑÐºÐ°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "Online документациÑ"
#: templates/help.php:7
msgid "Forum"
@@ -145,94 +180,98 @@ msgstr "Форум"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr ""
+msgstr "Bugtracker"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "КоммерчеÑÐºÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Ð’Ñ‹ иÑпользовали <strong>%s</strong> из доÑтупных <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Клиенты"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Загрузка приложений Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð°"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Загрузка Android-приложениÑ"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Загрузка iOS-приложениÑ"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Пароль"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Ваш пароль изменён"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ðевозможно Ñменить пароль"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Текущий пароль"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Ðовый пароль"
-#: templates/personal.php:26
-msgid "show"
-msgstr "показать"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Сменить пароль"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Отображаемое имÑ"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Ваше отображаемое Ð¸Ð¼Ñ Ð±Ñ‹Ð»Ð¾ изменено"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Ðевозможно изменить Ваше отображаемое имÑ"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Изменить отображаемое имÑ"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "e-mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Введите Ð°Ð´Ñ€ÐµÑ Ñлектронной почты, чтобы поÑвилаÑÑŒ возможноÑть воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Язык"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Помочь Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð¾Ð¼"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "ИÑпользуйте Ñтот URL Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð³Ð¾ менеджера к Вашему хранилищу"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "ВерÑиÑ"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -242,11 +281,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "РазрабатываетÑÑ <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "ИмÑ"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Группы"
@@ -256,28 +295,36 @@ msgstr "Создать"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Хранилище по-умолчанию"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Ðеограниченно"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Другое"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Группа ÐдминиÑтраторы"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
-msgstr ""
+msgstr "Хранилище"
+
+#: templates/users.php:97
+msgid "change display name"
+msgstr "изменить отображаемое имÑ"
-#: templates/users.php:133
+#: templates/users.php:101
+msgid "set new password"
+msgstr "уÑтановить новый пароль"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "По-умолчанию"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Удалить"
diff --git a/l10n/ru/user_ldap.po b/l10n/ru/user_ldap.po
index 5ab21a67d52..d9c19d16f88 100644
--- a/l10n/ru/user_ldap.po
+++ b/l10n/ru/user_ldap.po
@@ -6,13 +6,14 @@
# <4671992@gmail.com>, 2012.
# Denis <reg.transifex.net@demitel.ru>, 2012.
# <semen@sam002.net>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-16 00:11+0100\n"
-"PO-Revision-Date: 2012-12-15 01:57+0000\n"
-"Last-Translator: sam002 <semen@sam002.net>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,6 +21,58 @@ msgstr ""
"Language: ru\n"
"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);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Ðе удалоÑÑŒ удалить конфигурацию Ñервера"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¸ подключение может быть уÑтановлено!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ верна. ПожалуйÑта, поÑмотрите в журнале ownCloud детали."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Удаление не удалоÑÑŒ"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "ПринÑть наÑтройки из поÑледней конфигурации Ñервера?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Сохранить наÑтройки?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Ðе получилоÑÑŒ добавить конфигурацию Ñервера"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Проверка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»Ð°ÑÑŒ"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Проверка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ удалаÑÑŒ"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Ð’Ñ‹ дейÑтвительно хотите удалить ÑущеÑтвующую конфигурацию Ñервера?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Подтверждение удалениÑ"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -29,158 +82,232 @@ msgstr "<b>Внимание:</b>ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ user_ldap и user_webdavaut
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Внимание:</b> Ðеобходимый PHP LDAP модуль не уÑтановлен, внутренний Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð½Ðµ будет работать. ПожалуйÑта, обратитеÑÑŒ к ÑиÑтемному админиÑтратору, чтобы уÑтановить его."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñервера"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Добавить конфигурацию Ñервера"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Сервер"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Можно опуÑтить протокол, за иÑключением того, когда вам требуетÑÑ SSL. Тогда начните Ñ ldaps :/ /"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Базовый DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Ð’Ñ‹ можете задать Base DN Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ и групп на вкладке \"РаÑширенное\""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN пользователÑ"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN-клиента пользователÑ, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ ÑвÑзывают должно быть заполнено, например, uid=агент, dc=пример, dc=com. Ð”Ð»Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾Ð³Ð¾ доÑтупа, оÑтавьте DN и пароль пуÑтыми."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Пароль"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Ð”Ð»Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾Ð³Ð¾ доÑтупа оÑтавьте DN и пароль пуÑтыми."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Фильтр входа пользователей"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "ОпределÑет фильтр Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ попытке входа. %%uid заменÑет Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸ входе в ÑиÑтему."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "иÑпользуйте заполнитель %%uid, например: \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Фильтр ÑпиÑка пользователей"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "ОпределÑет фильтр Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ получении пользователей."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "без заполнителÑ, например: \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Фильтр группы"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "ОпределÑет фильтр Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ получении группы."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "без заполнениÑ, например \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "ÐаÑтройки подключениÑ"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Порт"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "База пользовательÑкого дерева"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "База группового дерева"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "ÐÑÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ð“Ñ€ÑƒÐ¿Ð¿Ð°-УчаÑтник"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Отключение главного Ñервера"
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "ИÑпользовать TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ðе иÑпользуйте Ð´Ð»Ñ Ñоединений SSL"
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "ÐечувÑтвительный к региÑтру Ñервер LDAP (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Отключить проверку Ñертификата SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "ЕÑли Ñоединение работает только Ñ Ñтой опцией, импортируйте на ваш Ñервер ownCloud Ñертификат SSL Ñервера LDAP."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Ðе рекомендуетÑÑ, иÑпользуйте только Ð´Ð»Ñ Ñ‚ÐµÑтированиÑ."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "в Ñекундах. Изменение очиÑтит кÑш."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "ÐаÑтройки каталога"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Поле отображаемого имени пользователÑ"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Ðтрибут LDAP Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "База пользовательÑкого дерева"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "ПоиÑковые атрибуты пользователÑ"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Опционально; один атрибут на линию"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Поле отображаемого имени группы"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Ðтрибут LDAP Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ имени группы ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "База группового дерева"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "ÐÑÑÐ¾Ñ†Ð¸Ð°Ñ†Ð¸Ñ Ð“Ñ€ÑƒÐ¿Ð¿Ð°-УчаÑтник"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Специальные атрибуты"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "в байтах"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "в Ñекундах. Изменение очиÑтит кÑш."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "ОÑтавьте Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿ÑƒÑтым (по умолчанию). Иначе укажите атрибут LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Помощь"
diff --git a/l10n/ru/user_webdavauth.po b/l10n/ru/user_webdavauth.po
index 12e0350b328..709cb4a65dc 100644
--- a/l10n/ru/user_webdavauth.po
+++ b/l10n/ru/user_webdavauth.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-27 00:04+0100\n"
-"PO-Revision-Date: 2012-12-26 06:19+0000\n"
-"Last-Translator: adol <sharov3@gmail.com>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +19,17 @@ msgstr ""
"Language: ru\n"
"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);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/ru_RU/core.po b/l10n/ru_RU/core.po
index 73807cdb096..4e067548587 100644
--- a/l10n/ru_RU/core.po
+++ b/l10n/ru_RU/core.po
@@ -3,14 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:40+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,24 +20,24 @@ msgstr ""
"Language: ru_RU\n"
"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);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Пользователь %s открыл Вам доÑтуп к файлу"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Пользователь %s открыл Вам доÑтуп к папке"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Пользователь %s открыл Вам доÑтуп к файлу \"%s\". Он доÑтупен Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ здеÑÑŒ: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,8 +53,9 @@ msgid "No category to add?"
msgstr "Ðет категории Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -80,59 +83,135 @@ msgstr "Ðет категорий, выбранных Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ."
msgid "Error removing %s from favorites."
msgstr "Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ %s из избранного."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "ВоÑкреÑенье"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Понедельник"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Вторник"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Среда"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Четверг"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "ПÑтница"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Суббота"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Январь"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Февраль"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Март"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Ðпрель"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Май"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Июнь"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Июль"
+
+#: js/config.php:33
+msgid "August"
+msgstr "ÐвгуÑÑ‚"
+
+#: js/config.php:33
+msgid "September"
+msgstr "СентÑбрь"
+
+#: js/config.php:33
+msgid "October"
+msgstr "ОктÑбрь"
+
+#: js/config.php:33
+msgid "November"
+msgstr "ÐоÑбрь"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Декабрь"
+
+#: js/js.js:286
msgid "Settings"
msgstr "ÐаÑтройки"
-#: js/js.js:704
+#: js/js.js:766
msgid "seconds ago"
msgstr "Ñекунд назад"
-#: js/js.js:705
+#: js/js.js:767
msgid "1 minute ago"
msgstr " 1 минуту назад"
-#: js/js.js:706
+#: js/js.js:768
msgid "{minutes} minutes ago"
msgstr "{минуты} минут назад"
-#: js/js.js:707
+#: js/js.js:769
msgid "1 hour ago"
msgstr "1 Ñ‡Ð°Ñ Ð½Ð°Ð·Ð°Ð´"
-#: js/js.js:708
+#: js/js.js:770
msgid "{hours} hours ago"
msgstr "{чаÑÑ‹} чаÑов назад"
-#: js/js.js:709
+#: js/js.js:771
msgid "today"
msgstr "ÑегоднÑ"
-#: js/js.js:710
+#: js/js.js:772
msgid "yesterday"
msgstr "вчера"
-#: js/js.js:711
+#: js/js.js:773
msgid "{days} days ago"
msgstr "{дни} дней назад"
-#: js/js.js:712
+#: js/js.js:774
msgid "last month"
msgstr "в прошлом меÑÑце"
-#: js/js.js:713
+#: js/js.js:775
msgid "{months} months ago"
msgstr "{меÑÑцы} меÑÑцев назад"
-#: js/js.js:714
+#: js/js.js:776
msgid "months ago"
msgstr "меÑÑц назад"
-#: js/js.js:715
+#: js/js.js:777
msgid "last year"
msgstr "в прошлом году"
-#: js/js.js:716
+#: js/js.js:778
msgid "years ago"
msgstr "лет назад"
@@ -162,8 +241,8 @@ msgid "The object type is not specified."
msgstr "Тип объекта не указан."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Ошибка"
@@ -175,123 +254,141 @@ msgstr "Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ указано."
msgid "The required file {file} is not installed!"
msgstr "Требуемый файл {файл} не уÑтановлен!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Сделать общим"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Опубликовано"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Ошибка Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Ошибка при изменении прав доÑтупа"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Опубликовано Ð´Ð»Ñ Ð’Ð°Ñ Ð¸ группы {группа} {ÑобÑтвенник}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Опубликовано Ð´Ð»Ñ Ð’Ð°Ñ {ÑобÑтвенник}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Сделать общим Ñ"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Опубликовать Ñ ÑÑылкой"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Защитить паролем"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Пароль"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "СÑылка на Ð°Ð´Ñ€ÐµÑ Ñлектронной почты"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Отправить"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "УÑтановить Ñрок дейÑтвиÑ"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Дата иÑÑ‚ÐµÑ‡ÐµÐ½Ð¸Ñ Ñрока дейÑтвиÑ"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Сделать общедоÑтупным поÑредÑтвом email:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ðе найдено людей"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "РекурÑивный общий доÑтуп не разрешен"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "СовмеÑтное иÑпользование в {объект} Ñ {пользователь}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Отключить общий доÑтуп"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "возможно редактирование"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "контроль доÑтупа"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "Ñоздать"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "обновить"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "удалить"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "Ñделать общим"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Пароль защищен"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Ошибка при отключении даты иÑÑ‚ÐµÑ‡ÐµÐ½Ð¸Ñ Ñрока дейÑтвиÑ"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Ошибка при уÑтановке даты иÑÑ‚ÐµÑ‡ÐµÐ½Ð¸Ñ Ñрока дейÑтвиÑ"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "Отправка ..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "ПиÑьмо отправлено"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Обновление прошло неудачно. ПожалуйÑта, Ñообщите об Ñтом результате в <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Обновление прошло уÑпешно. Ðемедленное перенаправление Ð’Ð°Ñ Ð½Ð° ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Переназначение паролÑ"
@@ -373,7 +470,7 @@ msgstr "Редактирование категорий"
msgid "Add"
msgstr "Добавить"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Предупреждение ÑиÑтемы безопаÑноÑти"
@@ -383,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr "Ðет доÑтупного защищенного генератора Ñлучайных чиÑел, пожалуйÑта, включите раÑширение PHP OpenSSL."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Без защищенного генератора Ñлучайных чиÑел злоумышленник может Ñпрогнозировать пароль, ÑброÑить учетные данные и завладеть Вашим аккаунтом."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "Ваша папка Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и файлы возможно доÑтупны из интернета потому что файл .htaccess не работает."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Ваши каталоги данных и файлы, вероÑтно, доÑтупны из Интернета. Файл .htaccess, предоÑтавлÑемый ownCloud, не работает. Мы наÑтоÑтельно рекомендуем Вам наÑтроить вебÑервер таким образом, чтобы каталоги данных больше не были доÑтупны, или перемеÑтить их за пределы корневого каталога документов веб-Ñервера."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Ð”Ð»Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ как правильно наÑтроить Ваш Ñервер, пожалйÑта заглÑните в <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">документацию</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Создать <strong>admin account</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "РаÑширенный"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Папка данных"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "ÐаÑтроить базу данных"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "будет иÑпользоватьÑÑ"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Пользователь базы данных"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Пароль базы данных"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Ð˜Ð¼Ñ Ð±Ð°Ð·Ñ‹ данных"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ‡Ð½Ð°Ñ Ð¾Ð±Ð»Ð°Ñть базы данных"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Сервер базы данных"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Завершение наÑтройки"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "ВоÑкреÑенье"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Понедельник"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Вторник"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Среда"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Четверг"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "ПÑтница"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Суббота"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Январь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Февраль"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Март"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Ðпрель"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Май"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Июнь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Июль"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "ÐвгуÑÑ‚"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "СентÑбрь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "ОктÑбрь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "ÐоÑбрь"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Декабрь"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "веб-ÑервиÑÑ‹ под Вашим контролем"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Выйти"
@@ -545,17 +570,17 @@ msgstr "ПожалуйÑта, измените пароль, чтобы защи
msgid "Lost your password?"
msgstr "Забыли пароль?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "запомнить"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Войти"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Ð’Ñ‹ вышли из ÑиÑтемы."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Ðльтернативные Имена"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -568,18 +593,4 @@ msgstr "Ñледующий"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Предупреждение ÑиÑтемы безопаÑноÑти!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "ПожалуйÑта, проверьте Ñвой ​​пароль. <br/>По ÑоображениÑм безопаÑноÑти Вам может быть иногда предложено ввеÑти пароль еще раз."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Проверить"
+msgstr "Обновление ownCloud до верÑии %s, Ñто может занÑть некоторое времÑ."
diff --git a/l10n/ru_RU/files.po b/l10n/ru_RU/files.po
index 5c40bd57bd1..9d439b68554 100644
--- a/l10n/ru_RU/files.po
+++ b/l10n/ru_RU/files.po
@@ -3,15 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
# <skoptev@ukr.net>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 12:30+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,207 +24,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "ÐеполучаетÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти %s - Файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "ÐеполучаетÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти %s "
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Ðевозможно переименовать файл"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Файл не был загружен. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Ошибка отÑутÑтвует, файл загружен уÑпешно."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Размер загружаемого файла превышает upload_max_filesize директиву в php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Размер загруженного"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Загружаемый файл был загружен чаÑтично"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Файл не был загружен"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "ОтÑутÑтвует Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Ðе удалоÑÑŒ запиÑать на диÑк"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "ÐедоÑтаточно меÑта в хранилище"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Ðеверный каталог."
#: appinfo/app.php:10
msgid "Files"
msgstr "Файлы"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Скрыть"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Удалить навÑегда"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Удалить"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Переименовать"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ожидающий решениÑ"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{новое_имÑ} уже ÑущеÑтвует"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "отмена"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "подобрать название"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "отменить"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "заменено {новое_имÑ}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "отменить дейÑтвие"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "заменено {новое_имÑ} Ñ {Ñтарое_имÑ}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "CовмеÑтное иÑпользование прекращено {файлы}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "удалено {файлы}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "выполнÑетÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' ÑвлÑетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¼ именем файла."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может быть пуÑтым."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ðекорректное имÑ, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не допуÑтимы."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Создание ZIP-файла, Ñто может занÑть некоторое времÑ."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Ваше хранилище переполнено, фалы больше не могут быть обновлены или Ñинхронизированы!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Ваше хранилище почти полно ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Идёт подготовка к Ñкачке Вашего файла. Это может занÑть некоторое времÑ, еÑли фалы большие."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðевозможно загрузить файл,\n так как он имеет нулевой размер или ÑвлÑетÑÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸ÐµÐ¹"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Ошибка загрузки"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Закрыть"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Ожидающий решениÑ"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "загрузка 1 файла"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{количеÑтво} загружено файлов"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Загрузка отменена"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "ПроцеÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла. ЕÑли покинуть Ñтраницу ÑейчаÑ, загрузка будет отменена."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL не должен быть пуÑтым."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{количеÑтво} файлов отÑканировано"
+msgstr "Ðеверное Ð¸Ð¼Ñ Ð¿Ð°Ð¿ÐºÐ¸. ИÑпользование Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ 'Опубликовано' зарезервировано Owncloud"
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "ошибка при Ñканировании"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "ИмÑ"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Размер"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Изменен"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 папка"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{количеÑтво} папок"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 файл"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{количеÑтво} файлов"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Загрузить "
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Работа Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
@@ -271,36 +276,44 @@ msgstr "Папка"
msgid "From link"
msgstr "По ÑÑылке"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Загрузить "
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Корзина"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Отмена загрузки"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ЗдеÑÑŒ ничего нет. Загрузите что-нибудь!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Загрузить"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Скрыть"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Загрузка Ñлишком велика"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Размер файлов, которые Ð’Ñ‹ пытаетеÑÑŒ загрузить, превышает макÑимально допуÑтимый размер Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ на данный Ñервер."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Файлы ÑканируютÑÑ, пожалуйÑта, подождите."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Текущее Ñканирование"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Обновление кÑша файловой ÑиÑтемы... "
diff --git a/l10n/ru_RU/files_encryption.po b/l10n/ru_RU/files_encryption.po
index 11a61701141..cd0001f8dac 100644
--- a/l10n/ru_RU/files_encryption.po
+++ b/l10n/ru_RU/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-20 02:05+0200\n"
-"PO-Revision-Date: 2012-09-19 12:14+0000\n"
-"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: ru_RU\n"
"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);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Шифрование"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "ИÑключите Ñледующие типы файлов из шифрованиÑ"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Ðи один"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Включить шифрование"
diff --git a/l10n/ru_RU/files_trashbin.po b/l10n/ru_RU/files_trashbin.po
new file mode 100644
index 00000000000..1213f4e5eb1
--- /dev/null
+++ b/l10n/ru_RU/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Дмитрий <langaru@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:20+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
+"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru_RU\n"
+"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);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "%s не может быть удалён навÑегда"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "%s не может быть воÑÑтановлен"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "выполнить операцию воÑÑтановлениÑ"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "удалить файл навÑегда"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "ИмÑ"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Удалён"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 папка"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{количеÑтво} папок"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 файл"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{количеÑтво} файлов"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "ЗдеÑÑŒ ничего нет. Ваша корзина пуÑта!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "ВоÑÑтановить"
diff --git a/l10n/ru_RU/files_versions.po b/l10n/ru_RU/files_versions.po
index 241dfcc0e91..1cb13519bbb 100644
--- a/l10n/ru_RU/files_versions.po
+++ b/l10n/ru_RU/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-17 00:01+0100\n"
-"PO-Revision-Date: 2012-11-16 07:25+0000\n"
-"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: ru_RU\n"
"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);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Срок дейÑÑ‚Ð²Ð¸Ñ Ð²Ñех верÑий иÑтекает"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "ИÑториÑ"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "ВерÑии"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Это приведет к удалению вÑех ÑущеÑтвующих верÑий резервной копии Ваших файлов"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ru_RU/lib.po b/l10n/ru_RU/lib.po
index 5ca45d27ad2..b05be551ad4 100644
--- a/l10n/ru_RU/lib.po
+++ b/l10n/ru_RU/lib.po
@@ -3,14 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
+# Дмитрий <langaru@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-15 09:27+0000\n"
-"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +20,55 @@ msgstr ""
"Language: ru_RU\n"
"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);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Помощь"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "ПерÑональный"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "ÐаÑтройки"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Пользователи"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "ПриложениÑ"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Ðдмин"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Загрузка ZIP выключена."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Файлы должны быть загружены один за другим."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Обратно к файлам"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Выбранные файлы Ñлишком велики Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ zip-архива."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "не может быть определено"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Приложение не запущено"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Ошибка аутентификации"
@@ -82,55 +88,152 @@ msgstr "ТекÑÑ‚"
msgid "Images"
msgstr "ИзображениÑ"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Ваш веб Ñервер ещё не доÑтаточно точно наÑтроен Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти Ñинхронизации, Ñ‚.к. похоже, что Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ WebDAV Ñломан."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "ПожалуйÑта проверте дважды <a href='%s'>гиды по уÑтановке</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "Ñекунд назад"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 минуту назад"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d минут назад"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 Ñ‡Ð°Ñ Ð½Ð°Ð·Ð°Ð´"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d чаÑов назад"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "ÑегоднÑ"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "вчера"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d дней назад"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "в прошлом меÑÑце"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d меÑÑцев назад"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "в прошлом году"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "год назад"
diff --git a/l10n/ru_RU/settings.po b/l10n/ru_RU/settings.po
index 9d013ac07bb..1a793ea0e6b 100644
--- a/l10n/ru_RU/settings.po
+++ b/l10n/ru_RU/settings.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
@@ -22,6 +23,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Ðевозможно загрузить ÑпиÑок из App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Ошибка авторизации"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Группа уже ÑущеÑтвует"
@@ -30,7 +40,7 @@ msgstr "Группа уже ÑущеÑтвует"
msgid "Unable to add group"
msgstr "Ðевозможно добавить группу"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Ðе удалоÑÑŒ запуÑтить приложение"
@@ -42,22 +52,10 @@ msgstr "Email Ñохранен"
msgid "Invalid email"
msgstr "Ðеверный email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID изменен"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ðеверный запроÑ"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ðевозможно удалить группу"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Ошибка авторизации"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ðевозможно удалить пользователÑ"
@@ -66,6 +64,10 @@ msgstr "Ðевозможно удалить пользователÑ"
msgid "Language changed"
msgstr "Язык изменен"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ðеверный запроÑ"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "ÐдминиÑтраторы не могут удалить Ñами ÑÐµÐ±Ñ Ð¸Ð· группы админиÑтраторов"
@@ -80,19 +82,47 @@ msgstr "Ðевозможно добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² гру
msgid "Unable to remove user from group %s"
msgstr "Ðевозможно удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· группы %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Отключить"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Включить"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Ошибка"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Сохранение"
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__Ñзык_имÑ__"
@@ -104,18 +134,22 @@ msgstr "Добавить Ваше приложение"
msgid "More Apps"
msgstr "Больше приложений"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Выбрать приложение"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "ОбратитеÑÑŒ к Ñтранице приложений на apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Обновить"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
@@ -145,83 +179,87 @@ msgstr "КоммерчеÑÐºÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Ð’Ñ‹ иÑпользовали <strong>%s</strong> из возможных <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Клиенты"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Загрузить клиент под Android "
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Загрузить клиент под iOS "
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Пароль"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Ваш пароль был изменен"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ðевозможно изменить Ваш пароль"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Текущий пароль"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Ðовый пароль"
-#: templates/personal.php:26
-msgid "show"
-msgstr "показать"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Изменить пароль"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "ÐÐ´Ñ€ÐµÑ Ð’Ð°ÑˆÐµÐ¹ Ñлектронной почты"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Введите Ð°Ð´Ñ€ÐµÑ Ñлектронной почты Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Язык"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Помогите перевеÑти"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "ИÑпользуйте Ñтот Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº ownCloud в Вашем файловом менеджере"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "ВерÑиÑ"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -231,11 +269,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "Разработанный <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "ИмÑ"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Группы"
@@ -245,28 +283,36 @@ msgstr "Создать"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Хранилище по умолчанию"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Ðеограниченный"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Другой"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Группа Admin"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
+msgstr "Хранилище"
+
+#: templates/users.php:97
+msgid "change display name"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:101
+msgid "set new password"
+msgstr "назначить новый пароль"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "По умолчанию"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Удалить"
diff --git a/l10n/ru_RU/user_ldap.po b/l10n/ru_RU/user_ldap.po
index 4a514279ab3..0b6b9ebf1a5 100644
--- a/l10n/ru_RU/user_ldap.po
+++ b/l10n/ru_RU/user_ldap.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-19 00:03+0100\n"
-"PO-Revision-Date: 2012-12-18 08:59+0000\n"
-"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +19,58 @@ msgstr ""
"Language: ru_RU\n"
"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);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Удаление не удалоÑÑŒ"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +80,232 @@ msgstr "<b>Предупреждение:</b> ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ user_ldap и u
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Предупреждение:</b> Ðеобходимый PHP LDAP-модуль не уÑтановлен, backend не будет работать. ПожалуйÑта, обратитеÑÑŒ к ÑиÑтемному админиÑтратору, чтобы уÑтановить его."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Предупреждение:</b> Модуль PHP LDAP не уÑтановлен, бÑкÑнд не будет работать. ПожалуйÑта, обратитеÑÑŒ к Вашему ÑиÑтемному админиÑтратору, чтобы уÑтановить его."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "ХоÑÑ‚"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Ð’Ñ‹ можете пропуÑтить протокол, еÑли Вам не требуетÑÑ SSL. Затем начните Ñ ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "База DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Одно базовое DN на линию"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Ð’Ñ‹ можете задать Base DN Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ и групп во вкладке «Дополнительно»"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN пользователÑ"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN клиентÑкого пользователÑ, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ должна оÑущеÑтвлÑтьÑÑ Ð¿Ñ€Ð¸Ð²Ñзка, например, uid=agent,dc=example,dc=com. Ð”Ð»Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾Ð³Ð¾ доÑтупа оÑтавьте Ð¿Ð¾Ð»Ñ DN и Пароль пуÑтыми."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Пароль"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Ð”Ð»Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾Ð³Ð¾ доÑтупа оÑтавьте Ð¿Ð¾Ð»Ñ DN и пароль пуÑтыми."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Фильтр имен пользователей"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Задает фильтр, применÑемый при загрузке пользователÑ. %%uid заменÑет Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸ входе."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "иÑпользуйте %%uid заполнитель, например, \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Фильтр ÑпиÑка пользователей"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Задает фильтр, применÑемый при получении пользователей."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "без каких-либо заполнителей, например, \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Групповой фильтр"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Задает фильтр, применÑемый при получении групп."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "без каких-либо заполнителей, например, \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Порт"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Базовое дерево пользователей"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Базовое дерево групп"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "СвÑзь член-группа"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "ИÑпользовать TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ðе иÑпользуйте Ñто SSL-Ñоединений, Ñто не будет выполнено."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "ÐечувÑтвительный к региÑтру LDAP-Ñервер (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Выключить проверку Ñертификата SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "ЕÑли Ñоединение работает только Ñ Ñтой опцией, импортируйте SSL-Ñертификат LDAP Ñервера в ваш ownCloud Ñервер."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Ðе рекомендовано, иÑпользуйте только Ð´Ð»Ñ Ñ‚ÐµÑтированиÑ."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "в Ñекундах. Изменение очищает кÑш."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Поле, отображаемое как Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Ðтрибут LDAP, иÑпользуемый Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Базовое дерево пользователей"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Одно пользовательÑкое базовое DN на линию"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Поле, отображаемое как Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Ðтрибут LDAP, иÑпользуемый Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð³Ð¾ имени в ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Базовое дерево групп"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Одно групповое базовое DN на линию"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "СвÑзь член-группа"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "в байтах"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "в Ñекундах. Изменение очищает кÑш."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "ОÑтавьте пуÑтым под Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (по умолчанию). Ð’ противном Ñлучае задайте LDAP/AD атрибут."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Помощь"
diff --git a/l10n/ru_RU/user_webdavauth.po b/l10n/ru_RU/user_webdavauth.po
index 5308dbe4c2d..48ae554ac04 100644
--- a/l10n/ru_RU/user_webdavauth.po
+++ b/l10n/ru_RU/user_webdavauth.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
# <skoptev@ukr.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-21 00:10+0100\n"
-"PO-Revision-Date: 2012-12-20 06:57+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 10:01+0000\n"
"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
@@ -19,13 +20,17 @@ msgstr ""
"Language: ru_RU\n"
"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);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV аутентификациÑ"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/si_LK/core.po b/l10n/si_LK/core.po
index ec48367e164..d628f447037 100644
--- a/l10n/si_LK/core.po
+++ b/l10n/si_LK/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -20,24 +20,24 @@ msgstr ""
"Language: si_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,7 +53,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -82,59 +83,135 @@ msgstr "මක෠දà·à¶¸à·“ම සඳහ෠ප්â€à¶»à·€à¶»à·Šà¶œà¶ºà¶±à·Š
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "ඉරිදà·"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "සඳුදà·"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "අඟහරුවà·à¶¯à·"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "බදà·à¶¯à·"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "à¶¶à·Šâ€à¶»à·„ස්පතින්දà·"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "සිකුරà·à¶¯à·"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "සෙනසුරà·à¶¯à·"
+
+#: js/config.php:33
+msgid "January"
+msgstr "ජනවà·à¶»à·’"
+
+#: js/config.php:33
+msgid "February"
+msgstr "පෙබරවà·à¶»à·’"
+
+#: js/config.php:33
+msgid "March"
+msgstr "මà·à¶»à·Šà¶­à·”"
+
+#: js/config.php:33
+msgid "April"
+msgstr "à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š"
+
+#: js/config.php:33
+msgid "May"
+msgstr "මà·à¶ºà·’"
+
+#: js/config.php:33
+msgid "June"
+msgstr "ජූනි"
+
+#: js/config.php:33
+msgid "July"
+msgstr "ජූලි"
+
+#: js/config.php:33
+msgid "August"
+msgstr "à¶…à¶œà·à·ƒà·Šà¶­à·”"
+
+#: js/config.php:33
+msgid "September"
+msgstr "à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š"
+
+#: js/config.php:33
+msgid "October"
+msgstr "ඔක්තà·à¶¶à¶»à·Š"
+
+#: js/config.php:33
+msgid "November"
+msgstr "නොවà·à¶¸à·Šà¶¶à¶»à·Š"
+
+#: js/config.php:33
+msgid "December"
+msgstr "දෙසà·à¶¸à·Šà¶¶à¶»à·Š"
+
+#: js/js.js:284
msgid "Settings"
msgstr "à·ƒà·à¶šà·ƒà·”ම්"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "තත්පරයන්ට පෙර"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 මිනිත්තුවකට පෙර"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "අද"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "ඊයේ"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "පෙර මà·à·ƒà¶ºà·š"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "මà·à·ƒ කීපයකට පෙර"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "පෙර අවුරුද්දේ"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "අවුරුදු කීපයකට පෙර"
@@ -164,8 +241,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "දà·à·‚යක්"
@@ -177,123 +254,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "බෙද෠හද෠ගන්න"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "බෙදà·à¶œà¶±à·Šà¶±"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "යොමුවක් මඟින් බෙදà·à¶œà¶±à·Šà¶±"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "මුර පදයකින් ආරක්à·à·à¶šà¶»à¶±à·Šà¶±"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "මුර පදය "
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "කල් ඉකුත් විමේ දිනය දමන්න"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "කල් ඉකුත් විමේ දිනය"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "විද්â€à¶ºà·”à¶­à·Š à¶­à·à¶´à·‘à¶½ මඟින් බෙදà·à¶œà¶±à·Šà¶±: "
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "නොබෙදු"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "සංස්කරණය à¶šà·… à·„à·à¶š"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "à¶´à·Šâ€à¶»à·€à·šà· à¶´à·à¶½à¶±à¶º"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "සදන්න"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "යà·à·€à¶­à·Šà¶šà·à¶½à·“à¶± කරන්න"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "මකන්න"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "බෙදà·à·„දà·à¶œà¶±à·Šà¶±"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "මුර පදයකින් ආරක්à·à·à¶šà¶» ඇත"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "කල් ඉකුත් දිනය ඉවත් කිරීමේ දà·à·‚යක්"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "කල් ඉකුත් දිනය ස්ථà·à¶´à¶±à¶º කිරීමේ දà·à·‚යක්"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud මුරපදය à¶´à·Šâ€à¶»à¶­à·Šâ€à¶ºà·à¶»à¶¸à·Šà¶· කරන්න"
@@ -375,7 +470,7 @@ msgstr "à¶´à·Šâ€à¶»à¶·à·šà¶¯à¶ºà¶±à·Š සංස්කරණය"
msgid "Add"
msgstr "එක් කරන්න"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "ආරක්ෂක නිවේදනයක්"
@@ -385,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "ආරක්ෂිත අහඹු සංඛ්â€à¶ºà· à¶‹à¶­à·Šà¶´à·à¶¯à¶šà¶ºà¶šà·Š නොමà·à¶­à·’ නම් ඔබගේ ගිණුමට පහරදෙන අයකුට à¶‘à·„à·’ මුරපද යළි පිහිටුවීමට à¶…à·€à·à·Šâ€à¶º à¶§à·à¶šà¶± පහසුවෙන් සොයà·à¶œà·™à¶± ඔබගේ ගිණුම à¶´à·à·„à·à¶»à¶œà¶­ à·„à·à¶š."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "ඔබගේ දත්ත ඩිරෙක්ටරිය හ෠ගොනුවලට අන්තර්ජà·à¶½à¶ºà·™à¶±à·Š පිවිසිය à·„à·à¶š. ownCloud සපය෠ඇති .htaccess ගොනුව à¶šà·Šâ€à¶»à·’යà·à¶šà¶»à¶±à·Šà¶±à·š à¶±à·à¶­. à¶…à¶´à·’ තරයේ කිය෠සිටිනුයේ නම්, මෙම දත්ත හ෠ගොනු එසේ පිවිසීමට නොහà·à¶šà·’ වන ලෙස ඔබේ වෙබ් සේවà·à¶¯à·à¶ºà¶šà¶ºà· වින්â€à¶ºà·à·ƒ කරන ලෙස හ෠එම ඩිරෙක්ටරිය වෙබ් මූලයෙන් à¶´à·’à¶§à¶­à¶§ ගෙනයන ලෙසය."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr ""
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "දියුණු/උසස්"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "දත්ත à·†à·à¶½à·Šà¶©à¶»à¶º"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "දත්ත සමුදà·à¶º à·„à·à¶©à¶œà·à·ƒà·“ම"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "à¶·à·à·€à·’ත෠වනු ඇත"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "දත්තගබඩ෠භà·à·€à·’à¶­à·à¶šà¶»à·”"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "දත්තගබඩà·à·€à·š මුරපදය"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "දත්තගබඩà·à·€à·š නම"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "දත්තගබඩ෠සේවà·à¶¯à·à¶ºà¶šà¶ºà·"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "ස්ථà·à¶´à¶±à¶º කිරීම අවසන් කරන්න"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "ඉරිදà·"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "සඳුදà·"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "අඟහරුවà·à¶¯à·"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "බදà·à¶¯à·"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "à¶¶à·Šâ€à¶»à·„ස්පතින්දà·"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "සිකුරà·à¶¯à·"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "සෙනසුරà·à¶¯à·"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "ජනවà·à¶»à·’"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "පෙබරවà·à¶»à·’"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "මà·à¶»à·Šà¶­à·”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "මà·à¶ºà·’"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "ජූනි"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "ජූලි"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "à¶…à¶œà·à·ƒà·Šà¶­à·”"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "ඔක්තà·à¶¶à¶»à·Š"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "නොවà·à¶¸à·Šà¶¶à¶»à·Š"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "දෙසà·à¶¸à·Šà¶¶à¶»à·Š"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "ඔබට à¶´à·à¶½à¶±à¶º à¶šà·… à·„à·à¶šà·’ වෙබ් සේවà·à·€à¶±à·Š"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "නික්මීම"
@@ -547,17 +570,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "මුරපදය අමතකද?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "මතක à¶­à¶¶à·à¶œà¶±à·Šà¶±"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "à¶´à·Šâ€à¶»à·€à·šà·à·€à¶±à·Šà¶±"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "ඔබ නික්මී ඇත."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,17 +594,3 @@ msgstr "à¶Šà·…à¶Ÿ"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/si_LK/files.po b/l10n/si_LK/files.po
index b905772406b..2277e5ab288 100644
--- a/l10n/si_LK/files.po
+++ b/l10n/si_LK/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -24,55 +24,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "ගොනුවක් උඩුගත නොවුනි. නොහà·à¶³à·’නු දà·à·‚යක්"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "නිවà·à¶»à¶¯à·’ à·€ ගොනුව උඩුගත කෙරිනි"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "උඩුගත à¶šà·… ගොනුවේ විà·à·à¶½à¶­à·Šà·€à¶º HTML à¶´à·à¶»à¶¸à¶ºà·š නියම à¶šà·… ඇති MAX_FILE_SIZE විà·à·à¶½à¶­à·Šà·€à¶ºà¶§ වඩ෠වà·à¶©à·’ය"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "උඩුගත කළ ගොනුවේ කොටසක් පමණක් උඩුගත විය"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "කිසිදු ගොනවක් උඩුගත නොවිනි"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "à¶­à·à·€à¶šà·à¶½à·’à¶š ෆොල්ඩරයක් සොයà·à¶œà¶­ නොහà·à¶š"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "à¶­à·à¶§à·’ගත කිරීම à¶…à·ƒà·à¶»à·Šà¶®à¶šà¶ºà·’"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -80,149 +80,152 @@ msgstr ""
msgid "Files"
msgstr "ගොනු"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "නොබෙදු"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "මකන්න"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "à¶±à·à·€à¶­ නම් කරන්න"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "à¶´à·Šâ€à¶»à¶­à·’ස්ථà·à¶´à¶±à¶º කරන්න"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "නමක් යà·à¶¢à¶±à· කරන්න"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "අත් හරින්න"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "නිෂ්ප්â€à¶»à¶· කරන්න"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "ගොනුවක් සෑදෙමින් පවතී. කෙටි වේලà·à·€à¶šà·Š ගත විය à·„à·à¶š"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "උඩුගත කිරීමේ දà·à·à¶ºà¶šà·Š"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "වසන්න"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 ගොනුවක් උඩගත කෙරේ"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "උඩුගත කිරීම අත් හරින්න ලදී"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "උඩුගතකිරීමක් සිදුවේ. පිටුව à·„à·à¶» යà·à¶¸à·™à¶±à·Š එය à¶±à·à·€à¶­à·™à¶±à·” ඇත"
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "යොමුව හිස් විය නොහà·à¶š"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "පරීක්ෂ෠කිරීමේදී දà·à·‚යක්"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "නම"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "වෙනස් කළ"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 ෆොල්ඩරයක්"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 ගොනුවක්"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "උඩුගත කිරීම"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "ගොනු පරිහරණය"
@@ -271,36 +274,44 @@ msgstr "à·†à·à¶½à·Šà¶©à¶»à¶º"
msgid "From link"
msgstr "යොමුවෙන්"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "උඩුගත කිරීම"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "උඩුගත කිරීම අත් හරින්න"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "මෙහි කිසිවක් නොමà·à¶­. යමක් උඩුගත කරන්න"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "à¶¶à·à¶œà¶­ කිරීම"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "නොබෙදු"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "උඩුගත කිරීම විà·à·à¶½ à·€à·à¶©à·’ය"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ඔබ උඩුගත කිරීමට à¶­à·à¶­à·Š කරන ගොනු මෙම සේවà·à¶¯à·à¶ºà¶šà¶ºà· උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විà·à·à¶½à¶­à·Šà·€à¶ºà¶§ වඩ෠වà·à¶©à·’ය"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "ගොනු පරික්ෂ෠කෙරේ. මඳක් à¶»à·à¶³à·“ සිටින්න"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "වර්තමà·à¶± පරික්ෂà·à·€"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/si_LK/files_encryption.po b/l10n/si_LK/files_encryption.po
index 7e40f2c3ea7..7af077ac2a7 100644
--- a/l10n/si_LK/files_encryption.po
+++ b/l10n/si_LK/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-20 02:02+0200\n"
-"PO-Revision-Date: 2012-10-19 11:00+0000\n"
-"Last-Translator: Anushke Guneratne <anushke@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: si_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "ගුප්ත කේතනය"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "මෙම ගොනු වර්ග ගුප්ත කේතනය කිරීමෙන් à¶¶à·à·„à·à¶»à·€ තබන්න"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "කිසිවක් à¶±à·à¶­"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "ගුප්ත කේතනය සක්â€à¶»à·’ය කරන්න"
diff --git a/l10n/si_LK/files_trashbin.po b/l10n/si_LK/files_trashbin.po
new file mode 100644
index 00000000000..a1174c1e82c
--- /dev/null
+++ b/l10n/si_LK/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: si_LK\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "නම"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 ෆොල්ඩරයක්"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 ගොනුවක්"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/si_LK/files_versions.po b/l10n/si_LK/files_versions.po
index 1d5285a2554..a7a9fdc4990 100644
--- a/l10n/si_LK/files_versions.po
+++ b/l10n/si_LK/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-20 02:02+0200\n"
-"PO-Revision-Date: 2012-10-19 10:27+0000\n"
-"Last-Translator: Anushke Guneratne <anushke@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: si_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "සියලු අනුවà·à¶¯ අවලංගු කරන්න"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "ඉතිහà·à·ƒà¶º"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "අනුවà·à¶¯"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "මෙයින් ඔබගේ ගොනුවේ රක්à·à·’à¶­ කරනු à¶½à·à¶¶à·” අනුවà·à¶¯ සියල්ල මක෠දමනු à¶½à·à¶¶à·š"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/si_LK/lib.po b/l10n/si_LK/lib.po
index f798fa5f24e..d914ff96880 100644
--- a/l10n/si_LK/lib.po
+++ b/l10n/si_LK/lib.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -19,51 +19,55 @@ msgstr ""
"Language: si_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "උදව්"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "පෞද්ගලික"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "සිටුවම්"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "පරිà·à·“ලකයන්"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "යෙදුම්"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "පරිපà·à¶½à¶š"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP à¶·à·à¶œà¶­ කිරීම් à¶…à¶šà·Šâ€à¶»à·’යයි"
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "ගොනු එකින් à¶‘à¶š à¶·à·à¶œà¶­ යුතුයි"
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "ගොනු වෙතට à¶±à·à·€à¶­ යන්න"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "à¶­à·à¶»à·à¶œà¶­à·Š ගොනු ZIP ගොනුවක් à¶­à·à¶±à·“මට විà·à·à¶½ à·€à·à¶©à·’ය."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "යෙදුම සක්â€à¶»à·’ය à¶šà¶» නොමà·à¶­"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "සත්â€à¶ºà·à¶´à¶±à¶º කිරීමේ දà·à·à¶ºà¶šà·Š"
@@ -83,55 +87,152 @@ msgstr "පෙළ"
msgid "Images"
msgstr "අනු රූ"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "තත්පරයන්ට පෙර"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 මිනිත්තුවකට පෙර"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d මිනිත්තුවන්ට පෙර"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "අද"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "ඊයේ"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d දිනකට පෙර"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "පෙර මà·à·ƒà¶ºà·š"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "පෙර අවුරුද්දේ"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "අවුරුදු කීපයකට පෙර"
diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po
index c6443f18bff..251d262f661 100644
--- a/l10n/si_LK/settings.po
+++ b/l10n/si_LK/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "සත්â€à¶ºà·à¶´à¶± දà·à·‚යක්"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "à¶šà¶«à·Šà¶©à·à¶ºà¶¸ දà·à¶±à¶§à¶¸à¶­à·Š à¶­à·’à¶¶à·š"
@@ -32,7 +41,7 @@ msgstr "à¶šà¶«à·Šà¶©à·à¶ºà¶¸ දà·à¶±à¶§à¶¸à¶­à·Š à¶­à·’à¶¶à·š"
msgid "Unable to add group"
msgstr "à¶šà·à¶«à¶©à¶ºà¶šà·Š à¶‘à¶šà·Š à¶šà·… නොහà·à¶šà·’ විය"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "යෙදුම සක්â€à¶»à·“ය à¶šà·… නොහà·à¶šà·’ විය."
@@ -44,22 +53,10 @@ msgstr "වි-à¶­à·à¶´à·‘à¶½ සුරකින ලදී"
msgid "Invalid email"
msgstr "අවලංගු වි-à¶­à·à¶´à·‘à¶½"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "විවෘත à·„à·à¶³à·”නුම à¶±à·à¶­à·„ොත් OpenID වෙනස්විය."
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "අවලංගු අයදුම"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "à¶šà¶«à·Šà¶©à·à¶ºà¶¸ මà·à¶šà·“මට නොහà·à¶š"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "සත්â€à¶ºà·à¶´à¶± දà·à·‚යක්"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "පරිà·à·“ලකය෠මà·à¶šà·“මට නොහà·à¶š"
@@ -68,6 +65,10 @@ msgstr "පරිà·à·“ලකය෠මà·à¶šà·“මට නොහà·à¶š"
msgid "Language changed"
msgstr "à¶·à·à·‚à·à·€ à·à·€à¶±à·ƒà·Š කිරීම"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "අවලංගු අයදුම"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -82,19 +83,47 @@ msgstr "පරිà·à·“ලකය෠%s à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶§ à¶‘à¶šà¶­à·” à¶š
msgid "Unable to remove user from group %s"
msgstr "පරිà·à·“ලකය෠%s à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·’න් ඉවත් à¶šà·… නොහà·à¶š"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "à¶…à¶šà·Šâ€à¶»à·’ය කරන්න"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "à¶šà·Šâ€à¶»à·’යත්මක කරන්න"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "දà·à·‚යක්"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "සුරà·à¶šà·™à¶¸à·’න් පවතී..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr ""
@@ -106,18 +135,22 @@ msgstr "යෙදුමක් එක් කිරීම"
msgid "More Apps"
msgstr "තවත් යෙදුම්"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "යෙදුමක් තොරන්න"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "යà·à·€à¶­à·Šà¶šà·à¶½ කිරීම"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -147,83 +180,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "සේවà·à¶½à·à¶·à·“න්"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "මුරපදය"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "ඔබගේ මුර පදය වෙනස් කෙරුණි"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "මුර පදය වෙනස් à¶šà·… නොහà·à¶šà·’ විය"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "වත්මන් මුරපදය"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "නව මුරපදය"
-#: templates/personal.php:26
-msgid "show"
-msgstr "à¶´à·Šâ€à¶»à¶¯à¶»à·Šà·à¶±à¶º කිරීම"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "මුරපදය වෙනස් කිරීම"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "විද්â€à¶ºà·”à¶­à·Š à¶­à·à¶´à·‘à¶½"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "ඔබගේ විද්â€à¶ºà·”à¶­à·Š à¶­à·à¶´à·‘à¶½"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "මුරපද à¶´à·Šâ€à¶»à¶­à·’ස්ථà·à¶´à¶±à¶º සඳහ෠විද්â€à¶ºà·”à¶­à·Š à¶­à·à¶´à·à¶½à·Š විස්තර ලබ෠දෙන්න"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "à¶·à·à·‚à·à·€"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "පරිවර්ථන සහය"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "නිපදන ලද්දේ <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> යටතේ."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "à¶±à·à¶¸à¶º"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "සමූහය"
@@ -249,26 +286,34 @@ msgstr "තනන්න"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "වෙනත්"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "à¶šà·à¶«à·Šà¶© පරිපà·à¶½à¶š"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "මක෠දමනවà·"
diff --git a/l10n/si_LK/user_ldap.po b/l10n/si_LK/user_ldap.po
index f44ac30b3ea..992b171e909 100644
--- a/l10n/si_LK/user_ldap.po
+++ b/l10n/si_LK/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: si_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "මකà·à¶¯à·à¶¸à·“ම à¶…à·ƒà·à¶»à·Šà¶®à¶šà¶ºà·’"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "සත්කà·à¶»à¶šà¶º"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "SSL à¶…à·€à·à·Šâ€à¶ºà¶º වන විට පමණක් à·„à·à¶», අන් අවස්ථà·à·€à¶±à·Šà·„ිදී à¶´à·Šâ€à¶»à·œà¶§à·œà¶šà·à¶½à¶º à¶…à¶­à·Š à·„à·à¶»à·’ය à·„à·à¶š. à¶·à·à·€à·’ත෠කරන විට ldaps:// ලෙස ආරම්භ කරන්න"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "මුර පදය"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "පරිà·à·“ලක පිවිසුම් පෙරහන"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "පරිà·à·“ලක à¶½à·à¶ºà·’ස්තු පෙරහන"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·Š පෙරහන"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·Š සොය෠ලබà·à¶œà¶±à·Šà¶±à· විට, යොදන පෙරහන නියම කරයි"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "තොට"
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "TLS à¶·à·à·€à·’ත෠කරන්න"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "නිර්දේ෠කළ නොහà·à¶š. පරීක්ෂණ සඳහ෠පමණක් à¶·à·à·€à·’à¶­ කරන්න"
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "උදව්"
diff --git a/l10n/si_LK/user_webdavauth.po b/l10n/si_LK/user_webdavauth.po
index b97c5beb1cc..a6141d359c9 100644
--- a/l10n/si_LK/user_webdavauth.po
+++ b/l10n/si_LK/user_webdavauth.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: si_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/sk/core.po b/l10n/sk/core.po
new file mode 100644
index 00000000000..5986e77ed44
--- /dev/null
+++ b/l10n/sk/core.po
@@ -0,0 +1,593 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ajax/share.php:85
+#, php-format
+msgid "User %s shared a file with you"
+msgstr ""
+
+#: ajax/share.php:87
+#, php-format
+msgid "User %s shared a folder with you"
+msgstr ""
+
+#: ajax/share.php:89
+#, php-format
+msgid ""
+"User %s shared the file \"%s\" with you. It is available for download here: "
+"%s"
+msgstr ""
+
+#: ajax/share.php:91
+#, php-format
+msgid ""
+"User %s shared the folder \"%s\" with you. It is available for download "
+"here: %s"
+msgstr ""
+
+#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
+msgid "Category type not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:30
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:37
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
+#: ajax/vcategories/favorites.php:24
+#: ajax/vcategories/removeFromFavorites.php:26
+msgid "Object type not provided."
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:30
+#: ajax/vcategories/removeFromFavorites.php:30
+#, php-format
+msgid "%s ID not provided."
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:35
+#, php-format
+msgid "Error adding %s to favorites."
+msgstr ""
+
+#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/vcategories/removeFromFavorites.php:35
+#, php-format
+msgid "Error removing %s from favorites."
+msgstr ""
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:284
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:764
+msgid "seconds ago"
+msgstr ""
+
+#: js/js.js:765
+msgid "1 minute ago"
+msgstr ""
+
+#: js/js.js:766
+msgid "{minutes} minutes ago"
+msgstr ""
+
+#: js/js.js:767
+msgid "1 hour ago"
+msgstr ""
+
+#: js/js.js:768
+msgid "{hours} hours ago"
+msgstr ""
+
+#: js/js.js:769
+msgid "today"
+msgstr ""
+
+#: js/js.js:770
+msgid "yesterday"
+msgstr ""
+
+#: js/js.js:771
+msgid "{days} days ago"
+msgstr ""
+
+#: js/js.js:772
+msgid "last month"
+msgstr ""
+
+#: js/js.js:773
+msgid "{months} months ago"
+msgstr ""
+
+#: js/js.js:774
+msgid "months ago"
+msgstr ""
+
+#: js/js.js:775
+msgid "last year"
+msgstr ""
+
+#: js/js.js:776
+msgid "years ago"
+msgstr ""
+
+#: js/oc-dialogs.js:126
+msgid "Choose"
+msgstr ""
+
+#: js/oc-dialogs.js:146 js/oc-dialogs.js:166
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:162
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:163
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:180
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
+#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
+msgid "The object type is not specified."
+msgstr ""
+
+#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
+msgid "Error"
+msgstr ""
+
+#: js/oc-vcategories.js:179
+msgid "The app name is not specified."
+msgstr ""
+
+#: js/oc-vcategories.js:194
+msgid "The required file {file} is not installed!"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
+msgid "Error while sharing"
+msgstr ""
+
+#: js/share.js:152
+msgid "Error while unsharing"
+msgstr ""
+
+#: js/share.js:159
+msgid "Error while changing permissions"
+msgstr ""
+
+#: js/share.js:168
+msgid "Shared with you and the group {group} by {owner}"
+msgstr ""
+
+#: js/share.js:170
+msgid "Shared with you by {owner}"
+msgstr ""
+
+#: js/share.js:175
+msgid "Share with"
+msgstr ""
+
+#: js/share.js:180
+msgid "Share with link"
+msgstr ""
+
+#: js/share.js:183
+msgid "Password protect"
+msgstr ""
+
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
+msgid "Password"
+msgstr ""
+
+#: js/share.js:189
+msgid "Email link to person"
+msgstr ""
+
+#: js/share.js:190
+msgid "Send"
+msgstr ""
+
+#: js/share.js:194
+msgid "Set expiration date"
+msgstr ""
+
+#: js/share.js:195
+msgid "Expiration date"
+msgstr ""
+
+#: js/share.js:227
+msgid "Share via email:"
+msgstr ""
+
+#: js/share.js:229
+msgid "No people found"
+msgstr ""
+
+#: js/share.js:256
+msgid "Resharing is not allowed"
+msgstr ""
+
+#: js/share.js:292
+msgid "Shared in {item} with {user}"
+msgstr ""
+
+#: js/share.js:313
+msgid "Unshare"
+msgstr ""
+
+#: js/share.js:325
+msgid "can edit"
+msgstr ""
+
+#: js/share.js:327
+msgid "access control"
+msgstr ""
+
+#: js/share.js:330
+msgid "create"
+msgstr ""
+
+#: js/share.js:333
+msgid "update"
+msgstr ""
+
+#: js/share.js:336
+msgid "delete"
+msgstr ""
+
+#: js/share.js:339
+msgid "share"
+msgstr ""
+
+#: js/share.js:373 js/share.js:558
+msgid "Password protected"
+msgstr ""
+
+#: js/share.js:571
+msgid "Error unsetting expiration date"
+msgstr ""
+
+#: js/share.js:583
+msgid "Error setting expiration date"
+msgstr ""
+
+#: js/share.js:598
+msgid "Sending ..."
+msgstr ""
+
+#: js/share.js:609
+msgid "Email sent"
+msgstr ""
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
+#: lostpassword/controller.php:47
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:2
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Reset email send."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Request failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39
+#: templates/login.php:28
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
+#: strings.php:5
+msgid "Personal"
+msgstr ""
+
+#: strings.php:6
+msgid "Users"
+msgstr ""
+
+#: strings.php:7
+msgid "Apps"
+msgstr ""
+
+#: strings.php:8
+msgid "Admin"
+msgstr ""
+
+#: strings.php:9
+msgid "Help"
+msgstr ""
+
+#: templates/403.php:12
+msgid "Access forbidden"
+msgstr ""
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:4
+msgid "Edit categories"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:16
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23 templates/installation.php:30
+msgid "Security Warning"
+msgstr ""
+
+#: templates/installation.php:24
+msgid ""
+"No secure random number generator is available, please enable the PHP "
+"OpenSSL extension."
+msgstr ""
+
+#: templates/installation.php:25
+msgid ""
+"Without a secure random number generator an attacker may be able to predict "
+"password reset tokens and take over your account."
+msgstr ""
+
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
+#: templates/installation.php:32
+msgid ""
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
+
+#: templates/installation.php:36
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:52
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:54
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:61
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:109
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:113
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:117
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:125
+msgid "Database tablespace"
+msgstr ""
+
+#: templates/installation.php:131
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:136
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:33
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:48
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:10
+msgid "Automatic logon rejected!"
+msgstr ""
+
+#: templates/login.php:11
+msgid ""
+"If you did not change your password recently, your account may be "
+"compromised!"
+msgstr ""
+
+#: templates/login.php:13
+msgid "Please change your password to secure your account again."
+msgstr ""
+
+#: templates/login.php:19
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:41
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:43
+msgid "Log in"
+msgstr ""
+
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
+
+#: templates/update.php:3
+#, php-format
+msgid "Updating ownCloud to version %s, this may take a while."
+msgstr ""
diff --git a/l10n/sk/files.po b/l10n/sk/files.po
new file mode 100644
index 00000000000..8f6e6f689ee
--- /dev/null
+++ b/l10n/sk/files.po
@@ -0,0 +1,315 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ajax/move.php:17
+#, php-format
+msgid "Could not move %s - File with this name already exists"
+msgstr ""
+
+#: ajax/move.php:27 ajax/move.php:30
+#, php-format
+msgid "Could not move %s"
+msgstr ""
+
+#: ajax/rename.php:22 ajax/rename.php:25
+msgid "Unable to rename file"
+msgstr ""
+
+#: ajax/upload.php:19
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:27
+msgid ""
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
+msgstr ""
+
+#: ajax/upload.php:29
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:31
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:32
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:33
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:34
+msgid "Failed to write to disk"
+msgstr ""
+
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr ""
+
+#: ajax/upload.php:83
+msgid "Invalid directory."
+msgstr ""
+
+#: appinfo/app.php:10
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
+
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
+msgid "Delete"
+msgstr ""
+
+#: js/fileactions.js:184
+msgid "Rename"
+msgstr ""
+
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "{new_name} already exists"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:253
+msgid "suggest name"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:295
+msgid "replaced {new_name}"
+msgstr ""
+
+#: js/filelist.js:295 js/filelist.js:297
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:297
+msgid "replaced {new_name} with {old_name}"
+msgstr ""
+
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
+
+#: js/files.js:52
+msgid "'.' is an invalid file name."
+msgstr ""
+
+#: js/files.js:56
+msgid "File name cannot be empty."
+msgstr ""
+
+#: js/files.js:64
+msgid ""
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
+"allowed."
+msgstr ""
+
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
+
+#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:261
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:272
+msgid "Close"
+msgstr ""
+
+#: js/files.js:311
+msgid "1 file uploading"
+msgstr ""
+
+#: js/files.js:314 js/files.js:369 js/files.js:384
+msgid "{count} files uploading"
+msgstr ""
+
+#: js/files.js:387 js/files.js:422
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:496
+msgid ""
+"File upload is in progress. Leaving the page now will cancel the upload."
+msgstr ""
+
+#: js/files.js:569
+msgid "URL cannot be empty."
+msgstr ""
+
+#: js/files.js:574
+msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
+msgstr ""
+
+#: js/files.js:947 templates/index.php:67
+msgid "Name"
+msgstr ""
+
+#: js/files.js:948 templates/index.php:78
+msgid "Size"
+msgstr ""
+
+#: js/files.js:949 templates/index.php:80
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:968
+msgid "1 folder"
+msgstr ""
+
+#: js/files.js:970
+msgid "{count} folders"
+msgstr ""
+
+#: js/files.js:978
+msgid "1 file"
+msgstr ""
+
+#: js/files.js:980
+msgid "{count} files"
+msgstr ""
+
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:10
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:15
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:17
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:20
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:22
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/admin.php:26
+msgid "Save"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:12
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:14
+msgid "From link"
+msgstr ""
+
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:73
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:107
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:112
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:115
+msgid "Current scanning"
+msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sk/files_encryption.po b/l10n/sk/files_encryption.po
new file mode 100644
index 00000000000..eb687048cab
--- /dev/null
+++ b/l10n/sk/files_encryption.po
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: templates/settings-personal.php:4 templates/settings.php:5
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "None"
+msgstr ""
diff --git a/l10n/sk/files_external.po b/l10n/sk/files_external.po
new file mode 100644
index 00000000000..3c72b5b4714
--- /dev/null
+++ b/l10n/sk/files_external.po
@@ -0,0 +1,120 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23
+msgid "Access granted"
+msgstr ""
+
+#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86
+msgid "Error configuring Dropbox storage"
+msgstr ""
+
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+msgid "Grant access"
+msgstr ""
+
+#: js/dropbox.js:73 js/google.js:72
+msgid "Fill out all required fields"
+msgstr ""
+
+#: js/dropbox.js:85
+msgid "Please provide a valid Dropbox app key and secret."
+msgstr ""
+
+#: js/google.js:26 js/google.js:73 js/google.js:78
+msgid "Error configuring Google Drive storage"
+msgstr ""
+
+#: lib/config.php:405
+msgid ""
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
+"is not possible. Please ask your system administrator to install it."
+msgstr ""
+
+#: lib/config.php:406
+msgid ""
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
+" of FTP shares is not possible. Please ask your system administrator to "
+"install it."
+msgstr ""
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:8 templates/settings.php:22
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:86
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:95
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:108 templates/settings.php:109
+#: templates/settings.php:144 templates/settings.php:145
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:124
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:125
+msgid "Allow users to mount their own external storage"
+msgstr ""
+
+#: templates/settings.php:136
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:153
+msgid "Import Root Certificate"
+msgstr ""
diff --git a/l10n/sk/files_sharing.po b/l10n/sk/files_sharing.po
new file mode 100644
index 00000000000..942e60b0498
--- /dev/null
+++ b/l10n/sk/files_sharing.po
@@ -0,0 +1,48 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2012-08-12 22:35+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: templates/authenticate.php:4
+msgid "Password"
+msgstr ""
+
+#: templates/authenticate.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/public.php:9
+#, php-format
+msgid "%s shared the folder %s with you"
+msgstr ""
+
+#: templates/public.php:11
+#, php-format
+msgid "%s shared the file %s with you"
+msgstr ""
+
+#: templates/public.php:14 templates/public.php:30
+msgid "Download"
+msgstr ""
+
+#: templates/public.php:29
+msgid "No preview available for"
+msgstr ""
+
+#: templates/public.php:35
+msgid "web services under your control"
+msgstr ""
diff --git a/l10n/sk/files_trashbin.po b/l10n/sk/files_trashbin.po
new file mode 100644
index 00000000000..86550447566
--- /dev/null
+++ b/l10n/sk/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sk/files_versions.po b/l10n/sk/files_versions.po
new file mode 100644
index 00000000000..dd26d70a1cc
--- /dev/null
+++ b/l10n/sk/files_versions.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
+msgstr ""
+
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Files Versioning"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Enable"
+msgstr ""
diff --git a/l10n/sk/lib.po b/l10n/sk/lib.po
new file mode 100644
index 00000000000..598f2b64413
--- /dev/null
+++ b/l10n/sk/lib.po
@@ -0,0 +1,253 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: app.php:339
+msgid "Help"
+msgstr ""
+
+#: app.php:346
+msgid "Personal"
+msgstr ""
+
+#: app.php:351
+msgid "Settings"
+msgstr ""
+
+#: app.php:356
+msgid "Users"
+msgstr ""
+
+#: app.php:363
+msgid "Apps"
+msgstr ""
+
+#: app.php:365
+msgid "Admin"
+msgstr ""
+
+#: files.php:202
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:203
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:203 files.php:228
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:227
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:62 json.php:73
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: search/provider/file.php:17 search/provider/file.php:35
+msgid "Files"
+msgstr ""
+
+#: search/provider/file.php:26 search/provider/file.php:33
+msgid "Text"
+msgstr ""
+
+#: search/provider/file.php:29
+msgid "Images"
+msgstr ""
+
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:114
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:115
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:116
+msgid "1 hour ago"
+msgstr ""
+
+#: template.php:117
+#, php-format
+msgid "%d hours ago"
+msgstr ""
+
+#: template.php:118
+msgid "today"
+msgstr ""
+
+#: template.php:119
+msgid "yesterday"
+msgstr ""
+
+#: template.php:120
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:121
+msgid "last month"
+msgstr ""
+
+#: template.php:122
+#, php-format
+msgid "%d months ago"
+msgstr ""
+
+#: template.php:123
+msgid "last year"
+msgstr ""
+
+#: template.php:124
+msgid "years ago"
+msgstr ""
+
+#: updater.php:75
+#, php-format
+msgid "%s is available. Get <a href=\"%s\">more information</a>"
+msgstr ""
+
+#: updater.php:77
+msgid "up to date"
+msgstr ""
+
+#: updater.php:80
+msgid "updates check is disabled"
+msgstr ""
+
+#: vcategories.php:188 vcategories.php:249
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr ""
diff --git a/l10n/sk/settings.po b/l10n/sk/settings.po
new file mode 100644
index 00000000000..30c53684367
--- /dev/null
+++ b/l10n/sk/settings.po
@@ -0,0 +1,316 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ajax/apps/ocs.php:20
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
+#: ajax/creategroup.php:10
+msgid "Group already exists"
+msgstr ""
+
+#: ajax/creategroup.php:19
+msgid "Unable to add group"
+msgstr ""
+
+#: ajax/enableapp.php:11
+msgid "Could not enable app. "
+msgstr ""
+
+#: ajax/lostpassword.php:12
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/removegroup.php:13
+msgid "Unable to delete group"
+msgstr ""
+
+#: ajax/removeuser.php:24
+msgid "Unable to delete user"
+msgstr ""
+
+#: ajax/setlanguage.php:15
+msgid "Language changed"
+msgstr ""
+
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/togglegroups.php:12
+msgid "Admins can't remove themself from the admin group"
+msgstr ""
+
+#: ajax/togglegroups.php:28
+#, php-format
+msgid "Unable to add user to group %s"
+msgstr ""
+
+#: ajax/togglegroups.php:34
+#, php-format
+msgid "Unable to remove user from group %s"
+msgstr ""
+
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:64
+msgid "Enable"
+msgstr ""
+
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:34 personal.php:35
+msgid "__language_name__"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:11
+msgid "More Apps"
+msgstr ""
+
+#: templates/apps.php:24
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:28
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
+msgstr ""
+
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
+#: templates/help.php:3
+msgid "User Documentation"
+msgstr ""
+
+#: templates/help.php:4
+msgid "Administrator Documentation"
+msgstr ""
+
+#: templates/help.php:6
+msgid "Online Documentation"
+msgstr ""
+
+#: templates/help.php:7
+msgid "Forum"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Bugtracker"
+msgstr ""
+
+#: templates/help.php:11
+msgid "Commercial Support"
+msgstr ""
+
+#: templates/personal.php:8
+#, php-format
+msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
+msgstr ""
+
+#: templates/personal.php:14
+msgid "Get the apps to sync your files"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
+
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
+msgid "Password"
+msgstr ""
+
+#: templates/personal.php:37
+msgid "Your password was changed"
+msgstr ""
+
+#: templates/personal.php:38
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:39
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:40
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:42
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:69
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:70
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:76 templates/personal.php:77
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:82
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:87
+msgid "WebDAV"
+msgstr ""
+
+#: templates/personal.php:89
+msgid "Use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/personal.php:98
+msgid "Version"
+msgstr ""
+
+#: templates/personal.php:100
+msgid ""
+"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>."
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Storage"
+msgstr ""
+
+#: templates/users.php:42 templates/users.php:142
+msgid "Unlimited"
+msgstr ""
+
+#: templates/users.php:60 templates/users.php:157
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:84 templates/users.php:121
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:86
+msgid "Storage"
+msgstr ""
+
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
+msgid "Default"
+msgstr ""
+
+#: templates/users.php:165
+msgid "Delete"
+msgstr ""
diff --git a/l10n/sk/user_ldap.po b/l10n/sk/user_ldap.po
new file mode 100644
index 00000000000..3148a062161
--- /dev/null
+++ b/l10n/sk/user_ldap.po
@@ -0,0 +1,309 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
+" experience unexpected behaviour. Please ask your system administrator to "
+"disable one of them."
+msgstr ""
+
+#: templates/settings.php:11
+msgid ""
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:21
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"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."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:25
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:25
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:26
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:26
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
+
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
+
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:39
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:40
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:40
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:40
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
+msgid ""
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
+"attribute."
+msgstr ""
+
+#: templates/settings.php:62
+msgid "Help"
+msgstr ""
diff --git a/l10n/sk/user_webdavauth.po b/l10n/sk/user_webdavauth.po
new file mode 100644
index 00000000000..eb6e13c58c0
--- /dev/null
+++ b/l10n/sk/user_webdavauth.po
@@ -0,0 +1,33 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2012-11-09 09:06+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "URL: http://"
+msgstr ""
+
+#: templates/settings.php:7
+msgid ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr ""
diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po
index 18a21cd799b..d812c7131b1 100644
--- a/l10n/sk_SK/core.po
+++ b/l10n/sk_SK/core.po
@@ -3,17 +3,20 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# georg <georg007@gmail.com>, 2013.
# <intense.feel@gmail.com>, 2011, 2012.
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# <martin.babik@gmail.com>, 2012.
+# <mehturt@gmail.com>, 2013.
# Roman Priesol <roman@priesol.net>, 2012.
# <zatroch.martin@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 13:30+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,29 +24,29 @@ msgstr ""
"Language: sk_SK\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "Používateľ %s zdieľa s Vami súbor"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "Používateľ %s zdieľa s Vami adresár"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "Používateľ %s zdieľa s Vami súbor \"%s\". Môžete si ho stiahnuť tu: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "Používateľ %s zdieľa s Vami adresár \"%s\". Môžete si ho stiahnuť tu: %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -54,8 +57,9 @@ msgid "No category to add?"
msgstr "Žiadna kategória pre pridanie?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Táto kategória už existuje:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Kategéria: %s už existuje."
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -83,59 +87,135 @@ msgstr "Neboli vybrané žiadne kategórie pre odstránenie."
msgid "Error removing %s from favorites."
msgstr "Chyba pri odstraňovaní %s z obľúbených položiek."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Nedeľa"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Pondelok"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Utorok"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Streda"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Å tvrtok"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Piatok"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Sobota"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Január"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Február"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Marec"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Apríl"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Máj"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Jún"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Júl"
+
+#: js/config.php:33
+msgid "August"
+msgstr "August"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Október"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "December"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Nastavenia"
-#: js/js.js:704
+#: js/js.js:767
msgid "seconds ago"
msgstr "pred sekundami"
-#: js/js.js:705
+#: js/js.js:768
msgid "1 minute ago"
msgstr "pred minútou"
-#: js/js.js:706
+#: js/js.js:769
msgid "{minutes} minutes ago"
msgstr "pred {minutes} minútami"
-#: js/js.js:707
+#: js/js.js:770
msgid "1 hour ago"
msgstr "Pred 1 hodinou."
-#: js/js.js:708
+#: js/js.js:771
msgid "{hours} hours ago"
msgstr "Pred {hours} hodinami."
-#: js/js.js:709
+#: js/js.js:772
msgid "today"
msgstr "dnes"
-#: js/js.js:710
+#: js/js.js:773
msgid "yesterday"
msgstr "vÄera"
-#: js/js.js:711
+#: js/js.js:774
msgid "{days} days ago"
msgstr "pred {days} dňami"
-#: js/js.js:712
+#: js/js.js:775
msgid "last month"
msgstr "minulý mesiac"
-#: js/js.js:713
+#: js/js.js:776
msgid "{months} months ago"
msgstr "Pred {months} mesiacmi."
-#: js/js.js:714
+#: js/js.js:777
msgid "months ago"
msgstr "pred mesiacmi"
-#: js/js.js:715
+#: js/js.js:778
msgid "last year"
msgstr "minulý rok"
-#: js/js.js:716
+#: js/js.js:779
msgid "years ago"
msgstr "pred rokmi"
@@ -165,8 +245,8 @@ msgid "The object type is not specified."
msgstr "Nešpecifikovaný typ objektu."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Chyba"
@@ -178,122 +258,140 @@ msgstr "Nešpecifikované meno aplikácie."
msgid "The required file {file} is not installed!"
msgstr "Požadovaný súbor {file} nie je inštalovaný!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Zdieľaj"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Zdieľané"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Chyba poÄas zdieľania"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Chyba poÄas ukonÄenia zdieľania"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Chyba poÄas zmeny oprávnení"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Zdieľané s vami a so skupinou {group} používateľom {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Zdieľané s vami používateľom {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Zdieľať s"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Zdieľať cez odkaz"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Chrániť heslom"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Heslo"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "Odoslať odkaz osobe e-mailom"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "Odoslať"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Nastaviť dátum expirácie"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Dátum expirácie"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Zdieľať cez e-mail:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
-msgstr "Užívateľ nenájdený"
+msgstr "Používateľ nenájdený"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Zdieľanie už zdieľanej položky nie je povolené"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Zdieľané v {item} s {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Zrušiť zdieľanie"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "môže upraviť"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "riadenie prístupu"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "vytvoriť"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "aktualizácia"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "zmazať"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "zdieľať"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Chránené heslom"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Chyba pri odstraňovaní dátumu vypršania platnosti"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Chyba pri nastavení dátumu vypršania platnosti"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
-msgstr ""
+msgstr "Odosielam ..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
-msgstr ""
+msgstr "Email odoslaný"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Aktualizácia nebola úspešná. Problém nahláste na <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Aktualizácia bola úspešná. Presmerovávam na ownCloud."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
@@ -376,7 +474,7 @@ msgstr "Úprava kategórií"
msgid "Add"
msgstr "Pridať"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "BezpeÄnostné varovanie"
@@ -386,147 +484,75 @@ msgid ""
"OpenSSL extension."
msgstr "Nie je dostupný žiadny bezpeÄný generátor náhodných Äísel, prosím, povoľte rozšírenie OpenSSL v PHP."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Bez bezpeÄného generátora náhodných Äísel môže útoÄník predpovedaÅ¥ token pre obnovu hesla a prevziaÅ¥ kontrolu nad vaším kontom."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "Váš prieÄinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Váš prieÄinok s dátami a VaÅ¡e súbory sú pravdepodobne dostupné z internetu. .htaccess súbor dodávaný s inÅ¡taláciou ownCloud nespĺňa úlohu. Dôrazne Vám doporuÄujeme nakonfigurovaÅ¥ webserver takým spôsobom, aby dáta v prieÄinku neboli verejné, alebo presuňte dáta mimo Å¡truktúry prieÄinkov webservera."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Pre informácie, ako správne nastaviť Váš server sa pozrite do <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentácie</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "VytvoriÅ¥ <strong>administrátorský úÄet</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "PokroÄilé"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "PrieÄinok dát"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Nastaviť databázu"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "bude použité"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Hostiteľ databázy"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Heslo databázy"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Meno databázy"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Tabuľkový priestor databázy"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Server databázy"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "DokonÄiÅ¥ inÅ¡taláciu"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Nedeľa"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Pondelok"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Utorok"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Streda"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Å tvrtok"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Piatok"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Sobota"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Január"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Február"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Marec"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Apríl"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Máj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Jún"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Júl"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "August"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Október"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "December"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "webové služby pod vašou kontrolou"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Odhlásiť"
@@ -548,17 +574,17 @@ msgstr "Prosím, zmeňte svoje heslo pre opätovné zabezpeÄenie Vášho úÄtu
msgid "Lost your password?"
msgstr "Zabudli ste heslo?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "zapamätať"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Prihlásiť sa"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Ste odhlásený."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Altrnatívne loginy"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,18 +597,4 @@ msgstr "Äalej"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "BezpeÄnostné varovanie!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Prosím, overte svoje heslo. <br />Z bezpeÄnostných dôvodov môžete byÅ¥ obÄas požiadaný o jeho opätovné zadanie."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Overenie"
+msgstr "Aktualizujem ownCloud na verziu %s, môže to chvíľu trvať."
diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po
index 1d4d69bb59e..e7c654c3827 100644
--- a/l10n/sk_SK/files.po
+++ b/l10n/sk_SK/files.po
@@ -3,7 +3,9 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# georg <georg007@gmail.com>, 2013.
# <intense.feel@gmail.com>, 2012.
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# <martin.babik@gmail.com>, 2012.
# Roman Priesol <roman@priesol.net>, 2012.
# <zatroch.martin@gmail.com>, 2012.
@@ -11,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 13:50+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,210 +26,213 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nie je možné presunúť %s - súbor s týmto menom už existuje"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Nie je možné presunúť %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Nemožno premenovať súbor"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Žiaden súbor nebol odoslaný. Neznáma chyba"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Nenastala žiadna chyba, súbor bol úspešne nahraný"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Nahraný súbor predÄil konfiguraÄnú direktívu upload_max_filesize v súbore php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Nahrávaný súbor presiahol MAX_FILE_SIZE direktívu, ktorá bola špecifikovaná v HTML formulári"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Nahrávaný súbor bol iba ÄiastoÄne nahraný"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Žiaden súbor nebol nahraný"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Chýbajúci doÄasný prieÄinok"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Zápis na disk sa nepodaril"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Nedostatok dostupného úložného priestoru"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Neplatný prieÄinok"
#: appinfo/app.php:10
msgid "Files"
msgstr "Súbory"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Nezdielať"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Zmazať trvalo"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Odstrániť"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Premenovať"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Čaká sa"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} už existuje"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "nahradiť"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "pomôcť s menom"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "zrušiť"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "prepísaný {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "vrátiť"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "prepísaný {new_name} súborom {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "zdieľanie zrušené pre {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "zmazané {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "vykonať zmazanie"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' je neplatné meno súboru."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Meno súboru nemôže byť prázdne"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "generujem ZIP-súbor, môže to chvíľu trvať."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Vaše úložisko je takmer plné ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nemôžem nahraÅ¥ súbor lebo je to prieÄinok alebo má 0 bajtov."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Chyba odosielania"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Zavrieť"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Čaká sa"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 súbor sa posiela "
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} súborov odosielaných"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Odosielanie zrušené"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Opustenie stránky zruší práve prebiehajúce odosielanie súboru."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL nemôže byť prázdne"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} súborov prehľadaných"
+msgstr "Neplatné meno prieÄinka. Používanie mena 'Shared' je vyhradené len pre Owncloud"
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "chyba poÄas kontroly"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Meno"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Veľkosť"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Upravené"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 prieÄinok"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} prieÄinkov"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 súbor"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} súborov"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Odoslať"
+
#: templates/admin.php:5
msgid "File handling"
-msgstr "Nastavenie správanie k súborom"
+msgstr "Nastavenie správania sa k súborom"
#: templates/admin.php:7
msgid "Maximum upload size"
@@ -239,7 +244,7 @@ msgstr "najväÄÅ¡ie možné:"
#: templates/admin.php:15
msgid "Needed for multi-file and folder downloads."
-msgstr "Vyžadované pre sťahovanie viacerých súborov a adresárov."
+msgstr "Vyžadované pre sÅ¥ahovanie viacerých súborov a prieÄinkov."
#: templates/admin.php:17
msgid "Enable ZIP-download"
@@ -273,36 +278,44 @@ msgstr "PrieÄinok"
msgid "From link"
msgstr "Z odkazu"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Odoslať"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Kôš"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Zrušiť odosielanie"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Žiadny súbor. Nahrajte nieÄo!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Stiahnuť"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nezdielať"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Odosielaný súbor je príliš veľký"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Čakajte, súbory sú prehľadávané."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
-msgstr "Práve prehliadané"
+msgstr "Práve prezerané"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Aktualizujem medzipamäť súborového systému..."
diff --git a/l10n/sk_SK/files_encryption.po b/l10n/sk_SK/files_encryption.po
index a698624cb5d..232ee99f2fe 100644
--- a/l10n/sk_SK/files_encryption.po
+++ b/l10n/sk_SK/files_encryption.po
@@ -3,14 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# georg <georg007@gmail.com>, 2013.
# <intense.feel@gmail.com>, 2012.
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-06 02:01+0200\n"
-"PO-Revision-Date: 2012-09-05 17:32+0000\n"
-"Last-Translator: intense <intense.feel@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 13:10+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +20,22 @@ msgstr ""
"Language: sk_SK\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Å ifrovanie"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Vynechať nasledujúce súbory pri šifrovaní"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Šifrovanie súborov nastavené."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Uvedené typy súborov nebudú šifrované:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Nešifrovať uvedené typy súborov"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Žiadne"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Zapnúť šifrovanie"
diff --git a/l10n/sk_SK/files_external.po b/l10n/sk_SK/files_external.po
index 7a081bb7aa5..92807a28e1e 100644
--- a/l10n/sk_SK/files_external.po
+++ b/l10n/sk_SK/files_external.po
@@ -4,14 +4,15 @@
#
# Translators:
# <intense.feel@gmail.com>, 2012.
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# <martin.babik@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 13:30+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,18 +44,18 @@ msgstr "Zadajte platný kÄ¾ÃºÄ aplikácie a heslo Dropbox"
msgid "Error configuring Google Drive storage"
msgstr "Chyba pri konfigurácii úložiska Google drive"
-#: lib/config.php:434
+#: lib/config.php:413
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Upozornenie:</b> \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje."
-#: lib/config.php:435
+#: lib/config.php:414
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
"install it."
-msgstr ""
+msgstr "<b>Upozornenie:</b> Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje."
#: templates/settings.php:3
msgid "External Storage"
@@ -90,7 +91,7 @@ msgstr "Žiadne nastavené"
#: templates/settings.php:86
msgid "All Users"
-msgstr "Všetci užívatelia"
+msgstr "Všetci používatelia"
#: templates/settings.php:87
msgid "Groups"
@@ -98,10 +99,10 @@ msgstr "Skupiny"
#: templates/settings.php:95
msgid "Users"
-msgstr "Užívatelia"
+msgstr "Používatelia"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "Odstrániť"
@@ -111,12 +112,12 @@ msgstr "Povoliť externé úložisko"
#: templates/settings.php:125
msgid "Allow users to mount their own external storage"
-msgstr "Povoliť užívateľom pripojiť ich vlastné externé úložisko"
+msgstr "Povoliť používateľom pripojiť ich vlastné externé úložisko"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr "Koreňové SSL certifikáty"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr "Importovať koreňový certifikát"
diff --git a/l10n/sk_SK/files_trashbin.po b/l10n/sk_SK/files_trashbin.po
new file mode 100644
index 00000000000..220a875b8d1
--- /dev/null
+++ b/l10n/sk_SK/files_trashbin.po
@@ -0,0 +1,70 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# georg <georg007@gmail.com>, 2013.
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 10:30+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "Nemožno zmazať %s navždy"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Nemožno obnoviť %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "vykonať obnovu"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "trvalo zmazať súbor"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Meno"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Zmazané"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 prieÄinok"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} prieÄinkov"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 súbor"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} súborov"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Žiadny obsah. Kôš je prázdny!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Obnoviť"
diff --git a/l10n/sk_SK/files_versions.po b/l10n/sk_SK/files_versions.po
index 89f540dae66..5cf9366ed68 100644
--- a/l10n/sk_SK/files_versions.po
+++ b/l10n/sk_SK/files_versions.po
@@ -3,14 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# georg <georg007@gmail.com>, 2013.
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# <martin.babik@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-24 02:01+0200\n"
-"PO-Revision-Date: 2012-09-23 18:45+0000\n"
-"Last-Translator: martinb <martin.babik@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 13:10+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +20,44 @@ msgstr ""
"Language: sk_SK\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Expirovať všetky verzie"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Nemožno obnoviť: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "úspech"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "Súbor %s bol obnovený na verziu %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "chyba"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Súbor %s nemohol byť obnovený na verziu %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Nie sú dostupné žiadne staršie verzie"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Nevybrali ste cestu"
#: js/versions.js:16
msgid "History"
msgstr "História"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Verzie"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Budú zmazané všetky zálohované verzie vašich súborov"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Obnovte súbor do predoÅ¡lej verzie kliknutím na tlaÄítko obnoviÅ¥"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/sk_SK/lib.po b/l10n/sk_SK/lib.po
index ba1e859d9c9..ea523d52440 100644
--- a/l10n/sk_SK/lib.po
+++ b/l10n/sk_SK/lib.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# <martin.babik@gmail.com>, 2012.
# Roman Priesol <roman@priesol.net>, 2012.
# <zatroch.martin@gmail.com>, 2012.
@@ -10,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-02 00:02+0100\n"
-"PO-Revision-Date: 2012-12-01 16:27+0000\n"
-"Last-Translator: martin <zatroch.martin@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,51 +21,55 @@ msgstr ""
"Language: sk_SK\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Pomoc"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Osobné"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Nastavenia"
-#: app.php:302
+#: app.php:356
msgid "Users"
-msgstr "Užívatelia"
+msgstr "Používatelia"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Aplikácie"
-#: app.php:311
+#: app.php:365
msgid "Admin"
-msgstr "Správca"
+msgstr "Administrátor"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Sťahovanie súborov ZIP je vypnuté."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Súbory musia byť nahrávané jeden za druhým."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Späť na súbory"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
-msgstr "Zvolené súbory sú príliž veľké na vygenerovanie zip súboru."
+msgstr "Zvolené súbory sú príliš veľké na vygenerovanie zip súboru."
+
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "nedá sa zistiť"
#: json.php:28
msgid "Application is not enabled"
msgstr "Aplikácia nie je zapnutá"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Chyba autentifikácie"
@@ -84,62 +89,159 @@ msgstr "Text"
msgid "Images"
msgstr "Obrázky"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Prosím skontrolujte <a href='%s'>inÅ¡talaÄnú príruÄku</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "pred sekundami"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "pred 1 minútou"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "pred %d minútami"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Pred 1 hodinou"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "Pred %d hodinami."
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "dnes"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "vÄera"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "pred %d dňami"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "minulý mesiac"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Pred %d mesiacmi."
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "minulý rok"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "pred rokmi"
#: updater.php:75
#, php-format
msgid "%s is available. Get <a href=\"%s\">more information</a>"
-msgstr "%s je dostupné. Získať <a href=\"%s\">viac informácií</a>"
+msgstr "%s je dostupné. Získať <a href=\"%s\">pre viac informácií</a>"
#: updater.php:77
msgid "up to date"
diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po
index 5f886e918de..5a760e8d26c 100644
--- a/l10n/sk_SK/settings.po
+++ b/l10n/sk_SK/settings.po
@@ -4,6 +4,7 @@
#
# Translators:
# <intense.feel@gmail.com>, 2011, 2012.
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# <martin.babik@gmail.com>, 2012.
# Roman Priesol <roman@priesol.net>, 2012.
# <typhoon@zoznam.sk>, 2012.
@@ -12,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
@@ -26,6 +27,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Nie je možné nahrať zoznam z App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Chyba pri autentifikácii"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Nemožno zmeniť zobrazované meno"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Skupina už existuje"
@@ -34,7 +44,7 @@ msgstr "Skupina už existuje"
msgid "Unable to add group"
msgstr "Nie je možné pridať skupinu"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Nie je možné zapnúť aplikáciu."
@@ -46,22 +56,10 @@ msgstr "Email uložený"
msgid "Invalid email"
msgstr "Neplatný email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID zmenené"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Neplatná požiadavka"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Nie je možné odstrániť skupinu"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Chyba pri autentifikácii"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Nie je možné odstrániť používateľa"
@@ -70,6 +68,10 @@ msgstr "Nie je možné odstrániť používateľa"
msgid "Language changed"
msgstr "Jazyk zmenený"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Neplatná požiadavka"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Administrátori nesmú odstrániť sami seba zo skupiny admin"
@@ -77,26 +79,54 @@ msgstr "Administrátori nesmú odstrániť sami seba zo skupiny admin"
#: ajax/togglegroups.php:28
#, php-format
msgid "Unable to add user to group %s"
-msgstr "Nie je možné pridať užívateľa do skupiny %s"
+msgstr "Nie je možné pridať používateľa do skupiny %s"
#: ajax/togglegroups.php:34
#, php-format
msgid "Unable to remove user from group %s"
msgstr "Nie je možné odstrániť používateľa zo skupiny %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Nemožno aktualizovať aplikáciu."
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Aktualizovať na {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Zakázať"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Povoliť"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Čakajte prosím..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Aktualizujem..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "chyba pri aktualizácii aplikácie"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Chyba"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Aktualizované"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Ukladám..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Slovensky"
@@ -108,124 +138,132 @@ msgstr "Pridať vašu aplikáciu"
msgid "More Apps"
msgstr "Viac aplikácií"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Vyberte aplikáciu"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Pozrite si stránku aplikácií na apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licencované <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Aktualizovať"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "PríruÄka používateľa"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "PríruÄka administrátora"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "Online príruÄka"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "Fórum"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr ""
+msgstr "Bugtracker"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "KomerÄná podpora"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Použili ste <strong>%s</strong> z <strong>%s</strong> dostupných "
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klienti"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Heslo"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Heslo bolo zmenené"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Nie je možné zmeniť vaše heslo"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Aktuálne heslo"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nové heslo"
-#: templates/personal.php:26
-msgid "show"
-msgstr "zobraziť"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Zmeniť heslo"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Zobrazované meno"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Vaše zobrazované meno bolo zmenené"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Nemožno zmeniť Vaše zobrazované meno"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Zmeniť zobrazované meno"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Vaša emailová adresa"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Vyplňte emailovú adresu pre aktivovanie obnovy hesla"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Jazyk"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Pomôcť s prekladom"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "Použite túto adresu pre pripojenie vášho ownCloud k súborovému správcovi"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "Verzia"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -235,11 +273,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Meno"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Prihlasovacie meno"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Skupiny"
@@ -249,28 +287,36 @@ msgstr "Vytvoriť"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Predvolené úložisko"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Nelimitované"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Iné"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Správca skupiny"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
-msgstr ""
+msgstr "Úložisko"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "zmeniť zobrazované meno"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "nastaviť nové heslo"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "Predvolené"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Odstrániť"
diff --git a/l10n/sk_SK/user_ldap.po b/l10n/sk_SK/user_ldap.po
index fde4a583528..6075f01a7d9 100644
--- a/l10n/sk_SK/user_ldap.po
+++ b/l10n/sk_SK/user_ldap.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# Roman Priesol <roman@priesol.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 13:20+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,167 +19,293 @@ msgstr ""
"Language: sk_SK\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Zlyhalo zmazanie nastavenia servera."
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "Nastavenie je v poriadku a pripojenie je stabilné."
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "Nastavenie je v poriadku, ale pripojenie zlyhalo. Skontrolujte nastavenia servera a prihlasovacie údaje."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "Nastavenia sú neplatné. Podrobnosti hľadajte v logu ownCloud."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Odstránenie zlyhalo"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Prebrať nastavenia z nedávneho nastavenia servera?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Ponechať nastavenia?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Nemožno pridať nastavenie servera"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Test pripojenia bol úspešný"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Test pripojenia zlyhal"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Naozaj chcete zmazaÅ¥ súÄasné nastavenie servera?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Potvrdiť vymazanie"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
" experience unexpected behaviour. Please ask your system administrator to "
"disable one of them."
-msgstr ""
+msgstr "<b>Upozornenie:</b> Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávaÅ¥ neoÄakávané správanie. Požiadajte administrátora systému aby jednu z nich zakázal."
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr ""
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Upozornenie:</b> nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte administrátora systému aby ho nainštaloval."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Nastavenia servera"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Pridať nastavenia servera."
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Hostiteľ"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Môžete vynechaÅ¥ protokol, s výnimkou požadovania SSL. Vtedy zaÄnite s ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Základné DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Jedno základné DN na riadok"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "V rozšírenom nastavení môžete zadať základné DN pre používateľov a skupiny"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Používateľské DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN klientského používateľa, ku ktorému tvoríte väzbu, napr. uid=agent,dc=example,dc=com. Pre anonymný prístup ponechajte údaje DN a Heslo prázdne."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Heslo"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Pre anonymný prístup ponechajte údaje DN a Heslo prázdne."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filter prihlásenia používateľov"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "UrÄuje použitý filter, pri pokuse o prihlásenie. %%uid nahradzuje používateľské meno v Äinnosti prihlásenia."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "použite zástupný vzor %%uid, napr. \\\"uid=%%uid\\\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filter zoznamov používateľov"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Definuje použitý filter, pre získanie používateľov."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "bez zástupných znakov, napr. \"objectClass=person\""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filter skupiny"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Definuje použitý filter, pre získanie skupín."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "bez zástupných znakov, napr. \"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Nastavenie pripojenia"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Nastavenia sú aktívne "
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Ak nie je zaÅ¡krtnuté, nastavenie bude preskoÄené."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Základný používateľský strom"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Záložný server (kópia) hosť"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Základný skupinový strom"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Zadajte záložný LDAP/AD. Musí to byť kópia hlavného LDAP/AD servera."
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Asociácia Älena skupiny"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Záložný server (kópia) port"
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Zakázať hlavný server"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "Pri zapnutí sa ownCloud pripojí len k záložnému serveru."
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Použi TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Nepoužívajte pre pripojenie SSL, pripojenie zlyhá."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "Nepoužívajte pre pripojenie LDAPS, zlyhá."
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "LDAP server nerozlišuje veľkosť znakov (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Vypnúť overovanie SSL certifikátu."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Ak pripojenie pracuje len s touto možnosťou, tak importujte SSL certifikát LDAP serveru do vášho servera ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Nie je doporuÄované, len pre testovacie úÄely."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "v sekundách. Zmena vyprázdni vyrovnávaciu pamäť."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Nastavenie prieÄinka"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Pole pre zobrazenia mena používateľa"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Atribút LDAP použitý na vygenerovanie mena používateľa ownCloud "
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Základný používateľský strom"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Jedna používateľská základná DN na riadok"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Atribúty vyhľadávania používateľov"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Voliteľné, jeden atribút na jeden riadok"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Pole pre zobrazenie mena skupiny"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Atribút LDAP použitý na vygenerovanie mena skupiny ownCloud "
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Základný skupinový strom"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Jedna skupinová základná DN na riadok"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Atribúty vyhľadávania skupín"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Priradenie Älena skupiny"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Špeciálne atribúty"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "v bajtoch"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "v sekundách. Zmena vyprázdni vyrovnávaciu pamäť."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Nechajte prázdne pre používateľské meno (predvolené). Inak uveÄte atribút LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Pomoc"
diff --git a/l10n/sk_SK/user_webdavauth.po b/l10n/sk_SK/user_webdavauth.po
index fe313b19276..b3a30b89ca6 100644
--- a/l10n/sk_SK/user_webdavauth.po
+++ b/l10n/sk_SK/user_webdavauth.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# <zatroch.martin@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 08:31+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +19,17 @@ msgstr ""
"Language: sk_SK\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV overenie"
+
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud odoÅ¡le používateľské údaje na zadanú URL. Plugin skontroluje odpoveÄ a považuje návratovú hodnotu HTTP 401 a 403 za neplatné údaje a vÅ¡etky ostatné hodnoty ako platné prihlasovacie údaje."
diff --git a/l10n/sl/core.po b/l10n/sl/core.po
index 7e3caa36f52..8f861f48a3a 100644
--- a/l10n/sl/core.po
+++ b/l10n/sl/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
@@ -21,24 +21,24 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Uporanik %s je dal datoteko v souporabo z vami"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Uporanik %s je dal mapo v souporabo z vami"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Uporanik %s je dal datoteko \"%s\" v souporabo z vami. Prenesete jo lahko tukaj: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -54,8 +54,9 @@ msgid "No category to add?"
msgstr "Ni kategorije za dodajanje?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Ta kategorija že obstaja:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -83,59 +84,135 @@ msgstr "Za izbris ni izbrana nobena kategorija."
msgid "Error removing %s from favorites."
msgstr "Napaka pri odstranjevanju %s iz priljubljenih."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "nedelja"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "ponedeljek"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "torek"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "sreda"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Äetrtek"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "petek"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "sobota"
+
+#: js/config.php:33
+msgid "January"
+msgstr "januar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "februar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "marec"
+
+#: js/config.php:33
+msgid "April"
+msgstr "april"
+
+#: js/config.php:33
+msgid "May"
+msgstr "maj"
+
+#: js/config.php:33
+msgid "June"
+msgstr "junij"
+
+#: js/config.php:33
+msgid "July"
+msgstr "julij"
+
+#: js/config.php:33
+msgid "August"
+msgstr "avgust"
+
+#: js/config.php:33
+msgid "September"
+msgstr "september"
+
+#: js/config.php:33
+msgid "October"
+msgstr "oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "november"
+
+#: js/config.php:33
+msgid "December"
+msgstr "december"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Nastavitve"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "pred nekaj sekundami"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "pred minuto"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "pred {minutes} minutami"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "pred 1 uro"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "pred {hours} urami"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "danes"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "vÄeraj"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "pred {days} dnevi"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "zadnji mesec"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "pred {months} meseci"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "mesecev nazaj"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "lansko leto"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "let nazaj"
@@ -165,8 +242,8 @@ msgid "The object type is not specified."
msgstr "Vrsta predmeta ni podana."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Napaka"
@@ -178,123 +255,141 @@ msgstr "Ime aplikacije ni podano."
msgid "The required file {file} is not installed!"
msgstr "Zahtevana datoteka {file} ni nameÅ¡Äena!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Souporaba"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Napaka med souporabo"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Napaka med odstranjevanjem souporabe"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Napaka med spreminjanjem dovoljenj"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "V souporabi z vami in skupino {group}. Lastnik je {owner}."
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "V souporabi z vami. Lastnik je {owner}."
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "OmogoÄi souporabo z"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "OmogoÄi souporabo s povezavo"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "ZaÅ¡Äiti z geslom"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Geslo"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Posreduj povezavo po e-pošti"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Pošlji"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Nastavi datum preteka"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Datum preteka"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Souporaba preko elektronske pošte:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Ni najdenih uporabnikov"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Ponovna souporaba ni omogoÄena"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "V souporabi v {item} z {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Odstrani souporabo"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "lahko ureja"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "nadzor dostopa"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "ustvari"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "posodobi"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "izbriše"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "doloÄi souporabo"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "ZaÅ¡Äiteno z geslom"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Napaka brisanja datuma preteka"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Napaka med nastavljanjem datuma preteka"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Pošiljam ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "E-pošta je bila poslana"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "Ponastavitev gesla ownCloud"
@@ -376,7 +471,7 @@ msgstr "Uredi kategorije"
msgid "Add"
msgstr "Dodaj"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Varnostno opozorilo"
@@ -386,147 +481,75 @@ msgid ""
"OpenSSL extension."
msgstr "Na voljo ni varnega generatorja nakljuÄnih Å¡tevil. Prosimo, Äe omogoÄite PHP OpenSSL razÅ¡iritev."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Brez varnega generatorja nakljuÄnih Å¡tevil lahko napadalec napove žetone za ponastavitev gesla, kar mu omogoÄa, da prevzame vaÅ¡ ​​raÄun."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Trenutno je dostop do podatkovne mape in datotek najverjetneje omogoÄen vsem uporabnikom na omrežju. Datoteka .htaccess, vkljuÄena v ownCloud namreÄ ni omogoÄena. MoÄno priporoÄamo nastavitev spletnega strežnika tako, da mapa podatkov ne bo javno dostopna ali pa, da jo prestavite ven iz korenske mape spletnega strežnika."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Ustvari <strong>skrbniÅ¡ki raÄun</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Napredne možnosti"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Mapa s podatki"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Nastavi podatkovno zbirko"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "bo uporabljen"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Uporabnik zbirke"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Geslo podatkovne zbirke"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Ime podatkovne zbirke"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Razpredelnica podatkovne zbirke"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Gostitelj podatkovne zbirke"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "DokonÄaj namestitev"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "nedelja"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "ponedeljek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "torek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "sreda"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Äetrtek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "petek"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "sobota"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "januar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "februar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "marec"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "april"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "maj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "junij"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "julij"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "avgust"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "september"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "november"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "december"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "spletne storitve pod vašim nadzorom"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Odjava"
@@ -548,17 +571,17 @@ msgstr "Spremenite geslo za izboljÅ¡anje zaÅ¡Äite raÄuna."
msgid "Lost your password?"
msgstr "Ali ste pozabili geslo?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "Zapomni si me"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Prijava"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Sta odjavljeni."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -572,17 +595,3 @@ msgstr "naprej"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Varnostno opozorilo!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Prosimo, Äe preverite vaÅ¡e geslo. Iz varnostnih razlogov vas lahko obÄasno prosimo, da ga ponovno vnesete."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Preveri"
diff --git a/l10n/sl/files.po b/l10n/sl/files.po
index 5ed732142e8..3482d91388a 100644
--- a/l10n/sl/files.po
+++ b/l10n/sl/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
@@ -26,55 +26,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Nobena datoteka ni naložena. Neznana napaka."
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Datoteka je uspešno naložena brez napak."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Naložena datoteka presega dovoljeno velikost. Le-ta je doloÄena z vrstico upload_max_filesize v datoteki php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Naložena datoteka presega velikost, ki jo doloÄa parameter MAX_FILE_SIZE v HTML obrazcu"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Datoteka je le delno naložena"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Nobena datoteka ni bila naložena"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Manjka zaÄasna mapa"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Pisanje na disk je spodletelo"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -82,149 +82,152 @@ msgstr ""
msgid "Files"
msgstr "Datoteke"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Odstrani iz souporabe"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Izbriši"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Preimenuj"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "V Äakanju ..."
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} že obstaja"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "zamenjaj"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "predlagaj ime"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "prekliÄi"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "zamenjano je ime {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "razveljavi"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "zamenjano ime {new_name} z imenom {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "odstranjeno iz souporabe {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "izbrisano {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Neveljavno ime, znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Ustvarjanje datoteke ZIP. To lahko traja nekaj Äasa."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "PoÅ¡iljanje ni mogoÄe, saj gre za mapo, ali pa je datoteka velikosti 0 bajtov."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Napaka med nalaganjem"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Zapri"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "V Äakanju ..."
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "Pošiljanje 1 datoteke"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "nalagam {count} datotek"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Pošiljanje je preklicano."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "Naslov URL ne sme biti prazen."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} files scanned"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "napaka med pregledovanjem datotek"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Ime"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Velikost"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Spremenjeno"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 mapa"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} map"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 datoteka"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} datotek"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Pošlji"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Upravljanje z datotekami"
@@ -273,36 +276,44 @@ msgstr "Mapa"
msgid "From link"
msgstr "Iz povezave"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Pošlji"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "PrekliÄi poÅ¡iljanje"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Tukaj ni niÄesar. Naložite kaj!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Prejmi"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Odstrani iz souporabe"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Nalaganje ni mogoÄe, ker je preveliko"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Datoteke, ki jih želite naložiti, presegajo najveÄjo dovoljeno velikost na tem strežniku."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Poteka preuÄevanje datotek, poÄakajte ..."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Trenutno poteka preuÄevanje"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sl/files_encryption.po b/l10n/sl/files_encryption.po
index ee5f5c6ec05..86d2a0d7d36 100644
--- a/l10n/sl/files_encryption.po
+++ b/l10n/sl/files_encryption.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-23 02:02+0200\n"
-"PO-Revision-Date: 2012-10-22 16:57+0000\n"
-"Last-Translator: mateju <>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,18 +19,22 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Å ifriranje"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Navedene vrste datotek naj ne bodo šifrirane"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Brez"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "OmogoÄi Å¡ifriranje"
diff --git a/l10n/sl/files_trashbin.po b/l10n/sl/files_trashbin.po
new file mode 100644
index 00000000000..525f304069e
--- /dev/null
+++ b/l10n/sl/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Ime"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 mapa"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} map"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 datoteka"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} datotek"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sl/files_versions.po b/l10n/sl/files_versions.po
index 2bde547fb1f..dad9f10280e 100644
--- a/l10n/sl/files_versions.po
+++ b/l10n/sl/files_versions.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-23 02:02+0200\n"
-"PO-Revision-Date: 2012-10-22 17:00+0000\n"
-"Last-Translator: mateju <>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +19,44 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Zastaraj vse razliÄice"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Zgodovina"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "RazliÄice"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "S tem bodo izbrisane vse obstojeÄe razliÄice varnostnih kopij vaÅ¡ih datotek"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/sl/lib.po b/l10n/sl/lib.po
index 606aa03de9d..e3f61a640a8 100644
--- a/l10n/sl/lib.po
+++ b/l10n/sl/lib.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-20 00:01+0100\n"
-"PO-Revision-Date: 2012-11-19 19:49+0000\n"
-"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +19,55 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "PomoÄ"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Osebno"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Nastavitve"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Uporabniki"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Programi"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Skrbništvo"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Prejem datotek ZIP je onemogoÄen."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Datoteke je mogoÄe prejeti le posamiÄ."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Nazaj na datoteke"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Izbrane datoteke so prevelike za ustvarjanje datoteke arhiva zip."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Program ni omogoÄen"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Napaka overitve"
@@ -83,55 +87,152 @@ msgstr "Besedilo"
msgid "Images"
msgstr "Slike"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "pred nekaj sekundami"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "pred minuto"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "pred %d minutami"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "Pred 1 uro"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "Pred %d urami"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "danes"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "vÄeraj"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "pred %d dnevi"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "prejšnji mesec"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "Pred %d meseci"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "lani"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "pred nekaj leti"
diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po
index 1b42ec608f7..ab5a76c3f12 100644
--- a/l10n/sl/settings.po
+++ b/l10n/sl/settings.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-02 00:04+0100\n"
-"PO-Revision-Date: 2013-01-01 14:26+0000\n"
-"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,6 +25,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Ni mogoÄe naložiti seznama iz App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Napaka overitve"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Skupina že obstaja"
@@ -33,7 +42,7 @@ msgstr "Skupina že obstaja"
msgid "Unable to add group"
msgstr "Ni mogoÄe dodati skupine"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Programa ni mogoÄe omogoÄiti."
@@ -45,22 +54,10 @@ msgstr "Elektronski naslov je shranjen"
msgid "Invalid email"
msgstr "Neveljaven elektronski naslov"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID je bil spremenjen"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Neveljavna zahteva"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ni mogoÄe izbrisati skupine"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Napaka overitve"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ni mogoÄe izbrisati uporabnika"
@@ -69,6 +66,10 @@ msgstr "Ni mogoÄe izbrisati uporabnika"
msgid "Language changed"
msgstr "Jezik je bil spremenjen"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Neveljavna zahteva"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Administratorji sebe ne morejo odstraniti iz skupine admin"
@@ -83,19 +84,47 @@ msgstr "Uporabnika ni mogoÄe dodati k skupini %s"
msgid "Unable to remove user from group %s"
msgstr "Uporabnika ni mogoÄe odstraniti iz skupine %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "OnemogoÄi"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "OmogoÄi"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Napaka"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Poteka shranjevanje ..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__ime_jezika__"
@@ -107,18 +136,22 @@ msgstr "Dodaj program"
msgid "More Apps"
msgstr "VeÄ programov"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Izberite program"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "ObiÅ¡Äite spletno stran programa na apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-z dovoljenjem s strani <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Posodobi"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Uporabniška dokumentacija"
@@ -148,83 +181,87 @@ msgstr "Komercialna podpora"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Uporabljate <strong>%s</strong> od razpoložljivih <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Stranka"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Prenesi namizne odjemalce"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Prenesi Android odjemalec"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Prenesi iOS odjemalec"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Geslo"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Vaše geslo je spremenjeno"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Gesla ni mogoÄe spremeniti."
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Trenutno geslo"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Novo geslo"
-#: templates/personal.php:26
-msgid "show"
-msgstr "pokaži"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Spremeni geslo"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Elektronska pošta"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Vaš elektronski poštni naslov"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "VpiÅ¡ite vaÅ¡ elektronski naslov in s tem omogoÄite obnovitev gesla"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Jezik"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Pomagajte pri prevajanju"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Uporabite ta naslov za povezavo do ownCloud v vašem upravljalniku datotek."
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "RazliÄica"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -234,11 +271,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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 dovoljenja <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Splošno javno dovoljenje Affero\">AGPL</abbr></a>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Ime"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Skupine"
@@ -250,26 +287,34 @@ msgstr "Ustvari"
msgid "Default Storage"
msgstr "Privzeta shramba"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Neomejeno"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Drugo"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Skrbnik skupine"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Shramba"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr "Privzeto"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Izbriši"
diff --git a/l10n/sl/user_ldap.po b/l10n/sl/user_ldap.po
index d34b56f8c01..c3b92afff38 100644
--- a/l10n/sl/user_ldap.po
+++ b/l10n/sl/user_ldap.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-16 00:11+0100\n"
-"PO-Revision-Date: 2012-12-15 16:46+0000\n"
-"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +19,58 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Brisanje je spodletelo."
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -28,158 +80,232 @@ msgstr "<b>Opozorilo:</b> Aplikaciji user_ldap in user_webdavauth nista združlj
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Opozorilo:</b> PHP LDAP modul mora biti nameÅ¡Äen, sicer ta vmesnik ne bo deloval. Prosimo, prosite vaÅ¡ega skrbnika, Äe ga namesti."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Gostitelj"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Protokol je lahko izpuÅ¡Äen, Äe ni posebej zahtevan SSL. V tem primeru se mora naslov zaÄeti z ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Osnovni DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Osnovni DN za uporabnike in skupine lahko doloÄite v zavihku Napredno"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Uporabnik DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN uporabnikovega odjemalca, s katerim naj se opravi vezava, npr. uid=agent,dc=example,dc=com. Za anonimni dostop sta polji DN in geslo prazni."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Geslo"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Za anonimni dostop sta polji DN in geslo prazni."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filter prijav uporabnikov"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "DoloÄi filter, uporabljen pri prijavi. %%uid nadomesti uporabniÅ¡ko ime za prijavo."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "Uporabite vsebnik %%uid, npr. \"uid=%%uid\"."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filter seznama uporabnikov"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "DoloÄi filter za uporabo med pridobivanjem uporabnikov."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "Brez kateregakoli vsebnika, npr. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Filter skupin"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "DoloÄi filter za uporabo med pridobivanjem skupin."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "Brez katerekoli vsebnika, npr. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Vrata"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Osnovno uporabniško drevo"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Osnovno drevo skupine"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Povezava Älana skupine"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Uporabi TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Uporaba SSL za povezave bo spodletela."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Strežnik LDAP ne upoÅ¡teva velikosti Ärk (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "OnemogoÄi potrditev veljavnosti potrdila SSL."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "V primeru, da povezava deluje le s to možnostjo, uvozite potrdilo SSL iz strežnika LDAP na vaš strežnik ownCloud."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Dejanje ni priporoÄeno; uporabljeno naj bo le za preizkuÅ¡anje delovanja."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "v sekundah. Sprememba izprazni predpomnilnik."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Polje za uporabnikovo prikazano ime"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Atribut LDAP, uporabljen pri ustvarjanju uporabniških imen ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Osnovno uporabniško drevo"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Polje za prikazano ime skupine"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Atribut LDAP, uporabljen pri ustvarjanju imen skupin ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Osnovno drevo skupine"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Povezava Älana skupine"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "v bajtih"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "v sekundah. Sprememba izprazni predpomnilnik."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Pustite prazno za uporabniško ime (privzeto). V nasprotnem primeru navedite atribut LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "PomoÄ"
diff --git a/l10n/sl/user_webdavauth.po b/l10n/sl/user_webdavauth.po
index c6891589fd4..05172dc5b95 100644
--- a/l10n/sl/user_webdavauth.po
+++ b/l10n/sl/user_webdavauth.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-02 00:04+0100\n"
-"PO-Revision-Date: 2013-01-01 14:17+0000\n"
-"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud bo poslal uporabniška poverila temu URL naslovu. Pri tem bo interpretiral http 401 in http 403 odgovor kot spodletelo avtentikacijo ter vse ostale http odgovore kot uspešne."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr ""
diff --git a/l10n/sq/core.po b/l10n/sq/core.po
index 3fb069e1e2b..4c77ff63f84 100644
--- a/l10n/sq/core.po
+++ b/l10n/sq/core.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
"MIME-Version: 1.0\n"
@@ -83,55 +83,55 @@ msgstr ""
msgid "Settings"
msgstr ""
-#: js/js.js:704
+#: js/js.js:711
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:712
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:713
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:714
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:715
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:716
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:717
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:718
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:719
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:720
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:721
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:722
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:723
msgid "years ago"
msgstr ""
@@ -207,7 +207,6 @@ msgid "Password protect"
msgstr ""
#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
msgid "Password"
msgstr ""
@@ -552,10 +551,6 @@ msgstr ""
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr ""
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr ""
@@ -568,17 +563,3 @@ msgstr ""
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/sq/files.po b/l10n/sq/files.po
index 57c754a69e0..ea89733fef6 100644
--- a/l10n/sq/files.po
+++ b/l10n/sq/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-01-20 00:05+0100\n"
+"PO-Revision-Date: 2013-01-19 23:05+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,11 @@ msgstr ""
"Language: sq\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/delete.php:28 ajax/getstoragestats.php:11 ajax/upload.php:17
+#: ajax/upload.php:76 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
@@ -31,46 +36,46 @@ msgstr ""
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:20
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:30
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:31
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:33
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:35
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:36
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:37
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:38
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
+#: ajax/upload.php:57
msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:91
msgid "Invalid directory."
msgstr ""
@@ -126,98 +131,100 @@ msgstr ""
msgid "deleted {files}"
msgstr ""
-#: js/files.js:31
+#: js/files.js:48
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:53
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:62
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:204
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
msgstr ""
-#: js/files.js:224
+#: js/files.js:242
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:242
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:259
msgid "Close"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
+#: js/files.js:278 js/files.js:397 js/files.js:431
msgid "Pending"
msgstr ""
-#: js/files.js:280
+#: js/files.js:298
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:301 js/files.js:357 js/files.js:372
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:376 js/files.js:414
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:486
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:559
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:565
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
+#: js/files.js:775
msgid "{count} files scanned"
msgstr ""
-#: js/files.js:735
+#: js/files.js:783
msgid "error while scanning"
msgstr ""
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:857 templates/index.php:64
msgid "Name"
msgstr ""
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:858 templates/index.php:75
msgid "Size"
msgstr ""
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:859 templates/index.php:77
msgid "Modified"
msgstr ""
-#: js/files.js:829
+#: js/files.js:878
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:880
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:888
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:890
msgid "{count} files"
msgstr ""
@@ -269,10 +276,6 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr ""
-
#: templates/index.php:41
msgid "Cancel upload"
msgstr ""
diff --git a/l10n/sq/files_versions.po b/l10n/sq/files_versions.po
index 97616a40636..5128bf7cf1b 100644
--- a/l10n/sq/files_versions.po
+++ b/l10n/sq/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-27 00:10+0100\n"
-"PO-Revision-Date: 2012-08-12 22:37+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +17,10 @@ msgstr ""
"Language: sq\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr ""
-
#: js/versions.js:16
msgid "History"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr ""
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr ""
-
#: templates/settings.php:3
msgid "Files Versioning"
msgstr ""
diff --git a/l10n/sq/lib.po b/l10n/sq/lib.po
index 431a0e3c621..ce2ab5c3311 100644
--- a/l10n/sq/lib.po
+++ b/l10n/sq/lib.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-27 00:10+0100\n"
-"PO-Revision-Date: 2012-07-27 22:23+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-17 00:26+0100\n"
+"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: sq\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:301
msgid "Help"
msgstr ""
-#: app.php:292
+#: app.php:308
msgid "Personal"
msgstr ""
-#: app.php:297
+#: app.php:313
msgid "Settings"
msgstr ""
-#: app.php:302
+#: app.php:318
msgid "Users"
msgstr ""
-#: app.php:309
+#: app.php:325
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:327
msgid "Admin"
msgstr ""
-#: files.php:361
+#: files.php:365
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:362
+#: files.php:366
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:362 files.php:387
+#: files.php:366 files.php:391
msgid "Back to Files"
msgstr ""
-#: files.php:386
+#: files.php:390
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:228
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,55 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/sq/settings.po b/l10n/sq/settings.po
index 78be3c6ba44..7d7d18a26f7 100644
--- a/l10n/sq/settings.po
+++ b/l10n/sq/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-01-12 00:09+0100\n"
+"PO-Revision-Date: 2013-01-11 23:09+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
"MIME-Version: 1.0\n"
@@ -29,7 +29,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -41,14 +41,6 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
@@ -65,6 +57,10 @@ msgstr ""
msgid "Language changed"
msgstr ""
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
diff --git a/l10n/sq/user_ldap.po b/l10n/sq/user_ldap.po
index 3c0afbd378a..4c54b0c5724 100644
--- a/l10n/sq/user_ldap.po
+++ b/l10n/sq/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 23:20+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
"MIME-Version: 1.0\n"
@@ -26,8 +26,8 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
@@ -44,6 +44,10 @@ msgid "Base DN"
msgstr ""
#: templates/settings.php:16
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:16
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
@@ -114,10 +118,18 @@ msgstr ""
msgid "Base User Tree"
msgstr ""
+#: templates/settings.php:25
+msgid "One User Base DN per line"
+msgstr ""
+
#: templates/settings.php:26
msgid "Base Group Tree"
msgstr ""
+#: templates/settings.php:26
+msgid "One Group Base DN per line"
+msgstr ""
+
#: templates/settings.php:27
msgid "Group-Member association"
msgstr ""
diff --git a/l10n/sq/user_webdavauth.po b/l10n/sq/user_webdavauth.po
index 132bf6829ad..1a2d007461b 100644
--- a/l10n/sq/user_webdavauth.po
+++ b/l10n/sq/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: sq\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/sr/core.po b/l10n/sr/core.po
index f934d66c739..c74ef339d87 100644
--- a/l10n/sr/core.po
+++ b/l10n/sr/core.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Ivan Petrović <ivan@ipplusstudio.com>, 2012.
+# Ivan Petrović <ivan@ipplusstudio.com>, 2012-2013.
# <marko@evizo.com>, 2012.
# Slobodan Terzić <githzerai06@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
@@ -20,24 +20,24 @@ msgstr ""
"Language: sr\n"
"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);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "КориÑник %s дели Ñа вама датотеку"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "КориÑник %s дели Ñа вама директоријум"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -53,8 +53,9 @@ msgid "No category to add?"
msgstr "Додати још неку категорију?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Категорија већ поÑтоји:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -82,59 +83,135 @@ msgstr "Ðи једна категорија није означена за бр
msgid "Error removing %s from favorites."
msgstr "Грешка приликом уклањања %s из омиљених"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Ðедеља"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Понедељак"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Уторак"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Среда"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Четвртак"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Петак"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Субота"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Јануар"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Фебруар"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Март"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Ðприл"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Мај"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Јун"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Јул"
+
+#: js/config.php:33
+msgid "August"
+msgstr "ÐвгуÑÑ‚"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Септембар"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Октобар"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Ðовембар"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Децембар"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Подешавања"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "пре неколико Ñекунди"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "пре 1 минут"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "пре {minutes} минута"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "Пре једног Ñата"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "Пре {hours} Ñата (Ñати)"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "данаÑ"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "јуче"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "пре {days} дана"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "прошлог меÑеца"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "Пре {months} меÑеца (меÑеци)"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "меÑеци раније"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "прошле године"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "година раније"
@@ -164,8 +241,8 @@ msgid "The object type is not specified."
msgstr "Ð’Ñ€Ñта објекта није подешена."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Грешка"
@@ -177,121 +254,139 @@ msgstr "Име програма није унето."
msgid "The required file {file} is not installed!"
msgstr "Потребна датотека {file} није инÑталирана."
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Дељење"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Грешка у дељењу"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Грешка код иÑкључења дељења"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Грешка код промене дозвола"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Дељено Ñа вама и Ñа групом {group}. Поделио {owner}."
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Поделио Ñа вама {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Подели Ñа"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Подели линк"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Заштићено лозинком"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Лозинка"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "Пошаљи"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "ПоÑтави датум иÑтека"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Датум иÑтека"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Подели поштом:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "ОÑобе ниÑу пронађене."
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Поновно дељење није дозвољено"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Подељено унутар {item} Ñа {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Ðе дели"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "може да мења"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "права приÑтупа"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "направи"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "ажурирај"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "обриши"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "подели"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Заштићено лозинком"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Грешка код поништавања датума иÑтека"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Грешка код поÑтављања датума иÑтека"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
-msgstr ""
+msgstr "Шаљем..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
+msgstr "Порука је поÑлата"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
msgstr ""
#: lostpassword/controller.php:47
@@ -375,7 +470,7 @@ msgstr "Измени категорије"
msgid "Add"
msgstr "Додај"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "СигурноÑно упозорење"
@@ -385,147 +480,75 @@ msgid ""
"OpenSSL extension."
msgstr "Поуздан генератор Ñлучајних бројева није доÑтупан, предлажемо да укључите PHP проширење OpenSSL."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Без поузданог генератора Ñлучајнох бројева нападач лако може предвидети лозинку за поништавање кључа шифровања и отети вам налог."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Тренутно Ñу ваши подаци и датотеке доÑтупне Ñа интернета. Датотека .htaccess коју је обезбедио пакет ownCloud не функционише. Саветујемо вам да подеÑите веб Ñервер тако да директоријум Ñа подацима не буде изложен или да га премеÑтите изван коренÑког директоријума веб Ñервера."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Ðаправи <strong>админиÑтративни налог</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Ðапредно"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Фацикла података"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Подешавање базе"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "ће бити коришћен"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "КориÑник базе"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Лозинка базе"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Име базе"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Радни проÑтор базе података"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Домаћин базе"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Заврши подешавање"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Ðедеља"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Понедељак"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Уторак"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Среда"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Четвртак"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Петак"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Субота"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Јануар"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Фебруар"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Март"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Ðприл"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Мај"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Јун"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Јул"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "ÐвгуÑÑ‚"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Септембар"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Октобар"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Ðовембар"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Децембар"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "веб ÑервиÑи под контролом"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Одјава"
@@ -547,17 +570,17 @@ msgstr "Промените лозинку да биÑте обезбедили Ð
msgid "Lost your password?"
msgstr "Изгубили Ñте лозинку?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "упамти"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Пријава"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Одјављени Ñте."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,18 +593,4 @@ msgstr "Ñледеће"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "СигурноÑно упозорење!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Потврдите лозинку. <br />Из ÑигурноÑних разлога затрежићемо вам да два пута унеÑете лозинку."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Потврди"
+msgstr "Ðадоградња ownCloud-а на верзију %s, Ñачекајте тренутак."
diff --git a/l10n/sr/files.po b/l10n/sr/files.po
index 74593611902..23342d8cef9 100644
--- a/l10n/sr/files.po
+++ b/l10n/sr/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
@@ -25,55 +25,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Ðије дошло до грешке. Датотека је уÑпешно отпремљена."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Отпремљена датотека прелази Ñмерницу upload_max_filesize у датотеци php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Отпремљена датотека прелази Ñмерницу MAX_FILE_SIZE која је наведена у HTML обраÑцу"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Датотека је делимично отпремљена"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Датотека није отпремљена"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "ÐедоÑтаје привремена фаÑцикла"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Ðе могу да пишем на диÑк"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -81,149 +81,152 @@ msgstr ""
msgid "Files"
msgstr "Датотеке"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Укини дељење"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Обриши"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Преименуј"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ðа чекању"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} већ поÑтоји"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "замени"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "предложи назив"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "откажи"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "замењено {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "опозови"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "замењено {new_name} Ñа {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "укинуто дељење {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "обриÑано {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "ÐеиÑправан назив. Следећи знакови ниÑу дозвољени: \\, /, <, >, :, \", |, ? и *."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "правим ZIP датотеку…"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðе могу да отпремим датотеку као фаÑциклу или она има 0 бајтова"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Грешка при отпремању"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Затвори"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Ðа чекању"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "Отпремам 1 датотеку"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "Отпремам {count} датотеке/а"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Отпремање је прекинуто."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Отпремање датотеке је у току. Ðко Ñада напуÑтите Ñтраницу, прекинућете отпремање."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "Скенирано датотека: {count}"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "грешка при Ñкенирању"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Ðазив"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Величина"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Измењено"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 фаÑцикла"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} фаÑцикле/и"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 датотека"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} датотеке/а"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Отпреми"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Управљање датотекама"
@@ -272,36 +275,44 @@ msgstr "фаÑцикла"
msgid "From link"
msgstr "Са везе"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Отпреми"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Прекини отпремање"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Овде нема ничег. Отпремите нешто!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Преузми"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Укини дељење"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Датотека је превелика"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Датотеке које желите да отпремите прелазе ограничење у величини."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Скенирам датотеке…"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Тренутно Ñкенирање"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sr/files_encryption.po b/l10n/sr/files_encryption.po
index a0a21dd2c84..4f38bb711f9 100644
--- a/l10n/sr/files_encryption.po
+++ b/l10n/sr/files_encryption.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-05 00:04+0100\n"
-"PO-Revision-Date: 2012-12-04 15:06+0000\n"
-"Last-Translator: Kostic <marko@evizo.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,18 +19,22 @@ msgstr ""
"Language: sr\n"
"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);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Шифровање"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Ðе шифруј Ñледеће типове датотека"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
-#: templates/settings.php:5
-msgid "None"
-msgstr "Ðишта"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
#: templates/settings.php:12
-msgid "Enable Encryption"
-msgstr "Омогући шифровање"
+msgid "None"
+msgstr "Ðишта"
diff --git a/l10n/sr/files_sharing.po b/l10n/sr/files_sharing.po
index 36c9d0ac467..d2e787a42cd 100644
--- a/l10n/sr/files_sharing.po
+++ b/l10n/sr/files_sharing.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-07 00:07+0100\n"
+"PO-Revision-Date: 2013-02-06 17:30+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,11 +19,11 @@ msgstr ""
#: templates/authenticate.php:4
msgid "Password"
-msgstr ""
+msgstr "Лозинка"
#: templates/authenticate.php:6
msgid "Submit"
-msgstr ""
+msgstr "Пошаљи"
#: templates/public.php:9
#, php-format
@@ -37,12 +37,12 @@ msgstr ""
#: templates/public.php:14 templates/public.php:30
msgid "Download"
-msgstr ""
+msgstr "Преузми"
#: templates/public.php:29
msgid "No preview available for"
msgstr ""
-#: templates/public.php:37
+#: templates/public.php:35
msgid "web services under your control"
msgstr ""
diff --git a/l10n/sr/files_trashbin.po b/l10n/sr/files_trashbin.po
new file mode 100644
index 00000000000..58c3430bb90
--- /dev/null
+++ b/l10n/sr/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <theranchcowboy@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"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);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "врати у претходно Ñтање"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Име"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "ОбриÑано"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 фаÑцикла"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} фаÑцикле/и"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 датотека"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} датотеке/а"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Овде нема ништа. Корпа за отпатке је празна."
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Врати"
diff --git a/l10n/sr/files_versions.po b/l10n/sr/files_versions.po
index 592163313fc..74719197c5f 100644
--- a/l10n/sr/files_versions.po
+++ b/l10n/sr/files_versions.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <theranchcowboy@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,26 +18,49 @@ msgstr ""
"Language: sr\n"
"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);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
+msgstr "ИÑторија"
+
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
-msgstr ""
+msgstr "Прављење верзија датотека"
#: templates/settings.php:4
msgid "Enable"
-msgstr ""
+msgstr "Омогући"
diff --git a/l10n/sr/lib.po b/l10n/sr/lib.po
index 0ffcb3e09d3..ac54addda50 100644
--- a/l10n/sr/lib.po
+++ b/l10n/sr/lib.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Ivan Petrović <ivan@ipplusstudio.com>, 2012.
+# Ivan Petrović <ivan@ipplusstudio.com>, 2012-2013.
+# <theranchcowboy@gmail.com>, 2013.
# <theranchcowboy@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-02 00:02+0100\n"
-"PO-Revision-Date: 2012-12-01 19:18+0000\n"
-"Last-Translator: Rancher <theranchcowboy@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +20,55 @@ msgstr ""
"Language: sr\n"
"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);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Помоћ"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Лично"
-#: app.php:297
+#: app.php:351
msgid "Settings"
-msgstr "Подешавања"
+msgstr "ПоÑтавке"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "КориÑници"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Ðпликације"
-#: app.php:311
+#: app.php:365
msgid "Admin"
-msgstr "ÐдминиÑтрација"
+msgstr "ÐдминиÑтратор"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Преузимање ZIP-а је иÑкључено."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Датотеке морате преузимати једну по једну."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Ðазад на датотеке"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Изабране датотеке Ñу превелике да биÑте направили ZIP датотеку."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "није одређено"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Ðпликација није омогућена"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Грешка при провери идентитета"
@@ -83,55 +88,152 @@ msgstr "ТекÑÑ‚"
msgid "Images"
msgstr "Слике"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "пре неколико Ñекунди"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "пре 1 минут"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "пре %d минута"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "пре 1 Ñат"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "пре %d Ñата/и"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "данаÑ"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "јуче"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "пре %d дана"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "прошлог меÑеца"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "пре %d меÑеца/и"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "прошле године"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "година раније"
@@ -142,11 +244,11 @@ msgstr "%s је доÑтупна. Погледајте <a href=\"%s\">више Ð
#: updater.php:77
msgid "up to date"
-msgstr "је ажурна."
+msgstr "је ажурна"
#: updater.php:80
msgid "updates check is disabled"
-msgstr "провера ажурирања је онемогућена."
+msgstr "провера ажурирања је онемогућена"
#: vcategories.php:188 vcategories.php:249
#, php-format
diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po
index 0a738546bf6..0a1a7be07bc 100644
--- a/l10n/sr/settings.po
+++ b/l10n/sr/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
@@ -23,6 +23,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Грешка приликом учитавања ÑпиÑка из Складишта Програма"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Грешка при аутентификацији"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Група већ поÑтоји"
@@ -31,7 +40,7 @@ msgstr "Група већ поÑтоји"
msgid "Unable to add group"
msgstr "Ðе могу да додам групу"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Ðе могу да укључим програм"
@@ -43,22 +52,10 @@ msgstr "Е-порука Ñачувана"
msgid "Invalid email"
msgstr "ÐеиÑправна е-адреÑа"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID је измењен"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "ÐеиÑправан захтев"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ðе могу да уклоним групу"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Грешка при аутентификацији"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ðе могу да уклоним кориÑника"
@@ -67,6 +64,10 @@ msgstr "Ðе могу да уклоним кориÑника"
msgid "Language changed"
msgstr "Језик је промењен"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "ÐеиÑправан захтев"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Управници не могу Ñебе уклонити из админ групе"
@@ -81,19 +82,47 @@ msgstr "Ðе могу да додам кориÑника у групу %s"
msgid "Unable to remove user from group %s"
msgstr "Ðе могу да уклоним кориÑника из групе %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "ИÑкључи"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Укључи"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Грешка"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Чување у току..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -105,18 +134,22 @@ msgstr "Додајте ваш програм"
msgid "More Apps"
msgstr "Више програма"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Изаберите програм"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Погледајте Ñтраницу Ñа програмима на apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-лиценцирао <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Ðжурирај"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -146,83 +179,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "ИÑкориÑтили Ñте <strong>%s</strong> од дозвољених <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Клијенти"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Лозинка"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Лозинка је промењена"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ðе могу да изменим вашу лозинку"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Тренутна лозинка"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Ðова лозинка"
-#: templates/personal.php:26
-msgid "show"
-msgstr "прикажи"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Измени лозинку"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Е-пошта"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Ваша адреÑа е-поште"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Ун"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Језик"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr " Помозите у превођењу"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +269,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "Развијају <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Име"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Групе"
@@ -248,26 +285,34 @@ msgstr "Ðаправи"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Друго"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Управник групе"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Обриши"
diff --git a/l10n/sr/user_ldap.po b/l10n/sr/user_ldap.po
index 2af4aa92fab..28760cfceb4 100644
--- a/l10n/sr/user_ldap.po
+++ b/l10n/sr/user_ldap.po
@@ -3,12 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <theranchcowboy@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +18,58 @@ msgstr ""
"Language: sr\n"
"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);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "БриÑање није уÑпело"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
-msgid "Host"
+msgid "Server configuration"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Host"
+msgstr "Домаћин"
+
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
-msgstr ""
+msgstr "Можете да изоÑтавите протокол, оÑим ако захтевате SSL. У том Ñлучају почните Ñа ldaps://."
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
+msgstr "База DN"
+
+#: templates/settings.php:22
+msgid "One Base DN per line"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
-msgstr ""
+msgstr "КориÑник DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
-msgstr ""
+msgstr "DN кориÑника клијента Ñа којим треба да Ñе уÑпоÑтави веза, нпр. uid=agent,dc=example,dc=com. За анониман приÑтуп, оÑтавите поља DN и лозинка празним."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
-msgstr ""
+msgstr "Лозинка"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
-msgstr ""
+msgstr "За анониман приÑтуп, оÑтавите поља DN и лозинка празним."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
-msgstr ""
+msgstr "Филтер за пријаву кориÑника"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
-msgstr ""
+msgstr "Одређује филтер за примењивање при покушају пријаве. %%uid замењује кориÑничко име."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
-msgstr ""
+msgstr "кориÑтите чувар меÑта %%uid, нпр. „uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
-msgstr ""
+msgstr "Филтер за ÑпиÑак кориÑника"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
-msgstr ""
+msgstr "Одређује филтер за примењивање при прибављању кориÑника."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
-msgstr ""
+msgstr "без икаквог чувара меÑта, нпр. „objectClass=person“."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
-msgstr ""
+msgstr "Филтер групе"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
-msgstr ""
+msgstr "Одређује филтер за примењивање при прибављању група."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "без икаквог чувара меÑта, нпр. „objectClass=posixGroup“."
+
+#: templates/settings.php:31
+msgid "Connection Settings"
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
+msgstr "Порт"
+
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:37
+msgid "Disable Main Server"
msgstr ""
-#: templates/settings.php:28
-msgid "Use TLS"
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Use TLS"
+msgstr "КориÑти TLS"
+
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
-msgstr ""
+msgstr "LDAP Ñервер оÑетљив на велика и мала Ñлова (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
-msgstr ""
+msgstr "ИÑкључите потврду SSL Ñертификата."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
-msgstr ""
+msgstr "Увезите SSL Ñертификат LDAP Ñервера у Ñвој ownCloud ако веза ради Ñамо Ñа овом опцијом."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
+msgstr "Ðе препоручује Ñе; кориÑтите Ñамо за теÑтирање."
+
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "у Ñекундама. Промена иÑпражњава кеш меморију."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "User Display Name Field"
-msgstr ""
+msgstr "Име приказа кориÑника"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr "LDAP атрибут за Ñтварање имена ownCloud-а кориÑника."
+
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "ОÑновно Ñтабло кориÑника"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
msgstr ""
-#: templates/settings.php:32
-msgid "Group Display Name Field"
+#: templates/settings.php:47
+msgid "User Search Attributes"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "Group Display Name Field"
+msgstr "Име приказа групе"
+
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr "LDAP атрибут за Ñтварање имена ownCloud-а групе."
+
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "ОÑновна Ñтабло група"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:50
+msgid "Group Search Attributes"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Придруживање чланова у групу"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr "у бајтовима"
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Помоћ"
diff --git a/l10n/sr/user_webdavauth.po b/l10n/sr/user_webdavauth.po
index 914fb17354e..764d45ef408 100644
--- a/l10n/sr/user_webdavauth.po
+++ b/l10n/sr/user_webdavauth.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <theranchcowboy@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-03 00:04+0100\n"
+"PO-Revision-Date: 2013-02-02 22:10+0000\n"
+"Last-Translator: Rancher <theranchcowboy@gmail.com>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,13 +18,17 @@ msgstr ""
"Language: sr\n"
"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);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV провера идентитета"
+
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "ÐдреÑа: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud ће поÑлати акредитиве кориÑника на ову адреÑу. Овај прикључак проверава одговор и тумачи HTTP ÑтатуÑне кодове 401 и 403 као неиÑправне акредитиве, а Ñве оÑтале одговоре као иÑправне."
diff --git a/l10n/sr@latin/core.po b/l10n/sr@latin/core.po
index 656f2cb83de..dea4d27d067 100644
--- a/l10n/sr@latin/core.po
+++ b/l10n/sr@latin/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +18,24 @@ msgstr ""
"Language: sr@latin\n"
"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);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,7 +51,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -80,59 +81,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Nedelja"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Ponedeljak"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Utorak"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Sreda"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "ÄŒetvrtak"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Petak"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Subota"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januar"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februar"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Mart"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maj"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Jun"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Jul"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Avgust"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Septembar"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktobar"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Novembar"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Decembar"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Podešavanja"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -162,8 +239,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr ""
@@ -175,123 +252,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Lozinka"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr ""
@@ -373,7 +468,7 @@ msgstr ""
msgid "Add"
msgstr ""
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -383,147 +478,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Napravi <strong>administrativni nalog</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Napredno"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Facikla podataka"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Podešavanje baze"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "će biti korišćen"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Korisnik baze"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Lozinka baze"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Ime baze"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Domaćin baze"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Završi podešavanje"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Nedelja"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Ponedeljak"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Utorak"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Sreda"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "ÄŒetvrtak"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Petak"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Subota"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Mart"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Jun"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Jul"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Avgust"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Septembar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktobar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Novembar"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Decembar"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Odjava"
@@ -545,17 +568,17 @@ msgstr ""
msgid "Lost your password?"
msgstr "Izgubili ste lozinku?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "upamti"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Odjavljeni ste."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +592,3 @@ msgstr "sledeće"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po
index 81511f85a80..b1035f141dc 100644
--- a/l10n/sr@latin/files.po
+++ b/l10n/sr@latin/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
@@ -23,55 +23,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Nema greške, fajl je uspešno poslat"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Poslati fajl prevazilazi direktivu MAX_FILE_SIZE koja je navedena u HTML formi"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Poslati fajl je samo delimiÄno otpremljen!"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Nijedan fajl nije poslat"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Nedostaje privremena fascikla"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -79,149 +79,152 @@ msgstr ""
msgid "Files"
msgstr "Fajlovi"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Obriši"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr ""
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Zatvori"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Ime"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "VeliÄina"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Zadnja izmena"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Pošalji"
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -270,36 +273,44 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Pošalji"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ovde nema niÄeg. PoÅ¡aljite neÅ¡to!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Preuzmi"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Pošiljka je prevelika"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Fajlovi koje želite da poÅ¡aljete prevazilaze ograniÄenje maksimalne veliÄine poÅ¡iljke na ovom serveru."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sr@latin/files_encryption.po b/l10n/sr@latin/files_encryption.po
index c6f3f5b636c..a34c90f6c0d 100644
--- a/l10n/sr@latin/files_encryption.po
+++ b/l10n/sr@latin/files_encryption.po
@@ -7,28 +7,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sr@latin\n"
-"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)\n"
+"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);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/sr@latin/files_trashbin.po b/l10n/sr@latin/files_trashbin.po
new file mode 100644
index 00000000000..1c241fa05a4
--- /dev/null
+++ b/l10n/sr@latin/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr@latin\n"
+"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);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Ime"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sr@latin/files_versions.po b/l10n/sr@latin/files_versions.po
index 1f2db94b8ad..d049a5e55bd 100644
--- a/l10n/sr@latin/files_versions.po
+++ b/l10n/sr@latin/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-22 01:14+0200\n"
-"PO-Revision-Date: 2012-09-21 23:15+0000\n"
-"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: sr@latin\n"
"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);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/sr@latin/lib.po b/l10n/sr@latin/lib.po
index edcbb0203e2..602dcf78833 100644
--- a/l10n/sr@latin/lib.po
+++ b/l10n/sr@latin/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: sr@latin\n"
"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);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Pomoć"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "LiÄno"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Podešavanja"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Korisnici"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Greška pri autentifikaciji"
@@ -81,55 +85,152 @@ msgstr "Tekst"
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po
index 0e2ffadb98c..fa71e64abc6 100644
--- a/l10n/sr@latin/settings.po
+++ b/l10n/sr@latin/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
@@ -22,6 +22,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Greška pri autentifikaciji"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -30,7 +39,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -42,22 +51,10 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID je izmenjen"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Neispravan zahtev"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Greška pri autentifikaciji"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -66,6 +63,10 @@ msgstr ""
msgid "Language changed"
msgstr "Jezik je izmenjen"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Neispravan zahtev"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -80,19 +81,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr ""
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr ""
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr ""
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr ""
@@ -104,18 +133,22 @@ msgstr ""
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Izaberite program"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -145,83 +178,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Klijenti"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Lozinka"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ne mogu da izmenim vašu lozinku"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Trenutna lozinka"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nova lozinka"
-#: templates/personal.php:26
-msgid "show"
-msgstr "prikaži"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Izmeni lozinku"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-mail"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr ""
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr ""
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Jezik"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr ""
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -231,11 +268,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Ime"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupe"
@@ -247,26 +284,34 @@ msgstr "Napravi"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Drugo"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Obriši"
diff --git a/l10n/sr@latin/user_ldap.po b/l10n/sr@latin/user_ldap.po
index 47549f334d5..b53dc7e85e9 100644
--- a/l10n/sr@latin/user_ldap.po
+++ b/l10n/sr@latin/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: sr@latin\n"
"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);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
-msgstr ""
+msgstr "Pomoć"
diff --git a/l10n/sr@latin/user_webdavauth.po b/l10n/sr@latin/user_webdavauth.po
index 9fe7b885a10..246116723c6 100644
--- a/l10n/sr@latin/user_webdavauth.po
+++ b/l10n/sr@latin/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: sr@latin\n"
"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);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/sv/core.po b/l10n/sv/core.po
index 2a96ecd716e..82e4d717ade 100644
--- a/l10n/sv/core.po
+++ b/l10n/sv/core.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# André <lokal_profil@hotmail.com>, 2013.
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel Sandman <revoltism@gmail.com>, 2012.
# <hakan.thn@gmail.com>, 2011.
@@ -13,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 07:40+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 07:00+0000\n"
"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -23,24 +24,24 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "Användare %s delade en fil med dig"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "Användare %s delade en mapp med dig"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "Användare %s delade filen \"%s\" med dig. Den finns att ladda ner här: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -56,8 +57,9 @@ msgid "No category to add?"
msgstr "Ingen kategori att lägga till?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Denna kategori finns redan:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Denna kategori finns redan: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -85,59 +87,135 @@ msgstr "Inga kategorier valda för radering."
msgid "Error removing %s from favorites."
msgstr "Fel vid borttagning av %s från favoriter."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Söndag"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "MÃ¥ndag"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Tisdag"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Onsdag"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Torsdag"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Fredag"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Lördag"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Januari"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Februari"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Mars"
+
+#: js/config.php:33
+msgid "April"
+msgstr "April"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Maj"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Juni"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Juli"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Augusti"
+
+#: js/config.php:33
+msgid "September"
+msgstr "September"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Oktober"
+
+#: js/config.php:33
+msgid "November"
+msgstr "November"
+
+#: js/config.php:33
+msgid "December"
+msgstr "December"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Inställningar"
-#: js/js.js:711
+#: js/js.js:767
msgid "seconds ago"
msgstr "sekunder sedan"
-#: js/js.js:712
+#: js/js.js:768
msgid "1 minute ago"
msgstr "1 minut sedan"
-#: js/js.js:713
+#: js/js.js:769
msgid "{minutes} minutes ago"
msgstr "{minutes} minuter sedan"
-#: js/js.js:714
+#: js/js.js:770
msgid "1 hour ago"
msgstr "1 timme sedan"
-#: js/js.js:715
+#: js/js.js:771
msgid "{hours} hours ago"
msgstr "{hours} timmar sedan"
-#: js/js.js:716
+#: js/js.js:772
msgid "today"
msgstr "i dag"
-#: js/js.js:717
+#: js/js.js:773
msgid "yesterday"
msgstr "i går"
-#: js/js.js:718
+#: js/js.js:774
msgid "{days} days ago"
msgstr "{days} dagar sedan"
-#: js/js.js:719
+#: js/js.js:775
msgid "last month"
msgstr "förra månaden"
-#: js/js.js:720
+#: js/js.js:776
msgid "{months} months ago"
msgstr "{months} månader sedan"
-#: js/js.js:721
+#: js/js.js:777
msgid "months ago"
msgstr "månader sedan"
-#: js/js.js:722
+#: js/js.js:778
msgid "last year"
msgstr "förra året"
-#: js/js.js:723
+#: js/js.js:779
msgid "years ago"
msgstr "Ã¥r sedan"
@@ -167,8 +245,8 @@ msgid "The object type is not specified."
msgstr "Objekttypen är inte specificerad."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Fel"
@@ -180,123 +258,141 @@ msgstr " Namnet på appen är inte specificerad."
msgid "The required file {file} is not installed!"
msgstr "Den nödvändiga filen {file} är inte installerad!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Dela"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Delad"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Fel vid delning"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Fel när delning skulle avslutas"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Fel vid ändring av rättigheter"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Delad med dig och gruppen {group} av {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Delad med dig av {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Delad med"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Delad med länk"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Lösenordsskydda"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Lösenord"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "E-posta länk till person"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Skicka"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Sätt utgångsdatum"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Utgångsdatum"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Dela via e-post:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Hittar inga användare"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Dela vidare är inte tillåtet"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Delad i {item} med {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Sluta dela"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "kan redigera"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "Ã¥tkomstkontroll"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "skapa"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "uppdatera"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "radera"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "dela"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Lösenordsskyddad"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Fel vid borttagning av utgångsdatum"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Fel vid sättning av utgångsdatum"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr "Skickar ..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr "E-post skickat"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Uppdateringen misslyckades. Rapportera detta problem till <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud-gemenskapen</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Uppdateringen lyckades. Du omdirigeras nu till OwnCloud"
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud lösenordsåterställning"
@@ -378,7 +474,7 @@ msgstr "Redigera kategorier"
msgid "Add"
msgstr "Lägg till"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Säkerhetsvarning"
@@ -388,147 +484,75 @@ msgid ""
"OpenSSL extension."
msgstr "Ingen säker slumptalsgenerator finns tillgänglig. Du bör aktivera PHP OpenSSL-tillägget."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Utan en säker slumptalsgenerator kan angripare få möjlighet att förutsäga lösenordsåterställningar och ta över ditt konto."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar."
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Din datakatalog och dina filer är förmodligen tillgängliga från Internet. Den .htaccess-fil som ownCloud tillhandahåller fungerar inte. Vi rekommenderar starkt att du konfigurerar webbservern så att datakatalogen inte längre är tillgänglig eller att du flyttar datakatalogen utanför webbserverns dokument-root."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "För information hur man korrekt konfigurera servern, var god se <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Skapa ett <strong>administratörskonto</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Avancerat"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Datamapp"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Konfigurera databasen"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "kommer att användas"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Databasanvändare"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Lösenord till databasen"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Databasnamn"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Databas tabellutrymme"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Databasserver"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Avsluta installation"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Söndag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "MÃ¥ndag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Tisdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Onsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Torsdag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Fredag"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Lördag"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Januari"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Februari"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Mars"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "April"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Maj"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Juni"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Juli"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Augusti"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "September"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Oktober"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "November"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "December"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "webbtjänster under din kontroll"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Logga ut"
@@ -550,17 +574,17 @@ msgstr "Ändra genast lösenord för att säkra ditt konto."
msgid "Lost your password?"
msgstr "Glömt ditt lösenord?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "kom ihåg"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Logga in"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Du är utloggad."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Alternativa inloggningar"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -574,17 +598,3 @@ msgstr "nästa"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr "Uppdaterar ownCloud till version %s, detta kan ta en stund."
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Säkerhetsvarning!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Bekräfta ditt lösenord. <br/>Av säkerhetsskäl kan du ibland bli ombedd att ange ditt lösenord igen."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Verifiera"
diff --git a/l10n/sv/files.po b/l10n/sv/files.po
index 16e2e102563..b22a0cb981d 100644
--- a/l10n/sv/files.po
+++ b/l10n/sv/files.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# André <lokal_profil@hotmail.com>, 2013.
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel Sandman <revoltism@gmail.com>, 2012.
# Magnus Höglund <magnus@linux.com>, 2012-2013.
@@ -13,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 07:00+0000\n"
+"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,57 +27,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Kunde inte flytta %s - Det finns redan en fil med detta namn"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Kan inte flytta %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Kan inte byta namn på filen"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Ingen fil uppladdad. Okänt fel"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Inga fel uppstod. Filen laddades upp utan problem"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Den uppladdade filen överskrider upload_max_filesize direktivet php.ini:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Den uppladdade filen överstiger MAX_FILE_SIZE direktivet som anges i HTML-formulär"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Den uppladdade filen var endast delvis uppladdad"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ingen fil blev uppladdad"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Saknar en tillfällig mapp"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Misslyckades spara till disk"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "Inte tillräckligt med utrymme tillgängligt"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Inte tillräckligt med lagringsutrymme tillgängligt"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "Felaktig mapp."
@@ -84,149 +85,152 @@ msgstr "Felaktig mapp."
msgid "Files"
msgstr "Filer"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Sluta dela"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Radera permanent"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Radera"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Byt namn"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Väntar"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} finns redan"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "ersätt"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "föreslå namn"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "avbryt"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "ersatt {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "Ã¥ngra"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "ersatt {new_name} med {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "stoppad delning {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "utför raderingen"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "raderade {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' är ett ogiltigt filnamn."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "Filnamn kan inte vara tomt."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "genererar ZIP-fil, det kan ta lite tid."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Ditt lagringsutrymme är fullt, filer kan ej längre laddas upp eller synkas!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Din nedladdning förbereds. Det kan ta tid om det är stora filer."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes."
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Uppladdningsfel"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Stäng"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Väntar"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 filuppladdning"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} filer laddas upp"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Uppladdning avbruten."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL kan inte vara tom."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} filer skannade"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "fel vid skanning"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "Namn"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "Storlek"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "Ändrad"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 mapp"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} mappar"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 fil"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} filer"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Ladda upp"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Filhantering"
@@ -275,36 +279,44 @@ msgstr "Mapp"
msgid "From link"
msgstr "Från länk"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Ladda upp"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "Papperskorg"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Avbryt uppladdning"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ingenting här. Ladda upp något!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Ladda ner"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Sluta dela"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "För stor uppladdning"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Filer skannas, var god vänta"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Aktuell skanning"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Uppgraderar filsystemets cache..."
diff --git a/l10n/sv/files_encryption.po b/l10n/sv/files_encryption.po
index 42165069483..b401db609de 100644
--- a/l10n/sv/files_encryption.po
+++ b/l10n/sv/files_encryption.po
@@ -3,33 +3,38 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Magnus Höglund <magnus@linux.com>, 2012.
+# André <lokal_profil@hotmail.com>, 2013.
+# Magnus Höglund <magnus@linux.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-13 23:12+0200\n"
-"PO-Revision-Date: 2012-08-13 10:20+0000\n"
-"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Kryptering"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Exkludera följande filtyper från kryptering"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Filkryptering är aktiverat."
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Följande filtyper kommer inte att krypteras:"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Exkludera följande filtyper från kryptering:"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Ingen"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Aktivera kryptering"
diff --git a/l10n/sv/files_trashbin.po b/l10n/sv/files_trashbin.po
new file mode 100644
index 00000000000..625d864e93b
--- /dev/null
+++ b/l10n/sv/files_trashbin.po
@@ -0,0 +1,70 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# André <lokal_profil@hotmail.com>, 2013.
+# Magnus Höglund <magnus@linux.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 07:10+0000\n"
+"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
+"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "Kunde inte radera %s permanent"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Kunde inte återställa %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "utför återställning"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "radera filen permanent"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Namn"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Raderad"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 mapp"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} mappar"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 fil"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} filer"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Ingenting här. Din papperskorg är tom!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Ã…terskapa"
diff --git a/l10n/sv/files_versions.po b/l10n/sv/files_versions.po
index a926036b892..3930feca0f4 100644
--- a/l10n/sv/files_versions.po
+++ b/l10n/sv/files_versions.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Magnus Höglund <magnus@linux.com>, 2012.
+# Magnus Höglund <magnus@linux.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-24 02:01+0200\n"
-"PO-Revision-Date: 2012-09-23 11:20+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 07:20+0000\n"
"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Upphör alla versioner"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Kunde inte återställa: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "lyckades"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "Filen %s återställdes till version %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "misslyckades"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "Filen %s kunde inte återställas till version %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Inga gamla versioner finns tillgängliga"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Ingen sökväg angiven"
#: js/versions.js:16
msgid "History"
msgstr "Historik"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Versioner"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Detta kommer att radera alla befintliga säkerhetskopior av dina filer"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Återställ en fil till en tidigare version genom att klicka på knappen"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/sv/lib.po b/l10n/sv/lib.po
index 548f7a84d4c..591d546eabc 100644
--- a/l10n/sv/lib.po
+++ b/l10n/sv/lib.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Magnus Höglund <magnus@linux.com>, 2012.
+# Magnus Höglund <magnus@linux.com>, 2012-2013.
# <magnus@linux.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-15 07:21+0000\n"
-"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +19,55 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Hjälp"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Personligt"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Inställningar"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Användare"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Program"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Admin"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Nerladdning av ZIP är avstängd."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Filer laddas ner en åt gången."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Tillbaka till Filer"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Valda filer är för stora för att skapa zip-fil."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "kunde inte bestämmas"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Applikationen är inte aktiverad"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Fel vid autentisering"
@@ -83,55 +87,152 @@ msgstr "Text"
msgid "Images"
msgstr "Bilder"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera."
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Var god kontrollera <a href='%s'>installationsguiden</a>."
+
+#: template.php:113
msgid "seconds ago"
msgstr "sekunder sedan"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 minut sedan"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d minuter sedan"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 timme sedan"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d timmar sedan"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "idag"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "igår"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d dagar sedan"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "förra månaden"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d månader sedan"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "förra året"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "Ã¥r sedan"
diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po
index ee72c8dd291..cb1609d7000 100644
--- a/l10n/sv/settings.po
+++ b/l10n/sv/settings.po
@@ -3,10 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# André <lokal_profil@hotmail.com>, 2013.
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel Sandman <revoltism@gmail.com>, 2012.
# <hakan.thn@gmail.com>, 2011.
-# Magnus Höglund <magnus@linux.com>, 2012.
+# Magnus Höglund <magnus@linux.com>, 2012-2013.
# <magnus@linux.com>, 2012.
# <q@xnq.me>, 2012.
# <revoltism@gmail.com>, 2011, 2012.
@@ -15,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-31 00:04+0100\n"
-"PO-Revision-Date: 2012-12-30 07:10+0000\n"
-"Last-Translator: xt00r <q@xnq.me>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -29,6 +30,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Kan inte ladda listan från App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Autentiseringsfel"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Kan inte ändra visningsnamn"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Gruppen finns redan"
@@ -37,7 +47,7 @@ msgstr "Gruppen finns redan"
msgid "Unable to add group"
msgstr "Kan inte lägga till grupp"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Kunde inte aktivera appen."
@@ -49,22 +59,10 @@ msgstr "E-post sparad"
msgid "Invalid email"
msgstr "Ogiltig e-post"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID ändrat"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Ogiltig begäran"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Kan inte radera grupp"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Autentiseringsfel"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Kan inte radera användare"
@@ -73,6 +71,10 @@ msgstr "Kan inte radera användare"
msgid "Language changed"
msgstr "Språk ändrades"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Ogiltig begäran"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Administratörer kan inte ta bort sig själva från admingruppen"
@@ -87,19 +89,47 @@ msgstr "Kan inte lägga till användare i gruppen %s"
msgid "Unable to remove user from group %s"
msgstr "Kan inte radera användare från gruppen %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Kunde inte uppdatera appen"
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Uppdaterar till {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Deaktivera"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Aktivera"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Var god vänta..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Uppdaterar..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Fel uppstod vid uppdatering av appen"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Fel"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Uppdaterad"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Sparar..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -111,18 +141,22 @@ msgstr "Lägg till din applikation"
msgid "More Apps"
msgstr "Fler Appar"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Välj en App"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Se programsida på apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licensierad av <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Uppdatera"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Användardokumentation"
@@ -152,83 +186,87 @@ msgstr "Kommersiell support"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Du har använt <strong>%s</strong> av tillgängliga <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Kunder"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Ladda ner skrivbordsklienter"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Ladda ner klient för Android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Ladda ner klient för iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Lösenord"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Ditt lösenord har ändrats"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Kunde inte ändra ditt lösenord"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Nuvarande lösenord"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Nytt lösenord"
-#: templates/personal.php:26
-msgid "show"
-msgstr "visa"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Ändra lösenord"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Visat namn"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Ditt visningsnamn har ändrats"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Kan inte ändra ditt visningsnamn"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Ändra visningsnamn"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "E-post"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Din e-postadress"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Fyll i en e-postadress för att aktivera återställning av lösenord"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Språk"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Hjälp att översätta"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "Använd denna adress för att ansluta till ownCloud i din filhanterare"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Version"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -238,11 +276,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "Utvecklad av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud kommunity</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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Namn"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Inloggningsnamn"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Grupper"
@@ -254,26 +292,34 @@ msgstr "Skapa"
msgid "Default Storage"
msgstr "Förvald lagring"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr "Obegränsad"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Annat"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Gruppadministratör"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr "Lagring"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "ändra visat namn"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "ange nytt lösenord"
+
+#: templates/users.php:137
msgid "Default"
msgstr "Förvald"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Radera"
diff --git a/l10n/sv/user_ldap.po b/l10n/sv/user_ldap.po
index 76ca9c76224..148481a3560 100644
--- a/l10n/sv/user_ldap.po
+++ b/l10n/sv/user_ldap.po
@@ -3,13 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Magnus Höglund <magnus@linux.com>, 2012.
+# <admin@danielholm.se>, 2013.
+# André <lokal_profil@hotmail.com>, 2013.
+# Magnus Höglund <magnus@linux.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-18 00:13+0100\n"
-"PO-Revision-Date: 2012-12-17 19:54+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 07:00+0000\n"
"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +20,58 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Misslyckades med att radera serverinställningen"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "Inställningen är giltig och anslutningen kunde upprättas!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "Konfigurationen är riktig, men Bind felade. Var vänlig och kontrollera serverinställningar och logininformation."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "Inställningen är ogiltig. Vänligen se ownCloud-loggen för fler detaljer."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Raderingen misslyckades"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "Ta över inställningar från tidigare serverkonfiguration?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Behåll inställningarna?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Kunde inte lägga till serverinställning"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Anslutningstestet lyckades"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Anslutningstestet misslyckades"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Vill du verkligen radera den nuvarande serverinställningen?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Bekräfta radering"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +81,232 @@ msgstr "<b>Varning:</b> Apps user_ldap och user_webdavauth är inkompatibla. OvÃ
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr "<b>Varning:</b> PHP LDAP-modulen måste vara installerad, serversidan kommer inte att fungera. Be din systemadministratör att installera den."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>Varning:</b> PHP LDAP - modulen är inte installerad, serversidan kommer inte att fungera. Kontakta din systemadministratör för installation."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "Serverinställning"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Lägg till serverinställning"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Server"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Du behöver inte ange protokoll förutom om du använder SSL. Starta då med ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Start DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Ett Start DN per rad"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Du kan ange start DN för användare och grupper under fliken Avancerat"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Användare DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN för användaren som skall användas, t.ex. uid=agent, dc=example, dc=com. För anonym åtkomst, lämna DN och lösenord tomt."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Lösenord"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "För anonym åtkomst, lämna DN och lösenord tomt."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Filter logga in användare"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Definierar filter att tillämpa vid inloggningsförsök. %% uid ersätter användarnamn i loginåtgärden."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "använd platshållare %%uid, t ex \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Filter lista användare"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Definierar filter att tillämpa vid listning av användare."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "utan platshållare, t.ex. \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Gruppfilter"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Definierar filter att tillämpa vid listning av grupper."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "utan platshållare, t.ex. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Uppkopplingsinställningar"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "Konfiguration aktiv"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Ifall denna är avbockad så kommer konfigurationen att skippas."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Bas för användare i katalogtjänst"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr "Säkerhetskopierings-värd (Replika)"
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Bas för grupper i katalogtjänst"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr "Ange en valfri värd för säkerhetskopiering. Den måste vara en replika av den huvudsakliga LDAP/AD-servern"
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Attribut för gruppmedlemmar"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Säkerhetskopierins-port (Replika)"
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Inaktivera huvudserver"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "När denna är påkopplad kommer ownCloud att koppla upp till replika-servern, endast."
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Använd TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Använd inte för SSL-anslutningar, det kommer inte att fungera."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "Använd inte för LDAPS-anslutningar, det kommer inte att fungera."
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "LDAP-servern är okänslig för gemener och versaler (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Stäng av verifiering av SSL-certifikat."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Om anslutningen bara fungerar med det här alternativet, importera LDAP-serverns SSL-certifikat i din ownCloud-server."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Rekommenderas inte, använd bara för test. "
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "i sekunder. En förändring tömmer cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Mappinställningar"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Attribut för användarnamn"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Attribut som används för att generera användarnamn i ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Bas för användare i katalogtjänst"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "En Användare start DN per rad"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "Användarsökningsattribut"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Valfritt; ett attribut per rad"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Attribut för gruppnamn"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Attribut som används för att generera gruppnamn i ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Bas för grupper i katalogtjänst"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "En Grupp start DN per rad"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Gruppsökningsattribut"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Attribut för gruppmedlemmar"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Specialattribut"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "i bytes"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "i sekunder. En förändring tömmer cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Lämnas tomt för användarnamn (standard). Ange annars ett LDAP/AD-attribut."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Hjälp"
diff --git a/l10n/sv/user_webdavauth.po b/l10n/sv/user_webdavauth.po
index b2063cd23bc..98475a8bd97 100644
--- a/l10n/sv/user_webdavauth.po
+++ b/l10n/sv/user_webdavauth.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Magnus Höglund <magnus@linux.com>, 2012.
+# Magnus Höglund <magnus@linux.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-26 00:10+0100\n"
-"PO-Revision-Date: 2012-12-25 08:03+0000\n"
+"POT-Creation-Date: 2013-01-23 00:05+0100\n"
+"PO-Revision-Date: 2013-01-21 15:25+0000\n"
"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV Autentisering"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud kommer att skicka inloggningsuppgifterna till denna URL och tolkar http 401 och http 403 som fel och alla andra koder som korrekt."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud kommer skicka användaruppgifterna till denna URL. Denna plugin kontrollerar svaret och tolkar HTTP-statuskoderna 401 och 403 som felaktiga uppgifter, och alla andra svar som giltiga uppgifter."
diff --git a/l10n/sw_KE/core.po b/l10n/sw_KE/core.po
new file mode 100644
index 00000000000..e6919ac84da
--- /dev/null
+++ b/l10n/sw_KE/core.po
@@ -0,0 +1,593 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/share.php:85
+#, php-format
+msgid "User %s shared a file with you"
+msgstr ""
+
+#: ajax/share.php:87
+#, php-format
+msgid "User %s shared a folder with you"
+msgstr ""
+
+#: ajax/share.php:89
+#, php-format
+msgid ""
+"User %s shared the file \"%s\" with you. It is available for download here: "
+"%s"
+msgstr ""
+
+#: ajax/share.php:91
+#, php-format
+msgid ""
+"User %s shared the folder \"%s\" with you. It is available for download "
+"here: %s"
+msgstr ""
+
+#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
+msgid "Category type not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:30
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:37
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
+#: ajax/vcategories/favorites.php:24
+#: ajax/vcategories/removeFromFavorites.php:26
+msgid "Object type not provided."
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:30
+#: ajax/vcategories/removeFromFavorites.php:30
+#, php-format
+msgid "%s ID not provided."
+msgstr ""
+
+#: ajax/vcategories/addToFavorites.php:35
+#, php-format
+msgid "Error adding %s to favorites."
+msgstr ""
+
+#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/vcategories/removeFromFavorites.php:35
+#, php-format
+msgid "Error removing %s from favorites."
+msgstr ""
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:284
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:764
+msgid "seconds ago"
+msgstr ""
+
+#: js/js.js:765
+msgid "1 minute ago"
+msgstr ""
+
+#: js/js.js:766
+msgid "{minutes} minutes ago"
+msgstr ""
+
+#: js/js.js:767
+msgid "1 hour ago"
+msgstr ""
+
+#: js/js.js:768
+msgid "{hours} hours ago"
+msgstr ""
+
+#: js/js.js:769
+msgid "today"
+msgstr ""
+
+#: js/js.js:770
+msgid "yesterday"
+msgstr ""
+
+#: js/js.js:771
+msgid "{days} days ago"
+msgstr ""
+
+#: js/js.js:772
+msgid "last month"
+msgstr ""
+
+#: js/js.js:773
+msgid "{months} months ago"
+msgstr ""
+
+#: js/js.js:774
+msgid "months ago"
+msgstr ""
+
+#: js/js.js:775
+msgid "last year"
+msgstr ""
+
+#: js/js.js:776
+msgid "years ago"
+msgstr ""
+
+#: js/oc-dialogs.js:126
+msgid "Choose"
+msgstr ""
+
+#: js/oc-dialogs.js:146 js/oc-dialogs.js:166
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:162
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:163
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:180
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
+#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
+msgid "The object type is not specified."
+msgstr ""
+
+#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
+msgid "Error"
+msgstr ""
+
+#: js/oc-vcategories.js:179
+msgid "The app name is not specified."
+msgstr ""
+
+#: js/oc-vcategories.js:194
+msgid "The required file {file} is not installed!"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
+msgid "Error while sharing"
+msgstr ""
+
+#: js/share.js:152
+msgid "Error while unsharing"
+msgstr ""
+
+#: js/share.js:159
+msgid "Error while changing permissions"
+msgstr ""
+
+#: js/share.js:168
+msgid "Shared with you and the group {group} by {owner}"
+msgstr ""
+
+#: js/share.js:170
+msgid "Shared with you by {owner}"
+msgstr ""
+
+#: js/share.js:175
+msgid "Share with"
+msgstr ""
+
+#: js/share.js:180
+msgid "Share with link"
+msgstr ""
+
+#: js/share.js:183
+msgid "Password protect"
+msgstr ""
+
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
+msgid "Password"
+msgstr ""
+
+#: js/share.js:189
+msgid "Email link to person"
+msgstr ""
+
+#: js/share.js:190
+msgid "Send"
+msgstr ""
+
+#: js/share.js:194
+msgid "Set expiration date"
+msgstr ""
+
+#: js/share.js:195
+msgid "Expiration date"
+msgstr ""
+
+#: js/share.js:227
+msgid "Share via email:"
+msgstr ""
+
+#: js/share.js:229
+msgid "No people found"
+msgstr ""
+
+#: js/share.js:256
+msgid "Resharing is not allowed"
+msgstr ""
+
+#: js/share.js:292
+msgid "Shared in {item} with {user}"
+msgstr ""
+
+#: js/share.js:313
+msgid "Unshare"
+msgstr ""
+
+#: js/share.js:325
+msgid "can edit"
+msgstr ""
+
+#: js/share.js:327
+msgid "access control"
+msgstr ""
+
+#: js/share.js:330
+msgid "create"
+msgstr ""
+
+#: js/share.js:333
+msgid "update"
+msgstr ""
+
+#: js/share.js:336
+msgid "delete"
+msgstr ""
+
+#: js/share.js:339
+msgid "share"
+msgstr ""
+
+#: js/share.js:373 js/share.js:558
+msgid "Password protected"
+msgstr ""
+
+#: js/share.js:571
+msgid "Error unsetting expiration date"
+msgstr ""
+
+#: js/share.js:583
+msgid "Error setting expiration date"
+msgstr ""
+
+#: js/share.js:598
+msgid "Sending ..."
+msgstr ""
+
+#: js/share.js:609
+msgid "Email sent"
+msgstr ""
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
+#: lostpassword/controller.php:47
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:2
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Reset email send."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Request failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39
+#: templates/login.php:28
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
+#: strings.php:5
+msgid "Personal"
+msgstr ""
+
+#: strings.php:6
+msgid "Users"
+msgstr ""
+
+#: strings.php:7
+msgid "Apps"
+msgstr ""
+
+#: strings.php:8
+msgid "Admin"
+msgstr ""
+
+#: strings.php:9
+msgid "Help"
+msgstr ""
+
+#: templates/403.php:12
+msgid "Access forbidden"
+msgstr ""
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:4
+msgid "Edit categories"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:16
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23 templates/installation.php:30
+msgid "Security Warning"
+msgstr ""
+
+#: templates/installation.php:24
+msgid ""
+"No secure random number generator is available, please enable the PHP "
+"OpenSSL extension."
+msgstr ""
+
+#: templates/installation.php:25
+msgid ""
+"Without a secure random number generator an attacker may be able to predict "
+"password reset tokens and take over your account."
+msgstr ""
+
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
+#: templates/installation.php:32
+msgid ""
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
+
+#: templates/installation.php:36
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:52
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:54
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:61
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:109
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:113
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:117
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:125
+msgid "Database tablespace"
+msgstr ""
+
+#: templates/installation.php:131
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:136
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:33
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:48
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:10
+msgid "Automatic logon rejected!"
+msgstr ""
+
+#: templates/login.php:11
+msgid ""
+"If you did not change your password recently, your account may be "
+"compromised!"
+msgstr ""
+
+#: templates/login.php:13
+msgid "Please change your password to secure your account again."
+msgstr ""
+
+#: templates/login.php:19
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:41
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:43
+msgid "Log in"
+msgstr ""
+
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
+
+#: templates/update.php:3
+#, php-format
+msgid "Updating ownCloud to version %s, this may take a while."
+msgstr ""
diff --git a/l10n/sw_KE/files.po b/l10n/sw_KE/files.po
new file mode 100644
index 00000000000..742adbe87b4
--- /dev/null
+++ b/l10n/sw_KE/files.po
@@ -0,0 +1,315 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/move.php:17
+#, php-format
+msgid "Could not move %s - File with this name already exists"
+msgstr ""
+
+#: ajax/move.php:27 ajax/move.php:30
+#, php-format
+msgid "Could not move %s"
+msgstr ""
+
+#: ajax/rename.php:22 ajax/rename.php:25
+msgid "Unable to rename file"
+msgstr ""
+
+#: ajax/upload.php:19
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:27
+msgid ""
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
+msgstr ""
+
+#: ajax/upload.php:29
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:31
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:32
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:33
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:34
+msgid "Failed to write to disk"
+msgstr ""
+
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr ""
+
+#: ajax/upload.php:83
+msgid "Invalid directory."
+msgstr ""
+
+#: appinfo/app.php:10
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
+
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
+msgid "Delete"
+msgstr ""
+
+#: js/fileactions.js:184
+msgid "Rename"
+msgstr ""
+
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "{new_name} already exists"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:253
+msgid "suggest name"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:295
+msgid "replaced {new_name}"
+msgstr ""
+
+#: js/filelist.js:295 js/filelist.js:297
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:297
+msgid "replaced {new_name} with {old_name}"
+msgstr ""
+
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
+
+#: js/files.js:52
+msgid "'.' is an invalid file name."
+msgstr ""
+
+#: js/files.js:56
+msgid "File name cannot be empty."
+msgstr ""
+
+#: js/files.js:64
+msgid ""
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
+"allowed."
+msgstr ""
+
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
+
+#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:261
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:272
+msgid "Close"
+msgstr ""
+
+#: js/files.js:311
+msgid "1 file uploading"
+msgstr ""
+
+#: js/files.js:314 js/files.js:369 js/files.js:384
+msgid "{count} files uploading"
+msgstr ""
+
+#: js/files.js:387 js/files.js:422
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:496
+msgid ""
+"File upload is in progress. Leaving the page now will cancel the upload."
+msgstr ""
+
+#: js/files.js:569
+msgid "URL cannot be empty."
+msgstr ""
+
+#: js/files.js:574
+msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
+msgstr ""
+
+#: js/files.js:947 templates/index.php:67
+msgid "Name"
+msgstr ""
+
+#: js/files.js:948 templates/index.php:78
+msgid "Size"
+msgstr ""
+
+#: js/files.js:949 templates/index.php:80
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:968
+msgid "1 folder"
+msgstr ""
+
+#: js/files.js:970
+msgid "{count} folders"
+msgstr ""
+
+#: js/files.js:978
+msgid "1 file"
+msgstr ""
+
+#: js/files.js:980
+msgid "{count} files"
+msgstr ""
+
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:10
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:15
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:17
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:20
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:22
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/admin.php:26
+msgid "Save"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:12
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:14
+msgid "From link"
+msgstr ""
+
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:73
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:107
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:112
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:115
+msgid "Current scanning"
+msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sw_KE/files_encryption.po b/l10n/sw_KE/files_encryption.po
new file mode 100644
index 00000000000..210f1a04556
--- /dev/null
+++ b/l10n/sw_KE/files_encryption.po
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/settings-personal.php:4 templates/settings.php:5
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "None"
+msgstr ""
diff --git a/l10n/sw_KE/files_external.po b/l10n/sw_KE/files_external.po
new file mode 100644
index 00000000000..0c02d8edc5f
--- /dev/null
+++ b/l10n/sw_KE/files_external.po
@@ -0,0 +1,120 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:09+0100\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/dropbox.js:7 js/dropbox.js:25 js/google.js:7 js/google.js:23
+msgid "Access granted"
+msgstr ""
+
+#: js/dropbox.js:28 js/dropbox.js:74 js/dropbox.js:79 js/dropbox.js:86
+msgid "Error configuring Dropbox storage"
+msgstr ""
+
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+msgid "Grant access"
+msgstr ""
+
+#: js/dropbox.js:73 js/google.js:72
+msgid "Fill out all required fields"
+msgstr ""
+
+#: js/dropbox.js:85
+msgid "Please provide a valid Dropbox app key and secret."
+msgstr ""
+
+#: js/google.js:26 js/google.js:73 js/google.js:78
+msgid "Error configuring Google Drive storage"
+msgstr ""
+
+#: lib/config.php:405
+msgid ""
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
+"is not possible. Please ask your system administrator to install it."
+msgstr ""
+
+#: lib/config.php:406
+msgid ""
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
+" of FTP shares is not possible. Please ask your system administrator to "
+"install it."
+msgstr ""
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:8 templates/settings.php:22
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:86
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:95
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:108 templates/settings.php:109
+#: templates/settings.php:144 templates/settings.php:145
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:124
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:125
+msgid "Allow users to mount their own external storage"
+msgstr ""
+
+#: templates/settings.php:136
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:153
+msgid "Import Root Certificate"
+msgstr ""
diff --git a/l10n/sw_KE/files_sharing.po b/l10n/sw_KE/files_sharing.po
new file mode 100644
index 00000000000..adbbc6c0f03
--- /dev/null
+++ b/l10n/sw_KE/files_sharing.po
@@ -0,0 +1,48 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2012-08-12 22:35+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/authenticate.php:4
+msgid "Password"
+msgstr ""
+
+#: templates/authenticate.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/public.php:9
+#, php-format
+msgid "%s shared the folder %s with you"
+msgstr ""
+
+#: templates/public.php:11
+#, php-format
+msgid "%s shared the file %s with you"
+msgstr ""
+
+#: templates/public.php:14 templates/public.php:30
+msgid "Download"
+msgstr ""
+
+#: templates/public.php:29
+msgid "No preview available for"
+msgstr ""
+
+#: templates/public.php:35
+msgid "web services under your control"
+msgstr ""
diff --git a/l10n/sw_KE/files_trashbin.po b/l10n/sw_KE/files_trashbin.po
new file mode 100644
index 00000000000..91113e58ba9
--- /dev/null
+++ b/l10n/sw_KE/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sw_KE/files_versions.po b/l10n/sw_KE/files_versions.po
new file mode 100644
index 00000000000..1194d23a785
--- /dev/null
+++ b/l10n/sw_KE/files_versions.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
+msgstr ""
+
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Files Versioning"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Enable"
+msgstr ""
diff --git a/l10n/sw_KE/lib.po b/l10n/sw_KE/lib.po
new file mode 100644
index 00000000000..803852d4296
--- /dev/null
+++ b/l10n/sw_KE/lib.po
@@ -0,0 +1,253 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: app.php:339
+msgid "Help"
+msgstr ""
+
+#: app.php:346
+msgid "Personal"
+msgstr ""
+
+#: app.php:351
+msgid "Settings"
+msgstr ""
+
+#: app.php:356
+msgid "Users"
+msgstr ""
+
+#: app.php:363
+msgid "Apps"
+msgstr ""
+
+#: app.php:365
+msgid "Admin"
+msgstr ""
+
+#: files.php:202
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:203
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:203 files.php:228
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:227
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:62 json.php:73
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: search/provider/file.php:17 search/provider/file.php:35
+msgid "Files"
+msgstr ""
+
+#: search/provider/file.php:26 search/provider/file.php:33
+msgid "Text"
+msgstr ""
+
+#: search/provider/file.php:29
+msgid "Images"
+msgstr ""
+
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:114
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:115
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:116
+msgid "1 hour ago"
+msgstr ""
+
+#: template.php:117
+#, php-format
+msgid "%d hours ago"
+msgstr ""
+
+#: template.php:118
+msgid "today"
+msgstr ""
+
+#: template.php:119
+msgid "yesterday"
+msgstr ""
+
+#: template.php:120
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:121
+msgid "last month"
+msgstr ""
+
+#: template.php:122
+#, php-format
+msgid "%d months ago"
+msgstr ""
+
+#: template.php:123
+msgid "last year"
+msgstr ""
+
+#: template.php:124
+msgid "years ago"
+msgstr ""
+
+#: updater.php:75
+#, php-format
+msgid "%s is available. Get <a href=\"%s\">more information</a>"
+msgstr ""
+
+#: updater.php:77
+msgid "up to date"
+msgstr ""
+
+#: updater.php:80
+msgid "updates check is disabled"
+msgstr ""
+
+#: vcategories.php:188 vcategories.php:249
+#, php-format
+msgid "Could not find category \"%s\""
+msgstr ""
diff --git a/l10n/sw_KE/settings.po b/l10n/sw_KE/settings.po
new file mode 100644
index 00000000000..d3c967e603b
--- /dev/null
+++ b/l10n/sw_KE/settings.po
@@ -0,0 +1,316 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/apps/ocs.php:20
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
+#: ajax/creategroup.php:10
+msgid "Group already exists"
+msgstr ""
+
+#: ajax/creategroup.php:19
+msgid "Unable to add group"
+msgstr ""
+
+#: ajax/enableapp.php:11
+msgid "Could not enable app. "
+msgstr ""
+
+#: ajax/lostpassword.php:12
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/removegroup.php:13
+msgid "Unable to delete group"
+msgstr ""
+
+#: ajax/removeuser.php:24
+msgid "Unable to delete user"
+msgstr ""
+
+#: ajax/setlanguage.php:15
+msgid "Language changed"
+msgstr ""
+
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/togglegroups.php:12
+msgid "Admins can't remove themself from the admin group"
+msgstr ""
+
+#: ajax/togglegroups.php:28
+#, php-format
+msgid "Unable to add user to group %s"
+msgstr ""
+
+#: ajax/togglegroups.php:34
+#, php-format
+msgid "Unable to remove user from group %s"
+msgstr ""
+
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:64
+msgid "Enable"
+msgstr ""
+
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:34 personal.php:35
+msgid "__language_name__"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:11
+msgid "More Apps"
+msgstr ""
+
+#: templates/apps.php:24
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:28
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
+msgstr ""
+
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
+#: templates/help.php:3
+msgid "User Documentation"
+msgstr ""
+
+#: templates/help.php:4
+msgid "Administrator Documentation"
+msgstr ""
+
+#: templates/help.php:6
+msgid "Online Documentation"
+msgstr ""
+
+#: templates/help.php:7
+msgid "Forum"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Bugtracker"
+msgstr ""
+
+#: templates/help.php:11
+msgid "Commercial Support"
+msgstr ""
+
+#: templates/personal.php:8
+#, php-format
+msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
+msgstr ""
+
+#: templates/personal.php:14
+msgid "Get the apps to sync your files"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
+
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
+msgid "Password"
+msgstr ""
+
+#: templates/personal.php:37
+msgid "Your password was changed"
+msgstr ""
+
+#: templates/personal.php:38
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:39
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:40
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:42
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:69
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:70
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:76 templates/personal.php:77
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:82
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:87
+msgid "WebDAV"
+msgstr ""
+
+#: templates/personal.php:89
+msgid "Use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/personal.php:98
+msgid "Version"
+msgstr ""
+
+#: templates/personal.php:100
+msgid ""
+"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>."
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Storage"
+msgstr ""
+
+#: templates/users.php:42 templates/users.php:142
+msgid "Unlimited"
+msgstr ""
+
+#: templates/users.php:60 templates/users.php:157
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:84 templates/users.php:121
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:86
+msgid "Storage"
+msgstr ""
+
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
+msgid "Default"
+msgstr ""
+
+#: templates/users.php:165
+msgid "Delete"
+msgstr ""
diff --git a/l10n/sw_KE/user_ldap.po b/l10n/sw_KE/user_ldap.po
new file mode 100644
index 00000000000..2ef2872dc3f
--- /dev/null
+++ b/l10n/sw_KE/user_ldap.po
@@ -0,0 +1,309 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
+" experience unexpected behaviour. Please ask your system administrator to "
+"disable one of them."
+msgstr ""
+
+#: templates/settings.php:11
+msgid ""
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:21
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"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."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:25
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:25
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:26
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:26
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:27
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
+
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
+
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:39
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:40
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:40
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:40
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
+msgid ""
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
+"attribute."
+msgstr ""
+
+#: templates/settings.php:62
+msgid "Help"
+msgstr ""
diff --git a/l10n/sw_KE/user_webdavauth.po b/l10n/sw_KE/user_webdavauth.po
new file mode 100644
index 00000000000..1e07c21030d
--- /dev/null
+++ b/l10n/sw_KE/user_webdavauth.po
@@ -0,0 +1,33 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2012-11-09 09:06+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sw_KE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "URL: http://"
+msgstr ""
+
+#: templates/settings.php:7
+msgid ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr ""
diff --git a/l10n/ta_LK/core.po b/l10n/ta_LK/core.po
index 6558c4d5afb..a7f267a5770 100644
--- a/l10n/ta_LK/core.po
+++ b/l10n/ta_LK/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +18,24 @@ msgstr ""
"Language: ta_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,8 +51,9 @@ msgid "No category to add?"
msgstr "சேரà¯à®ªà¯à®ªà®¤à®±à¯à®•ான வகைகள௠இலà¯à®²à¯ˆà®¯à®¾?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "இநà¯à®¤ வகை à®à®±à¯à®•னவே உளà¯à®³à®¤à¯:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -80,59 +81,135 @@ msgstr "நீகà¯à®•à¯à®µà®¤à®±à¯à®•௠எநà¯à®¤à®ªà¯ பிரிவà
msgid "Error removing %s from favorites."
msgstr "விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ %s ஠அகறà¯à®±à¯à®µà®¤à®¿à®²à¯ வழà¯.உஇஇ"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "ஞாயிறà¯à®±à¯à®•à¯à®•ிழமை"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "திஙà¯à®•டà¯à®•ிழமை"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "செவà¯à®µà®¾à®¯à¯à®•à¯à®•ிழமை"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "பà¯à®¤à®©à¯à®•ிழமை"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "வியாழகà¯à®•ிழமை"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "வெளà¯à®³à®¿à®•à¯à®•ிழமை"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "சனிகà¯à®•ிழமை"
+
+#: js/config.php:33
+msgid "January"
+msgstr "தை"
+
+#: js/config.php:33
+msgid "February"
+msgstr "மாசி"
+
+#: js/config.php:33
+msgid "March"
+msgstr "பஙà¯à®•à¯à®©à®¿"
+
+#: js/config.php:33
+msgid "April"
+msgstr "சிதà¯à®¤à®¿à®°à¯ˆ"
+
+#: js/config.php:33
+msgid "May"
+msgstr "வைகாசி"
+
+#: js/config.php:33
+msgid "June"
+msgstr "ஆனி"
+
+#: js/config.php:33
+msgid "July"
+msgstr "ஆடி"
+
+#: js/config.php:33
+msgid "August"
+msgstr "ஆவணி"
+
+#: js/config.php:33
+msgid "September"
+msgstr "பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿"
+
+#: js/config.php:33
+msgid "October"
+msgstr "à®à®ªà¯à®ªà®šà®¿"
+
+#: js/config.php:33
+msgid "November"
+msgstr "காரà¯à®¤à¯à®¤à®¿à®•ை"
+
+#: js/config.php:33
+msgid "December"
+msgstr "மாரà¯à®•ழி"
+
+#: js/js.js:284
msgid "Settings"
msgstr "அமைபà¯à®ªà¯à®•ளà¯"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "செகà¯à®•னà¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 நிமிடதà¯à®¤à®¿à®±à¯à®•௠மà¯à®©à¯ "
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{நிமிடஙà¯à®•ளà¯} நிமிடஙà¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯ "
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 மணிதà¯à®¤à®¿à®¯à®¾à®²à®¤à¯à®¤à®¿à®±à¯à®•௠மà¯à®©à¯"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{மணிதà¯à®¤à®¿à®¯à®¾à®²à®™à¯à®•ளà¯} மணிதà¯à®¤à®¿à®¯à®¾à®²à®™à¯à®•ளிறà¯à®•௠மà¯à®©à¯"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "இனà¯à®±à¯"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "நேறà¯à®±à¯"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{நாடà¯à®•ளà¯} நாடà¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "கடநà¯à®¤ மாதமà¯"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{மாதஙà¯à®•ளà¯} மாதஙà¯à®•ளிறà¯à®•௠மà¯à®©à¯"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "மாதஙà¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "கடநà¯à®¤ வரà¯à®Ÿà®®à¯"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "வரà¯à®Ÿà®™à¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯"
@@ -162,8 +239,8 @@ msgid "The object type is not specified."
msgstr "பொரà¯à®³à¯ வகை கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "வழà¯"
@@ -175,123 +252,141 @@ msgstr "செயலி பெயர௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà
msgid "The required file {file} is not installed!"
msgstr "தேவைபà¯à®ªà®Ÿà¯à®Ÿ கோபà¯à®ªà¯ {கோபà¯à®ªà¯} நிறà¯à®µà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "பகிரà¯à®µà¯"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "பகிரà¯à®®à¯ போதான வழà¯"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "பகிராமல௠உளà¯à®³à®ªà¯à®ªà¯‹à®¤à®¾à®© வழà¯"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "அனà¯à®®à®¤à®¿à®•ள௠மாறà¯à®®à¯à®ªà¯‹à®¤à®¾à®© வழà¯"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "உஙà¯à®•ளà¯à®Ÿà®©à¯à®®à¯ கà¯à®´à¯à®µà¯à®•à¯à®•ிடையிலà¯à®®à¯ {கà¯à®´à¯} பகிரபà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯ {உரிமையாளரà¯}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "உஙà¯à®•ளà¯à®Ÿà®©à¯ பகிரபà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯ {உரிமையாளரà¯}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "பகிரà¯à®¤à®²à¯"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "இணைபà¯à®ªà¯à®Ÿà®©à¯ பகிரà¯à®¤à®²à¯"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ பாதà¯à®•ாதà¯à®¤à®²à¯"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "காலாவதி தேதியை கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "காலவதியாகà¯à®®à¯ திகதி"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "மினà¯à®©à®žà¯à®šà®²à®¿à®©à¯‚டான பகிரà¯à®µà¯: "
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "நபரà¯à®•ள௠யாரà¯à®®à¯ இலà¯à®²à¯ˆ"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "மீளà¯à®ªà®•ிரà¯à®µà®¤à®±à¯à®•௠அனà¯à®®à®¤à®¿ இலà¯à®²à¯ˆ "
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "{பயனாளரà¯} உடன௠{உரà¯à®ªà¯à®ªà®Ÿà®¿} பகிரபà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "பகிரமà¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "தொகà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à¯"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "கடà¯à®Ÿà¯à®ªà¯à®ªà®¾à®Ÿà®¾à®© அணà¯à®•லà¯"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "படைதà¯à®¤à®²à¯"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "இறà¯à®±à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "நீகà¯à®•à¯à®•"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "பகிரà¯à®¤à®²à¯"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯ பாதà¯à®•ாகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "காலாவதியாகà¯à®®à¯ திகதியை கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®¾à®®à¯ˆà®•à¯à®•ான வழà¯"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "காலாவதியாகà¯à®®à¯ திகதியை கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®µà®¤à®¿à®²à¯ வழà¯"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud இன௠கடவà¯à®šà¯à®šà¯Šà®²à¯ மீளமைபà¯à®ªà¯"
@@ -373,7 +468,7 @@ msgstr "வகைகளை தொகà¯à®•à¯à®•"
msgid "Add"
msgstr "சேரà¯à®•à¯à®•"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "பாதà¯à®•ாபà¯à®ªà¯ எசà¯à®šà®°à®¿à®•à¯à®•ை"
@@ -383,147 +478,75 @@ msgid ""
"OpenSSL extension."
msgstr "கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ எணà¯à®£à®¿à®•à¯à®•ை பாதà¯à®•ாபà¯à®ªà®¾à®© பà¯à®±à®ªà¯à®ªà®¾à®•à¯à®•ி / உணà¯à®Ÿà®¾à®•à¯à®•ிகள௠இலà¯à®²à¯ˆ, தயவà¯à®šà¯†à®¯à¯à®¤à¯ PHP OpenSSL நீடà¯à®šà®¿à®¯à¯ˆ இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•. "
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "பாதà¯à®•ாபà¯à®ªà®¾à®© சீரறà¯à®± எணà¯à®£à®¿à®•à¯à®•ையான பà¯à®±à®ªà¯à®ªà®¾à®•à¯à®•ி இலà¯à®²à¯ˆà®¯à¯†à®©à®¿à®©à¯, தாகà¯à®•à¯à®©à®°à®¾à®²à¯ கடவà¯à®šà¯à®šà¯Šà®²à¯ மீளமைபà¯à®ªà¯ அடையாளவிலà¯à®²à¯ˆà®•ள௠மà¯à®©à¯à®®à¯Šà®´à®¿à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கணகà¯à®•ை கைபà¯à®ªà®±à¯à®±à®²à®¾à®®à¯."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ தரவ௠அடைவ௠மறà¯à®±à¯à®®à¯ உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கோபà¯à®ªà¯à®•à¯à®•ளை பெரà¯à®®à¯à®ªà®¾à®²à¯à®®à¯ இணையதà¯à®¤à®¿à®©à¯‚டாக அணà¯à®•லாமà¯. ownCloud இனால௠வழஙà¯à®•பà¯à®ªà®Ÿà¯à®•ினà¯à®± .htaccess கோபà¯à®ªà¯ வேலை செயà¯à®¯à®µà®¿à®²à¯à®²à¯ˆ. தரவ௠அடைவை நீணà¯à®Ÿ நேரதà¯à®¤à®¿à®±à¯à®•௠அணà¯à®•கà¯à®•ூடியதாக உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ வலைய சேவையகதà¯à®¤à¯ˆ தகவமைகà¯à®•à¯à®®à®¾à®±à¯ நாஙà¯à®•ள௠உறà¯à®¤à®¿à®¯à®¾à®• கூறà¯à®•ிறோம௠அலà¯à®²à®¤à¯ தரவ௠அடைவை வலைய சேவையக மூல ஆவணதà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வெளியே அகறà¯à®±à¯à®•. "
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "<strong> நிரà¯à®µà®¾à®• கணகà¯à®•ொனà¯à®±à¯ˆ </strong> உரà¯à®µà®¾à®•à¯à®•à¯à®•"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "மேமà¯à®ªà®Ÿà¯à®Ÿ"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "தரவ௠கோபà¯à®ªà¯à®±à¯ˆ"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "தரவà¯à®¤à¯à®¤à®³à®¤à¯à®¤à¯ˆ தகவமைகà¯à®•"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "தரவà¯à®¤à¯à®¤à®³ பயனாளரà¯"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "தரவà¯à®¤à¯à®¤à®³ கடவà¯à®šà¯à®šà¯Šà®²à¯"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "தரவà¯à®¤à¯à®¤à®³ பெயரà¯"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "தரவà¯à®¤à¯à®¤à®³ அடà¯à®Ÿà®µà®£à¯ˆ"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "தரவà¯à®¤à¯à®¤à®³ ஓமà¯à®ªà¯à®©à®°à¯"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "அமைபà¯à®ªà¯ˆ à®®à¯à®Ÿà®¿à®•à¯à®•"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "ஞாயிறà¯à®±à¯à®•à¯à®•ிழமை"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "திஙà¯à®•டà¯à®•ிழமை"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "செவà¯à®µà®¾à®¯à¯à®•à¯à®•ிழமை"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "பà¯à®¤à®©à¯à®•ிழமை"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "வியாழகà¯à®•ிழமை"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "வெளà¯à®³à®¿à®•à¯à®•ிழமை"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "சனிகà¯à®•ிழமை"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "தை"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "மாசி"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "பஙà¯à®•à¯à®©à®¿"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "சிதà¯à®¤à®¿à®°à¯ˆ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "வைகாசி"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "ஆனி"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "ஆடி"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "ஆவணி"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "à®à®ªà¯à®ªà®šà®¿"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "காரà¯à®¤à¯à®¤à®¿à®•ை"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "மாரà¯à®•ழி"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "உஙà¯à®•ள௠கடà¯à®Ÿà¯à®ªà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®©à¯ கீழ௠இணைய சேவைகளà¯"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "விடà¯à®ªà®¤à®¿à®•ை செயà¯à®•"
@@ -545,17 +568,17 @@ msgstr "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கணகà¯à®•ை மீணà¯à®Ÿà¯à®®à¯
msgid "Lost your password?"
msgstr "உஙà¯à®•ள௠கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ தொலைதà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà¯€à®°à¯à®•ளா?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "ஞாபகபà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "பà¯à®•à¯à®ªà®¤à®¿à®•ை"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "நீஙà¯à®•ள௠விடà¯à®ªà®¤à®¿à®•ை செயà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà¯€à®°à¯à®•ளà¯."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +592,3 @@ msgstr "அடà¯à®¤à¯à®¤à¯"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "பாதà¯à®•ாபà¯à®ªà¯ எசà¯à®šà®°à®¿à®•à¯à®•ை!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•. <br/> பாதà¯à®•ாபà¯à®ªà¯ காரணஙà¯à®•ளà¯à®•à¯à®•ாக நீஙà¯à®•ள௠எபà¯à®ªà¯‹à®¤à®¾à®µà®¤à¯ உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ மீணà¯à®Ÿà¯à®®à¯ நà¯à®´à¯ˆà®•à¯à®• கேடà¯à®•பà¯à®ªà®Ÿà¯à®µà¯€à®°à¯à®•ளà¯."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯"
diff --git a/l10n/ta_LK/files.po b/l10n/ta_LK/files.po
index 5c90380e9ab..a6ead449b93 100644
--- a/l10n/ta_LK/files.po
+++ b/l10n/ta_LK/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
@@ -23,55 +23,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "ஒர௠கோபà¯à®ªà¯à®®à¯ பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ. அறியபà¯à®ªà®Ÿà®¾à®¤ வழà¯"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "இஙà¯à®•௠வழ௠இலà¯à®²à¯ˆ, கோபà¯à®ªà¯ வெறà¯à®±à®¿à®•ரமாக பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿ கோபà¯à®ªà®¾à®©à®¤à¯ HTML படிவதà¯à®¤à®¿à®²à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³ MAX_FILE_SIZE directive ஠விட கூடியதà¯"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿ கோபà¯à®ªà®¾à®©à®¤à¯ பகà¯à®¤à®¿à®¯à®¾à®• மடà¯à®Ÿà¯à®®à¯‡ பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "எநà¯à®¤ கோபà¯à®ªà¯à®®à¯ பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "ஒர௠தறà¯à®•ாலிகமான கோபà¯à®ªà¯à®±à¯ˆà®¯à¯ˆ காணவிலà¯à®²à¯ˆ"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "வடà¯à®Ÿà®¿à®²à¯ எழà¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -79,149 +79,152 @@ msgstr ""
msgid "Files"
msgstr "கோபà¯à®ªà¯à®•ளà¯"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "அழிகà¯à®•"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "பெயரà¯à®®à®¾à®±à¯à®±à®®à¯"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "நிலà¯à®µà¯ˆà®¯à®¿à®²à¯à®³à¯à®³"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} à®à®±à¯à®•னவே உளà¯à®³à®¤à¯"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "மாறà¯à®±à®¿à®Ÿà¯à®•"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "பெயரை பரிநà¯à®¤à¯à®°à¯ˆà®•à¯à®•"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "இரதà¯à®¤à¯ செயà¯à®•"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "à®®à¯à®©à¯ செயல௠நீகà¯à®•ம௠"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} ஆனத௠{old_name} இனால௠மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯ {கோபà¯à®ªà¯à®•ளà¯}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "நீகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ {கோபà¯à®ªà¯à®•ளà¯}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± பெயரà¯,'\\', '/', '<', '>', ':', '\"', '|', '?' மறà¯à®±à¯à®®à¯ '*' ஆகியன அனà¯à®®à®¤à®¿à®•à¯à®•பà¯à®ªà®Ÿà®®à®¾à®Ÿà¯à®Ÿà®¾à®¤à¯."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr " ZIP கோபà¯à®ªà¯ உரà¯à®µà®¾à®•à¯à®•பà¯à®ªà®Ÿà¯à®•ினà¯à®±à®¤à¯, இத௠சில நேரம௠ஆகலாமà¯."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "அடைவ௠அலà¯à®²à®¤à¯ 0 bytes ஠கொணà¯à®Ÿà¯à®³à¯à®³à®¤à®¾à®²à¯ உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கோபà¯à®ªà¯ˆ பதிவேறà¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "பதிவேறà¯à®±à®²à¯ வழà¯"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "மூடà¯à®•"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "நிலà¯à®µà¯ˆà®¯à®¿à®²à¯à®³à¯à®³"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 கோபà¯à®ªà¯ பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®•ிறதà¯"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®•ள௠பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®•ினà¯à®±à®¤à¯"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "பதிவேறà¯à®±à®²à¯ இரதà¯à®¤à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "கோபà¯à®ªà¯ பதிவேறà¯à®±à®®à¯ செயலà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ உளà¯à®³à®¤à¯. இநà¯à®¤à®ªà¯ பகà¯à®•தà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வெறியேறà¯à®µà®¤à®¾à®©à®¤à¯ பதிவேறà¯à®±à®²à¯ˆ இரதà¯à®¤à¯ செயà¯à®¯à¯à®®à¯."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL வெறà¯à®®à¯ˆà®¯à®¾à®• இரà¯à®•à¯à®•à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®•ள௠வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "வரà¯à®Ÿà¯à®®à¯ போதான வழà¯"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "பெயரà¯"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "அளவà¯"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 கோபà¯à®ªà¯à®±à¯ˆ"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®±à¯ˆà®•ளà¯"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 கோபà¯à®ªà¯"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®•ளà¯"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "பதிவேறà¯à®±à¯à®•"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "கோபà¯à®ªà¯ கையாளà¯à®¤à®²à¯"
@@ -270,36 +273,44 @@ msgstr "கோபà¯à®ªà¯à®±à¯ˆ"
msgid "From link"
msgstr "இணைபà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "பதிவேறà¯à®±à¯à®•"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "பதிவேறà¯à®±à®²à¯ˆ இரதà¯à®¤à¯ செயà¯à®•"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "இஙà¯à®•௠ஒனà¯à®±à¯à®®à¯ இலà¯à®²à¯ˆ. à®à®¤à®¾à®µà®¤à¯ பதிவேறà¯à®±à¯à®•!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "பதிவிறகà¯à®•à¯à®•"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "பதிவேறà¯à®±à®²à¯ மிகபà¯à®ªà¯†à®°à®¿à®¯à®¤à¯"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "நீஙà¯à®•ள௠பதிவேறà¯à®± à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à¯à®®à¯ கோபà¯à®ªà¯à®•ளானத௠இநà¯à®¤ சேவையகதà¯à®¤à®¿à®²à¯ கோபà¯à®ªà¯ பதிவேறà¯à®±à®•à¯à®•ூடிய ஆககà¯à®•ூடிய அளவிலà¯à®®à¯ கூடியதà¯."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "கோபà¯à®ªà¯à®•ள௠வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®•ினà¯à®±à®©, தயவà¯à®šà¯†à®¯à¯à®¤à¯ காதà¯à®¤à®¿à®°à¯à®™à¯à®•ளà¯."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "தறà¯à®ªà¯‹à®¤à¯ வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®ªà®µà¯ˆ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ta_LK/files_encryption.po b/l10n/ta_LK/files_encryption.po
index 2eee3be9df2..fbd878dfe56 100644
--- a/l10n/ta_LK/files_encryption.po
+++ b/l10n/ta_LK/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-18 00:01+0100\n"
-"PO-Revision-Date: 2012-11-17 05:33+0000\n"
-"Last-Translator: suganthi <suganthi@nic.lk>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: ta_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "மறைகà¯à®•à¯à®±à®¿à®¯à¯€à®Ÿà¯"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "மறைகà¯à®•à¯à®±à®¿à®¯à®¾à®•à¯à®•லில௠பினà¯à®µà®°à¯à®®à¯ கோபà¯à®ªà¯ வகைகளை நீகà¯à®•வà¯à®®à¯"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à¯ˆ"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "மறைகà¯à®•à¯à®±à®¿à®¯à®¾à®•à¯à®•லை இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•"
diff --git a/l10n/ta_LK/files_trashbin.po b/l10n/ta_LK/files_trashbin.po
new file mode 100644
index 00000000000..731846dde06
--- /dev/null
+++ b/l10n/ta_LK/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ta_LK\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "பெயரà¯"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 கோபà¯à®ªà¯à®±à¯ˆ"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®±à¯ˆà®•ளà¯"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 கோபà¯à®ªà¯"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{எணà¯à®£à®¿à®•à¯à®•ை} கோபà¯à®ªà¯à®•ளà¯"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ta_LK/files_versions.po b/l10n/ta_LK/files_versions.po
index d1c44e0d9d0..971b58bc8e7 100644
--- a/l10n/ta_LK/files_versions.po
+++ b/l10n/ta_LK/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-20 00:01+0100\n"
-"PO-Revision-Date: 2012-11-19 08:42+0000\n"
-"Last-Translator: suganthi <suganthi@nic.lk>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: ta_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "எலà¯à®²à®¾ பதிபà¯à®ªà¯à®•ளà¯à®®à¯ காலாவதியாகிவிடà¯à®Ÿà®¤à¯"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "வரலாறà¯"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "பதிபà¯à®ªà¯à®•ளà¯"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கோபà¯à®ªà¯à®•à¯à®•ளில௠à®à®±à¯à®•னவே உளà¯à®³ ஆதாரநகலà¯à®•ளின௠பதிபà¯à®ªà¯à®•à¯à®•ளை இவை அழிதà¯à®¤à¯à®µà®¿à®Ÿà¯à®®à¯"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/ta_LK/lib.po b/l10n/ta_LK/lib.po
index 804cdf565e5..80358acada1 100644
--- a/l10n/ta_LK/lib.po
+++ b/l10n/ta_LK/lib.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-15 14:16+0000\n"
-"Last-Translator: suganthi <suganthi@nic.lk>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: ta_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "உதவி"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "அமைபà¯à®ªà¯à®•ளà¯"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "பயனாளரà¯à®•ளà¯"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "செயலிகளà¯"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "நிரà¯à®µà®¾à®•à®®à¯"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "வீசொலிப௠பூடà¯à®Ÿà¯ பதிவிறகà¯à®•ம௠நிறà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "கோபà¯à®ªà¯à®•ளà¯à®’னà¯à®±à®©à¯ பின௠ஒனà¯à®±à®¾à®• பதிவிறகà¯à®•பà¯à®ªà®Ÿà®µà¯‡à®£à¯à®Ÿà¯à®®à¯."
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "கோபà¯à®ªà¯à®•ளà¯à®•à¯à®•௠செலà¯à®•"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "வீ சொலிக௠கோபà¯à®ªà¯à®•ளை உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®±à¯à®•௠தெரிவà¯à®šà¯†à®¯à¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ கோபà¯à®ªà¯à®•ள௠மிகபà¯à®ªà¯†à®°à®¿à®¯à®µà¯ˆ"
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "செயலி இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "அதà¯à®¤à®¾à®Ÿà¯à®šà®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à®¿à®²à¯ வழà¯"
@@ -82,55 +86,152 @@ msgstr "உரை"
msgid "Images"
msgstr "படஙà¯à®•ளà¯"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "செகà¯à®•னà¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 நிமிடதà¯à®¤à®¿à®±à¯à®•௠மà¯à®©à¯ "
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d நிமிடஙà¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 மணிதà¯à®¤à®¿à®¯à®¾à®²à®¤à¯à®¤à®¿à®±à¯à®•௠மà¯à®©à¯"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d மணிதà¯à®¤à®¿à®¯à®¾à®²à®¤à¯à®¤à®¿à®±à¯à®•௠மà¯à®©à¯"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "இனà¯à®±à¯"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "நேறà¯à®±à¯"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d நாடà¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "கடநà¯à®¤ மாதமà¯"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d மாததà¯à®¤à®¿à®±à¯à®•௠மà¯à®©à¯"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "கடநà¯à®¤ வரà¯à®Ÿà®®à¯"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "வரà¯à®Ÿà®™à¯à®•ளà¯à®•à¯à®•௠மà¯à®©à¯"
diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po
index 4b6d4c45e0e..f7bb0ba28b3 100644
--- a/l10n/ta_LK/settings.po
+++ b/l10n/ta_LK/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
@@ -22,6 +22,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "செயலி சேமிபà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ à®à®±à¯à®±à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯à®³à¯à®³à®¤à¯"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "அதà¯à®¤à®¾à®Ÿà¯à®šà®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à®¿à®²à¯ வழà¯"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "கà¯à®´à¯ à®à®±à¯à®•னவே உளà¯à®³à®¤à¯"
@@ -30,7 +39,7 @@ msgstr "கà¯à®´à¯ à®à®±à¯à®•னவே உளà¯à®³à®¤à¯"
msgid "Unable to add group"
msgstr "கà¯à®´à¯à®µà¯ˆ சேரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "செயலியை இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
@@ -42,22 +51,10 @@ msgstr "மினà¯à®©à®žà¯à®šà®²à¯ சேமிகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®
msgid "Invalid email"
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± மினà¯à®©à®žà¯à®šà®²à¯"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± வேணà¯à®Ÿà¯à®•ோளà¯"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "கà¯à®´à¯à®µà¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "அதà¯à®¤à®¾à®Ÿà¯à®šà®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à®¿à®²à¯ வழà¯"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "பயனாளரை நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
@@ -66,6 +63,10 @@ msgstr "பயனாளரை நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
msgid "Language changed"
msgstr "மொழி மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± வேணà¯à®Ÿà¯à®•ோளà¯"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -80,19 +81,47 @@ msgstr "கà¯à®´à¯ %s இல௠பயனாளரை சேரà¯à®•à¯à®• à®
msgid "Unable to remove user from group %s"
msgstr "கà¯à®´à¯ %s இலிரà¯à®¨à¯à®¤à¯ பயனாளரை நீகà¯à®•à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "இயலà¯à®®à¯ˆà®ªà¯à®ª"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "செயலறà¯à®±à®¤à®¾à®•à¯à®•à¯à®•"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "வழà¯"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•"
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "_மொழி_பெயரà¯_"
@@ -104,18 +133,22 @@ msgstr "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ செயலியை சேரà¯à®•à¯à®•"
msgid "More Apps"
msgstr "மேலதிக செயலிகளà¯"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "செயலி ஒனà¯à®±à¯ˆ தெரிவà¯à®šà¯†à®¯à¯à®•"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "apps.owncloud.com இல௠செயலி பகà¯à®•தà¯à®¤à¯ˆ பாரà¯à®•à¯à®•"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"அனà¯à®®à®¤à®¿à®ªà¯à®ªà®¤à¯à®¤à®¿à®°à®®à¯\"></span>-அனà¯à®®à®¤à®¿ பெறà¯à®± <span class=\"ஆசிரியரà¯\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "இறà¯à®±à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -145,83 +178,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "நீஙà¯à®•ள௠<strong>%s</strong> இலà¯à®³à¯à®³ <strong>%s</strong>பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®¯à¯à®³à¯à®³à¯€à®°à¯à®•ளà¯"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "வாடிகà¯à®•ையாளரà¯à®•ளà¯"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯ மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ மாறà¯à®±à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "தறà¯à®ªà¯‹à®¤à¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "பà¯à®¤à®¿à®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯"
-#: templates/personal.php:26
-msgid "show"
-msgstr "காடà¯à®Ÿà¯"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ மாறà¯à®±à¯à®•"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "மினà¯à®©à®žà¯à®šà®²à¯"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ மினà¯à®©à®žà¯à®šà®²à¯ à®®à¯à®•வரி"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯ மீள௠பெறà¯à®µà®¤à¯ˆ இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®±à¯à®•௠மினà¯à®©à®žà¯à®šà®²à¯ à®®à¯à®•வரியை இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "மொழி"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "மொழிபெயரà¯à®•à¯à®• உதவி"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -231,11 +268,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "பெயரà¯"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "கà¯à®´à¯à®•à¯à®•ளà¯"
@@ -247,26 +284,34 @@ msgstr "உரà¯à®µà®¾à®•à¯à®•à¯à®•"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "மறà¯à®±à®µà¯ˆ"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "கà¯à®´à¯ நிரà¯à®µà®¾à®•ி"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "அழிகà¯à®•"
diff --git a/l10n/ta_LK/user_ldap.po b/l10n/ta_LK/user_ldap.po
index e98a09afa8c..9e62a4a67e3 100644
--- a/l10n/ta_LK/user_ldap.po
+++ b/l10n/ta_LK/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: ta_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "நீகà¯à®•ம௠தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "ஓமà¯à®ªà¯à®©à®°à¯"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "நீஙà¯à®•ள௠SSL சேவையை தவிர உடனà¯à®ªà®Ÿà¯ வரைமà¯à®±à¯ˆà®¯à¯ˆ தவிரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à¯. பிறக௠ldaps:.// உடன௠ஆரமà¯à®ªà®¿à®•à¯à®•வà¯à®®à¯"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "தள DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "நீஙà¯à®•ள௠பயனாளரà¯à®•ளà¯à®•à¯à®•à¯à®®à¯ மேனà¯à®®à¯ˆ ததà¯à®¤à®²à®¿à®²à¯ உளà¯à®³ கà¯à®´à¯à®µà®¿à®±à¯à®•à¯à®®à¯ தள DN ஠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à®¾à®®à¯ "
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "பயனாளர௠DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "எநà¯à®¤ ஒதà¯à®•à¯à®•ீடà¯à®®à¯ இலà¯à®²à®¾à®®à®²à¯, உதாரணமà¯. \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "தà¯à®±à¯ˆ "
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "தள பயனாளர௠மரமà¯"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "தள கà¯à®´à¯ மரமà¯"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "கà¯à®´à¯ உறà¯à®ªà¯à®ªà®¿à®©à®°à¯ சஙà¯à®•à®®à¯"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "TLS ஠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "SSL இணைபà¯à®ªà®¿à®±à¯à®•௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯‡à®£à¯à®Ÿà®¾à®®à¯, அத௠தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¯à¯à®®à¯."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "உணரà¯à®šà¯à®šà®¿à®¯à®¾à®© LDAP சேவையகம௠(சாளரஙà¯à®•ளà¯)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "SSL சானà¯à®±à®¿à®¤à®´à®¿à®©à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à¯ˆ நிறà¯à®¤à¯à®¤à®¿à®µà®¿à®Ÿà®µà¯à®®à¯"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "இநà¯à®¤ தெரிவà¯à®•ளில௠மடà¯à®Ÿà¯à®®à¯ இணைபà¯à®ªà¯ வேலைசெயà¯à®¤à®¾à®²à¯, உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ owncloud சேவையகதà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ LDAP சேவையகதà¯à®¤à®¿à®©à¯ SSL சானà¯à®±à®¿à®¤à®´à¯ˆ இறகà¯à®•à¯à®®à®¤à®¿ செயà¯à®¯à®µà¯à®®à¯"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "பரிநà¯à®¤à¯à®°à¯ˆà®•à¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ, சோதனைகà¯à®•ாக மடà¯à®Ÿà¯à®®à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "செகà¯à®•னà¯à®•ளிலà¯. ஒர௠மாறà¯à®±à®®à¯ இடைமாறà¯à®±à¯à®¨à®¿à®©à¯ˆà®µà®•தà¯à®¤à¯ˆ வெறà¯à®±à®¿à®Ÿà®®à®¾à®•à¯à®•à¯à®®à¯."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "பயனாளர௠காடà¯à®šà®¿à®ªà¯à®ªà¯†à®¯à®°à¯ பà¯à®²à®®à¯"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "பயனாளரின௠ownCloud பெயரை உரà¯à®µà®¾à®•à¯à®• LDAP பணà¯à®ªà¯à®•à¯à®•ூறை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "தள பயனாளர௠மரமà¯"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "கà¯à®´à¯à®µà®¿à®©à¯ காடà¯à®šà®¿ பெயர௠பà¯à®²à®®à¯ "
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "ownCloud கà¯à®´à¯à®•à¯à®•ளின௠பெயரà¯à®•ளை உரà¯à®µà®¾à®•à¯à®• LDAP பணà¯à®ªà¯à®•à¯à®•ூறை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "தள கà¯à®´à¯ மரமà¯"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "கà¯à®´à¯ உறà¯à®ªà¯à®ªà®¿à®©à®°à¯ சஙà¯à®•à®®à¯"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "bytes களில௠"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "செகà¯à®•னà¯à®•ளிலà¯. ஒர௠மாறà¯à®±à®®à¯ இடைமாறà¯à®±à¯à®¨à®¿à®©à¯ˆà®µà®•தà¯à®¤à¯ˆ வெறà¯à®±à®¿à®Ÿà®®à®¾à®•à¯à®•à¯à®®à¯."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "பயனாளர௠பெயரிறà¯à®•௠வெறà¯à®±à®¿à®Ÿà®®à®¾à®• விடவà¯à®®à¯ (பொத௠இரà¯à®ªà¯à®ªà¯). இலà¯à®²à®¾à®µà®¿à®Ÿà®¿à®©à¯ LDAP/AD பணà¯à®ªà¯à®•à¯à®•ூறை கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà¯à®®à¯."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "உதவி"
diff --git a/l10n/ta_LK/user_webdavauth.po b/l10n/ta_LK/user_webdavauth.po
index b74d36a8e43..59edf0b378a 100644
--- a/l10n/ta_LK/user_webdavauth.po
+++ b/l10n/ta_LK/user_webdavauth.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: ta_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index ed620b3d817..3e4d3fdf910 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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,24 +17,24 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -50,7 +50,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -79,59 +80,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:286
msgid "Settings"
msgstr ""
-#: js/js.js:711
+#: js/js.js:767
msgid "seconds ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:768
msgid "1 minute ago"
msgstr ""
-#: js/js.js:713
+#: js/js.js:769
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:770
msgid "1 hour ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:771
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:716
+#: js/js.js:772
msgid "today"
msgstr ""
-#: js/js.js:717
+#: js/js.js:773
msgid "yesterday"
msgstr ""
-#: js/js.js:718
+#: js/js.js:774
msgid "{days} days ago"
msgstr ""
-#: js/js.js:719
+#: js/js.js:775
msgid "last month"
msgstr ""
-#: js/js.js:720
+#: js/js.js:776
msgid "{months} months ago"
msgstr ""
-#: js/js.js:721
+#: js/js.js:777
msgid "months ago"
msgstr ""
-#: js/js.js:722
+#: js/js.js:778
msgid "last year"
msgstr ""
-#: js/js.js:723
+#: js/js.js:779
msgid "years ago"
msgstr ""
@@ -161,8 +238,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr ""
@@ -174,123 +251,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr ""
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a href="
+"\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr ""
@@ -372,7 +467,7 @@ msgstr ""
msgid "Add"
msgstr ""
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -382,147 +477,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr ""
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr ""
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr ""
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr ""
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr ""
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr ""
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr ""
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr ""
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr ""
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr ""
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr ""
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr ""
@@ -544,16 +567,16 @@ msgstr ""
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr ""
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
+#: templates/login.php:49
+msgid "Alternative Logins"
msgstr ""
#: templates/part.pagenavi.php:3
@@ -568,17 +591,3 @@ msgstr ""
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 3b19c76ccf2..30a4a6ba248 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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"
@@ -22,55 +22,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -78,149 +78,152 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:290
-msgid "deleted {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr ""
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -269,36 +272,44 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
+#: templates/index.php:40
+msgid "Trash bin"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr ""
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 725d407f1b5..e25b518d996 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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,18 +17,22 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:6
-msgid "Enable Encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
msgstr ""
#: templates/settings.php:7
-msgid "None"
+msgid "Exclude the following file types from encryption:"
msgstr ""
#: templates/settings.php:12
-msgid "Exclude the following file types from encryption"
+msgid "None"
msgstr ""
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index 2216112fdd3..4c6eb5a33f1 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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"
@@ -41,13 +41,13 @@ msgstr ""
msgid "Error configuring Google Drive storage"
msgstr ""
-#: lib/config.php:434
+#: lib/config.php:413
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
msgstr ""
-#: lib/config.php:435
+#: lib/config.php:414
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting "
"of FTP shares is not possible. Please ask your system administrator to "
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index c6bad656955..3a315bea688 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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"
@@ -25,24 +25,24 @@ msgstr ""
msgid "Submit"
msgstr ""
-#: templates/public.php:17
+#: templates/public.php:9
#, php-format
msgid "%s shared the folder %s with you"
msgstr ""
-#: templates/public.php:19
+#: templates/public.php:11
#, php-format
msgid "%s shared the file %s with you"
msgstr ""
-#: templates/public.php:22 templates/public.php:38
+#: templates/public.php:14 templates/public.php:30
msgid "Download"
msgstr ""
-#: templates/public.php:37
+#: templates/public.php:29
msgid "No preview available for"
msgstr ""
-#: templates/public.php:43
+#: templates/public.php:35
msgid "web services under your control"
msgstr ""
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
new file mode 100644
index 00000000000..210c8f9948f
--- /dev/null
+++ b/l10n/templates/files_trashbin.pot
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 5f6b249e535..5c206f287f0 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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,20 +17,43 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:7
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:10
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index c5c54f1e478..a4a716ac8f8 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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,51 +17,55 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: app.php:301
+#: app.php:339
msgid "Help"
msgstr ""
-#: app.php:308
+#: app.php:346
msgid "Personal"
msgstr ""
-#: app.php:313
+#: app.php:351
msgid "Settings"
msgstr ""
-#: app.php:318
+#: app.php:356
msgid "Users"
msgstr ""
-#: app.php:325
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:327
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,152 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index cda81e89909..7b4a1633236 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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"
@@ -21,6 +21,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -29,7 +38,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -41,22 +50,10 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr ""
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -65,6 +62,10 @@ msgstr ""
msgid "Language changed"
msgstr ""
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -79,19 +80,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr ""
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr ""
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr ""
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr ""
@@ -103,19 +132,23 @@ msgstr ""
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr ""
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid ""
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -145,83 +178,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr ""
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr ""
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr ""
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr ""
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr ""
-#: templates/personal.php:26
-msgid "show"
+#: templates/personal.php:42
+msgid "Change password"
msgstr ""
-#: templates/personal.php:27
-msgid "Change password"
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
msgstr ""
-#: templates/personal.php:33
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr ""
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr ""
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr ""
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr ""
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr ""
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank"
"\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" "
@@ -230,11 +267,11 @@ msgid ""
"General Public License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr ""
@@ -246,26 +283,34 @@ msgstr ""
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr ""
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr ""
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index d1776300b9f..9f427933410 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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,6 +17,58 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may "
@@ -26,156 +78,230 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will "
-"not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr ""
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index 241d9102a86..100a693ef27 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\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,12 +17,17 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:7
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po
index 181be943eb8..ae9a0125367 100644
--- a/l10n/th_TH/core.po
+++ b/l10n/th_TH/core.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012-2013.
# AriesAnywhere Anywhere <ariesanywherer@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
@@ -19,29 +19,29 @@ msgstr ""
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "ผู้ใช้งาน %s ได้à¹à¸Šà¸£à¹Œà¹„ฟล์ให้à¸à¸±à¸šà¸„ุณ"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "ผู้ใช้งาน %s ได้à¹à¸Šà¸£à¹Œà¹‚ฟลเดอร์ให้à¸à¸±à¸šà¸„ุณ"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "ผู้ใช้งาน %s ได้à¹à¸Šà¸£à¹Œà¹„ฟล์ \"%s\" ให้à¸à¸±à¸šà¸„ุณ à¹à¸¥à¸°à¸„ุณสามารถสามารถดาวน์โหลดไฟล์ดังà¸à¸¥à¹ˆà¸²à¸§à¹„ด้จาà¸à¸—ี่นี่: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "ผู้ใช้งาน %s ได้à¹à¸Šà¸£à¹Œà¹‚ฟลเดอร์ \"%s\" ให้à¸à¸±à¸šà¸„ุณ à¹à¸¥à¸°à¸„ุณสามารถดาวน์โหลดโฟลเดอร์ดังà¸à¸¥à¹ˆà¸²à¸§à¹„ด้จาà¸à¸—ี่นี่: %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -52,8 +52,9 @@ msgid "No category to add?"
msgstr "ไม่มีหมวดหมู่ที่ต้องà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "หมวดหมู่นี้มีอยู่à¹à¸¥à¹‰à¸§: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -81,59 +82,135 @@ msgstr "ยังไม่ได้เลือà¸à¸«à¸¡à¸§à¸”หมู่ที
msgid "Error removing %s from favorites."
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¥à¸š %s ออà¸à¸ˆà¸²à¸à¸£à¸²à¸¢à¸à¸²à¸£à¹‚ปรด"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "วันอาทิตย์"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "วันจันทร์"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "วันอังคาร"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "วันพุธ"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "วันพฤหัสบดี"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "วันศุà¸à¸£à¹Œ"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "วันเสาร์"
+
+#: js/config.php:33
+msgid "January"
+msgstr "มà¸à¸£à¸²à¸„ม"
+
+#: js/config.php:33
+msgid "February"
+msgstr "à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ"
+
+#: js/config.php:33
+msgid "March"
+msgstr "มีนาคม"
+
+#: js/config.php:33
+msgid "April"
+msgstr "เมษายน"
+
+#: js/config.php:33
+msgid "May"
+msgstr "พฤษภาคม"
+
+#: js/config.php:33
+msgid "June"
+msgstr "มิถุนายน"
+
+#: js/config.php:33
+msgid "July"
+msgstr "à¸à¸£à¸à¸à¸²à¸„ม"
+
+#: js/config.php:33
+msgid "August"
+msgstr "สิงหาคม"
+
+#: js/config.php:33
+msgid "September"
+msgstr "à¸à¸±à¸™à¸¢à¸²à¸¢à¸™"
+
+#: js/config.php:33
+msgid "October"
+msgstr "ตุลาคม"
+
+#: js/config.php:33
+msgid "November"
+msgstr "พฤศจิà¸à¸²à¸¢à¸™"
+
+#: js/config.php:33
+msgid "December"
+msgstr "ธันวาคม"
+
+#: js/js.js:284
msgid "Settings"
msgstr "ตั้งค่า"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "วินาที à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 นาทีà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} นาทีà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 ชั่วโมงà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} ชั่วโมงà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "วันนี้"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "เมื่อวานนี้"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{day} วันà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "เดือนที่à¹à¸¥à¹‰à¸§"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} เดือนà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "เดือน ที่ผ่านมา"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "ปีที่à¹à¸¥à¹‰à¸§"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "ปี ที่ผ่านมา"
@@ -163,8 +240,8 @@ msgid "The object type is not specified."
msgstr "ชนิดของวัตถุยังไม่ได้รับà¸à¸²à¸£à¸£à¸°à¸šà¸¸"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "พบข้อผิดพลาด"
@@ -176,122 +253,140 @@ msgstr "ชื่อของà¹à¸­à¸›à¸¢à¸±à¸‡à¹„ม่ได้รับà¸à¸²
msgid "The required file {file} is not installed!"
msgstr "ไฟล์ {file} ซึ่งเป็นไฟล์ที่จำเป็นต้องได้รับà¸à¸²à¸£à¸•ิดตั้งไว้à¸à¹ˆà¸­à¸™ ยังไม่ได้ถูà¸à¸•ิดตั้ง"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "à¹à¸Šà¸£à¹Œ"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "à¹à¸Šà¸£à¹Œà¹à¸¥à¹‰à¸§"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในระหว่างà¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "ได้à¹à¸Šà¸£à¹Œà¹ƒà¸«à¹‰à¸à¸±à¸šà¸„ุณ à¹à¸¥à¸°à¸à¸¥à¸¸à¹ˆà¸¡ {group} โดย {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "ถูà¸à¹à¸Šà¸£à¹Œà¹ƒà¸«à¹‰à¸à¸±à¸šà¸„ุณโดย {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "à¹à¸Šà¸£à¹Œà¹ƒà¸«à¹‰à¸à¸±à¸š"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "à¹à¸Šà¸£à¹Œà¸”้วยลิงà¸à¹Œ"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "ใส่รหัสผ่านไว้"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "รหัสผ่าน"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "ส่งลิงà¸à¹Œà¹ƒà¸«à¹‰à¸—างอีเมล"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "ส่ง"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "à¸à¸³à¸«à¸™à¸”วันที่หมดอายุ"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "วันที่หมดอายุ"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "à¹à¸Šà¸£à¹Œà¸œà¹ˆà¸²à¸™à¸—างอีเมล"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "ไม่พบบุคคลที่ต้องà¸à¸²à¸£"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "ไม่อนุà¸à¸²à¸•ให้à¹à¸Šà¸£à¹Œà¸‚้อมูลซ้ำได้"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "ได้à¹à¸Šà¸£à¹Œ {item} ให้à¸à¸±à¸š {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œ"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "สามารถà¹à¸à¹‰à¹„ข"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "ระดับควบคุมà¸à¸²à¸£à¹€à¸‚้าใช้งาน"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "สร้าง"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "อัพเดท"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "ลบ"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "à¹à¸Šà¸£à¹Œ"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "ใส่รหัสผ่านไว้"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•ั้งค่าวันที่หมดอายุ"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸•ั้งค่าวันที่หมดอายุ"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
-msgstr ""
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¹ˆà¸‡..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
-msgstr ""
+msgstr "ส่งอีเมล์à¹à¸¥à¹‰à¸§"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "à¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทไม่เป็นผลสำเร็จ à¸à¸£à¸¸à¸“าà¹à¸ˆà¹‰à¸‡à¸›à¸±à¸à¸«à¸²à¸—ี่เà¸à¸´à¸”ขึ้นไปยัง <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">คอมมูนิตี้ผู้ใช้งาน ownCloud</a>"
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "à¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทเสร็จเรียบร้อยà¹à¸¥à¹‰à¸§ à¸à¸³à¸¥à¸±à¸‡à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹€à¸ªà¹‰à¸™à¸—างไปที่ ownCloud อยู่ในขณะนี้"
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
@@ -374,7 +469,7 @@ msgstr "à¹à¸à¹‰à¹„ขหมวดหมู่"
msgid "Add"
msgstr "เพิ่ม"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "คำเตือนเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸„วามปลอดภัย"
@@ -384,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr "ยังไม่มีตัวสร้างหมายเลขà¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™, à¸à¸£à¸¸à¸“าเปิดใช้งานส่วนเสริม PHP OpenSSL"
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "หาà¸à¸›à¸£à¸²à¸¨à¸ˆà¸²à¸à¸•ัวสร้างหมายเลขà¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¸—ี่ช่วยป้องà¸à¸±à¸™à¸„วามปลอดภัย ผู้บุà¸à¸£à¸¸à¸à¸­à¸²à¸ˆà¸ªà¸²à¸¡à¸²à¸£à¸–ที่จะคาดคะเนรหัสยืนยันà¸à¸²à¸£à¹€à¸‚้าถึงเพื่อรีเซ็ตรหัสผ่าน à¹à¸¥à¸°à¹€à¸­à¸²à¸šà¸±à¸à¸Šà¸µà¸‚องคุณไปเป็นของตนเองได้"
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "ไดเร็à¸à¸—อรี่ข้อมูลà¹à¸¥à¸°à¹„ฟล์ของคุณสามารถเข้าถึงได้จาà¸à¸­à¸´à¸™à¹€à¸—อร์เน็ต ไฟล์ .htaccess ที่ ownCloud มีให้ไม่สามารถทำงานได้อย่างเหมาะสม เราขอà¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¸„ุณà¸à¸³à¸«à¸™à¸”ค่าเว็บเซิร์ฟเวอร์ใหม่ในรูปà¹à¸šà¸šà¸—ี่ไดเร็à¸à¸—อรี่เà¸à¹‡à¸šà¸‚้อมูลไม่สามารถเข้าถึงได้อีà¸à¸•่อไป หรือคุณได้ย้ายไดเร็à¸à¸—อรี่ที่ใช้เà¸à¹‡à¸šà¸‚้อมูลไปอยู่ภายนอà¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡ root ของเว็บเซิร์ฟเวอร์à¹à¸¥à¹‰à¸§"
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "สร้าง <strong>บัà¸à¸Šà¸µà¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸š</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "ขั้นสูง"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "โฟลเดอร์เà¸à¹‡à¸šà¸‚้อมูล"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "à¸à¸³à¸«à¸™à¸”ค่าà¸à¸²à¸™à¸‚้อมูล"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "จะถูà¸à¹ƒà¸Šà¹‰"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "ชื่อผู้ใช้งานà¸à¸²à¸™à¸‚้อมูล"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "รหัสผ่านà¸à¸²à¸™à¸‚้อมูล"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "ชื่อà¸à¸²à¸™à¸‚้อมูล"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "พื้นที่ตารางในà¸à¸²à¸™à¸‚้อมูล"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Database host"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "ติดตั้งเรียบร้อยà¹à¸¥à¹‰à¸§"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "วันอาทิตย์"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "วันจันทร์"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "วันอังคาร"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "วันพุธ"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "วันพฤหัสบดี"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "วันศุà¸à¸£à¹Œ"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "วันเสาร์"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "มà¸à¸£à¸²à¸„ม"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "มีนาคม"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "เมษายน"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "พฤษภาคม"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "มิถุนายน"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "à¸à¸£à¸à¸à¸²à¸„ม"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "สิงหาคม"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "à¸à¸±à¸™à¸¢à¸²à¸¢à¸™"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "ตุลาคม"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "พฤศจิà¸à¸²à¸¢à¸™"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "ธันวาคม"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "web services under your control"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "ออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š"
@@ -546,17 +569,17 @@ msgstr "à¸à¸£à¸¸à¸“าเปลี่ยนรหัสผ่านของค
msgid "Lost your password?"
msgstr "ลืมรหัสผ่าน?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "จำรหัสผ่าน"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "เข้าสู่ระบบ"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "คุณออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸šà¹€à¸£à¸µà¸¢à¸šà¸£à¹‰à¸­à¸¢à¹à¸¥à¹‰à¸§"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,18 +592,4 @@ msgstr "ถัดไป"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "คำเตือนเพื่อความปลอดภัย!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "à¸à¸£à¸¸à¸“ายืนยันรหัสผ่านของคุณ <br/> เพื่อความปลอดภัย คุณจะถูà¸à¸‚อให้à¸à¸£à¸­à¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸­à¸µà¸à¸„รั้ง"
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "ยืนยัน"
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹€à¸”ท ownCloud ไปเป็นรุ่น %s, à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่"
diff --git a/l10n/th_TH/files.po b/l10n/th_TH/files.po
index 290a7cebd89..2104d5cd25f 100644
--- a/l10n/th_TH/files.po
+++ b/l10n/th_TH/files.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012-2013.
# AriesAnywhere Anywhere <ariesanywherer@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
@@ -22,207 +22,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่à¹à¸¥à¹‰à¸§"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "ไม่สามารถย้าย %s ได้"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "ไม่สามารถเปลี่ยนชื่อไฟล์ได้"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "ยังไม่มีไฟล์ใดที่ถูà¸à¸­à¸±à¸žà¹‚หลด เà¸à¸´à¸”ข้อผิดพลาดที่ไม่ทราบสาเหตุ"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "ไม่มีข้อผิดพลาดใดๆ ไฟล์ถูà¸à¸­à¸±à¸žà¹‚หลดเรียบร้อยà¹à¸¥à¹‰à¸§"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "ขนาดไฟล์ที่อัพโหลดมีขนาดเà¸à¸´à¸™ upload_max_filesize ที่ระบุไว้ใน php.ini"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "ไฟล์ที่อัพโหลดมีขนาดเà¸à¸´à¸™à¸„ำสั่ง MAX_FILE_SIZE ที่ระบุเอาไว้ในรูปà¹à¸šà¸šà¸„ำสั่งในภาษา HTML"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "ไฟล์ที่อัพโหลดยังไม่ได้ถูà¸à¸­à¸±à¸žà¹‚หลดอย่างสมบูรณ์"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "ยังไม่มีไฟล์ที่ถูà¸à¸­à¸±à¸žà¹‚หลด"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£à¸Šà¸±à¹ˆà¸§à¸„ราวเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "เขียนข้อมูลลงà¹à¸œà¹ˆà¸™à¸”ิสà¸à¹Œà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "ไดเร็à¸à¸—อรี่ไม่ถูà¸à¸•้อง"
#: appinfo/app.php:10
msgid "Files"
msgstr "ไฟล์"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "ลบ"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "เปลี่ยนชื่อ"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "อยู่ระหว่างดำเนินà¸à¸²à¸£"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} มีอยู่à¹à¸¥à¹‰à¸§à¹ƒà¸™à¸£à¸°à¸šà¸š"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "à¹à¸—นที่"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "à¹à¸™à¸°à¸™à¸³à¸Šà¸·à¹ˆà¸­"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "ยà¸à¹€à¸¥à¸´à¸"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "à¹à¸—นที่ {new_name} à¹à¸¥à¹‰à¸§"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "เลิà¸à¸—ำ"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "à¹à¸—นที่ {new_name} ด้วย {old_name} à¹à¸¥à¹‰à¸§"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¹à¸¥à¹‰à¸§ {files} ไฟล์"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "ลบไฟล์à¹à¸¥à¹‰à¸§ {files} ไฟล์"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "ดำเนินà¸à¸²à¸£à¸•ามคำสั่งลบ"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' เป็นชื่อไฟล์ที่ไม่ถูà¸à¸•้อง"
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "ชื่อไฟล์ไม่สามารถเว้นว่างได้"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "ชื่อที่ใช้ไม่ถูà¸à¸•้อง, '\\', '/', '<', '>', ':', '\"', '|', '?' à¹à¸¥à¸° '*' ไม่ได้รับอนุà¸à¸²à¸•ให้ใช้งานได้"
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์บีบอัด ZIP อาจใช้เวลาสัà¸à¸„รู่"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลของคุณเต็มà¹à¸¥à¹‰à¸§ ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีà¸à¸•่อไป"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลของคุณใà¸à¸¥à¹‰à¹€à¸•็มà¹à¸¥à¹‰à¸§ ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸•รียมดาวน์โหลดข้อมูล หาà¸à¹„ฟล์มีขนาดใหà¸à¹ˆ อาจใช้เวลาสัà¸à¸„รู่"
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจาà¸à¹„ฟล์ดังà¸à¸¥à¹ˆà¸²à¸§à¹€à¸›à¹‡à¸™à¹„ดเร็à¸à¸—อรี่หรือมีขนาด 0 ไบต์"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "ปิด"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "อยู่ระหว่างดำเนินà¸à¸²à¸£"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹‚หลดไฟล์ 1 ไฟล์"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹‚หลด {count} ไฟล์"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸¢à¸à¹€à¸¥à¸´à¸"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดไฟล์à¸à¸³à¸¥à¸±à¸‡à¸­à¸¢à¸¹à¹ˆà¹ƒà¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸”ำเนินà¸à¸²à¸£ à¸à¸²à¸£à¸­à¸­à¸à¸ˆà¸²à¸à¸«à¸™à¹‰à¸²à¹€à¸§à¹‡à¸šà¸™à¸µà¹‰à¸ˆà¸°à¸—ำให้à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸¢à¸à¹€à¸¥à¸´à¸"
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL ไม่สามารถเว้นว่างได้"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "สà¹à¸à¸™à¹„ฟล์à¹à¸¥à¹‰à¸§ {count} ไฟล์"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "พบข้อผิดพลาดในระหว่างà¸à¸²à¸£à¸ªà¹à¸à¸™à¹„ฟล์"
+msgstr "ชื่อโฟลเดอร์ไม่ถูà¸à¸•้อง à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ 'à¹à¸Šà¸£à¹Œ' สงวนไว้สำหรับ Owncloud เท่านั้น"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "ชื่อ"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "ขนาด"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "ปรับปรุงล่าสุด"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 โฟลเดอร์"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} โฟลเดอร์"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 ไฟล์"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} ไฟล์"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "อัพโหลด"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¹„ฟล์"
@@ -271,36 +274,44 @@ msgstr "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£"
msgid "From link"
msgstr "จาà¸à¸¥à¸´à¸‡à¸à¹Œ"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "อัพโหลด"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ à¸à¸£à¸¸à¸“าอัพโหลดไฟล์!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "ดาวน์โหลด"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "ไฟล์ที่อัพโหลดมีขนาดใหà¸à¹ˆà¹€à¸à¸´à¸™à¹„ป"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเà¸à¸´à¸™à¸à¸§à¹ˆà¸²à¸‚นาดสูงสุดที่à¸à¸³à¸«à¸™à¸”ไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "ไฟล์à¸à¸³à¸¥à¸±à¸‡à¸­à¸¢à¸¹à¹ˆà¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸à¸²à¸£à¸ªà¹à¸à¸™, à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "ไฟล์ที่à¸à¸³à¸¥à¸±à¸‡à¸ªà¹à¸à¸™à¸­à¸¢à¸¹à¹ˆà¸‚ณะนี้"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹€à¸à¸£à¸”หน่วยความจำà¹à¸„ชของระบบไฟล์..."
diff --git a/l10n/th_TH/files_encryption.po b/l10n/th_TH/files_encryption.po
index f396eed4dab..0f055b572fb 100644
--- a/l10n/th_TH/files_encryption.po
+++ b/l10n/th_TH/files_encryption.po
@@ -3,33 +3,37 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-15 02:02+0200\n"
-"PO-Revision-Date: 2012-08-14 13:12+0000\n"
-"Last-Translator: AriesAnywhere Anywhere <ariesanywhere@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: th_TH\n"
-"Plural-Forms: nplurals=1; plural=0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "à¸à¸²à¸£à¹€à¸‚้ารหัส"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "ไม่ต้องรวมชนิดของไฟล์ดังต่อไปนี้จาà¸à¸à¸²à¸£à¹€à¸‚้ารหัส"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "ไม่ต้อง"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "เปิดใช้งานà¸à¸²à¸£à¹€à¸‚้ารหัส"
diff --git a/l10n/th_TH/files_external.po b/l10n/th_TH/files_external.po
index efca59c6be0..6d58bbeaf81 100644
--- a/l10n/th_TH/files_external.po
+++ b/l10n/th_TH/files_external.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-23 00:05+0100\n"
+"PO-Revision-Date: 2013-01-22 00:50+0000\n"
+"Last-Translator: AriesAnywhere Anywhere <ariesanywhere@gmail.com>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -46,14 +46,14 @@ msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>คำเตือน:</b> \"smbclient\" ยังไม่ได้ถูà¸à¸•ิดตั้ง. à¸à¸²à¸£à¸Šà¸µà¹‰ CIFS/SMB เพื่อà¹à¸Šà¸£à¹Œà¸‚้อมูลไม่สามารถà¸à¸£à¸°à¸—ำได้ à¸à¸£à¸¸à¸“าสอบถามข้อมูลเพิ่มเติมจาà¸à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸šà¹€à¸žà¸·à¹ˆà¸­à¸•ิดตั้ง."
#: lib/config.php:435
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
"install it."
-msgstr ""
+msgstr "<b>คำเตือน:</b> à¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ FTP ในภาษา PHP ยังไม่ได้ถูà¸à¹€à¸›à¸´à¸”ใช้งานหรือถูà¸à¸•ิดตั้ง. à¸à¸²à¸£à¸Šà¸µà¹‰ FTP เพื่อà¹à¸Šà¸£à¹Œà¸‚้อมูลไม่สามารถดำเนินà¸à¸²à¸£à¹„ด้ à¸à¸£à¸¸à¸“าสอบถามข้อมูลเพิ่มเติมจาà¸à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸šà¹€à¸žà¸·à¹ˆà¸­à¸•ิดตั้ง"
#: templates/settings.php:3
msgid "External Storage"
@@ -100,7 +100,7 @@ msgid "Users"
msgstr "ผู้ใช้งาน"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "ลบ"
@@ -112,10 +112,10 @@ msgstr "เปิดให้มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸žà¸·à¹‰à¸™à¸—ี่จั
msgid "Allow users to mount their own external storage"
msgstr "อนุà¸à¸²à¸•ให้ผู้ใช้งานสามารถชี้ตำà¹à¸«à¸™à¹ˆà¸‡à¹„ปที่พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลภายนอà¸à¸‚องตนเองได้"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr "ใบรับรองความปลอดภัยด้วยระบบ SSL จาภRoot"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr "นำเข้าข้อมูลใบรับรองความปลอดภัยจาภRoot"
diff --git a/l10n/th_TH/files_trashbin.po b/l10n/th_TH/files_trashbin.po
new file mode 100644
index 00000000000..45c363a10ad
--- /dev/null
+++ b/l10n/th_TH/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "ดำเนินà¸à¸²à¸£à¸„ืนค่า"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "ชื่อ"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "ลบà¹à¸¥à¹‰à¸§"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 โฟลเดอร์"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} โฟลเดอร์"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 ไฟล์"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} ไฟล์"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "ไม่มีอะไรอยู่ในนี้ ถังขยะของคุณยังว่างอยู่"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "คืนค่า"
diff --git a/l10n/th_TH/files_versions.po b/l10n/th_TH/files_versions.po
index 7582be9f673..4d724184b1c 100644
--- a/l10n/th_TH/files_versions.po
+++ b/l10n/th_TH/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-23 02:01+0200\n"
-"PO-Revision-Date: 2012-09-22 11:09+0000\n"
-"Last-Translator: AriesAnywhere Anywhere <ariesanywhere@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "หมดอายุทุà¸à¸£à¸¸à¹ˆà¸™"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "ประวัติ"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "รุ่น"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "นี่จะเป็นลบทิ้งไฟล์รุ่นที่ทำà¸à¸²à¸£à¸ªà¸³à¸£à¸­à¸‡à¸‚้อมูลทั้งหมดที่มีอยู่ของคุณทิ้งไป"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/th_TH/lib.po b/l10n/th_TH/lib.po
index 93bec7510e5..b7a10f4fd26 100644
--- a/l10n/th_TH/lib.po
+++ b/l10n/th_TH/lib.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-23 00:01+0100\n"
-"PO-Revision-Date: 2012-11-22 10:45+0000\n"
-"Last-Translator: AriesAnywhere Anywhere <ariesanywhere@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "ช่วยเหลือ"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "ส่วนตัว"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "ตั้งค่า"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "ผู้ใช้งาน"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "à¹à¸­à¸›à¸¯"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "ผู้ดูà¹à¸¥"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "คุณสมบัติà¸à¸²à¸£à¸”าวน์โหลด zip ถูà¸à¸›à¸´à¸”à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹„ว้"
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "ไฟล์สามารถดาวน์โหลดได้ทีละครั้งเท่านั้น"
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "à¸à¸¥à¸±à¸šà¹„ปที่ไฟล์"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "ไฟล์ที่เลือà¸à¸¡à¸µà¸‚นาดใหà¸à¹ˆà¹€à¸à¸´à¸™à¸à¸§à¹ˆà¸²à¸—ี่จะสร้างเป็นไฟล์ zip"
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "ไม่สามารถà¸à¸³à¸«à¸™à¸”ได้"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "à¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นดังà¸à¸¥à¹ˆà¸²à¸§à¸¢à¸±à¸‡à¹„ม่ได้เปิดใช้งาน"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในสิทธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน"
@@ -82,55 +86,152 @@ msgstr "ข้อความ"
msgid "Images"
msgstr "รูปภาพ"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "วินาทีที่ผ่านมา"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 นาทีมาà¹à¸¥à¹‰à¸§"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d นาทีที่ผ่านมา"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 ชั่วโมงà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d ชั่วโมงà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "วันนี้"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "เมื่อวานนี้"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d วันที่ผ่านมา"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "เดือนที่à¹à¸¥à¹‰à¸§"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d เดือนมาà¹à¸¥à¹‰à¸§"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "ปีที่à¹à¸¥à¹‰à¸§"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "ปีที่ผ่านมา"
diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po
index 27f4a874232..5e720fb1003 100644
--- a/l10n/th_TH/settings.po
+++ b/l10n/th_TH/settings.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012-2013.
# AriesAnywhere Anywhere <ariesanywherer@gmail.com>, 2012.
# <icewind1991@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
@@ -24,6 +24,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "ไม่สามารถโหลดรายà¸à¸²à¸£à¸ˆà¸²à¸ App Store ได้"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "มีà¸à¸¥à¸¸à¹ˆà¸¡à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸­à¸¢à¸¹à¹ˆà¹ƒà¸™à¸£à¸°à¸šà¸šà¸­à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§"
@@ -32,7 +41,7 @@ msgstr "มีà¸à¸¥à¸¸à¹ˆà¸¡à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸­à¸¢à¸¹à¹ˆà¹ƒà¸™à¸£à¸°à¸š
msgid "Unable to add group"
msgstr "ไม่สามารถเพิ่มà¸à¸¥à¸¸à¹ˆà¸¡à¹„ด้"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "ไม่สามารถเปิดใช้งานà¹à¸­à¸›à¹„ด้"
@@ -44,22 +53,10 @@ msgstr "อีเมลถูà¸à¸šà¸±à¸™à¸—ึà¸à¹à¸¥à¹‰à¸§"
msgid "Invalid email"
msgstr "อีเมลไม่ถูà¸à¸•้อง"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "เปลี่ยนชื่อบัà¸à¸Šà¸µ OpenID à¹à¸¥à¹‰à¸§"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "คำร้องขอไม่ถูà¸à¸•้อง"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "ไม่สามารถลบà¸à¸¥à¸¸à¹ˆà¸¡à¹„ด้"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "ไม่สามารถลบผู้ใช้งานได้"
@@ -68,9 +65,13 @@ msgstr "ไม่สามารถลบผู้ใช้งานได้"
msgid "Language changed"
msgstr "เปลี่ยนภาษาเรียบร้อยà¹à¸¥à¹‰à¸§"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "คำร้องขอไม่ถูà¸à¸•้อง"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
-msgstr ""
+msgstr "ผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¹„ม่สามารถลบตัวเองออà¸à¸ˆà¸²à¸à¸à¸¥à¸¸à¹ˆà¸¡à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¹„ด้"
#: ajax/togglegroups.php:28
#, php-format
@@ -82,19 +83,47 @@ msgstr "ไม่สามารถเพิ่มผู้ใช้งานเ
msgid "Unable to remove user from group %s"
msgstr "ไม่สามารถลบผู้ใช้งานออà¸à¸ˆà¸²à¸à¸à¸¥à¸¸à¹ˆà¸¡ %s ได้"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "ไม่สามารถอัพเดทà¹à¸­à¸›à¸¯"
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "อัพเดทไปเป็นรุ่น {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "ปิดใช้งาน"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "เปิดใช้งาน"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹€à¸”ทข้อมูล..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในระหว่างà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทà¹à¸­à¸›à¸¯"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "ข้อผิดพลาด"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "อัพเดทà¹à¸¥à¹‰à¸§"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึุà¸à¸‚้อมูล..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "ภาษาไทย"
@@ -106,124 +135,132 @@ msgstr "เพิ่มà¹à¸­à¸›à¸‚องคุณ"
msgid "More Apps"
msgstr "à¹à¸­à¸›à¸¯à¸­à¸·à¹ˆà¸™à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•ิม"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "เลือภApp"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "ดูหน้าà¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นที่ apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-ลิขสิทธิ์à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹‚ดย <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "อัพเดท"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "เอà¸à¸ªà¸²à¸£à¸„ู่มือà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "เอà¸à¸ªà¸²à¸£à¸„ู่มือà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸š"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "เอà¸à¸ªà¸²à¸£à¸„ู่มือà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸­à¸­à¸™à¹„ลน์"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "à¸à¸£à¸°à¸”านสนทนา"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr ""
+msgstr "Bugtracker"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "บริà¸à¸²à¸£à¸¥à¸¹à¸à¸„้าà¹à¸šà¸šà¹€à¸ªà¸µà¸¢à¸„่าใช้จ่าย"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "คุณได้ใช้งานไปà¹à¸¥à¹‰à¸§ <strong>%s</strong> จาà¸à¸ˆà¸³à¸™à¸§à¸™à¸—ี่สามารถใช้ได้ <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "ลูà¸à¸„้า"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "รหัสผ่าน"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "รหัสผ่านของคุณถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸¥à¹‰à¸§"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "รหัสผ่านปัจจุบัน"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "รหัสผ่านใหม่"
-#: templates/personal.php:26
-msgid "show"
-msgstr "à¹à¸ªà¸”ง"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "เปลี่ยนรหัสผ่าน"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "ชื่อที่ต้องà¸à¸²à¸£à¹à¸ªà¸”ง"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "อีเมล์"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "ที่อยู่อีเมล์ของคุณ"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "à¸à¸£à¸­à¸à¸—ี่อยู่อีเมล์ของคุณเพื่อเปิดให้มีà¸à¸²à¸£à¸à¸¹à¹‰à¸„ืนรหัสผ่านได้"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "ภาษา"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "ช่วยà¸à¸±à¸™à¹à¸›à¸¥"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "ใช้ที่อยู่นี้เพื่อเชื่อมต่อà¸à¸±à¸š ownCloud ในโปรà¹à¸à¸£à¸¡à¸ˆà¸±à¸”à¸à¸²à¸£à¹„ฟล์ของคุณ"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "รุ่น"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +270,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "พัฒนาโดย 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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "ชื่อ"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "ชื่อที่ใช้สำหรับเข้าสู่ระบบ"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "à¸à¸¥à¸¸à¹ˆà¸¡"
@@ -247,28 +284,36 @@ msgstr "สร้าง"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "พื้นที่จำà¸à¸±à¸”ข้อมูลเริ่มต้น"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "ไม่จำà¸à¸±à¸”จำนวน"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "อื่นๆ"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "ผู้ดูà¹à¸¥à¸à¸¥à¸¸à¹ˆà¸¡"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
-msgstr ""
+msgstr "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูล"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "เปลี่ยนชื่อที่ต้องà¸à¸²à¸£à¹ƒà¸«à¹‰à¹à¸ªà¸”ง"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "ตั้งค่ารหัสผ่านใหม่"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "ค่าเริ่มต้น"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "ลบ"
diff --git a/l10n/th_TH/user_ldap.po b/l10n/th_TH/user_ldap.po
index c8a7bd651bd..3d906030931 100644
--- a/l10n/th_TH/user_ldap.po
+++ b/l10n/th_TH/user_ldap.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
@@ -18,167 +18,293 @@ msgstr ""
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "à¸à¸²à¸£à¸¥à¸šà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าเซิร์ฟเวอร์ล้มเหลว"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าถูà¸à¸•้องà¹à¸¥à¸°à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อสามารถเชื่อมต่อได้!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าถูà¸à¸•้อง, à¹à¸•่à¸à¸²à¸£à¸œà¸¹à¸à¸‚้อมูลล้มเหลว, à¸à¸£à¸¸à¸“าตรวจสอบà¸à¸²à¸£à¸•ั้งค่าเซิร์ฟเวอร์à¹à¸¥à¸°à¸‚้อมูลà¸à¸²à¸£à¹€à¸‚้าใช้งาน"
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าไม่ถูà¸à¸•้อง à¸à¸£à¸¸à¸“าดูรายละเอียดจาà¸à¸šà¸±à¸™à¸—ึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚อง ownCloud สำหรับรายละเอียดเพิ่มเติม"
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "à¸à¸²à¸£à¸¥à¸šà¸—ิ้งล้มเหลว"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "รัà¸à¸©à¸²à¸à¸²à¸£à¸•ั้งค่าไว้?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "ไม่สามารถเพิ่มค่าà¸à¸³à¸«à¸™à¸”เซิร์ฟเวอร์ได้"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "ทดสอบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อสำเร็จ"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "ทดสอบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อล้มเหลว"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹à¸¥à¹‰à¸§à¸«à¸£à¸·à¸­à¸§à¹ˆà¸²à¸•้องà¸à¸²à¸£à¸¥à¸šà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าเซิร์ฟเวอร์ปัจจุบันทิ้งไป?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "ยืนยันà¸à¸²à¸£à¸¥à¸šà¸—ิ้ง"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
" experience unexpected behaviour. Please ask your system administrator to "
"disable one of them."
-msgstr ""
+msgstr "<b>คำเตือน:</b> à¹à¸­à¸›à¸¯ user_ldap à¹à¸¥à¸° user_webdavauth ไม่สามารถใช้งานร่วมà¸à¸±à¸™à¹„ด้. คุณอาจประสพปัà¸à¸«à¸²à¸—ี่ไม่คาดคิดจาà¸à¹€à¸«à¸•ุà¸à¸²à¸£à¸“์ดังà¸à¸¥à¹ˆà¸²à¸§ à¸à¸£à¸¸à¸“าติดต่อผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸‚องคุณเพื่อระงับà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸­à¸›à¸¯ ตัวใดตัวหนึ่งข้างต้น"
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
-msgstr ""
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
+msgstr "<b>คำเตือน:</b> โมดูล PHP LDAP ยังไม่ได้ถูà¸à¸•ิดตั้ง, ระบบด้านหลังจะไม่สามารถทำงานได้ à¸à¸£à¸¸à¸“าติดต่อผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸‚องคุณเพื่อทำà¸à¸²à¸£à¸•ิดตั้งโมดูลดังà¸à¸¥à¹ˆà¸²à¸§"
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าเซิร์ฟเวอร์"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "เพิ่มà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าเซิร์ฟเวอร์"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "โฮสต์"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "คุณสามารถปล่อยช่องโปรโตคอลเว้นไว้ได้, ยà¸à¹€à¸§à¹‰à¸™à¸à¸£à¸“ีที่คุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰ SSL จาà¸à¸™à¸±à¹‰à¸™à¹€à¸£à¸´à¹ˆà¸¡à¸•้นด้วย ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN à¸à¸²à¸™"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "หนึ่ง Base DN ต่อบรรทัด"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "คุณสามารถระบุ DN หลัà¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¸°à¸à¸¥à¸¸à¹ˆà¸¡à¸•่างๆในà¹à¸—็บขั้นสูงได้"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN ของผู้ใช้งาน"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN ของผู้ใช้งานที่เป็นลูà¸à¸„้าอะไรà¸à¹‡à¸•ามที่ผูà¸à¸­à¸¢à¸¹à¹ˆà¸”้วย เช่น uid=agent, dc=example, dc=com, สำหรับà¸à¸²à¸£à¹€à¸‚้าถึงโดยบุคคลนิรนาม, ให้เว้นว่าง DN à¹à¸¥à¸° รหัสผ่านเอาไว้"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "รหัสผ่าน"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "สำหรับà¸à¸²à¸£à¹€à¸‚้าถึงโดยบุคคลนิรนาม ให้เว้นว่าง DN à¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹„ว้"
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "ตัวà¸à¸£à¸­à¸‡à¸‚้อมูลà¸à¸²à¸£à¹€à¸‚้าสู่ระบบของผู้ใช้งาน"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "à¸à¸³à¸«à¸™à¸”ตัวà¸à¸£à¸­à¸‡à¸‚้อมูลที่ต้องà¸à¸²à¸£à¸™à¸³à¹„ปใช้งาน, เมื่อมีความพยายามในà¸à¸²à¸£à¹€à¸‚้าสู่ระบบ %%uid จะถูà¸à¸™à¸³à¹„ปà¹à¸—นที่ชื่อผู้ใช้งานในà¸à¸²à¸£à¸à¸£à¸°à¸—ำของà¸à¸²à¸£à¹€à¸‚้าสู่ระบบ"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "ใช้ตัวยึด %%uid, เช่น \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "ตัวà¸à¸£à¸­à¸‡à¸‚้อมูลรายชื่อผู้ใช้งาน"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "ระบุตัวà¸à¸£à¸­à¸‡à¸‚้อมูลที่ต้องà¸à¸²à¸£à¸™à¸³à¹„ปใช้งาน, เมื่อดึงข้อมูลผู้ใช้งาน"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "โดยไม่ต้องมีตัวยึดใดๆ, เช่น \"objectClass=person\","
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "ตัวà¸à¸£à¸­à¸‡à¸‚้อมูลà¸à¸¥à¸¸à¹ˆà¸¡"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "ระบุตัวà¸à¸£à¸­à¸‡à¸‚้อมูลที่ต้องà¸à¸²à¸£à¸™à¸³à¹„ปใช้งาน, เมื่อดึงข้อมูลà¸à¸¥à¸¸à¹ˆà¸¡"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "โดยไม่ต้องมีตัวยึดใดๆ, เช่น \"objectClass=posixGroup\","
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "ตั้งค่าà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "พอร์ต"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "รายà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "รายà¸à¸²à¸£à¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "ความสัมพันธ์ของสมาชิà¸à¹ƒà¸™à¸à¸¥à¸¸à¹ˆà¸¡"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "ปิดใช้งานเซิร์ฟเวอร์หลัà¸"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "ใช้ TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "à¸à¸£à¸¸à¸“าอย่าใช้à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อà¹à¸šà¸š SSL à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อจะเà¸à¸´à¸”à¸à¸²à¸£à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§"
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "เซิร์ฟเวอร์ LDAP ประเภท Case insensitive (วินโดวส์)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "ปิดใช้งานà¸à¸²à¸£à¸•รวจสอบความถูà¸à¸•้องของใบรับรองความปลอดภัย SSL"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "หาà¸à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อสามารถทำงานได้เฉพาะà¸à¸±à¸šà¸•ัวเลือà¸à¸™à¸µà¹‰à¹€à¸—่านั้น, ให้นำเข้าข้อมูลใบรับรองความปลอดภัยà¹à¸šà¸š SSL ของเซิร์ฟเวอร์ LDAP ดังà¸à¸¥à¹ˆà¸²à¸§à¹€à¸‚้าไปไว้ในเซิร์ฟเวอร์ ownCloud"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "ไม่à¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™, ใช้สำหรับà¸à¸²à¸£à¸—ดสอบเท่านั้น"
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "ในอีà¸à¹„ม่à¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—ี ระบบจะเปลี่ยนà¹à¸›à¸¥à¸‡à¸‚้อมูลในà¹à¸„ชให้ว่างเปล่า"
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "ตั้งค่าไดเร็à¸à¸—อรี่"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "ช่องà¹à¸ªà¸”งชื่อผู้ใช้งานที่ต้องà¸à¸²à¸£"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "คุณลัà¸à¸©à¸“ะ LDAP ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸ªà¸³à¸«à¸£à¸±à¸šà¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸·à¹ˆà¸­à¸‚องผู้ใช้งาน ownCloud"
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "รายà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "หนึ่ง User Base DN ต่อบรรทัด"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "คุณลัà¸à¸©à¸“ะà¸à¸²à¸£à¸„้นหาชื่อผู้ใช้"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "ตัวเลือà¸à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•ิม; หนึ่งคุณลัà¸à¸©à¸“ะต่อบรรทัด"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "ช่องà¹à¸ªà¸”งชื่อà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่ต้องà¸à¸²à¸£"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "คุณลัà¸à¸©à¸“ะ LDAP ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸·à¹ˆà¸­à¸à¸¥à¸¸à¹ˆà¸¡à¸‚อง ownCloud"
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "รายà¸à¸²à¸£à¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "หนึ่ง Group Base DN ต่อบรรทัด"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "คุณลัà¸à¸©à¸“ะà¸à¸²à¸£à¸„้นหาà¹à¸šà¸šà¸à¸¥à¸¸à¹ˆà¸¡"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "ความสัมพันธ์ของสมาชิà¸à¹ƒà¸™à¸à¸¥à¸¸à¹ˆà¸¡"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "คุณลัà¸à¸©à¸“ะพิเศษ"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "ในหน่วยไบต์"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "ในอีà¸à¹„ม่à¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—ี ระบบจะเปลี่ยนà¹à¸›à¸¥à¸‡à¸‚้อมูลในà¹à¸„ชให้ว่างเปล่า"
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "เว้นว่างไว้สำหรับ ชื่อผู้ใช้ (ค่าเริ่มต้น) หรือไม่à¸à¸£à¸¸à¸“าระบุคุณลัà¸à¸©à¸“ะของ LDAP/AD"
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "ช่วยเหลือ"
diff --git a/l10n/th_TH/user_webdavauth.po b/l10n/th_TH/user_webdavauth.po
index e169eac8418..3493831b2c1 100644
--- a/l10n/th_TH/user_webdavauth.po
+++ b/l10n/th_TH/user_webdavauth.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-23 00:05+0100\n"
+"PO-Revision-Date: 2013-01-22 00:54+0000\n"
+"Last-Translator: AriesAnywhere Anywhere <ariesanywhere@gmail.com>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV Authentication"
+
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud จะส่งข้อมูลà¸à¸²à¸£à¹€à¸‚้าใช้งานของผู้ใช้งานไปยังที่อยู่ URL ดังà¸à¸¥à¹ˆà¸²à¸§à¸™à¸µà¹‰ ปลั๊à¸à¸­à¸´à¸™à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸ˆà¸°à¸—ำà¸à¸²à¸£à¸•รวจสอบข้อมูลที่โต้ตอบà¸à¸¥à¸±à¸šà¸¡à¸²à¹à¸¥à¸°à¸ˆà¸°à¸—ำà¸à¸²à¸£à¹à¸›à¸¥à¸£à¸«à¸±à¸ª HTTP statuscodes 401 à¹à¸¥à¸° 403 ให้เป็นข้อมูลà¸à¸²à¸£à¹€à¸‚้าใช้งานที่ไม่สามารถใช้งานได้ ส่วนข้อมูลอื่นๆที่เหลือทั้งหมดจะเป็นข้อมูลà¸à¸²à¸£à¹€à¸‚้าใช้งานที่สามารถใช้งานได้"
diff --git a/l10n/tr/core.po b/l10n/tr/core.po
index d8d8d152b72..e6ef436731d 100644
--- a/l10n/tr/core.po
+++ b/l10n/tr/core.po
@@ -6,13 +6,14 @@
# Aranel Surion <aranel@aranelsurion.org>, 2011, 2012.
# Caner BaÅŸaran <basaran.caner@gmail.com>, 2012.
# <info@beyboo.de>, 2012.
+# ismail yenigul <ismail.yenigul@surgate.com>, 2013.
# Necdet Yücel <necdetyucel@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
@@ -21,29 +22,29 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "%s kullanıcısı sizinle bir dosyayı paylaştı"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "%s kullanıcısı sizinle bir dizini paylaştı"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "%s kullanıcısı \"%s\" dosyasını sizinle paylaştı. %s adresinden indirilebilir"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "%s kullanıcısı \"%s\" dizinini sizinle paylaştı. %s adresinden indirilebilir"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -54,8 +55,9 @@ msgid "No category to add?"
msgstr "Eklenecek kategori yok?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Bu kategori zaten mevcut: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -67,12 +69,12 @@ msgstr "Nesne türü desteklenmemektedir."
#: ajax/vcategories/removeFromFavorites.php:30
#, php-format
msgid "%s ID not provided."
-msgstr ""
+msgstr "%s ID belirtilmedi."
#: ajax/vcategories/addToFavorites.php:35
#, php-format
msgid "Error adding %s to favorites."
-msgstr ""
+msgstr "%s favorilere eklenirken hata oluÅŸtu"
#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
msgid "No categories selected for deletion."
@@ -81,61 +83,137 @@ msgstr "Silmek için bir kategori seçilmedi"
#: ajax/vcategories/removeFromFavorites.php:35
#, php-format
msgid "Error removing %s from favorites."
-msgstr ""
+msgstr "%s favorilere çıkarılırken hata oluştu"
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Pazar"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Pazartesi"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Salı"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Çarşamba"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "PerÅŸembe"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Cuma"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Cumartesi"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Ocak"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Åžubat"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Mart"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:33
+msgid "April"
+msgstr "Nisan"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Mayıs"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Haziran"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Temmuz"
+
+#: js/config.php:33
+msgid "August"
+msgstr "AÄŸustos"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Eylül"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Ekim"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Kasım"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Aralık"
+
+#: js/js.js:284
msgid "Settings"
msgstr "Ayarlar"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "saniye önce"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 dakika önce"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} dakika önce"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 saat önce"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} saat önce"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "bugün"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "dün"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} gün önce"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "geçen ay"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} ay önce"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "ay önce"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "geçen yıl"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "yıl önce"
@@ -165,136 +243,154 @@ msgid "The object type is not specified."
msgstr "Nesne türü belirtilmemiş."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Hata"
#: js/oc-vcategories.js:179
msgid "The app name is not specified."
-msgstr ""
+msgstr "uygulama adı belirtilmedi."
#: js/oc-vcategories.js:194
msgid "The required file {file} is not installed!"
+msgstr "İhtiyaç duyulan {file} dosyası kurulu değil."
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "PaylaÅŸ"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Paylaşım sırasında hata "
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
-msgstr ""
+msgstr "Paylaşım iptal ediliyorken hata"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "İzinleri değiştirirken hata oluştu"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
-msgstr ""
+msgstr " {owner} tarafından sizinle ve {group} ile paylaştırılmış"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
-msgstr ""
+msgstr "{owner} trafından sizinle paylaştırıldı"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "ile PaylaÅŸ"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Bağlantı ile paylaş"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Şifre korunması"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Parola"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "KiÅŸiye e-posta linki"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "Gönder"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Son kullanma tarihini ayarla"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Son kullanım tarihi"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Eposta ile paylaÅŸ"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Kişi bulunamadı"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Tekrar paylaÅŸmaya izin verilmiyor"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
-msgstr ""
+msgstr " {item} içinde {user} ile paylaşılanlarlar"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Paylaşılmayan"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "düzenleyebilir"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "erişim kontrolü"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "oluÅŸtur"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "güncelle"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "sil"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "paylaÅŸ"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Paralo korumalı"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
-msgstr ""
+msgstr "Geçerlilik tarihi tanımlama kaldırma hatası"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
-msgstr ""
+msgstr "Geçerlilik tarihi tanımlama hatası"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "Gönderiliyor..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Eposta gönderildi"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ownCloud parola sıfırlama"
@@ -376,7 +472,7 @@ msgstr "Kategorileri düzenle"
msgid "Add"
msgstr "Ekle"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Güvenlik Uyarisi"
@@ -384,149 +480,77 @@ msgstr "Güvenlik Uyarisi"
msgid ""
"No secure random number generator is available, please enable the PHP "
"OpenSSL extension."
-msgstr ""
+msgstr "Güvenli rasgele sayı üreticisi bulunamadı. Lütfen PHP OpenSSL eklentisini etkinleştirin."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
+msgstr "Güvenli rasgele sayı üreticisi olmadan saldırganlar parola sıfırlama simgelerini tahmin edip hesabınızı ele geçirebilir."
+
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
msgstr ""
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Bir <strong>yönetici hesabı</strong> oluşturun"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "GeliÅŸmiÅŸ"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Veri klasörü"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Veritabanını ayarla"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "kullanılacak"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Veritabanı kullanıcı adı"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Veritabanı parolası"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Veritabanı adı"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Veritabanı tablo alanı"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Veritabanı sunucusu"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Kurulumu tamamla"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Pazar"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Pazartesi"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Salı"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Çarşamba"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "PerÅŸembe"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Cuma"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Cumartesi"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Ocak"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Åžubat"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Mart"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Nisan"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Mayıs"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Haziran"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Temmuz"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "AÄŸustos"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Eylül"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Ekim"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Kasım"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Aralık"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "kontrolünüzdeki web servisleri"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Çıkış yap"
@@ -538,27 +562,27 @@ msgstr "Otomatik oturum açma reddedildi!"
msgid ""
"If you did not change your password recently, your account may be "
"compromised!"
-msgstr ""
+msgstr "Yakın zamanda parolanızı değiştirmedi iseniz hesabınız riske girebilir."
#: templates/login.php:13
msgid "Please change your password to secure your account again."
-msgstr ""
+msgstr "Hesabınızı korumak için lütfen parolanızı değiştirin."
#: templates/login.php:19
msgid "Lost your password?"
msgstr "Parolanızı mı unuttunuz?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "hatırla"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "GiriÅŸ yap"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Çıkış yaptınız."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,18 +595,4 @@ msgstr "sonraki"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Güvenlik Uyarısı!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "DoÄŸrula"
+msgstr "Owncloud %s versiyonuna güncelleniyor. Biraz zaman alabilir."
diff --git a/l10n/tr/files.po b/l10n/tr/files.po
index 641b6c26f92..611384113cf 100644
--- a/l10n/tr/files.po
+++ b/l10n/tr/files.po
@@ -7,13 +7,14 @@
# Caner BaÅŸaran <basaran.caner@gmail.com>, 2012.
# Emre <emresaracoglu@live.com>, 2012.
# <info@beyboo.de>, 2012.
+# ismail yenigul <ismail.yenigul@surgate.com>, 2013.
# Necdet Yücel <necdetyucel@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
@@ -25,207 +26,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s taşınamadı. Bu isimde dosya zaten var."
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "%s taşınamadı"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Dosya adı değiştirilemedi"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Dosya yüklenmedi. Bilinmeyen hata"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Bir hata yok, dosya başarıyla yüklendi"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "php.ini dosyasında upload_max_filesize ile belirtilen dosya yükleme sınırı aşıldı."
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Yüklenen dosya HTML formundaki MAX_FILE_SIZE sınırını aşıyor"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Yüklenen dosyanın sadece bir kısmı yüklendi"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Hiç dosya yüklenmedi"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Geçici bir klasör eksik"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Diske yazılamadı"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Geçersiz dizin."
#: appinfo/app.php:10
msgid "Files"
msgstr "Dosyalar"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Paylaşılmayan"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Sil"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "İsim değiştir."
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Bekliyor"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} zaten mevcut"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "deÄŸiÅŸtir"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "Öneri ad"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "iptal"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "deÄŸiÅŸtirilen {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "geri al"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} ismi {old_name} ile deÄŸiÅŸtirildi"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "paylaşılmamış {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "silinen {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' geçersiz dosya adı."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Dosya adı boş olamaz."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "ZIP dosyası oluşturuluyor, biraz sürebilir."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Yükleme hatası"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Kapat"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Bekliyor"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 dosya yüklendi"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} dosya yükleniyor"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Yükleme iptal edildi."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL boÅŸ olamaz."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} dosya tarandı"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "tararamada hata oluÅŸdu"
+msgstr "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir."
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Ad"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Boyut"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "DeÄŸiÅŸtirilme"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 dizin"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} dizin"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 dosya"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} dosya"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Yükle"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Dosya taşıma"
@@ -274,36 +278,44 @@ msgstr "Klasör"
msgid "From link"
msgstr "Bağlantıdan"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Yükle"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Yüklemeyi iptal et"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Burada hiçbir şey yok. Birşeyler yükleyin!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "İndir"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Paylaşılmayan"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Yüklemeniz çok büyük"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dosyalar taranıyor, lütfen bekleyin."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Güncel tarama"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/tr/files_encryption.po b/l10n/tr/files_encryption.po
index c48e3908ae6..fec3cbfb0bc 100644
--- a/l10n/tr/files_encryption.po
+++ b/l10n/tr/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 10:35+0000\n"
-"Last-Translator: Necdet Yücel <necdetyucel@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Åžifreleme"
-#: templates/settings.php:6
-msgid "Enable Encryption"
-msgstr "Åžifrelemeyi EtkinleÅŸtir"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
#: templates/settings.php:7
-msgid "None"
-msgstr "Hiçbiri"
+msgid "Exclude the following file types from encryption:"
+msgstr ""
#: templates/settings.php:12
-msgid "Exclude the following file types from encryption"
-msgstr "Aşağıdaki dosya tiplerini şifrelemeye dahil etme"
+msgid "None"
+msgstr "Hiçbiri"
diff --git a/l10n/tr/files_trashbin.po b/l10n/tr/files_trashbin.po
new file mode 100644
index 00000000000..fff563d2bf9
--- /dev/null
+++ b/l10n/tr/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "İsim"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 dizin"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} dizin"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 dosya"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} dosya"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/tr/files_versions.po b/l10n/tr/files_versions.po
index 1d3dff15348..73c00cd9cf1 100644
--- a/l10n/tr/files_versions.po
+++ b/l10n/tr/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 09:24+0000\n"
-"Last-Translator: Necdet Yücel <necdetyucel@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:7
-msgid "Expire all versions"
-msgstr "Tüm sürümleri sona erdir"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "Geçmiş"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Sürümler"
-
-#: templates/settings-personal.php:10
-msgid "This will delete all existing backup versions of your files"
-msgstr "Bu dosyalarınızın tüm yedek sürümlerini silecektir"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/tr/lib.po b/l10n/tr/lib.po
index 66590bc8eb0..0694caefa48 100644
--- a/l10n/tr/lib.po
+++ b/l10n/tr/lib.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# ismail yenigul <ismail.yenigul@surgate.com>, 2013.
# Necdet Yücel <necdetyucel@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 11:03+0000\n"
-"Last-Translator: Necdet Yücel <necdetyucel@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,51 +19,55 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:287
+#: app.php:339
msgid "Help"
msgstr "Yardı"
-#: app.php:294
+#: app.php:346
msgid "Personal"
msgstr "KiÅŸisel"
-#: app.php:299
+#: app.php:351
msgid "Settings"
msgstr "Ayarlar"
-#: app.php:304
+#: app.php:356
msgid "Users"
msgstr "Kullanıcılar"
-#: app.php:311
+#: app.php:363
msgid "Apps"
msgstr "Uygulamalar"
-#: app.php:313
+#: app.php:365
msgid "Admin"
msgstr "Yönetici"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP indirmeleri kapatılmıştır."
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Dosyaların birer birer indirilmesi gerekmektedir."
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Dosyalara dön"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Seçilen dosyalar bir zip dosyası oluşturmak için fazla büyüktür."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "tespit edilemedi"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Uygulama etkinleÅŸtirilmedi"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Kimlik doğrulama hatası"
@@ -82,55 +87,152 @@ msgstr "Metin"
msgid "Images"
msgstr "Resimler"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "saniye önce"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 dakika önce"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d dakika önce"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 saat önce"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d saat önce"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "bugün"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "dün"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d gün önce"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "geçen ay"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d ay önce"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "geçen yıl"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "yıl önce"
diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po
index cfdb8287d08..eb9e58d1450 100644
--- a/l10n/tr/settings.po
+++ b/l10n/tr/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
@@ -25,6 +25,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "App Store'dan liste yüklenemiyor"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "EÅŸleÅŸme hata"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Grup zaten mevcut"
@@ -33,7 +42,7 @@ msgstr "Grup zaten mevcut"
msgid "Unable to add group"
msgstr "Gruba eklenemiyor"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Uygulama devreye alınamadı"
@@ -45,22 +54,10 @@ msgstr "Eposta kaydedildi"
msgid "Invalid email"
msgstr "Geçersiz eposta"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID DeÄŸiÅŸtirildi"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Geçersiz istek"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Grup silinemiyor"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "EÅŸleÅŸme hata"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Kullanıcı silinemiyor"
@@ -69,6 +66,10 @@ msgstr "Kullanıcı silinemiyor"
msgid "Language changed"
msgstr "Dil deÄŸiÅŸtirildi"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Geçersiz istek"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -83,19 +84,47 @@ msgstr "Kullanıcı %s grubuna eklenemiyor"
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Etkin deÄŸil"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Etkin"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Hata"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Kaydediliyor..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__dil_adı__"
@@ -107,18 +136,22 @@ msgstr "Uygulamanı Ekle"
msgid "More Apps"
msgstr "Daha fazla App"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Bir uygulama seçin"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Uygulamanın sayfasına apps.owncloud.com adresinden bakın "
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Güncelleme"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Kullanıcı Belgelendirmesi"
@@ -148,83 +181,87 @@ msgstr "Ticari Destek"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Müşteriler"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Masaüstü İstemcilerini İndir"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Android İstemcisini İndir"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "iOS İstemcisini İndir"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Parola"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Åžifreniz deÄŸiÅŸtirildi"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Parolanız değiştirilemiyor"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Mevcut parola"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Yeni parola"
-#: templates/personal.php:26
-msgid "show"
-msgstr "göster"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Parola deÄŸiÅŸtir"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Eposta"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Eposta adresiniz"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Parola sıfırlamayı aktifleştirmek için eposta adresi girin"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Dil"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Çevirilere yardım edin"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "Sürüm"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -234,11 +271,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "Geliştirilen Taraf<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is altında lisanslanmıştır <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Ad"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Gruplar"
@@ -250,26 +287,34 @@ msgstr "OluÅŸtur"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "DiÄŸer"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Yönetici Grubu "
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Sil"
diff --git a/l10n/tr/user_ldap.po b/l10n/tr/user_ldap.po
index 66d4941f8de..8cdf1507e90 100644
--- a/l10n/tr/user_ldap.po
+++ b/l10n/tr/user_ldap.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-29 00:07+0100\n"
-"PO-Revision-Date: 2012-12-28 09:39+0000\n"
-"Last-Translator: Necdet Yücel <necdetyucel@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Silme başarısız oldu"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Konak"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Base DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "User DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Parola"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Anonim erişim için DN ve Parola alanlarını boş bırakın."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Kullanıcı Oturum Açma Süzgeci"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "%%uid yer tutucusunu kullanın, örneğin \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Kullanıcı Liste Süzgeci"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "bir yer tutucusu olmadan, örneğin \"objectClass=person\""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Grup Süzgeci"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Port"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Temel Kullanıcı Ağacı"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Temel Grup Ağacı"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Grup-Üye işbirliği"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "TLS kullan"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "SSL bağlantıları ile kullanmayın, başarısız olacaktır."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "SSL sertifika doğrulamasını kapat."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Önerilmez, sadece test için kullanın."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "saniye cinsinden. Bir değişiklik önbelleği temizleyecektir."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Temel Kullanıcı Ağacı"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Temel Grup Ağacı"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Grup-Üye işbirliği"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "byte cinsinden"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "saniye cinsinden. Bir değişiklik önbelleği temizleyecektir."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Kullanıcı adı bölümünü boş bırakın (varsayılan). "
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Yardım"
diff --git a/l10n/tr/user_webdavauth.po b/l10n/tr/user_webdavauth.po
index ca1186efbec..912a2ff24d2 100644
--- a/l10n/tr/user_webdavauth.po
+++ b/l10n/tr/user_webdavauth.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-28 00:20+0100\n"
-"PO-Revision-Date: 2012-12-27 09:06+0000\n"
-"Last-Translator: Necdet Yücel <necdetyucel@gmail.com>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +19,17 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/uk/core.po b/l10n/uk/core.po
index df066c2f2bb..78e4e2d04ce 100644
--- a/l10n/uk/core.po
+++ b/l10n/uk/core.po
@@ -7,12 +7,14 @@
# <skoptev@ukr.net>, 2012.
# Soul Kim <warlock.rf@gmail.com>, 2012.
# <victor.dubiniuk@gmail.com>, 2012.
+# <volodya327@gmail.com>, 2013.
+# пан Володимир <volodya327@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
@@ -21,24 +23,24 @@ msgstr ""
"Language: uk\n"
"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);\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "КориÑтувач %s поділивÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ з вами"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "КориÑтувач %s поділивÑÑ Ñ‚ÐµÐºÐ¾ÑŽ з вами"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "КориÑтувач %s поділивÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ \"%s\" з вами. Він доÑтупний Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð²Ñ–Ð´Ñи: %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -54,8 +56,9 @@ msgid "No category to add?"
msgstr "ВідÑутні категорії Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Ð¦Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ñ–Ñ Ð²Ð¶Ðµ Ñ–Ñнує: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -83,59 +86,135 @@ msgstr "Жодної категорії не обрано Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð
msgid "Error removing %s from favorites."
msgstr "Помилка при видалені %s із обраного."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "ÐеділÑ"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Понеділок"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Вівторок"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Середа"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Четвер"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "П'ÑтницÑ"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Субота"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Січень"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Лютий"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Березень"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Квітень"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Травень"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Червень"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Липень"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Серпень"
+
+#: js/config.php:33
+msgid "September"
+msgstr "ВереÑень"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Жовтень"
+
+#: js/config.php:33
+msgid "November"
+msgstr "ЛиÑтопад"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Грудень"
+
+#: js/js.js:284
msgid "Settings"
msgstr "ÐалаштуваннÑ"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "Ñекунди тому"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 хвилину тому"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} хвилин тому"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1 годину тому"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} години тому"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "Ñьогодні"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "вчора"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} днів тому"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "минулого міÑÑцÑ"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} міÑÑців тому"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "міÑÑці тому"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "минулого року"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "роки тому"
@@ -165,8 +244,8 @@ msgid "The object type is not specified."
msgstr "Ðе визначено тип об'єкту."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "Помилка"
@@ -178,123 +257,141 @@ msgstr "Ðе визначено ім'Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸."
msgid "The required file {file} is not installed!"
msgstr "Ðеобхідний файл {file} не вÑтановлено!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "ПоділитиÑÑ"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "Опубліковано"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "Помилка під Ñ‡Ð°Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ—"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ð¼Ñ–Ð½Ð¸ публікації"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Помилка при зміні повноважень"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr " {owner} опублікував Ð´Ð»Ñ Ð’Ð°Ñ Ñ‚Ð° Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ {group}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "{owner} опублікував Ð´Ð»Ñ Ð’Ð°Ñ"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Опублікувати длÑ"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Опублікувати через поÑиланнÑ"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "ЗахиÑтити паролем"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Пароль"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr "Ел. пошта належить Пану"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "ÐадіÑлати"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Ð’Ñтановити термін дії"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Термін дії"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Опублікувати через Ел. пошту:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Жодної людини не знайдено"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Пере-Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð½Ðµ дозволÑєтьÑÑ"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Опубліковано {item} Ð´Ð»Ñ {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Заборонити доÑтуп"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "може редагувати"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "контроль доÑтупу"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "Ñтворити"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "оновити"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "видалити"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "опублікувати"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "Захищено паролем"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "Помилка при відміні терміна дії"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "Помилка при вÑтановленні терміна дії"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "ÐадÑиланнÑ..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "Ел. пошта надіÑлана"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð»Ð¾ÑÑŒ неуÑпішно. Будь лаÑка, повідомте про цю проблему в <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">Ñпільноті ownCloud</a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð»Ð¾ÑÑŒ уÑпішно. ПеренаправлÑємо Ð²Ð°Ñ Ð½Ð° ownCloud."
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ ownCloud"
@@ -376,7 +473,7 @@ msgstr "Редагувати категорії"
msgid "Add"
msgstr "Додати"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ небезпеку"
@@ -386,147 +483,75 @@ msgid ""
"OpenSSL extension."
msgstr "Ðе доÑтупний безпечний генератор випадкових чиÑел, будь лаÑка, активуйте PHP OpenSSL додаток."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Без безпечного генератора випадкових чиÑел зловмиÑник може визначити токени ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñ– заволодіти Вашим обліковим запиÑом."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Ваш каталог з даними та Ваші файли можливо доÑтупні з Інтернету. Файл .htaccess, наданий з ownCloud, не працює. Ми наполегливо рекомендуємо Вам налаштувати Ñвій веб-Ñервер таким чином, щоб каталог data більше не був доÑтупний, або переміÑтити каталог data за межі кореневого каталогу документів веб-Ñервера."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Створити <strong>обліковий Ð·Ð°Ð¿Ð¸Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтратора</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Додатково"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Каталог даних"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð°Ð·Ð¸ даних"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "буде викориÑтано"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "КориÑтувач бази даних"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Пароль Ð´Ð»Ñ Ð±Ð°Ð·Ð¸ даних"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Ðазва бази даних"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð±Ð°Ð·Ð¸ даних"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "ХоÑÑ‚ бази даних"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Завершити налаштуваннÑ"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "ÐеділÑ"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Понеділок"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Вівторок"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Середа"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Четвер"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "П'ÑтницÑ"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Субота"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Січень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Лютий"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Березень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Квітень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Травень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Червень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Липень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Серпень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "ВереÑень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Жовтень"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "ЛиÑтопад"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Грудень"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "веб-ÑÐµÑ€Ð²Ñ–Ñ Ð¿Ñ–Ð´ вашим контролем"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Вихід"
@@ -548,17 +573,17 @@ msgstr "Будь лаÑка, змініть Ñвій пароль, щоб зно
msgid "Lost your password?"
msgstr "Забули пароль?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "запам'Ñтати"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Вхід"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Ви вийшли з ÑиÑтеми."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Ðльтернативні Логіни"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,18 +596,4 @@ msgstr "наÑтупний"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ небезпеку!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Будь лаÑка, повторно введіть Ñвій пароль. <br/>З питань безпеки, Вам інколи доведетьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ вводити Ñвій пароль."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Підтвердити"
+msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ownCloud до верÑÑ–Ñ— %s, це може зайнÑти деÑкий чаÑ."
diff --git a/l10n/uk/files.po b/l10n/uk/files.po
index 12e46e92ae8..fd21387526b 100644
--- a/l10n/uk/files.po
+++ b/l10n/uk/files.po
@@ -6,12 +6,13 @@
# <dzubchikd@gmail.com>, 2012.
# <skoptev@ukr.net>, 2012.
# Soul Kim <warlock.rf@gmail.com>, 2012.
+# пан Володимир <volodya327@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
@@ -25,205 +26,208 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Ðе завантажено жодного файлу. Ðевідома помилка"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Файл уÑпішно вивантажено без помилок."
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "Розмір Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” upload_max_filesize параметра в php.ini: "
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Файл відвантажено лише чаÑтково"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Ðе відвантажено жодного файлу"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "ВідÑутній тимчаÑовий каталог"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "ÐевдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати на диÑк"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Ðевірний каталог."
#: appinfo/app.php:10
msgid "Files"
msgstr "Файли"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Заборонити доÑтуп"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Видалити назавжди"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Видалити"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Перейменувати"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "ОчікуваннÑ"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} вже Ñ–Ñнує"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "заміна"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "запропонуйте назву"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "відміна"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "замінено {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "відмінити"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "замінено {new_name} на {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "неопубліковано {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "видалено {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "виконати операцію видаленнÑ"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' це невірне ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ."
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr " Ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ не може бути порожнім."
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Ðевірне ім'Ñ, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ZIP-файлу, це може зайнÑти певний чаÑ."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Ваше Ñховище переповнене, файли більше не можуть бути оновлені або Ñинхронізовані !"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Ваше Ñховище майже повне ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Ваше Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð³Ð¾Ñ‚ÑƒÑ”Ñ‚ÑŒÑÑ. Це може зайнÑти деÑкий чаÑ, Ñкщо файли завеликі."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðеможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Помилка завантаженнÑ"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Закрити"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "ОчікуваннÑ"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 файл завантажуєтьÑÑ"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} файлів завантажуєтьÑÑ"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾."
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "ВиконуєтьÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ. Ð—Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ†Ñ–Ñ”Ñ— Ñторінки приведе до відміни завантаженнÑ."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL не може бути пуÑтим."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} файлів проÑкановано"
+msgstr "Ðевірне ім'Ñ Ñ‚ÐµÐºÐ¸. ВикориÑÑ‚Ð°Ð½Ð½Ñ \"Shared\" зарезервовано Owncloud"
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "помилка при Ñкануванні"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Ім'Ñ"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Розмір"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Змінено"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 папка"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} папок"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 файл"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} файлів"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Відвантажити"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Робота з файлами"
@@ -272,36 +276,44 @@ msgstr "Папка"
msgid "From link"
msgstr "З поÑиланнÑ"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Відвантажити"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Перервати завантаженнÑ"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Тут нічого немає. Відвантажте що-небудь!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Завантажити"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Заборонити доÑтуп"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Файл занадто великий"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Файли,що ви намагаєтеÑÑŒ відвантажити перевищують макÑимальний дозволений розмір файлів на цьому Ñервері."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Файли ÑкануютьÑÑ, зачекайте, будь-лаÑка."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Поточне ÑкануваннÑ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐµÑˆÐ° файлової ÑиÑтеми..."
diff --git a/l10n/uk/files_encryption.po b/l10n/uk/files_encryption.po
index 9b00d3b7a30..1ee56609800 100644
--- a/l10n/uk/files_encryption.po
+++ b/l10n/uk/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-23 02:02+0200\n"
-"PO-Revision-Date: 2012-10-22 12:05+0000\n"
-"Last-Translator: skoptev <skoptev@ukr.net>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: uk\n"
"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);\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "ШифруваннÑ"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Ðе шифрувати файли наÑтупних типів"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "Жоден"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "Включити шифруваннÑ"
diff --git a/l10n/uk/files_trashbin.po b/l10n/uk/files_trashbin.po
new file mode 100644
index 00000000000..b33723c8702
--- /dev/null
+++ b/l10n/uk/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"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);\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Ім'Ñ"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 папка"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} папок"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 файл"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} файлів"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/uk/files_versions.po b/l10n/uk/files_versions.po
index 91a6d8643b1..a511f9ae557 100644
--- a/l10n/uk/files_versions.po
+++ b/l10n/uk/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-23 02:02+0200\n"
-"PO-Revision-Date: 2012-10-22 12:22+0000\n"
-"Last-Translator: skoptev <skoptev@ukr.net>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: uk\n"
"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);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Термін дії вÑÑ–Ñ… верÑій"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "ІÑторіÑ"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "ВерÑÑ–Ñ—"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Це призведе до Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… Ñ–Ñнуючих збережених верÑій Ваших файлів"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/uk/lib.po b/l10n/uk/lib.po
index f2a86e71708..6380af6fb3d 100644
--- a/l10n/uk/lib.po
+++ b/l10n/uk/lib.po
@@ -6,13 +6,14 @@
# <dzubchikd@gmail.com>, 2012.
# <skoptev@ukr.net>, 2012.
# <victor.dubiniuk@gmail.com>, 2012.
+# <volodya327@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-27 00:10+0100\n"
-"PO-Revision-Date: 2012-11-26 15:40+0000\n"
-"Last-Translator: skoptev <skoptev@ukr.net>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,51 +21,55 @@ msgstr ""
"Language: uk\n"
"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);\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Допомога"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "ОÑобиÑте"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "ÐалаштуваннÑ"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "КориÑтувачі"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Додатки"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Ðдмін"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Файли повинні бути завантаженні поÑлідовно."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "ПовернутиÑÑ Ð´Ð¾ файлів"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Вибрані фали завеликі Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ zip файлу."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "не може бути визначено"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Додаток не увімкнений"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Помилка автентифікації"
@@ -84,55 +89,152 @@ msgstr "ТекÑÑ‚"
msgid "Images"
msgstr "ЗображеннÑ"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "Ñекунди тому"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 хвилину тому"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d хвилин тому"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 годину тому"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d годин тому"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "Ñьогодні"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "вчора"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d днів тому"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "минулого міÑÑцÑ"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d міÑÑців тому"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "минулого року"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "роки тому"
diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po
index cb8ce3e8cac..e4c718c3f10 100644
--- a/l10n/uk/settings.po
+++ b/l10n/uk/settings.po
@@ -5,13 +5,14 @@
# Translators:
# <dzubchikd@gmail.com>, 2012.
# <skoptev@ukr.net>, 2012.
-# <volodya327@gmail.com>, 2012.
+# <volodya327@gmail.com>, 2012-2013.
+# пан Володимир <volodya327@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
@@ -24,6 +25,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ ÑпиÑок з App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Помилка автентифікації"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ зображене ім'Ñ"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Група вже Ñ–Ñнує"
@@ -32,7 +42,7 @@ msgstr "Група вже Ñ–Ñнує"
msgid "Unable to add group"
msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ групу"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "Ðе вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ програму. "
@@ -44,22 +54,10 @@ msgstr "ÐдреÑу збережено"
msgid "Invalid email"
msgstr "Ðевірна адреÑа"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID змінено"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Помилковий запит"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ групу"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Помилка автентифікації"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувача"
@@ -68,6 +66,10 @@ msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувача"
msgid "Language changed"
msgstr "Мова змінена"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Помилковий запит"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "ÐдмініÑтратор не може видалити Ñебе з групи адмінів"
@@ -82,19 +84,47 @@ msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ кориÑтувача у групу %s
msgid "Unable to remove user from group %s"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувача із групи %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ програму. "
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Оновити до {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Вимкнути"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Включити"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Зачекайте, будь лаÑка..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "ОновлюєтьÑÑ..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Помилка при оновленні програми"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Помилка"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Оновлено"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Зберігаю..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__language_name__"
@@ -106,18 +136,22 @@ msgstr "Додати Ñвою програму"
msgid "More Apps"
msgstr "Більше програм"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Вибрати додаток"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "ПереглÑньте Ñторінку програм на apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Оновити"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ ÐšÐ¾Ñ€Ð¸Ñтувача"
@@ -147,83 +181,87 @@ msgstr "Комерційна підтримка"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Ви викориÑтали <strong>%s</strong> із доÑтупних <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Клієнти"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "Завантажити клієнт Ð´Ð»Ñ ÐŸÐš"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "Завантажити клієнт Ð´Ð»Ñ Android"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "Завантажити клієнт Ð´Ð»Ñ iOS"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Пароль"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Ваш пароль змінено"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ваш пароль"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Поточний пароль"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Ðовий пароль"
-#: templates/personal.php:26
-msgid "show"
-msgstr "показати"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Змінити пароль"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Показати Ім'Ñ"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Ваше ім'Ñ Ð±ÑƒÐ»Ð¾ змінене"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Ðеможливо змінити ваше зображене ім'Ñ"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Змінити зображене ім'Ñ"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Ел.пошта"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Ваша адреÑа електронної пошти"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Введіть адреÑу електронної пошти Ð´Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Мова"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Допомогти з перекладом"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "ВикориÑтовуйте цю адреÑу Ð´Ð»Ñ Ð¿Ñ–Ð´'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ вашого ownCloud у вашому файловому менеджері"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "ВерÑÑ–Ñ"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -233,11 +271,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "Розроблено <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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Ім'Ñ"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Ім'Ñ Ð›Ð¾Ð³Ñ–Ð½Ñƒ"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Групи"
@@ -247,28 +285,36 @@ msgstr "Створити"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Ñховище за замовчуваннÑм"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Ðеобмежено"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Інше"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "ÐдмініÑтратор групи"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
-msgstr ""
+msgstr "Сховище"
+
+#: templates/users.php:97
+msgid "change display name"
+msgstr "змінити зображене ім'Ñ"
-#: templates/users.php:133
+#: templates/users.php:101
+msgid "set new password"
+msgstr "вÑтановити новий пароль"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "За замовчуваннÑм"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Видалити"
diff --git a/l10n/uk/user_ldap.po b/l10n/uk/user_ldap.po
index b6601497ecb..2b1bfc0ad9d 100644
--- a/l10n/uk/user_ldap.po
+++ b/l10n/uk/user_ldap.po
@@ -5,13 +5,14 @@
# Translators:
# <victor.dubiniuk@gmail.com>, 2012.
# <volodya327@gmail.com>, 2012.
+# пан Володимир <volodya327@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-19 00:03+0100\n"
-"PO-Revision-Date: 2012-12-18 12:52+0000\n"
-"Last-Translator: volodya327 <volodya327@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +20,58 @@ msgstr ""
"Language: uk\n"
"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);\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ конфігурацію Ñервера"
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð²Ñ–Ñ€Ð½Ð° Ñ– зв'Ñзок може бути вÑтановлений ​​!"
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð²Ñ–Ñ€Ð½Ð°, але вÑтановити зв'Ñзок не вдалоÑÑ. Будь лаÑка, перевірте Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñервера Ñ– облікові дані."
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð½ÐµÐ²Ñ–Ñ€Ð½Ð°. Подробиці подивітьÑÑ, будь лаÑка, в журналі ownCloud."
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½Ðµ було виконано"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr "ЗаÑтоÑувати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· оÑтанньої конфігурації Ñервера ?"
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr "Зберегти Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ?"
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr "Ðеможливо додати конфігурацію Ñервера"
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr "Перевірка з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð¹ÑˆÐ»Ð° уÑпішно"
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr "Перевірка з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð°ÑÑŒ неуÑпішно"
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr "Ви дійÑно бажаєте видалити поточну конфігурацію Ñервера ?"
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr "Підтвердіть ВидаленнÑ"
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -28,158 +81,232 @@ msgstr "<b>Увага:</b> ЗаÑтоÑунки user_ldap та user_webdavauth Ð
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr "<b>Увага:</ b> Потрібний модуль PHP LDAP не вÑтановлено, базова програма працювати не буде. Будь лаÑка, звернітьÑÑ Ð´Ð¾ ÑиÑтемного адмініÑтратора, щоб вÑтановити його."
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¡ÐµÑ€Ð²ÐµÑ€Ð°"
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr "Додати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¡ÐµÑ€Ð²ÐµÑ€Ð°"
+
+#: templates/settings.php:21
msgid "Host"
msgstr "ХоÑÑ‚"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Можна не вказувати протокол, Ñкщо вам не потрібен SSL. Тоді почніть з ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Базовий DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr "Один Base DN на одній Ñтрочці"
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Ви можете задати Базовий DN Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів Ñ– груп на вкладинці Додатково"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "DN КориÑтувача"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "DN клієнтÑького кориÑтувача Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²'Ñзки, наприклад: uid=agent,dc=example,dc=com. Ð”Ð»Ñ Ð°Ð½Ð¾Ð½Ñ–Ð¼Ð½Ð¾Ð³Ð¾ доÑтупу, залиште DN Ñ– Пароль порожніми."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Пароль"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Ð”Ð»Ñ Ð°Ð½Ð¾Ð½Ñ–Ð¼Ð½Ð¾Ð³Ð¾ доÑтупу, залиште DN Ñ– Пароль порожніми."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Фільтр КориÑтувачів, що під'єднуютьÑÑ"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Визначає фільтр, Ñкий заÑтоÑовуєтьÑÑ Ð¿Ñ€Ð¸ Ñпробі входу. %%uid замінює ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача при вході."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "викориÑтовуйте %%uid заповнювач, наприклад: \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Фільтр СпиÑку КориÑтувачів"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Визначає фільтр, Ñкий заÑтоÑовуєтьÑÑ Ð¿Ñ€Ð¸ отриманні кориÑтувачів"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "без будь-Ñкого заповнювача, наприклад: \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Фільтр Груп"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Визначає фільтр, Ñкий заÑтоÑовуєтьÑÑ Ð¿Ñ€Ð¸ отриманні груп."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "без будь-Ñкого заповнювача, наприклад: \"objectClass=posixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ðктивне"
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr "Якщо \"галочка\" знÑта, Ñ†Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð±ÑƒÐ´Ðµ пропущена."
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Порт"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "ОÑновне Дерево КориÑтувачів"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "ОÑновне Дерево Груп"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "ÐÑÐ¾Ñ†Ñ–Ð°Ñ†Ñ–Ñ Ð“Ñ€ÑƒÐ¿Ð°-Член"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "ВикориÑтовуйте TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Ðе викориÑтовуйте його Ð´Ð»Ñ SSL з'єднань, це не буде виконано."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Ðечутливий до регіÑтру LDAP Ñервер (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Вимкнути перевірку SSL Ñертифіката."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Якщо з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ñ†ÑŽÑ” лише з цією опцією, імпортуйте SSL Ñертифікат LDAP Ñервера у ваший ownCloud Ñервер."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Ðе рекомендуєтьÑÑ, викориÑтовуйте лише Ð´Ð»Ñ Ñ‚ÐµÑтів."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "в Ñекундах. Зміна очищує кеш."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Поле, Ñке відображає Ім'Ñ ÐšÐ¾Ñ€Ð¸Ñтувача"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Ðтрибут LDAP, Ñкий викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ— імен кориÑтувачів ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "ОÑновне Дерево КориÑтувачів"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr "Один КориÑтувач Base DN на одній Ñтрочці"
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Поле, Ñке відображає Ім'Ñ Ð“Ñ€ÑƒÐ¿Ð¸"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Ðтрибут LDAP, Ñкий викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ— імен груп ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "ОÑновне Дерево Груп"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr "Одна Група Base DN на одній Ñтрочці"
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "ÐÑÐ¾Ñ†Ñ–Ð°Ñ†Ñ–Ñ Ð“Ñ€ÑƒÐ¿Ð°-Член"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "в байтах"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "в Ñекундах. Зміна очищує кеш."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Залиште порожнім Ð´Ð»Ñ Ñ–Ð¼ÐµÐ½Ñ– кориÑтувача (за замовчаннÑм). Інакше, вкажіть атрибут LDAP/AD."
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Допомога"
diff --git a/l10n/uk/user_webdavauth.po b/l10n/uk/user_webdavauth.po
index d81333a1909..eec04d63355 100644
--- a/l10n/uk/user_webdavauth.po
+++ b/l10n/uk/user_webdavauth.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-23 00:09+0100\n"
-"PO-Revision-Date: 2012-12-22 01:58+0000\n"
-"Last-Translator: volodya327 <volodya327@gmail.com>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +19,17 @@ msgstr ""
"Language: uk\n"
"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);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr "ownCloud відправить облікові дані на цей URL та буде інтерпретувати http 401 Ñ– http 403, Ñк невірні облікові дані, а вÑÑ– інші коди, Ñк вірні."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr ""
diff --git a/l10n/vi/core.po b/l10n/vi/core.po
index 54b468ce536..24cd51e054d 100644
--- a/l10n/vi/core.po
+++ b/l10n/vi/core.po
@@ -6,15 +6,16 @@
# <khanhnd@kenhgiaiphap.vn>, 2012.
# <mattheu.9x@gmail.com>, 2012.
# <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
# Son Nguyen <sonnghit@gmail.com>, 2012.
-# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
+# Sơn Nguyễn <sonnghit@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:20+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,29 +23,29 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "%s chia sẻ tập tin này cho bạn"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "%s chia sẻ thư mục này cho bạn"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "Ngưá»i dùng %s chia sẻ tập tin \"%s\" cho bạn .Bạn có thể tải tại đây : %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "Ngưá»i dùng %s chia sẻ thư mục \"%s\" cho bạn .Bạn có thể tải tại đây : %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -55,8 +56,9 @@ msgid "No category to add?"
msgstr "Không có danh mục được thêm?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "Danh mục này đã được tạo :"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "Danh mục này đã tồn tại: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -84,59 +86,135 @@ msgstr "Không có thể loại nào được chá»n để xóa."
msgid "Error removing %s from favorites."
msgstr "Lỗi xóa %s từ mục yêu thích."
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "Chủ nhật"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "Thứ 2"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "Thứ 3"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "Thứ 4"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "Thứ 5"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "Thứ "
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "Thứ 7"
+
+#: js/config.php:33
+msgid "January"
+msgstr "Tháng 1"
+
+#: js/config.php:33
+msgid "February"
+msgstr "Tháng 2"
+
+#: js/config.php:33
+msgid "March"
+msgstr "Tháng 3"
+
+#: js/config.php:33
+msgid "April"
+msgstr "Tháng 4"
+
+#: js/config.php:33
+msgid "May"
+msgstr "Tháng 5"
+
+#: js/config.php:33
+msgid "June"
+msgstr "Tháng 6"
+
+#: js/config.php:33
+msgid "July"
+msgstr "Tháng 7"
+
+#: js/config.php:33
+msgid "August"
+msgstr "Tháng 8"
+
+#: js/config.php:33
+msgid "September"
+msgstr "Tháng 9"
+
+#: js/config.php:33
+msgid "October"
+msgstr "Tháng 10"
+
+#: js/config.php:33
+msgid "November"
+msgstr "Tháng 11"
+
+#: js/config.php:33
+msgid "December"
+msgstr "Tháng 12"
+
+#: js/js.js:286
msgid "Settings"
msgstr "Cài đặt"
-#: js/js.js:704
+#: js/js.js:766
msgid "seconds ago"
msgstr "vài giây trước"
-#: js/js.js:705
+#: js/js.js:767
msgid "1 minute ago"
msgstr "1 phút trước"
-#: js/js.js:706
+#: js/js.js:768
msgid "{minutes} minutes ago"
msgstr "{minutes} phút trước"
-#: js/js.js:707
+#: js/js.js:769
msgid "1 hour ago"
msgstr "1 giỠtrước"
-#: js/js.js:708
+#: js/js.js:770
msgid "{hours} hours ago"
msgstr "{hours} giỠtrước"
-#: js/js.js:709
+#: js/js.js:771
msgid "today"
msgstr "hôm nay"
-#: js/js.js:710
+#: js/js.js:772
msgid "yesterday"
msgstr "hôm qua"
-#: js/js.js:711
+#: js/js.js:773
msgid "{days} days ago"
msgstr "{days} ngày trước"
-#: js/js.js:712
+#: js/js.js:774
msgid "last month"
msgstr "tháng trước"
-#: js/js.js:713
+#: js/js.js:775
msgid "{months} months ago"
msgstr "{months} tháng trước"
-#: js/js.js:714
+#: js/js.js:776
msgid "months ago"
msgstr "tháng trước"
-#: js/js.js:715
+#: js/js.js:777
msgid "last year"
msgstr "năm trước"
-#: js/js.js:716
+#: js/js.js:778
msgid "years ago"
msgstr "năm trước"
@@ -166,8 +244,8 @@ msgid "The object type is not specified."
msgstr "Loại đối tượng không được chỉ định."
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "Lá»—i"
@@ -179,122 +257,140 @@ msgstr "Tên ứng dụng không được chỉ định."
msgid "The required file {file} is not installed!"
msgstr "Tập tin cần thiết {file} không được cài đặt!"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "Chia sẻ"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "ÄÆ°á»£c chia sẻ"
+
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "Lỗi trong quá trình chia sẻ"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "Lỗi trong quá trình gỡ chia sẻ"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "Lá»—i trong quá trình phân quyá»n"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "Äã được chia sẽ vá»›i bạn và nhóm {group} bởi {owner}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "Äã được chia sẽ bởi {owner}"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "Chia sẻ với"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "Chia sẻ với liên kết"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "Mật khẩu bảo vệ"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "Mật khẩu"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "Liên kết email tới cá nhân"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "Gởi"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "Äặt ngày kết thúc"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "Ngày kết thúc"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "Chia sẻ thông qua email"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "Không tìm thấy ngưá»i nào"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "Chia sẻ lại không được cho phép"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "Äã được chia sẽ trong {item} vá»›i {user}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "Gỡ bỠchia sẻ"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "có thể chỉnh sửa"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "quản lý truy cập"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "tạo"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "cập nhật"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "xóa"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "chia sẻ"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
msgstr "Mật khẩu bảo vệ"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "Lỗi không thiết lập ngày kết thúc"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "Lỗi cấu hình ngày kết thúc"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
-msgstr ""
+msgstr "Äang gởi ..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
-msgstr ""
+msgstr "Email đã được gửi"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "Cập nhật không thành công . Vui lòng thông báo đến <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\"> Cộng đồng ownCloud </a>."
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
@@ -377,7 +473,7 @@ msgstr "Sửa thể loại"
msgid "Add"
msgstr "Thêm"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "Cảnh bảo bảo mật"
@@ -387,147 +483,75 @@ msgid ""
"OpenSSL extension."
msgstr "Không an toàn ! chức năng random number generator đã có sẵn ,vui lòng bật PHP OpenSSL extension."
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "Nếu không có random number generator , Hacker có thể thiết lập lại mật khẩu và chiếm tài khoản của bạn."
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động"
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "Thư mục dữ liệu và những tập tin của bạn có thể dễ dàng bị truy cập từ mạng. Tập tin .htaccess do ownCloud cung cấp không hoạt động. Chúng tôi đỠnghị bạn nên cấu hình lại máy chủ web để thư mục dữ liệu không còn bị truy cập hoặc bạn nên di chuyển thư mục dữ liệu ra bên ngoài thư mục gốc của máy chủ."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "Äể biết thêm cách cấu hình máy chá»§ cá»§a bạn, xin xem <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">tài liệu</a>."
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "Tạo một <strong>tài khoản quản trị</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "Nâng cao"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "Thư mục dữ liệu"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "Cấu hình cơ sở dữ liệu"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "được sử dụng"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "Ngưá»i dùng cÆ¡ sở dữ liệu"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "Mật khẩu cơ sở dữ liệu"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "Tên cơ sở dữ liệu"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "Cơ sở dữ liệu tablespace"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "Database host"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "Cài đặt hoàn tất"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "Chủ nhật"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "Thứ 2"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "Thứ 3"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "Thứ 4"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "Thứ 5"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "Thứ "
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "Thứ 7"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "Tháng 1"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "Tháng 2"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "Tháng 3"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "Tháng 4"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "Tháng 5"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "Tháng 6"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "Tháng 7"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "Tháng 8"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "Tháng 9"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "Tháng 10"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "Tháng 11"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "Tháng 12"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "các dịch vụ web dưới sự kiểm soát của bạn"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "Äăng xuất"
@@ -549,17 +573,17 @@ msgstr "Vui lòng thay đổi mật khẩu của bạn để đảm bảo tài k
msgid "Lost your password?"
msgstr "Bạn quên mật khẩu ?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "ghi nhá»›"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "Äăng nhập"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "Bạn đã đăng xuất."
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "Äăng nhập khác"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -572,18 +596,4 @@ msgstr "Kế tiếp"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "Cảnh báo bảo mật !"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "Vui lòng xác nhận mật khẩu của bạn. <br/> Vì lý do bảo mật thỉnh thoảng bạn có thể được yêu cầu nhập lại mật khẩu."
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "Kiểm tra"
+msgstr "Cập nhật ownCloud lên phiên bản %s, có thể sẽ mất thá»i gian"
diff --git a/l10n/vi/files.po b/l10n/vi/files.po
index 972bed79676..eeabcf3ec53 100644
--- a/l10n/vi/files.po
+++ b/l10n/vi/files.po
@@ -6,13 +6,14 @@
# <khanhnd@kenhgiaiphap.vn>, 2012.
# <mattheu.9x@gmail.com>, 2012.
# <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
@@ -24,207 +25,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Không thể di chuyển %s - Äã có tên file này trên hệ thống"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "Không thể di chuyển %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "Không thể đổi tên file"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "Không có tập tin nào được tải lên. Lỗi không xác định"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "Không có lỗi, các tập tin đã được tải lên thành công"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
-msgstr ""
+msgstr "The uploaded file exceeds the upload_max_filesize directive in php.ini: "
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Kích thước những tập tin tải lên vượt quá MAX_FILE_SIZE đã được quy định"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "Tập tin tải lên mới chỉ tải lên được một phần"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "Không có tập tin nào được tải lên"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "Không tìm thấy thư mục tạm"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "Không thể ghi "
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr ""
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "Không đủ không gian lưu trữ"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "Thư mục không hợp lệ"
#: appinfo/app.php:10
msgid "Files"
msgstr "Tập tin"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "Không chia sẽ"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "Xóa vĩnh vễn"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Xóa"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "Sửa tên"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Chá»"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} đã tồn tại"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "thay thế"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "tên gợi ý"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "há»§y"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "đã thay thế {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "lùi lại"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "đã thay thế {new_name} bằng {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "hủy chia sẽ {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "đã xóa {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "thực hiện việc xóa"
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' là một tên file không hợp lệ"
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Tên file không được rỗng"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng."
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "Tạo tập tin ZIP, Ä‘iá»u này có thể làm mất má»™t chút thá»i gian"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "Your storage is full, files can not be updated or synced anymore!"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "Your storage is almost full ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "Your download is being prepared. This might take some time if the files are big."
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "Tải lên lỗi"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "Äóng"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Chá»"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 tệp tin đang được tải lên"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} tập tin đang tải lên"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "Hủy tải lên"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Tập tin tải lên Ä‘ang được xá»­ lý. Nếu bạn rá»i khá»i trang bây giá» sẽ há»§y quá trình này."
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URL không được để trống."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} tập tin đã được quét"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "lỗi trong khi quét"
+msgstr "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "Tên"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "Kích cỡ"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "Thay đổi"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 thư mục"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} thư mục"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 tập tin"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} tập tin"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "Tải lên"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "Xử lý tập tin"
@@ -273,36 +277,44 @@ msgstr "Thư mục"
msgid "From link"
msgstr "Từ liên kết"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "Tải lên"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Há»§y upload"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Không có gì ở đây .Hãy tải lên một cái gì đó !"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "Tải xuống"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Không chia sẽ"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Tập tin tải lên quá lớn"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ ."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Tập tin Ä‘ang được quét ,vui lòng chá»."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Hiện tại đang quét"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Upgrading filesystem cache..."
diff --git a/l10n/vi/files_encryption.po b/l10n/vi/files_encryption.po
index 0ac3a53087c..af199ade990 100644
--- a/l10n/vi/files_encryption.po
+++ b/l10n/vi/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# sao sang <saosangmo@yahoo.com>, 2013.
# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-21 00:01+0100\n"
-"PO-Revision-Date: 2012-11-20 05:48+0000\n"
-"Last-Translator: Sơn Nguyễn <sonnghit@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +19,22 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "Mã hóa"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "Loại trừ các loại tập tin sau đây từ mã hóa"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr "Mã hóa file đã mở"
-#: templates/settings.php:5
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr "Loại file sau sẽ không được mã hóa"
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr "Việc mã hóa không bao gồm loại file sau"
+
+#: templates/settings.php:12
msgid "None"
msgstr "Không có gì hết"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "BẬT mã hóa"
diff --git a/l10n/vi/files_external.po b/l10n/vi/files_external.po
index 72b1138b2b2..6dbeed35de4 100644
--- a/l10n/vi/files_external.po
+++ b/l10n/vi/files_external.po
@@ -4,14 +4,15 @@
#
# Translators:
# <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:40+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,18 +44,18 @@ msgstr "Xin vui lòng cung cấp một ứng dụng Dropbox hợp lệ và mã b
msgid "Error configuring Google Drive storage"
msgstr "Lỗi cấu hình lưu trữ Google Drive"
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Cảnh báo:</b> \"smbclient\" chưa được cài đặt. Mount CIFS/SMB shares là không thể thá»±c hiện được. Hãy há»i ngưá»i quản trị hệ thống để cài đặt nó."
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
" of FTP shares is not possible. Please ask your system administrator to "
"install it."
-msgstr ""
+msgstr "<b>Cảnh báo:</b> FTP trong PHP chưa được cài đặt hoặc chưa được mở. Mount FTP shares là không thể. Xin hãy yêu cầu quản trị hệ thống của bạn cài đặt nó."
#: templates/settings.php:3
msgid "External Storage"
@@ -101,7 +102,7 @@ msgid "Users"
msgstr "Ngưá»i dùng"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "Xóa"
@@ -113,10 +114,10 @@ msgstr "Kích hoạt tính năng lưu trữ ngoài"
msgid "Allow users to mount their own external storage"
msgstr "Cho phép ngưá»i dùng kết nối vá»›i lưu trữ riêng bên ngoài cá»§a há»"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr "Chứng chỉ SSL root"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr "Nhập Root Certificate"
diff --git a/l10n/vi/files_trashbin.po b/l10n/vi/files_trashbin.po
new file mode 100644
index 00000000000..9293b13b7dd
--- /dev/null
+++ b/l10n/vi/files_trashbin.po
@@ -0,0 +1,69 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# sao sang <saosangmo@yahoo.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 19:10+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
+"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr "Không thể óa %s vĩnh viễn"
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr "Không thể khôi phục %s"
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr "thực hiện phục hồi"
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr "xóa file vĩnh viễn"
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "Tên"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr "Äã xóa"
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 thư mục"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} thư mục"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 tập tin"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} tập tin"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr "Không có gì ở đây. Thùng rác của bạn rỗng!"
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr "Khôi phục"
diff --git a/l10n/vi/files_versions.po b/l10n/vi/files_versions.po
index c06b31deb15..86b6d7a9983 100644
--- a/l10n/vi/files_versions.po
+++ b/l10n/vi/files_versions.po
@@ -4,14 +4,15 @@
#
# Translators:
# <khanhnd@kenhgiaiphap.vn>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-21 00:01+0100\n"
-"PO-Revision-Date: 2012-11-20 04:32+0000\n"
-"Last-Translator: Sơn Nguyễn <sonnghit@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:30+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,21 +20,44 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "Hết hạn tất cả các phiên bản"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr "Không thể khôi phục: %s"
+
+#: history.php:40
+msgid "success"
+msgstr "thành công"
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr "File %s đã được khôi phục vỠphiên bản %s"
+
+#: history.php:49
+msgid "failure"
+msgstr "Thất bại"
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr "File %s không thể khôi phục vỠphiên bản %s"
+
+#: history.php:68
+msgid "No old versions available"
+msgstr "Không có phiên bản cũ nào"
+
+#: history.php:73
+msgid "No path specified"
+msgstr "Không chỉ ra đưá»ng dẫn rõ ràng"
#: js/versions.js:16
msgid "History"
msgstr "Lịch sử"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "Phiên bản"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "Khi bạn thực hiện thao tác này sẽ xóa tất cả các phiên bản sao lưu hiện có "
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr "Khôi phục một file vỠphiên bản trước đó bằng cách click vào nút Khôi phục tương ứng"
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/vi/lib.po b/l10n/vi/lib.po
index 915964d52ff..c8185ef5092 100644
--- a/l10n/vi/lib.po
+++ b/l10n/vi/lib.po
@@ -5,14 +5,15 @@
# Translators:
# <mattheu.9x@gmail.com>, 2012.
# <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-21 00:01+0100\n"
-"PO-Revision-Date: 2012-11-20 01:33+0000\n"
-"Last-Translator: mattheu_9x <mattheu.9x@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,51 +21,55 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "Giúp đỡ"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "Cá nhân"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "Cài đặt"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "Ngưá»i dùng"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "Ứng dụng"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "Quản trị"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Tải vỠZIP đã bị tắt."
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Tập tin cần phải được tải vá» từng ngưá»i má»™t."
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Trở lại tập tin"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Tập tin được chá»n quá lá»›n để tạo tập tin ZIP."
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "không thể phát hiện được"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "Ứng dụng không được BẬT"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "Lỗi xác thực"
@@ -84,55 +89,152 @@ msgstr "Văn bản"
msgid "Images"
msgstr "Hình ảnh"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "1 giây trước"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 phút trước"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d phút trước"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1 giỠtrước"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%d giỠtrước"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "hôm nay"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "hôm qua"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d ngày trước"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "tháng trước"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d tháng trước"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "năm trước"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "năm trước"
diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po
index e8689e484f1..588c1af1ed4 100644
--- a/l10n/vi/settings.po
+++ b/l10n/vi/settings.po
@@ -6,6 +6,7 @@
# <khanhnd@kenhgiaiphap.vn>, 2012.
# <mattheu.9x@gmail.com>, 2012.
# <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
# Son Nguyen <sonnghit@gmail.com>, 2012.
# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
# <vlinhd11@gmail.com>, 2012.
@@ -13,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
@@ -27,6 +28,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "Không thể tải danh sách ứng dụng từ App Store"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Lỗi xác thực"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "Không thể thay đổi tên hiển thị"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "Nhóm đã tồn tại"
@@ -35,7 +45,7 @@ msgstr "Nhóm đã tồn tại"
msgid "Unable to add group"
msgstr "Không thể thêm nhóm"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "không thể kích hoạt ứng dụng."
@@ -47,22 +57,10 @@ msgstr "Lưu email"
msgid "Invalid email"
msgstr "Email không hợp lệ"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "Äổi OpenID"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "Yêu cầu không hợp lệ"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "Không thể xóa nhóm"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "Lỗi xác thực"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "Không thể xóa ngưá»i dùng"
@@ -71,6 +69,10 @@ msgstr "Không thể xóa ngưá»i dùng"
msgid "Language changed"
msgstr "Ngôn ngữ đã được thay đổi"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "Yêu cầu không hợp lệ"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "Quản trị viên không thể loại bá» chính há» khá»i nhóm quản lý"
@@ -85,19 +87,47 @@ msgstr "Không thể thêm ngưá»i dùng vào nhóm %s"
msgid "Unable to remove user from group %s"
msgstr "Không thể xóa ngưá»i dùng từ nhóm %s"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "Không thể cập nhật ứng dụng"
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "Cập nhật lên {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "Tắt"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "Bật"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "Xin hãy đợi..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "Äang cập nhật..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "Lỗi khi cập nhật ứng dụng"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "Lá»—i"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "Äã cập nhật"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "Äang tiến hành lưu ..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__Ngôn ngữ___"
@@ -109,124 +139,132 @@ msgstr "Thêm ứng dụng của bạn"
msgid "More Apps"
msgstr "Nhiá»u ứng dụng hÆ¡n"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "Chá»n má»™t ứng dụng"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "Xem nhiá»u ứng dụng hÆ¡n tại apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-Giấy phép được cấp bởi <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "Cập nhật"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "Tài liệu ngưá»i sá»­ dụng"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "Tài liệu quản trị"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "Tài liệu trực tuyến"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "Diễn đàn"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr ""
+msgstr "Hệ ghi nhận lỗi"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "Hỗ trợ có phí"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "Bạn đã sử dụng <strong>%s </ strong> có sẵn <strong> %s </ strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "Khách hàng"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "Mật khẩu"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "Mật khẩu của bạn đã được thay đổi."
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "Không thể đổi mật khẩu"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "Mật khẩu cũ"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "Mật khẩu mới "
-#: templates/personal.php:26
-msgid "show"
-msgstr "Hiện"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "Äổi mật khẩu"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "Tên hiển thị"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "Tên hiển thị của bạn đã được thay đổi"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "Không thể thay đổi tên hiển thị của bạn"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "Thay đổi tên hiển thị"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "Email của bạn"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "Nhập địa chỉ email của bạn để khôi phục lại mật khẩu"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "Ngôn ngữ"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "Hỗ trợ dịch thuật"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "Sử dụng địa chỉ này để kết nối ownCloud của bạn trong trình quản lý file của bạn"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "Phiên bản"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -236,11 +274,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "ÄÆ°á»£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>."
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "Tên"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "Tên đăng nhập"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "Nhóm"
@@ -250,28 +288,36 @@ msgstr "Tạo"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Bộ nhớ mặc định"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Không giới hạn"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "Khác"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "Nhóm quản trị"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
-msgstr ""
+msgstr "Bá»™ nhá»›"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "Thay đổi tên hiển thị"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "đặt mật khẩu mới"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "Mặc định"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "Xóa"
diff --git a/l10n/vi/user_ldap.po b/l10n/vi/user_ldap.po
index c6157201e51..003187cb06d 100644
--- a/l10n/vi/user_ldap.po
+++ b/l10n/vi/user_ldap.po
@@ -4,14 +4,15 @@
#
# Translators:
# <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 19:00+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +20,58 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "Xóa thất bại"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -28,158 +81,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "Máy chủ"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "Bạn có thể bỠqua các giao thức, ngoại trừ SSL. Sau đó bắt đầu với ldaps://"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "DN cơ bản"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "Bạn có thể chỉ định DN cÆ¡ bản cho ngưá»i dùng và các nhóm trong tab Advanced"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "Ngưá»i dùng DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "Các DN cá»§a ngưá»i sá»­ dụng đã được thá»±c hiện, ví dụ như uid =agent , dc = example, dc = com. Äể truy cập nặc danh ,DN và mật khẩu trống."
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "Mật khẩu"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "Cho phép truy cập nặc danh , DN và mật khẩu trống."
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "Lá»c ngưá»i dùng đăng nhập"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "Xác định các bá»™ lá»c để áp dụng, khi đăng nhập . uid%% thay thế tên ngưá»i dùng trong các lần đăng nhập."
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "use %%uid placeholder, e.g. \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "Lá»c danh sách thành viên"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "Xác định các bá»™ lá»c để áp dụng, khi ngưá»i dụng sá»­ dụng."
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "mà không giữ chỗ nào, ví dụ như \"objectClass = person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "Bá»™ lá»c nhóm"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "Xác định các bá»™ lá»c để áp dụng, khi nhóm sá»­ dụng."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "mà không giữ chỗ nào, ví dụ như \"objectClass = osixGroup\"."
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr "Connection Settings"
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "Cổng"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "Cây ngưá»i dùng cÆ¡ bản"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "Cây nhóm cơ bản"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "Nhóm thành viên Cộng đồng"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr "Cổng sao lưu (Replica)"
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr "Tắt máy chủ chính"
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr "When switched on, ownCloud will only connect to the replica server."
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "Sử dụng TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "Kết nối SSL bị lỗi. "
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr "Do not use it additionally for LDAPS connections, it will fail."
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "Trưá»ng hợp insensitve LDAP máy chá»§ (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "Tắt xác thực chứng nhận SSL"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "Nếu kết nối chỉ hoạt động vá»›i tùy chá»n này, vui lòng import LDAP certificate SSL trong máy chá»§ ownCloud cá»§a bạn."
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "Không khuyến khích, Chỉ sử dụng để thử nghiệm."
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "trong vài giây. Một sự thay đổi bộ nhớ cache."
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr "Directory Settings"
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "Hiển thị tên ngưá»i sá»­ dụng"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "Các thuá»™c tính LDAP sá»­ dụng để tạo tên ngưá»i dùng ownCloud."
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "Cây ngưá»i dùng cÆ¡ bản"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr "User Search Attributes"
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr "Optional; one attribute per line"
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "Hiển thị tên nhóm"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "Các thuộc tính LDAP sử dụng để tạo các nhóm ownCloud."
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "Cây nhóm cơ bản"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr "Group Search Attributes"
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "Nhóm thành viên Cộng đồng"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr "Special Attributes"
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "Theo Byte"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "trong vài giây. Một sự thay đổi bộ nhớ cache."
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "Äể trống tên ngưá»i dùng (mặc định). Nếu không chỉ định thuá»™c tính LDAP/AD"
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "Giúp đỡ"
diff --git a/l10n/vi/user_webdavauth.po b/l10n/vi/user_webdavauth.po
index 5faffd6c9af..57c796e00db 100644
--- a/l10n/vi/user_webdavauth.po
+++ b/l10n/vi/user_webdavauth.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# sao sang <saosangmo@yahoo.com>, 2013.
# Sơn Nguyễn <sonnghit@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:30+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,13 +19,17 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "Xác thực WebDAV"
+
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "URL: http://"
-#: templates/settings.php:6
+#: templates/settings.php:7
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud sẽ gá»­i chứng thư ngưá»i dùng tá»›i URL này. Tính năng này kiểm tra trả lá»i và sẽ hiểu mã 401 và 403 cá»§a giao thức HTTP là chứng thư không hợp lệ, và má»i trả lá»i khác được coi là hợp lệ."
diff --git a/l10n/zh_CN.GB2312/core.po b/l10n/zh_CN.GB2312/core.po
index 22b5d6cdfc8..1d9bf29559f 100644
--- a/l10n/zh_CN.GB2312/core.po
+++ b/l10n/zh_CN.GB2312/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -19,24 +19,24 @@ msgstr ""
"Language: zh_CN.GB2312\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -52,8 +52,9 @@ msgid "No category to add?"
msgstr "没有分类添加了?"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "这个分类已ç»å­˜åœ¨äº†:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -81,59 +82,135 @@ msgstr "没有选者è¦åˆ é™¤çš„分类."
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "星期天"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "星期一"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "星期二"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "星期三"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "星期四"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "星期五"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "星期六"
+
+#: js/config.php:33
+msgid "January"
+msgstr "一月"
+
+#: js/config.php:33
+msgid "February"
+msgstr "二月"
+
+#: js/config.php:33
+msgid "March"
+msgstr "三月"
+
+#: js/config.php:33
+msgid "April"
+msgstr "四月"
+
+#: js/config.php:33
+msgid "May"
+msgstr "五月"
+
+#: js/config.php:33
+msgid "June"
+msgstr "六月"
+
+#: js/config.php:33
+msgid "July"
+msgstr "七月"
+
+#: js/config.php:33
+msgid "August"
+msgstr "八月"
+
+#: js/config.php:33
+msgid "September"
+msgstr "乿œˆ"
+
+#: js/config.php:33
+msgid "October"
+msgstr "åæœˆ"
+
+#: js/config.php:33
+msgid "November"
+msgstr "å一月"
+
+#: js/config.php:33
+msgid "December"
+msgstr "å二月"
+
+#: js/js.js:284
msgid "Settings"
msgstr "设置"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "ç§’å‰"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "1 分钟å‰"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} 分钟å‰"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "今天"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "昨天"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} 天å‰"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "上个月"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "月å‰"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "去年"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "å¹´å‰"
@@ -163,8 +240,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "错误"
@@ -176,123 +253,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "分享"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "分享出错"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "å–æ¶ˆåˆ†äº«å‡ºé”™"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "å˜æ›´æƒé™å‡ºé”™"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "由 {owner} 与您和 {group} 群组分享"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "由 {owner} 与您分享"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "分享"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "分享链接"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "密ç ä¿æŠ¤"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "密ç "
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "设置失效日期"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "失效日期"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "通过电å­é‚®ä»¶åˆ†äº«ï¼š"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "查无此人"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "ä¸å…许é‡å¤åˆ†äº«"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "å·²ç»ä¸Ž {user} 在 {item} 中分享"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "å–æ¶ˆåˆ†äº«"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "å¯ç¼–辑"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "访问控制"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "创建"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "æ›´æ–°"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "删除"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "分享"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "密ç ä¿æŠ¤"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "å–æ¶ˆè®¾ç½®å¤±æ•ˆæ—¥æœŸå‡ºé”™"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "设置失效日期出错"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "ç§æœ‰äº‘密ç é‡ç½®"
@@ -374,7 +469,7 @@ msgstr "编辑分类"
msgid "Add"
msgstr "添加"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "安全警告"
@@ -384,147 +479,75 @@ msgid ""
"OpenSSL extension."
msgstr "æ²¡æœ‰å®‰å…¨éšæœºç ç”Ÿæˆå™¨ï¼Œè¯·å¯ç”¨ PHP OpenSSL 扩展。"
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "æ²¡æœ‰å®‰å…¨éšæœºç ç”Ÿæˆå™¨ï¼Œé»‘客å¯ä»¥é¢„测密ç é‡ç½®ä»¤ç‰Œå¹¶æŽ¥ç®¡ä½ çš„账户。"
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "æ‚¨çš„æ•°æ®æ–‡ä»¶å¤¹å’Œæ‚¨çš„æ–‡ä»¶æˆ–许能够从互è”网访问。ownCloud æä¾›çš„ .htaccesss 文件未其作用。我们强烈建议您é…置网络æœåŠ¡å™¨ä»¥ä½¿æ•°æ®æ–‡ä»¶å¤¹ä¸èƒ½ä»Žäº’è”ç½‘è®¿é—®ï¼Œæˆ–å°†ç§»åŠ¨æ•°æ®æ–‡ä»¶å¤¹ç§»å‡ºç½‘络æœåŠ¡å™¨æ–‡æ¡£æ ¹ç›®å½•ã€‚"
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "建立一个 <strong>管ç†å¸æˆ·</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "进阶"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "æ•°æ®å­˜æ”¾æ–‡ä»¶å¤¹"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "é…置数æ®åº“"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "将会使用"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "æ•°æ®åº“用户"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "æ•°æ®åº“密ç "
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "æ•°æ®åº“用户å"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "æ•°æ®åº“表格空间"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "æ•°æ®åº“主机"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "完æˆå®‰è£…"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "星期天"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "星期一"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "星期二"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "星期三"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "星期四"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "星期五"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "星期六"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "一月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "二月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "三月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "四月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "五月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "六月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "七月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "八月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "乿œˆ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "åæœˆ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "å一月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "å二月"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "你控制下的网络æœåŠ¡"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "注销"
@@ -546,17 +569,17 @@ msgstr "请修改您的密ç ä»¥ä¿æŠ¤è´¦æˆ·ã€‚"
msgid "Lost your password?"
msgstr "忘记密�"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "备忘"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "登陆"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "ä½ å·²ç»æ³¨é”€äº†"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -570,17 +593,3 @@ msgstr "å‰è¿›"
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "安全警告ï¼"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "请确认您的密ç ã€‚<br/>处于安全原因你å¶å°”ä¹Ÿä¼šè¢«è¦æ±‚冿¬¡è¾“入您的密ç ã€‚"
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "确认"
diff --git a/l10n/zh_CN.GB2312/files.po b/l10n/zh_CN.GB2312/files.po
index b066b89ba00..009c2cf3629 100644
--- a/l10n/zh_CN.GB2312/files.po
+++ b/l10n/zh_CN.GB2312/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -24,55 +24,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "没有上传文件。未知错误"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "没有任何错误,文件上传æˆåŠŸäº†"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "上传的文件超过了HTMLè¡¨å•æŒ‡å®šçš„MAX_FILE_SIZE"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "æ–‡ä»¶åªæœ‰éƒ¨åˆ†è¢«ä¸Šä¼ "
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "没有上传完æˆçš„æ–‡ä»¶"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "丢失了一个临时文件夹"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "写ç£ç›˜å¤±è´¥"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -80,149 +80,152 @@ msgstr ""
msgid "Files"
msgstr "文件"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "å–æ¶ˆå…±äº«"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "删除"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "é‡å‘½å"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pending"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} 已存在"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "替æ¢"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "推èåç§°"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "å–æ¶ˆ"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "å·²æ›¿æ¢ {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "撤销"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "已用 {old_name} æ›¿æ¢ {new_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "未分享的 {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "已删除的 {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "正在生æˆZIP文件,è¿™å¯èƒ½éœ€è¦ç‚¹æ—¶é—´"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ä¸èƒ½ä¸Šä¼ ä½ æŒ‡å®šçš„æ–‡ä»¶,å¯èƒ½å› ä¸ºå®ƒæ˜¯ä¸ªæ–‡ä»¶å¤¹æˆ–者大å°ä¸º0"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "上传错误"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "关闭"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "Pending"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 个文件正在上传"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} 个文件正在上传"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "ä¸Šä¼ å–æ¶ˆäº†"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "文件正在上传。关闭页é¢ä¼šå–消上传。"
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "网å€ä¸èƒ½ä¸ºç©ºã€‚"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} 个文件已扫æ"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "扫æå‡ºé”™"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "åå­—"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "大å°"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "修改日期"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1 个文件夹"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} 个文件夹"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 个文件"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} 个文件"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "上传"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "文件处ç†ä¸­"
@@ -271,36 +274,44 @@ msgstr "文件夹"
msgid "From link"
msgstr "æ¥è‡ªé“¾æŽ¥"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "上传"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "å–æ¶ˆä¸Šä¼ "
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "这里没有东西.上传点什么!"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "下载"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "å–æ¶ˆå…±äº«"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "上传的文件太大了"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "你正在试图上传的文件超过了此æœåŠ¡å™¨æ”¯æŒçš„æœ€å¤§çš„æ–‡ä»¶å¤§å°."
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "æ­£åœ¨æ‰«ææ–‡ä»¶,请ç¨å€™."
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "正在扫æ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/files_encryption.po b/l10n/zh_CN.GB2312/files_encryption.po
index eb4ddd9c548..262bed13b59 100644
--- a/l10n/zh_CN.GB2312/files_encryption.po
+++ b/l10n/zh_CN.GB2312/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-18 02:01+0200\n"
-"PO-Revision-Date: 2012-09-17 10:51+0000\n"
-"Last-Translator: marguerite su <i@marguerite.su>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: zh_CN.GB2312\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "加密"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "从加密中排除如下文件类型"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "æ— "
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "å¯ç”¨åР坆"
diff --git a/l10n/zh_CN.GB2312/files_trashbin.po b/l10n/zh_CN.GB2312/files_trashbin.po
new file mode 100644
index 00000000000..cc9c96f2f06
--- /dev/null
+++ b/l10n/zh_CN.GB2312/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN.GB2312\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "åç§°"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 个文件夹"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} 个文件夹"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 个文件"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} 个文件"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/files_versions.po b/l10n/zh_CN.GB2312/files_versions.po
index 493edd7cfe6..97402cab1a7 100644
--- a/l10n/zh_CN.GB2312/files_versions.po
+++ b/l10n/zh_CN.GB2312/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-10-12 02:03+0200\n"
-"PO-Revision-Date: 2012-10-11 23:49+0000\n"
-"Last-Translator: marguerite su <i@marguerite.su>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: zh_CN.GB2312\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "作废所有版本"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "历å²"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "版本"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "这将删除所有您现有文件的备份版本"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/zh_CN.GB2312/lib.po b/l10n/zh_CN.GB2312/lib.po
index c32ef2de62c..79d527ff6d7 100644
--- a/l10n/zh_CN.GB2312/lib.po
+++ b/l10n/zh_CN.GB2312/lib.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -18,51 +18,55 @@ msgstr ""
"Language: zh_CN.GB2312\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "帮助"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "ç§äºº"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "设置"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "用户"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "程åº"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "管ç†å‘˜"
-#: files.php:332
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP 下载已关闭"
-#: files.php:333
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "需è¦é€ä¸ªä¸‹è½½æ–‡ä»¶ã€‚"
-#: files.php:333 files.php:358
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "返回到文件"
-#: files.php:357
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "选择的文件太大而ä¸èƒ½ç”Ÿæˆ zip 文件。"
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "应用未å¯ç”¨"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "验è¯é”™è¯¯"
@@ -82,55 +86,152 @@ msgstr "文本"
msgid "Images"
msgstr "图片"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "ç§’å‰"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 分钟å‰"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d 分钟å‰"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "今天"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "昨天"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d 天å‰"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "上个月"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "去年"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "å¹´å‰"
diff --git a/l10n/zh_CN.GB2312/settings.po b/l10n/zh_CN.GB2312/settings.po
index 2c8e2cabac0..f58a1429cc8 100644
--- a/l10n/zh_CN.GB2312/settings.po
+++ b/l10n/zh_CN.GB2312/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -23,6 +23,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "ä¸èƒ½ä»ŽApp Store 中加载列表"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "认è¯é”™è¯¯"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "群组已存在"
@@ -31,7 +40,7 @@ msgstr "群组已存在"
msgid "Unable to add group"
msgstr "未能添加群组"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "未能å¯ç”¨åº”用"
@@ -43,22 +52,10 @@ msgstr "Email ä¿å­˜äº†"
msgid "Invalid email"
msgstr "éžæ³•Email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID 改å˜äº†"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "éžæ³•请求"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "未能删除群组"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "认è¯é”™è¯¯"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "未能删除用户"
@@ -67,6 +64,10 @@ msgstr "未能删除用户"
msgid "Language changed"
msgstr "语言改å˜äº†"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "éžæ³•请求"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -81,19 +82,47 @@ msgstr "未能添加用户到群组 %s"
msgid "Unable to remove user from group %s"
msgstr "未能将用户从群组 %s 移除"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "ç¦ç”¨"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "å¯ç”¨"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "出错"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "ä¿å­˜ä¸­..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "Chinese"
@@ -105,18 +134,22 @@ msgstr "添加你的应用程åº"
msgid "More Apps"
msgstr "更多应用"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "选择一个程åº"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "在owncloud.com上查看应用程åº"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>授æƒåè®® <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "æ›´æ–°"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -146,83 +179,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "客户"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "密ç "
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "您的密ç ä»¥å˜æ›´"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "ä¸èƒ½æ”¹å˜ä½ çš„密ç "
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "现在的密ç "
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "新密ç "
-#: templates/personal.php:26
-msgid "show"
-msgstr "展示"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "改å˜å¯†ç "
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "Email"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "ä½ çš„email地å€"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "输入一个邮箱地å€ä»¥æ¿€æ´»å¯†ç æ¢å¤åŠŸèƒ½"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "语言"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "帮助翻译"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -232,11 +269,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "ç”± <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud 社区</a>å¼€å‘,<a href=\"https://github.com/owncloud\" target=\"_blank\">sæºä»£ç </a> 以 <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> 许å¯åè®®å‘布。"
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "åå­—"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "组"
@@ -248,26 +285,34 @@ msgstr "新建"
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "å…¶ä»–çš„"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "群组管ç†å‘˜"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "删除"
diff --git a/l10n/zh_CN.GB2312/user_ldap.po b/l10n/zh_CN.GB2312/user_ldap.po
index 75ea9d9c0e9..f85d4abe78f 100644
--- a/l10n/zh_CN.GB2312/user_ldap.po
+++ b/l10n/zh_CN.GB2312/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: zh_CN.GB2312\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "删除失败"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "主机"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "您å¯ä»¥å¿½ç•¥åè®®ï¼Œé™¤éžæ‚¨éœ€è¦ SSL。然åŽç”¨ ldaps:// 开头"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "基本判别å"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "您å¯ä»¥åœ¨é«˜çº§é€‰é¡¹å¡ä¸­ä¸ºç”¨æˆ·å’Œç¾¤ç»„指定基本判别å"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "用户判别å"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "客户机用户的判别å,将用于绑定,例如 uid=agent, dc=example, dc=com。匿å访问请留空判别å和密ç ã€‚"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "密ç "
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "匿å访问请留空判别å和密ç ã€‚"
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "用户登录过滤器"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "定义å°è¯•登录时è¦åº”用的过滤器。用 %%uid 替æ¢ç™»å½•æ“作中使用的用户å。"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "使用 %%uid å ä½ç¬¦ï¼Œä¾‹å¦‚ \"uid=%%uid\""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "用户列表过滤器"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "定义撷å–用户时è¦åº”用的过滤器。"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "ä¸èƒ½ä½¿ç”¨å ä½ç¬¦ï¼Œä¾‹å¦‚ \"objectClass=person\"。"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "群组过滤器"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "定义撷å–群组时è¦åº”用的过滤器"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "ä¸èƒ½ä½¿ç”¨å ä½ç¬¦ï¼Œä¾‹å¦‚ \"objectClass=posixGroup\"。"
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "端å£"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "基本用户树"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "基本群组树"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "群组-æˆå‘˜ç»„åˆ"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "使用 TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "ä¸è¦ä½¿ç”¨å®ƒè¿›è¡Œ SSL 连接,会失败的。"
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "大å°å†™ä¸æ•感的 LDAP æœåС噍 (Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "关闭 SSL è¯ä¹¦æ ¡éªŒã€‚"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "å¦‚æžœåªæœ‰ä½¿ç”¨æ­¤é€‰é¡¹æ‰èƒ½è¿žæŽ¥ï¼Œè¯·å¯¼å…¥ LDAP æœåŠ¡å™¨çš„ SSL è¯ä¹¦åˆ°æ‚¨çš„ ownCloud æœåŠ¡å™¨ã€‚"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "䏿ލè,仅供测试"
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "以秒计。修改会清空缓存。"
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "用户显示å称字段"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "用于生æˆç”¨æˆ·çš„ ownCloud åç§°çš„ LDAP 属性。"
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "基本用户树"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "群组显示å称字段"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "用于生æˆç¾¤ç»„çš„ ownCloud åç§°çš„ LDAP 属性。"
-#: templates/settings.php:34
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "基本群组树"
+
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
+msgstr ""
+
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "群组-æˆå‘˜ç»„åˆ"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
msgid "in bytes"
msgstr "以字节计"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
-msgstr "以秒计。修改会清空缓存。"
-
-#: templates/settings.php:37
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "用户å请留空 (默认)。å¦åˆ™ï¼Œè¯·æŒ‡å®šä¸€ä¸ª LDAP/AD 属性。"
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "帮助"
diff --git a/l10n/zh_CN.GB2312/user_webdavauth.po b/l10n/zh_CN.GB2312/user_webdavauth.po
index 4c2e6b80abe..e9984fbe007 100644
--- a/l10n/zh_CN.GB2312/user_webdavauth.po
+++ b/l10n/zh_CN.GB2312/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: zh_CN.GB2312\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po
index 8b6fa46a9a6..be5884a2777 100644
--- a/l10n/zh_CN/core.po
+++ b/l10n/zh_CN/core.po
@@ -6,14 +6,15 @@
# <appweb.cn@gmail.com>, 2012.
# Dianjin Wang <1132321739qq@gmail.com>, 2012.
# Phoenix Nemo <>, 2012.
+# <rainofchaos@gmail.com>, 2013.
# <suiy02@gmail.com>, 2012.
# <wengxt@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:04+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -22,24 +23,24 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr "用户 %s 与您共享了一个文件"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr "用户 %s 与您共享了一个文件夹"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr "用户 %s 与您共享了文件\"%s\"。文件下载地å€ï¼š%s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -55,8 +56,9 @@ msgid "No category to add?"
msgstr "æ²¡æœ‰å¯æ·»åŠ åˆ†ç±»ï¼Ÿ"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "此分类已存在: "
+#, php-format
+msgid "This category already exists: %s"
+msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -84,59 +86,135 @@ msgstr "没有选择è¦åˆ é™¤çš„类别"
msgid "Error removing %s from favorites."
msgstr "从收è—夹中移除%s时出错。"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr "星期日"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "星期一"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "星期二"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "星期三"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "星期四"
+
+#: js/config.php:32
+msgid "Friday"
+msgstr "星期五"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "星期六"
+
+#: js/config.php:33
+msgid "January"
+msgstr "一月"
+
+#: js/config.php:33
+msgid "February"
+msgstr "二月"
+
+#: js/config.php:33
+msgid "March"
+msgstr "三月"
+
+#: js/config.php:33
+msgid "April"
+msgstr "四月"
+
+#: js/config.php:33
+msgid "May"
+msgstr "五月"
+
+#: js/config.php:33
+msgid "June"
+msgstr "六月"
+
+#: js/config.php:33
+msgid "July"
+msgstr "七月"
+
+#: js/config.php:33
+msgid "August"
+msgstr "八月"
+
+#: js/config.php:33
+msgid "September"
+msgstr "乿œˆ"
+
+#: js/config.php:33
+msgid "October"
+msgstr "åæœˆ"
+
+#: js/config.php:33
+msgid "November"
+msgstr "å一月"
+
+#: js/config.php:33
+msgid "December"
+msgstr "å二月"
+
+#: js/js.js:284
msgid "Settings"
msgstr "设置"
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr "ç§’å‰"
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr "一分钟å‰"
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr "{minutes} 分钟å‰"
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr "1å°æ—¶å‰"
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr "{hours} å°æ—¶å‰"
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr "今天"
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr "昨天"
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr "{days} 天å‰"
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr "上月"
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr "{months} 月å‰"
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr "月å‰"
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr "去年"
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr "å¹´å‰"
@@ -166,8 +244,8 @@ msgid "The object type is not specified."
msgstr "未指定对象类型。"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr "错误"
@@ -179,123 +257,141 @@ msgstr "未指定Appå称。"
msgid "The required file {file} is not installed!"
msgstr "所需文件{file}未安装ï¼"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "共享"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "已共享"
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr "共享时出错"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "å–æ¶ˆå…±äº«æ—¶å‡ºé”™"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "修改æƒé™æ—¶å‡ºé”™"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "{owner}共享给您åŠ{group}组"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr " {owner}与您共享"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr "共享"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "共享链接"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "密ç ä¿æŠ¤"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "密ç "
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "å‘é€é“¾æŽ¥åˆ°ä¸ªäºº"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr "å‘é€"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "设置过期日期"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "过期日期"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr "通过Email共享"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "未找到此人"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "ä¸å…许二次共享"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "在{item} 与 {user}共享。"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "å–æ¶ˆå…±äº«"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "å¯ä»¥ä¿®æ”¹"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "访问控制"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "创建"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "æ›´æ–°"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "删除"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "共享"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr "密ç å·²å—ä¿æŠ¤"
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr "å–æ¶ˆè®¾ç½®è¿‡æœŸæ—¥æœŸæ—¶å‡ºé”™"
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr "设置过期日期时出错"
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr "正在å‘é€..."
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr "邮件已å‘é€"
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr "é‡ç½® ownCloud 密ç "
@@ -377,7 +473,7 @@ msgstr "编辑分类"
msgid "Add"
msgstr "添加"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "安全警告"
@@ -387,147 +483,75 @@ msgid ""
"OpenSSL extension."
msgstr "éšæœºæ•°ç”Ÿæˆå™¨æ— æ•ˆï¼Œè¯·å¯ç”¨PHPçš„OpenSSL扩展"
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "æ²¡æœ‰å®‰å…¨éšæœºç ç”Ÿæˆå™¨ï¼Œæ”»å‡»è€…å¯èƒ½ä¼šçŒœæµ‹å¯†ç é‡ç½®ä¿¡æ¯ä»Žè€Œçªƒå–您的账户"
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "æ‚¨çš„æ•°æ®æ–‡ä»¶å¤¹å’Œæ–‡ä»¶å¯ç”±äº’è”网访问。OwnCloudæä¾›çš„.htaccess文件未生效。我们强烈建议您é…ç½®æœåŠ¡å™¨ï¼Œä»¥ä½¿æ•°æ®æ–‡ä»¶å¤¹ä¸å¯è¢«è®¿é—®ï¼Œæˆ–è€…å°†æ•°æ®æ–‡ä»¶å¤¹ç§»åˆ°webæœåŠ¡å™¨æ ¹ç›®å½•ä»¥å¤–ã€‚"
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "创建<strong>管ç†å‘˜è´¦å·</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "高级"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "æ•°æ®ç›®å½•"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "é…置数æ®åº“"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "将被使用"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "æ•°æ®åº“用户"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "æ•°æ®åº“密ç "
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "æ•°æ®åº“å"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "æ•°æ®åº“表空间"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "æ•°æ®åº“主机"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "安装完æˆ"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "星期日"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "星期一"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "星期二"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "星期三"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "星期四"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "星期五"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "星期六"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "一月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "二月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "三月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "四月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "五月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "六月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "七月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "八月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "乿œˆ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "åæœˆ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "å一月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "å二月"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr "由您掌控的网络æœåŠ¡"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "注销"
@@ -549,17 +573,17 @@ msgstr "请修改您的密ç ï¼Œä»¥ä¿æŠ¤æ‚¨çš„账户安全。"
msgid "Lost your password?"
msgstr "忘记密ç ï¼Ÿ"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "è®°ä½"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "登录"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "您已注销。"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -572,18 +596,4 @@ msgstr "下一页"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "安全警告ï¼"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "è¯·éªŒè¯æ‚¨çš„密ç ã€‚ <br/>出于安全考虑,你å¯èƒ½å¶å°”ä¼šè¢«è¦æ±‚冿¬¡è¾“入密ç ã€‚"
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "验è¯"
+msgstr "æ›´æ–° ownCloud 到版本 %s,这å¯èƒ½éœ€è¦ä¸€äº›æ—¶é—´ã€‚"
diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po
index 9d7a6aacba4..adec54ddf3d 100644
--- a/l10n/zh_CN/files.po
+++ b/l10n/zh_CN/files.po
@@ -5,15 +5,17 @@
# Translators:
# <appweb.cn@gmail.com>, 2012.
# Dianjin Wang <1132321739qq@gmail.com>, 2012.
+# marguerite su <i@marguerite.su>, 2013.
# <rainofchaos@gmail.com>, 2012.
# <suiy02@gmail.com>, 2012.
+# <wengxt@gmail.com>, 2013.
# <wengxt@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -25,207 +27,210 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "无法移动 %s - åŒå文件已存在"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "无法移动 %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "无法é‡å‘½å文件"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr "没有文件被上传。未知错误"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "没有å‘生错误,文件上传æˆåŠŸã€‚"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "上传文件大å°å·²è¶…过php.ini中upload_max_filesize所规定的值"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "上传的文件超过了在HTML 表å•中指定的MAX_FILE_SIZE"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr "åªä¸Šä¼ äº†æ–‡ä»¶çš„一部分"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "文件没有上传"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "缺少临时目录"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "写入ç£ç›˜å¤±è´¥"
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
-msgstr ""
+msgstr "无效文件夹。"
#: appinfo/app.php:10
msgid "Files"
msgstr "文件"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "å–æ¶ˆåˆ†äº«"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "删除"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "é‡å‘½å"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "æ“作等待中"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} 已存在"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "替æ¢"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "建议åç§°"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "å–æ¶ˆ"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "æ›¿æ¢ {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "撤销"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "已将 {old_name}æ›¿æ¢æˆ {new_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "å–æ¶ˆäº†å…±äº« {files}"
-
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "删除了 {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' 是一个无效的文件å。"
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "文件åä¸èƒ½ä¸ºç©ºã€‚"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "无效å称,'\\', '/', '<', '>', ':', '\"', '|', '?' å’Œ '*' ä¸è¢«å…许使用。"
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "æ­£åœ¨ç”Ÿæˆ ZIP 文件,å¯èƒ½éœ€è¦ä¸€äº›æ—¶é—´"
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "下载正在准备中。如果文件较大å¯èƒ½ä¼šèŠ±è´¹ä¸€äº›æ—¶é—´ã€‚"
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "无法上传文件,因为它是一个目录或者大å°ä¸º 0 字节"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "上传错误"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "关闭"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "æ“作等待中"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1个文件上传中"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} 个文件上传中"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "ä¸Šä¼ å·²å–æ¶ˆ"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "æ–‡ä»¶æ­£åœ¨ä¸Šä¼ ä¸­ã€‚çŽ°åœ¨ç¦»å¼€æ­¤é¡µä¼šå¯¼è‡´ä¸Šä¼ åŠ¨ä½œè¢«å–æ¶ˆã€‚"
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr "URLä¸èƒ½ä¸ºç©º"
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} 个文件已扫æã€‚"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "æ‰«ææ—¶å‡ºé”™"
+msgstr "无效文件夹å。'共享' 是 Owncloud 预留的文件夹å。"
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr "åç§°"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr "大å°"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr "修改日期"
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr "1个文件夹"
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr "{count} 个文件夹"
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr "1 个文件"
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr "{count} 个文件"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "上传"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "文件处ç†"
@@ -274,36 +279,44 @@ msgstr "文件夹"
msgid "From link"
msgstr "æ¥è‡ªé“¾æŽ¥"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "上传"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "å–æ¶ˆä¸Šä¼ "
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "这里还什么都没有。上传些东西å§ï¼"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "下载"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "å–æ¶ˆåˆ†äº«"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "上传文件过大"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "您正å°è¯•上传的文件超过了此æœåС噍å¯ä»¥ä¸Šä¼ çš„æœ€å¤§å®¹é‡é™åˆ¶"
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "文件正在被扫æï¼Œè¯·ç¨å€™ã€‚"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "当剿‰«æ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/zh_CN/files_encryption.po b/l10n/zh_CN/files_encryption.po
index 502f4e08a6f..b9d48e1dcec 100644
--- a/l10n/zh_CN/files_encryption.po
+++ b/l10n/zh_CN/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-08 02:01+0200\n"
-"PO-Revision-Date: 2012-09-07 09:38+0000\n"
-"Last-Translator: hanfeng <appweb.cn@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,18 +18,22 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "加密"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "从加密中排除列出的文件类型"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "None"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "å¼€å¯åР坆"
diff --git a/l10n/zh_CN/files_trashbin.po b/l10n/zh_CN/files_trashbin.po
new file mode 100644
index 00000000000..2d95abe67ee
--- /dev/null
+++ b/l10n/zh_CN/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "åç§°"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1个文件夹"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} 个文件夹"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 个文件"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} 个文件"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/zh_CN/files_versions.po b/l10n/zh_CN/files_versions.po
index df61cf98da4..fef8172901c 100644
--- a/l10n/zh_CN/files_versions.po
+++ b/l10n/zh_CN/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-28 23:34+0200\n"
-"PO-Revision-Date: 2012-09-28 09:58+0000\n"
-"Last-Translator: hanfeng <appweb.cn@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,21 +18,44 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "过期所有版本"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "历å²"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "版本"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr "将会删除您的文件的所有备份版本"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
+msgstr ""
#: templates/settings.php:3
msgid "Files Versioning"
diff --git a/l10n/zh_CN/lib.po b/l10n/zh_CN/lib.po
index aebc5a42f35..a1f1c468422 100644
--- a/l10n/zh_CN/lib.po
+++ b/l10n/zh_CN/lib.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-19 00:01+0100\n"
-"PO-Revision-Date: 2012-11-18 16:17+0000\n"
-"Last-Translator: hanfeng <appweb.cn@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,51 +19,55 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "帮助"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "个人"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "设置"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "用户"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "应用"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "管ç†"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP 下载已ç»å…³é—­"
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "需è¦é€ä¸€ä¸‹è½½æ–‡ä»¶"
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "回到文件"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "é€‰æ‹©çš„æ–‡ä»¶å¤ªå¤§ï¼Œæ— æ³•ç”Ÿæˆ zip 文件。"
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr "ä¸éœ€è¦ç¨‹åº"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "认è¯é”™è¯¯"
@@ -83,55 +87,152 @@ msgstr "文本"
msgid "Images"
msgstr "图åƒ"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr "几秒å‰"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1分钟å‰"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d 分钟å‰"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr "1å°æ—¶å‰"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr "%då°æ—¶å‰"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "今天"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "昨天"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d 天å‰"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "上月"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr "%d 月å‰"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "上年"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "几年å‰"
diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po
index a28ef198295..8c5e0d1de97 100644
--- a/l10n/zh_CN/settings.po
+++ b/l10n/zh_CN/settings.po
@@ -4,7 +4,7 @@
#
# Translators:
# <appweb.cn@gmail.com>, 2012.
-# Dianjin Wang <1132321739qq@gmail.com>, 2012.
+# Dianjin Wang <1132321739qq@gmail.com>, 2012-2013.
# Phoenix Nemo <>, 2012.
# <rainofchaos@gmail.com>, 2012.
# <suiy02@gmail.com>, 2012.
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -27,6 +27,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "无法从应用商店载入列表"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "认è¯é”™è¯¯"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "已存在该组"
@@ -35,7 +44,7 @@ msgstr "已存在该组"
msgid "Unable to add group"
msgstr "无法添加组"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "无法开å¯App"
@@ -47,22 +56,10 @@ msgstr "电å­é‚®ä»¶å·²ä¿å­˜"
msgid "Invalid email"
msgstr "无效的电å­é‚®ä»¶"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID 已修改"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "éžæ³•请求"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "无法删除组"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "认è¯é”™è¯¯"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "无法删除用户"
@@ -71,6 +68,10 @@ msgstr "无法删除用户"
msgid "Language changed"
msgstr "语言已修改"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "éžæ³•请求"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "管ç†å‘˜ä¸èƒ½å°†è‡ªå·±ç§»å‡ºç®¡ç†ç»„。"
@@ -85,19 +86,47 @@ msgstr "无法把用户添加到组 %s"
msgid "Unable to remove user from group %s"
msgstr "无法从组%s中移除用户"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "ç¦ç”¨"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "å¯ç”¨"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "错误"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "正在ä¿å­˜"
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "简体中文"
@@ -109,18 +138,22 @@ msgstr "添加应用"
msgid "More Apps"
msgstr "更多应用"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "选择一个应用"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "查看在 app.owncloud.com 的应用程åºé¡µé¢"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-核准: <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "æ›´æ–°"
+
#: templates/help.php:3
msgid "User Documentation"
msgstr "用户文档"
@@ -150,83 +183,87 @@ msgstr "商业支æŒ"
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "你已使用 <strong>%s</strong>,有效空间 <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "客户"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr "下载桌é¢å®¢æˆ·ç«¯"
-
#: templates/personal.php:14
-msgid "Download Android Client"
-msgstr "下载 Android 客户端"
+msgid "Get the apps to sync your files"
+msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
-msgstr "下载 iOS 客户端"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
+msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "密ç "
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "密ç å·²ä¿®æ”¹"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "无法修改密ç "
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "当å‰å¯†ç "
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "新密ç "
-#: templates/personal.php:26
-msgid "show"
-msgstr "显示"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "修改密ç "
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr ""
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr "电å­é‚®ä»¶"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "您的电å­é‚®ä»¶"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "填写电å­é‚®ä»¶åœ°å€ä»¥å¯ç”¨å¯†ç æ¢å¤åŠŸèƒ½"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "语言"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "帮助翻译"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr "ç”¨è¯¥åœ°å€æ¥è¿žæŽ¥æ–‡ä»¶ç®¡ç†å™¨ä¸­çš„ ownCloud"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr "版本"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -236,11 +273,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "ç”±<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>许å¯è¯ä¸‹å‘布。"
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "åç§°"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "组"
@@ -250,28 +287,36 @@ msgstr "创建"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "默认存储"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "æ— é™"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "其它"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "组管ç†å‘˜"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
+msgstr "存储"
+
+#: templates/users.php:97
+msgid "change display name"
msgstr ""
-#: templates/users.php:133
-msgid "Default"
+#: templates/users.php:101
+msgid "set new password"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:137
+msgid "Default"
+msgstr "默认"
+
+#: templates/users.php:165
msgid "Delete"
msgstr "删除"
diff --git a/l10n/zh_CN/user_ldap.po b/l10n/zh_CN/user_ldap.po
index be239585259..1f5920201f9 100644
--- a/l10n/zh_CN/user_ldap.po
+++ b/l10n/zh_CN/user_ldap.po
@@ -4,12 +4,13 @@
#
# Translators:
# <appweb.cn@gmail.com>, 2012.
+# marguerite su <i@marguerite.su>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -18,167 +19,293 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "删除失败"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
" experience unexpected behaviour. Please ask your system administrator to "
"disable one of them."
-msgstr ""
+msgstr "<b>警告:</b>应用 user_ldap å’Œ user_webdavauth ä¸å…¼å®¹ã€‚您å¯èƒ½é­é‡æœªé¢„料的行为。请垂询您的系统管ç†å‘˜ç¦ç”¨å…¶ä¸­ä¸€ä¸ªã€‚"
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr "主机"
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr "å¯ä»¥å¿½ç•¥å议,但如è¦ä½¿ç”¨SSL,则需以ldaps://开头"
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr "Base DN"
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr "您å¯ä»¥åœ¨é«˜çº§é€‰é¡¹å¡é‡Œä¸ºç”¨æˆ·å’Œç»„指定Base DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr "User DN"
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr "客户端使用的DN必须与绑定的相åŒï¼Œæ¯”如uid=agent,dc=example,dc=com\n如需匿å访问,将DN和密ç ä¿ç•™ä¸ºç©º"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "密ç "
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr "å¯ç”¨åŒ¿å访问,将DN和密ç ä¿ç•™ä¸ºç©º"
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr "用户登录过滤"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr "定义当å°è¯•登录时的过滤器。 在登录过程中,%%uidå°†ä¼šè¢«ç”¨æˆ·åæ›¿æ¢"
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr "使用 %%uid作为å ä½ç¬¦ï¼Œä¾‹å¦‚“uid=%%uidâ€"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr "用户列表过滤"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr "定义拉å–用户时的过滤器"
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr "没有任何å ä½ç¬¦,如 \"objectClass=person\"."
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr "组过滤"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr "定义拉å–ç»„ä¿¡æ¯æ—¶çš„过滤器"
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr "无需å ä½ç¬¦ï¼Œä¾‹å¦‚\"objectClass=posixGroup\""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr "端å£"
-#: templates/settings.php:25
-msgid "Base User Tree"
-msgstr "基础用户树"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
+msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
-msgstr "基础组树"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
+msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
-msgstr "组æˆå‘˜å…³è”"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "使用TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
-msgstr "ä¸è¦åœ¨SSL链接中使用此选项,会导致失败。"
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
+msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr "大å°å†™æ•感LDAPæœåС噍(Windows)"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "关闭SSLè¯ä¹¦éªŒè¯"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr "如果链接仅在此选项时å¯ç”¨ï¼Œåœ¨æ‚¨çš„ownCloudæœåС噍䏭坼入LDAPæœåŠ¡å™¨çš„SSLè¯ä¹¦ã€‚"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr "æš‚ä¸æŽ¨è,仅供测试"
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr "以秒计。修改将清空缓存。"
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr "用户显示å称字段"
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr "用æ¥ç”Ÿæˆç”¨æˆ·çš„ownCloudåç§°çš„ LDAP属性"
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr "基础用户树"
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr "组显示å称字段"
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr "用æ¥ç”Ÿæˆç»„çš„ownCloudåç§°çš„LDAP属性"
-#: templates/settings.php:34
-msgid "in bytes"
-msgstr "字节数"
+#: templates/settings.php:49
+msgid "Base Group Tree"
+msgstr "基础组树"
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr "组æˆå‘˜å…³è”"
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr "字节数"
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr "将用户å称留空(默认)。å¦åˆ™æŒ‡å®šä¸€ä¸ªLDAP/AD属性"
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "帮助"
diff --git a/l10n/zh_CN/user_webdavauth.po b/l10n/zh_CN/user_webdavauth.po
index fc3ccc1393b..a642c9b21d8 100644
--- a/l10n/zh_CN/user_webdavauth.po
+++ b/l10n/zh_CN/user_webdavauth.po
@@ -5,13 +5,15 @@
# Translators:
# <appweb.cn@gmail.com>, 2012.
# Dianjin Wang <1132321739qq@gmail.com>, 2012.
+# marguerite su <i@marguerite.su>, 2013.
+# <wengxt@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-24 00:10+0100\n"
-"PO-Revision-Date: 2012-12-23 13:55+0000\n"
-"Last-Translator: Dianjin Wang <1132321739qq@gmail.com>\n"
+"POT-Creation-Date: 2013-01-23 00:05+0100\n"
+"PO-Revision-Date: 2013-01-21 23:23+0000\n"
+"Last-Translator: Xuetian Weng <wengxt@gmail.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,13 +21,17 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr "WebDAV 认è¯"
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr "URL:http://"
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
-msgstr ""
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
+msgstr "ownCloud 将会å‘é€ç”¨æˆ·çš„身份到此 URL。这个æ’件检查返回值并且将 HTTP 状æ€ç¼–ç  401 å’Œ 403 è§£é‡Šä¸ºéžæ³•èº«ä»½ï¼Œå…¶ä»–æ‰€æœ‰è¿”å›žå€¼ä¸ºåˆæ³•身份。"
diff --git a/l10n/zh_HK/core.po b/l10n/zh_HK/core.po
index c6e8fb669fd..65b41b0aeee 100644
--- a/l10n/zh_HK/core.po
+++ b/l10n/zh_HK/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"PO-Revision-Date: 2013-02-08 23:12+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
@@ -18,24 +18,24 @@ msgstr ""
"Language: zh_HK\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
msgstr ""
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
msgstr ""
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
msgstr ""
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
@@ -51,7 +51,8 @@ msgid "No category to add?"
msgstr ""
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
+#, php-format
+msgid "This category already exists: %s"
msgstr ""
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
@@ -80,59 +81,135 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Sunday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Monday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Friday"
+msgstr ""
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr ""
+
+#: js/config.php:33
+msgid "January"
+msgstr ""
+
+#: js/config.php:33
+msgid "February"
+msgstr ""
+
+#: js/config.php:33
+msgid "March"
+msgstr ""
+
+#: js/config.php:33
+msgid "April"
+msgstr ""
+
+#: js/config.php:33
+msgid "May"
+msgstr ""
+
+#: js/config.php:33
+msgid "June"
+msgstr ""
+
+#: js/config.php:33
+msgid "July"
+msgstr ""
+
+#: js/config.php:33
+msgid "August"
+msgstr ""
+
+#: js/config.php:33
+msgid "September"
+msgstr ""
+
+#: js/config.php:33
+msgid "October"
+msgstr ""
+
+#: js/config.php:33
+msgid "November"
+msgstr ""
+
+#: js/config.php:33
+msgid "December"
+msgstr ""
+
+#: js/js.js:284
msgid "Settings"
msgstr ""
-#: js/js.js:704
+#: js/js.js:764
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:765
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:766
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:767
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:768
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:769
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:770
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:771
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:772
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:773
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:774
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:775
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:776
msgid "years ago"
msgstr ""
@@ -162,8 +239,8 @@ msgid "The object type is not specified."
msgstr ""
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
+#: js/share.js:583
msgid "Error"
msgstr ""
@@ -175,123 +252,141 @@ msgstr ""
msgid "The required file {file} is not installed!"
msgstr ""
-#: js/share.js:124 js/share.js:594
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr ""
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr ""
+
+#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
msgstr ""
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr ""
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr ""
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr ""
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr ""
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
msgstr ""
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr ""
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr ""
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr ""
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
msgstr ""
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
msgstr ""
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr ""
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr ""
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
msgstr ""
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr ""
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr ""
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr ""
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr ""
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr ""
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr ""
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr ""
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr ""
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr ""
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr ""
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:558
msgid "Password protected"
msgstr ""
-#: js/share.js:554
+#: js/share.js:571
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:566
+#: js/share.js:583
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:581
+#: js/share.js:598
msgid "Sending ..."
msgstr ""
-#: js/share.js:592
+#: js/share.js:609
msgid "Email sent"
msgstr ""
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr ""
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr ""
+
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
msgstr ""
@@ -373,7 +468,7 @@ msgstr ""
msgid "Add"
msgstr ""
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr ""
@@ -383,147 +478,75 @@ msgid ""
"OpenSSL extension."
msgstr ""
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr ""
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr ""
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
msgstr ""
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr ""
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr ""
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr ""
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr ""
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr ""
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr ""
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr ""
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr ""
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr ""
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr ""
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr ""
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr ""
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr ""
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr ""
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr ""
@@ -545,17 +568,17 @@ msgstr ""
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr ""
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "你已登出。"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr ""
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -569,17 +592,3 @@ msgstr ""
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/zh_HK/files.po b/l10n/zh_HK/files.po
index 56eb4f59e2b..215528e3273 100644
--- a/l10n/zh_HK/files.po
+++ b/l10n/zh_HK/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
@@ -22,55 +22,55 @@ msgstr ""
msgid "Could not move %s - File with this name already exists"
msgstr ""
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
msgstr ""
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
-msgid "Not enough space available"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr ""
@@ -78,149 +78,152 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
+#: js/fileactions.js:116
+msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr ""
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr ""
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr ""
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr ""
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:290
-msgid "deleted {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
msgstr ""
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr ""
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr ""
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:947 templates/index.php:67
msgid "Name"
msgstr ""
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:948 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:949 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:829
+#: js/files.js:968
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:970
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:978
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:980
msgid "{count} files"
msgstr ""
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
#: templates/admin.php:5
msgid "File handling"
msgstr ""
@@ -269,36 +272,44 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
+#: templates/index.php:40
+msgid "Trash bin"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr ""
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/zh_HK/files_encryption.po b/l10n/zh_HK/files_encryption.po
index 52a31f20bac..b213e0bbd8d 100644
--- a/l10n/zh_HK/files_encryption.po
+++ b/l10n/zh_HK/files_encryption.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-19 00:01+0100\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,18 +17,22 @@ msgstr ""
"Language: zh_HK\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr ""
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
msgstr ""
-#: templates/settings.php:5
-msgid "None"
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
msgstr ""
-#: templates/settings.php:10
-msgid "Enable Encryption"
+#: templates/settings.php:12
+msgid "None"
msgstr ""
diff --git a/l10n/zh_HK/files_trashbin.po b/l10n/zh_HK/files_trashbin.po
new file mode 100644
index 00000000000..4d462824758
--- /dev/null
+++ b/l10n/zh_HK/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_HK\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/zh_HK/files_versions.po b/l10n/zh_HK/files_versions.po
index 392cfcc9935..0b4229496a9 100644
--- a/l10n/zh_HK/files_versions.po
+++ b/l10n/zh_HK/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-19 00:01+0100\n"
-"PO-Revision-Date: 2012-08-12 22:37+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,20 +17,43 @@ msgstr ""
"Language: zh_HK\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
msgstr ""
-#: js/versions.js:16
-msgid "History"
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
+#: history.php:73
+msgid "No path specified"
+msgstr ""
+
+#: js/versions.js:16
+msgid "History"
msgstr ""
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/zh_HK/lib.po b/l10n/zh_HK/lib.po
index e4752fd9c27..9962c216301 100644
--- a/l10n/zh_HK/lib.po
+++ b/l10n/zh_HK/lib.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-19 00:01+0100\n"
-"PO-Revision-Date: 2012-07-27 22:23+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:41+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: zh_HK\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr ""
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr ""
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr ""
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr ""
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr ""
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,152 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po
index 0b9bc749d96..9dc37b89103 100644
--- a/l10n/zh_HK/settings.po
+++ b/l10n/zh_HK/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
@@ -21,6 +21,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr ""
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr ""
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr ""
@@ -29,7 +38,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -41,22 +50,10 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr ""
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr ""
@@ -65,6 +62,10 @@ msgstr ""
msgid "Language changed"
msgstr ""
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
@@ -79,19 +80,47 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr ""
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr ""
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr ""
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr ""
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr ""
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr ""
+
+#: js/apps.js:87
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr ""
+
+#: js/personal.js:96
msgid "Saving..."
msgstr ""
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr ""
@@ -103,18 +132,22 @@ msgstr ""
msgid "More Apps"
msgstr ""
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr ""
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr ""
+#: templates/apps.php:31
+msgid "Update"
+msgstr ""
+
#: templates/help.php:3
msgid "User Documentation"
msgstr ""
@@ -144,83 +177,87 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:12
-msgid "Clients"
-msgstr ""
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr ""
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr ""
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr ""
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr ""
-#: templates/personal.php:26
-msgid "show"
+#: templates/personal.php:42
+msgid "Change password"
msgstr ""
-#: templates/personal.php:27
-msgid "Change password"
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr ""
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr ""
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
msgstr ""
-#: templates/personal.php:33
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr ""
+
+#: templates/personal.php:68
msgid "Email"
msgstr ""
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr ""
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr ""
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr ""
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr ""
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
msgstr ""
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -230,11 +267,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr ""
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
msgstr ""
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr ""
@@ -246,26 +283,34 @@ msgstr ""
msgid "Default Storage"
msgstr ""
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
msgstr ""
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr ""
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr ""
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
msgstr ""
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
+#: templates/users.php:137
msgid "Default"
msgstr ""
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr ""
diff --git a/l10n/zh_HK/user_ldap.po b/l10n/zh_HK/user_ldap.po
index 24846079f01..3d9f862dc9b 100644
--- a/l10n/zh_HK/user_ldap.po
+++ b/l10n/zh_HK/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,58 @@ msgstr ""
"Language: zh_HK\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr ""
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -26,158 +78,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
+msgid "Server configuration"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
msgid "Host"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "Disable Main Server"
+msgstr ""
+
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr ""
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr ""
diff --git a/l10n/zh_HK/user_webdavauth.po b/l10n/zh_HK/user_webdavauth.po
index c1f1ee6edb2..5a2c43c09ce 100644
--- a/l10n/zh_HK/user_webdavauth.po
+++ b/l10n/zh_HK/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: zh_HK\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po
index bcdc1a3f2f8..183982cbe94 100644
--- a/l10n/zh_TW/core.po
+++ b/l10n/zh_TW/core.po
@@ -7,12 +7,13 @@
# <dw4dev@gmail.com>, 2012.
# Ming Yi Wu <mingi.wu@gmail.com>, 2012.
# <nfsmwlin@gmail.com>, 2013.
+# Pellaeon Lin <nfsmwlin@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 07:49+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 06:20+0000\n"
"Last-Translator: pellaeon <nfsmwlin@gmail.com>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -21,41 +22,42 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/share.php:84
+#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "用戶 %s 與您分享了一個檔案"
-#: ajax/share.php:86
+#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "用戶 %s 與您分享了一個資料夾"
-#: ajax/share.php:88
+#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "用戶 %s 與您分享了檔案 \"%s\" ,您å¯ä»¥å¾žé€™è£¡ä¸‹è¼‰å®ƒï¼š %s"
-#: ajax/share.php:90
+#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "用戶 %s 與您分享了資料夾 \"%s\" ,您å¯ä»¥å¾žé€™è£¡ä¸‹è¼‰å®ƒï¼š %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
-msgstr ""
+msgstr "未æä¾›åˆ†é¡žé¡žåž‹ã€‚"
#: ajax/vcategories/add.php:30
msgid "No category to add?"
-msgstr "無分類添加?"
+msgstr "沒有å¯å¢žåŠ çš„åˆ†é¡žï¼Ÿ"
#: ajax/vcategories/add.php:37
-msgid "This category already exists: "
-msgstr "此分類已經存在:"
+#, php-format
+msgid "This category already exists: %s"
+msgstr "分類已經存在: %s"
#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
#: ajax/vcategories/favorites.php:24
@@ -67,75 +69,151 @@ msgstr "䏿”¯æ´çš„物件類型"
#: ajax/vcategories/removeFromFavorites.php:30
#, php-format
msgid "%s ID not provided."
-msgstr ""
+msgstr "未æä¾› %s ID 。"
#: ajax/vcategories/addToFavorites.php:35
#, php-format
msgid "Error adding %s to favorites."
-msgstr ""
+msgstr "加入 %s 到最愛時發生錯誤。"
#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136
msgid "No categories selected for deletion."
-msgstr "æ²’é¸æ“‡è¦åˆªé™¤çš„分類"
+msgstr "æ²’æœ‰é¸æ“‡è¦åˆªé™¤çš„分類。"
#: ajax/vcategories/removeFromFavorites.php:35
#, php-format
msgid "Error removing %s from favorites."
-msgstr ""
+msgstr "從最愛移除 %s 時發生錯誤。"
+
+#: js/config.php:32
+msgid "Sunday"
+msgstr "週日"
+
+#: js/config.php:32
+msgid "Monday"
+msgstr "週一"
+
+#: js/config.php:32
+msgid "Tuesday"
+msgstr "週二"
+
+#: js/config.php:32
+msgid "Wednesday"
+msgstr "週三"
+
+#: js/config.php:32
+msgid "Thursday"
+msgstr "週四"
-#: js/js.js:259 templates/layout.user.php:60 templates/layout.user.php:61
+#: js/config.php:32
+msgid "Friday"
+msgstr "週五"
+
+#: js/config.php:32
+msgid "Saturday"
+msgstr "週六"
+
+#: js/config.php:33
+msgid "January"
+msgstr "一月"
+
+#: js/config.php:33
+msgid "February"
+msgstr "二月"
+
+#: js/config.php:33
+msgid "March"
+msgstr "三月"
+
+#: js/config.php:33
+msgid "April"
+msgstr "四月"
+
+#: js/config.php:33
+msgid "May"
+msgstr "五月"
+
+#: js/config.php:33
+msgid "June"
+msgstr "六月"
+
+#: js/config.php:33
+msgid "July"
+msgstr "七月"
+
+#: js/config.php:33
+msgid "August"
+msgstr "八月"
+
+#: js/config.php:33
+msgid "September"
+msgstr "乿œˆ"
+
+#: js/config.php:33
+msgid "October"
+msgstr "åæœˆ"
+
+#: js/config.php:33
+msgid "November"
+msgstr "å一月"
+
+#: js/config.php:33
+msgid "December"
+msgstr "å二月"
+
+#: js/js.js:286
msgid "Settings"
msgstr "設定"
-#: js/js.js:711
+#: js/js.js:767
msgid "seconds ago"
msgstr "幾秒å‰"
-#: js/js.js:712
+#: js/js.js:768
msgid "1 minute ago"
msgstr "1 分é˜å‰"
-#: js/js.js:713
+#: js/js.js:769
msgid "{minutes} minutes ago"
msgstr "{minutes} 分é˜å‰"
-#: js/js.js:714
+#: js/js.js:770
msgid "1 hour ago"
msgstr "1 個尿™‚å‰"
-#: js/js.js:715
+#: js/js.js:771
msgid "{hours} hours ago"
-msgstr "{hours} 個尿™‚å‰"
+msgstr "{hours} å°æ™‚å‰"
-#: js/js.js:716
+#: js/js.js:772
msgid "today"
msgstr "今天"
-#: js/js.js:717
+#: js/js.js:773
msgid "yesterday"
msgstr "昨天"
-#: js/js.js:718
+#: js/js.js:774
msgid "{days} days ago"
msgstr "{days} 天å‰"
-#: js/js.js:719
+#: js/js.js:775
msgid "last month"
msgstr "上個月"
-#: js/js.js:720
+#: js/js.js:776
msgid "{months} months ago"
msgstr "{months} 個月å‰"
-#: js/js.js:721
+#: js/js.js:777
msgid "months ago"
msgstr "幾個月å‰"
-#: js/js.js:722
+#: js/js.js:778
msgid "last year"
msgstr "去年"
-#: js/js.js:723
+#: js/js.js:779
msgid "years ago"
msgstr "幾年å‰"
@@ -162,138 +240,156 @@ msgstr "Ok"
#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
msgid "The object type is not specified."
-msgstr ""
+msgstr "未指定物件類型。"
#: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:135 js/share.js:142 js/share.js:554
-#: js/share.js:566
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
msgid "Error"
msgstr "錯誤"
#: js/oc-vcategories.js:179
msgid "The app name is not specified."
-msgstr "沒有詳述APPå稱."
+msgstr "沒有指定 app å稱。"
#: js/oc-vcategories.js:194
msgid "The required file {file} is not installed!"
-msgstr ""
+msgstr "æ²’æœ‰å®‰è£æ‰€éœ€çš„æª”案 {file} ï¼"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Share"
+msgstr "分享"
+
+#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
+msgid "Shared"
+msgstr "已分享"
-#: js/share.js:124 js/share.js:594
+#: js/share.js:141 js/share.js:622
msgid "Error while sharing"
msgstr "分享時發生錯誤"
-#: js/share.js:135
+#: js/share.js:152
msgid "Error while unsharing"
msgstr "å–æ¶ˆåˆ†äº«æ™‚發生錯誤"
-#: js/share.js:142
+#: js/share.js:159
msgid "Error while changing permissions"
msgstr "ä¿®æ”¹æ¬Šé™æ™‚發生錯誤"
-#: js/share.js:151
+#: js/share.js:168
msgid "Shared with you and the group {group} by {owner}"
msgstr "由 {owner} 分享給您和 {group}"
-#: js/share.js:153
+#: js/share.js:170
msgid "Shared with you by {owner}"
msgstr "{owner} 已經和您分享"
-#: js/share.js:158
+#: js/share.js:175
msgid "Share with"
-msgstr "與分享"
+msgstr "與...分享"
-#: js/share.js:163
+#: js/share.js:180
msgid "Share with link"
msgstr "使用連çµåˆ†äº«"
-#: js/share.js:166
+#: js/share.js:183
msgid "Password protect"
msgstr "密碼ä¿è­·"
-#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
+#: js/share.js:185 templates/installation.php:44 templates/login.php:35
msgid "Password"
msgstr "密碼"
-#: js/share.js:172
+#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "å°‡é€£çµ email 給別人"
-#: js/share.js:173
+#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "寄出"
-#: js/share.js:177
+#: js/share.js:194
msgid "Set expiration date"
msgstr "設置到期日"
-#: js/share.js:178
+#: js/share.js:195
msgid "Expiration date"
msgstr "到期日"
-#: js/share.js:210
+#: js/share.js:227
msgid "Share via email:"
-msgstr "é€éŽemail分享:"
+msgstr "é€éŽ email 分享:"
-#: js/share.js:212
+#: js/share.js:229
msgid "No people found"
msgstr "沒有找到任何人"
-#: js/share.js:239
+#: js/share.js:256
msgid "Resharing is not allowed"
msgstr "ä¸å…è¨±é‡æ–°åˆ†äº«"
-#: js/share.js:275
+#: js/share.js:292
msgid "Shared in {item} with {user}"
msgstr "已和 {user} 分享 {item}"
-#: js/share.js:296
+#: js/share.js:313
msgid "Unshare"
msgstr "å–æ¶ˆå…±äº«"
-#: js/share.js:308
+#: js/share.js:325
msgid "can edit"
msgstr "å¯ç·¨è¼¯"
-#: js/share.js:310
+#: js/share.js:327
msgid "access control"
msgstr "å­˜å–æŽ§åˆ¶"
-#: js/share.js:313
+#: js/share.js:330
msgid "create"
msgstr "建立"
-#: js/share.js:316
+#: js/share.js:333
msgid "update"
msgstr "æ›´æ–°"
-#: js/share.js:319
+#: js/share.js:336
msgid "delete"
msgstr "刪除"
-#: js/share.js:322
+#: js/share.js:339
msgid "share"
msgstr "分享"
-#: js/share.js:356 js/share.js:541
+#: js/share.js:373 js/share.js:569
msgid "Password protected"
-msgstr "密碼ä¿è­·"
+msgstr "å—密碼ä¿è­·"
-#: js/share.js:554
+#: js/share.js:582
msgid "Error unsetting expiration date"
msgstr "è§£é™¤éŽæœŸæ—¥è¨­å®šå¤±æ•—"
-#: js/share.js:566
+#: js/share.js:594
msgid "Error setting expiration date"
msgstr "錯誤的到期日設定"
-#: js/share.js:581
+#: js/share.js:609
msgid "Sending ..."
-msgstr ""
+msgstr "正在寄出..."
-#: js/share.js:592
+#: js/share.js:620
msgid "Email sent"
-msgstr ""
+msgstr "Email 已寄出"
+
+#: js/update.js:14
+msgid ""
+"The update was unsuccessful. Please report this issue to the <a "
+"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
+"community</a>."
+msgstr "å‡ç´šå¤±æ•—,請將此å•題回報 <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud 社群</a>。"
+
+#: js/update.js:18
+msgid "The update was successful. Redirecting you to ownCloud now."
+msgstr "å‡ç´šæˆåŠŸï¼Œæ­£å°‡æ‚¨é‡æ–°å°Žå‘至 ownCloud 。"
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
@@ -301,19 +397,19 @@ msgstr "ownCloud 密碼é‡è¨­"
#: lostpassword/templates/email.php:2
msgid "Use the following link to reset your password: {link}"
-msgstr "請循以下è¯çµé‡è¨­ä½ çš„密碼: (è¯çµï¼‰ "
+msgstr "請循以下è¯çµé‡è¨­ä½ çš„密碼: {link}"
#: lostpassword/templates/lostpassword.php:3
msgid "You will receive a link to reset your password via Email."
-msgstr "é‡è¨­å¯†ç¢¼çš„連çµå°‡æœƒå¯„到你的電å­éƒµä»¶ä¿¡ç®±"
+msgstr "é‡è¨­å¯†ç¢¼çš„連çµå°‡æœƒå¯„到你的電å­éƒµä»¶ä¿¡ç®±ã€‚"
#: lostpassword/templates/lostpassword.php:5
msgid "Reset email send."
-msgstr "é‡è¨­éƒµä»¶å·²é€å‡º."
+msgstr "é‡è¨­éƒµä»¶å·²é€å‡ºã€‚"
#: lostpassword/templates/lostpassword.php:8
msgid "Request failed!"
-msgstr "請求失敗!"
+msgstr "請求失敗ï¼"
#: lostpassword/templates/lostpassword.php:11 templates/installation.php:39
#: templates/login.php:28
@@ -322,7 +418,7 @@ msgstr "使用者å稱"
#: lostpassword/templates/lostpassword.php:14
msgid "Request reset"
-msgstr "è¦æ±‚é‡è¨­"
+msgstr "請求é‡è¨­"
#: lostpassword/templates/resetpassword.php:4
msgid "Your password was reset"
@@ -362,7 +458,7 @@ msgstr "幫助"
#: templates/403.php:12
msgid "Access forbidden"
-msgstr "ç¦æ­¢å­˜å–"
+msgstr "å­˜å–被拒"
#: templates/404.php:12
msgid "Cloud not found"
@@ -374,9 +470,9 @@ msgstr "編輯分類"
#: templates/edit_categories_dialog.php:16
msgid "Add"
-msgstr "添加"
+msgstr "增加"
-#: templates/installation.php:23 templates/installation.php:31
+#: templates/installation.php:23 templates/installation.php:30
msgid "Security Warning"
msgstr "安全性警告"
@@ -384,149 +480,77 @@ msgstr "安全性警告"
msgid ""
"No secure random number generator is available, please enable the PHP "
"OpenSSL extension."
-msgstr "沒有å¯ç”¨çš„隨機數字產生器, 請啟用 PHP 中 OpenSSL 擴充功能."
+msgstr "沒有å¯ç”¨çš„亂數產生器,請啟用 PHP 中的 OpenSSL 擴充功能。"
-#: templates/installation.php:26
+#: templates/installation.php:25
msgid ""
"Without a secure random number generator an attacker may be able to predict "
"password reset tokens and take over your account."
msgstr "若沒有安全的亂數產生器,攻擊者å¯èƒ½å¯ä»¥é æ¸¬å¯†ç¢¼é‡è¨­ä¿¡ç‰©ï¼Œç„¶å¾ŒæŽ§åˆ¶æ‚¨çš„帳戶。"
+#: templates/installation.php:31
+msgid ""
+"Your data directory and files are probably accessible from the internet "
+"because the .htaccess file does not work."
+msgstr "您的資料目錄看起來å¯ä»¥è¢« Internet 公開存å–,因為 .htaccess 設定並未生效。"
+
#: templates/installation.php:32
msgid ""
-"Your data directory and your files are probably accessible from the "
-"internet. The .htaccess file that ownCloud provides 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."
-msgstr "您的資料目錄 (Data Directory) 和檔案å¯èƒ½å¯ä»¥ç”±ç¶²éš›ç¶²è·¯ä¸Šé¢å…¬é–‹å­˜å–。Owncloud 所æä¾›çš„ .htaccess 設定檔並未生效,我們強烈建議您設定您的網é ä¼ºæœå™¨ä»¥é˜²æ­¢è³‡æ–™ç›®éŒ„被公開存å–,或將您的資料目錄移出網é ä¼ºæœå™¨çš„ document root 。"
+"For information how to properly configure your server, please see the <a "
+"href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
+"target=\"_blank\">documentation</a>."
+msgstr "è«‹åƒè€ƒ<a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺æœå™¨ã€‚"
#: templates/installation.php:36
msgid "Create an <strong>admin account</strong>"
msgstr "建立一個<strong>管ç†è€…帳號</strong>"
-#: templates/installation.php:50
+#: templates/installation.php:52
msgid "Advanced"
msgstr "進階"
-#: templates/installation.php:52
+#: templates/installation.php:54
msgid "Data folder"
msgstr "資料夾"
-#: templates/installation.php:59
+#: templates/installation.php:61
msgid "Configure the database"
msgstr "設定資料庫"
-#: templates/installation.php:64 templates/installation.php:75
-#: templates/installation.php:85 templates/installation.php:95
+#: templates/installation.php:66 templates/installation.php:77
+#: templates/installation.php:87 templates/installation.php:97
msgid "will be used"
msgstr "將會使用"
-#: templates/installation.php:107
+#: templates/installation.php:109
msgid "Database user"
msgstr "資料庫使用者"
-#: templates/installation.php:111
+#: templates/installation.php:113
msgid "Database password"
msgstr "資料庫密碼"
-#: templates/installation.php:115
+#: templates/installation.php:117
msgid "Database name"
msgstr "資料庫å稱"
-#: templates/installation.php:123
+#: templates/installation.php:125
msgid "Database tablespace"
msgstr "資料庫 tablespace"
-#: templates/installation.php:129
+#: templates/installation.php:131
msgid "Database host"
msgstr "資料庫主機"
-#: templates/installation.php:134
+#: templates/installation.php:136
msgid "Finish setup"
msgstr "完æˆè¨­å®š"
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Sunday"
-msgstr "週日"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Monday"
-msgstr "週一"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Tuesday"
-msgstr "週二"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Wednesday"
-msgstr "週三"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Thursday"
-msgstr "週四"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Friday"
-msgstr "週五"
-
-#: templates/layout.guest.php:16 templates/layout.user.php:17
-msgid "Saturday"
-msgstr "週六"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "January"
-msgstr "一月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "February"
-msgstr "二月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "March"
-msgstr "三月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "April"
-msgstr "四月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "May"
-msgstr "五月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "June"
-msgstr "六月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "July"
-msgstr "七月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "August"
-msgstr "八月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "September"
-msgstr "乿œˆ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "October"
-msgstr "åæœˆ"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "November"
-msgstr "å一月"
-
-#: templates/layout.guest.php:17 templates/layout.user.php:18
-msgid "December"
-msgstr "å二月"
-
-#: templates/layout.guest.php:42
+#: templates/layout.guest.php:33
msgid "web services under your control"
-msgstr "網路æœå‹™å·²åœ¨ä½ æŽ§åˆ¶"
+msgstr "網路æœå‹™åœ¨æ‚¨æŽ§åˆ¶ä¹‹ä¸‹"
-#: templates/layout.user.php:45
+#: templates/layout.user.php:48
msgid "Log out"
msgstr "登出"
@@ -546,19 +570,19 @@ msgstr "è«‹æ›´æ”¹æ‚¨çš„å¯†ç¢¼ä»¥å†æ¬¡å–得您的帳戶的控制權。"
#: templates/login.php:19
msgid "Lost your password?"
-msgstr "忘記密碼?"
+msgstr "忘記密碼?"
-#: templates/login.php:39
+#: templates/login.php:41
msgid "remember"
msgstr "記ä½"
-#: templates/login.php:41
+#: templates/login.php:43
msgid "Log in"
msgstr "登入"
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr "你已登出"
+#: templates/login.php:49
+msgid "Alternative Logins"
+msgstr "替代登入方法"
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -571,18 +595,4 @@ msgstr "下一é "
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr "安全性警告!"
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr "請輸入您的密碼。<br/>基於安全性的ç†ç”±ï¼Œæ‚¨æœ‰æ™‚候å¯èƒ½æœƒè¢«è¦æ±‚冿¬¡è¼¸å…¥å¯†ç¢¼ã€‚"
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr "é©—è­‰"
+msgstr "正在將 Owncloud å‡ç´šè‡³ç‰ˆæœ¬ %s ,這å¯èƒ½éœ€è¦ä¸€é»žæ™‚間。"
diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po
index e2be3a8a9f3..0ff4e1b4dda 100644
--- a/l10n/zh_TW/files.po
+++ b/l10n/zh_TW/files.po
@@ -7,14 +7,15 @@
# <dw4dev@gmail.com>, 2012.
# Eddy Chang <taiwanmambo@gmail.com>, 2012.
# <nfsmwlin@gmail.com>, 2013.
+# Pellaeon Lin <nfsmwlin@gmail.com>, 2013.
# ywang <ywang1007@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 06:20+0000\n"
+"Last-Translator: pellaeon <nfsmwlin@gmail.com>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,57 +26,57 @@ msgstr ""
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "無法移動 %s - åŒå的檔案已經存在"
-#: ajax/move.php:24
+#: ajax/move.php:27 ajax/move.php:30
#, php-format
msgid "Could not move %s"
-msgstr ""
+msgstr "無法移動 %s"
-#: ajax/rename.php:19
+#: ajax/rename.php:22 ajax/rename.php:25
msgid "Unable to rename file"
-msgstr ""
+msgstr "ç„¡æ³•é‡æ–°å‘½å檔案"
-#: ajax/upload.php:14
+#: ajax/upload.php:19
msgid "No file was uploaded. Unknown error"
-msgstr "沒有檔案被上傳. 未知的錯誤."
+msgstr "沒有檔案被上傳。未知的錯誤。"
-#: ajax/upload.php:21
+#: ajax/upload.php:26
msgid "There is no error, the file uploaded with success"
msgstr "無錯誤,檔案上傳æˆåŠŸ"
-#: ajax/upload.php:22
+#: ajax/upload.php:27
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr "上傳的檔案大å°è¶…éŽ php.ini 當中 upload_max_filesize åƒæ•¸çš„設定:"
-#: ajax/upload.php:24
+#: ajax/upload.php:29
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr "ä¸Šå‚³é»¨æ¡ˆçš„è¶…éŽ HTML 表單中指定 MAX_FILE_SIZE é™åˆ¶"
+msgstr "上傳的檔案大å°è¶…éŽ HTML 表單中 MAX_FILE_SIZE çš„é™åˆ¶"
-#: ajax/upload.php:26
+#: ajax/upload.php:31
msgid "The uploaded file was only partially uploaded"
-msgstr "åªæœ‰éƒ¨åˆ†æª”案被上傳"
+msgstr "åªæœ‰æª”案的一部分被上傳"
-#: ajax/upload.php:27
+#: ajax/upload.php:32
msgid "No file was uploaded"
msgstr "無已上傳檔案"
-#: ajax/upload.php:28
+#: ajax/upload.php:33
msgid "Missing a temporary folder"
msgstr "éºå¤±æš«å­˜è³‡æ–™å¤¾"
-#: ajax/upload.php:29
+#: ajax/upload.php:34
msgid "Failed to write to disk"
msgstr "寫入硬碟失敗"
-#: ajax/upload.php:45
-msgid "Not enough space available"
-msgstr "沒有足夠的å¯ç”¨ç©ºé–“"
+#: ajax/upload.php:52
+msgid "Not enough storage available"
+msgstr "儲存空間ä¸è¶³"
-#: ajax/upload.php:69
+#: ajax/upload.php:83
msgid "Invalid directory."
msgstr "無效的資料夾。"
@@ -83,164 +84,167 @@ msgstr "無效的資料夾。"
msgid "Files"
msgstr "檔案"
-#: js/fileactions.js:117 templates/index.php:82 templates/index.php:83
-msgid "Unshare"
-msgstr "å–æ¶ˆå…±äº«"
+#: js/fileactions.js:116
+msgid "Delete permanently"
+msgstr "永久刪除"
-#: js/fileactions.js:119 templates/index.php:88 templates/index.php:89
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "刪除"
-#: js/fileactions.js:181
+#: js/fileactions.js:184
msgid "Rename"
msgstr "釿–°å‘½å"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "等候中"
+
+#: js/filelist.js:253 js/filelist.js:255
msgid "{new_name} already exists"
msgstr "{new_name} 已經存在"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "replace"
msgstr "å–代"
-#: js/filelist.js:205
+#: js/filelist.js:253
msgid "suggest name"
msgstr "建議檔å"
-#: js/filelist.js:205 js/filelist.js:207
+#: js/filelist.js:253 js/filelist.js:255
msgid "cancel"
msgstr "å–æ¶ˆ"
-#: js/filelist.js:254
+#: js/filelist.js:295
msgid "replaced {new_name}"
msgstr "å·²å–代 {new_name}"
-#: js/filelist.js:254 js/filelist.js:256 js/filelist.js:288 js/filelist.js:290
+#: js/filelist.js:295 js/filelist.js:297
msgid "undo"
msgstr "復原"
-#: js/filelist.js:256
+#: js/filelist.js:297
msgid "replaced {new_name} with {old_name}"
msgstr "使用 {new_name} å–代 {old_name}"
-#: js/filelist.js:288
-msgid "unshared {files}"
-msgstr "åœæ­¢åˆ†äº« {files}"
+#: js/filelist.js:322
+msgid "perform delete operation"
+msgstr "進行刪除動作"
-#: js/filelist.js:290
-msgid "deleted {files}"
-msgstr "已刪除 {files}"
-
-#: js/files.js:31
+#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr "'.' 是ä¸åˆæ³•的檔å。"
-#: js/files.js:36
+#: js/files.js:56
msgid "File name cannot be empty."
msgstr "檔åä¸èƒ½ç‚ºç©ºã€‚"
-#: js/files.js:45
+#: js/files.js:64
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr "檔åä¸åˆæ³•,ä¸å…許 '\\', '/', '<', '>', ':', '\"', '|', '?' å’Œ '*' 。"
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
-msgstr "產生壓縮檔, 它å¯èƒ½éœ€è¦ä¸€æ®µæ™‚é–“."
+#: js/files.js:78
+msgid "Your storage is full, files can not be updated or synced anymore!"
+msgstr "æ‚¨çš„å„²å­˜ç©ºé–“å·²æ»¿ï¼Œæ²’æœ‰è¾¦æ³•å†æ›´æ–°æˆ–æ˜¯åŒæ­¥æª”案ï¼"
+
+#: js/files.js:82
+msgid "Your storage is almost full ({usedSpacePercent}%)"
+msgstr "æ‚¨çš„å„²å­˜ç©ºé–“å¿«è¦æ»¿äº† ({usedSpacePercent}%)"
#: js/files.js:224
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
+msgstr "æ­£åœ¨æº–å‚™æ‚¨çš„ä¸‹è¼‰ï¼Œè‹¥æ‚¨çš„æª”æ¡ˆè¼ƒå¤§ï¼Œå°‡æœƒéœ€è¦æ›´å¤šæ™‚間。"
+
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "無法上傳您的檔案因為它å¯èƒ½æ˜¯ä¸€å€‹ç›®éŒ„或檔案大å°ç‚º0"
-#: js/files.js:224
+#: js/files.js:261
msgid "Upload Error"
msgstr "上傳發生錯誤"
-#: js/files.js:241
+#: js/files.js:272
msgid "Close"
msgstr "關閉"
-#: js/files.js:260 js/files.js:376 js/files.js:409
-msgid "Pending"
-msgstr "等候中"
-
-#: js/files.js:280
+#: js/files.js:311
msgid "1 file uploading"
msgstr "1 個檔案正在上傳"
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:314 js/files.js:369 js/files.js:384
msgid "{count} files uploading"
msgstr "{count} 個檔案正在上傳"
-#: js/files.js:357 js/files.js:393
+#: js/files.js:387 js/files.js:422
msgid "Upload cancelled."
msgstr "ä¸Šå‚³å–æ¶ˆ"
-#: js/files.js:464
+#: js/files.js:496
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
-msgstr "檔案上傳中. 離開此é é¢å°‡æœƒå–消上傳."
+msgstr "檔案上傳中。離開此é é¢å°‡æœƒå–消上傳。"
-#: js/files.js:537
+#: js/files.js:569
msgid "URL cannot be empty."
-msgstr "URLä¸èƒ½ç‚ºç©ºç™½."
+msgstr "URL ä¸èƒ½ç‚ºç©ºç™½."
-#: js/files.js:543
+#: js/files.js:574
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "無效的資料夾å稱,'Shared' 的使用被 Owncloud ä¿ç•™"
-#: js/files.js:727
-msgid "{count} files scanned"
-msgstr "{count} 個檔案已掃æ"
-
-#: js/files.js:735
-msgid "error while scanning"
-msgstr "æŽƒææ™‚發生錯誤"
-
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:948 templates/index.php:67
msgid "Name"
msgstr "å稱"
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:949 templates/index.php:78
msgid "Size"
msgstr "大å°"
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:950 templates/index.php:80
msgid "Modified"
msgstr "修改"
-#: js/files.js:829
+#: js/files.js:969
msgid "1 folder"
msgstr "1 個資料夾"
-#: js/files.js:831
+#: js/files.js:971
msgid "{count} folders"
msgstr "{count} 個資料夾"
-#: js/files.js:839
+#: js/files.js:979
msgid "1 file"
msgstr "1 個檔案"
-#: js/files.js:841
+#: js/files.js:981
msgid "{count} files"
msgstr "{count} 個檔案"
+#: lib/helper.php:11 templates/index.php:18
+msgid "Upload"
+msgstr "上傳"
+
#: templates/admin.php:5
msgid "File handling"
msgstr "檔案處ç†"
#: templates/admin.php:7
msgid "Maximum upload size"
-msgstr "最大上傳容é‡"
+msgstr "最大上傳檔案大å°"
#: templates/admin.php:10
msgid "max. possible: "
-msgstr "最大å…許: "
+msgstr "最大å…許:"
#: templates/admin.php:15
msgid "Needed for multi-file and folder downloads."
-msgstr "é‡å°å¤šæª”案和目錄下載是必填的"
+msgstr "é‡å°å¤šæª”案和目錄下載是必填的。"
#: templates/admin.php:17
msgid "Enable ZIP-download"
@@ -252,7 +256,7 @@ msgstr "0代表沒有é™åˆ¶"
#: templates/admin.php:22
msgid "Maximum input size for ZIP files"
-msgstr "é‡å°ZIP檔案最大輸入大å°"
+msgstr "é‡å° ZIP 檔案最大輸入大å°"
#: templates/admin.php:26
msgid "Save"
@@ -274,36 +278,44 @@ msgstr "資料夾"
msgid "From link"
msgstr "從連çµ"
-#: templates/index.php:18
-msgid "Upload"
-msgstr "上傳"
+#: templates/index.php:40
+msgid "Trash bin"
+msgstr "回收筒"
-#: templates/index.php:41
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "å–æ¶ˆä¸Šå‚³"
-#: templates/index.php:56
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
-msgstr "沒有任何æ±è¥¿ã€‚請上傳內容!"
+msgstr "沒有任何æ±è¥¿ã€‚請上傳內容ï¼"
-#: templates/index.php:70
+#: templates/index.php:73
msgid "Download"
msgstr "下載"
-#: templates/index.php:102
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "å–æ¶ˆå…±äº«"
+
+#: templates/index.php:105
msgid "Upload too large"
msgstr "上傳éŽå¤§"
-#: templates/index.php:104
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr "你試圖上傳的檔案已超éŽä¼ºæœå™¨çš„æœ€å¤§å®¹é‡é™åˆ¶ã€‚ "
+msgstr "您試圖上傳的檔案已超éŽä¼ºæœå™¨çš„æœ€å¤§æª”案大å°é™åˆ¶ã€‚ "
-#: templates/index.php:109
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "æ­£åœ¨æŽƒææª”案,請ç¨ç­‰ã€‚"
-#: templates/index.php:112
+#: templates/index.php:115
msgid "Current scanning"
msgstr "ç›®å‰æŽƒæ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "正在更新檔案系統快å–..."
diff --git a/l10n/zh_TW/files_encryption.po b/l10n/zh_TW/files_encryption.po
index 1da95b438b9..a07b9404ea3 100644
--- a/l10n/zh_TW/files_encryption.po
+++ b/l10n/zh_TW/files_encryption.po
@@ -3,33 +3,38 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Pellaeon Lin <nfsmwlin@gmail.com>, 2013.
# ywang <ywang1007@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-09-02 02:01+0200\n"
-"PO-Revision-Date: 2012-09-01 14:48+0000\n"
-"Last-Translator: ywang <ywang1007@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_TW\n"
-"Plural-Forms: nplurals=1; plural=0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
-#: templates/settings.php:3
+#: templates/settings-personal.php:4 templates/settings.php:5
msgid "Encryption"
msgstr "加密"
-#: templates/settings.php:4
-msgid "Exclude the following file types from encryption"
-msgstr "下列的檔案類型ä¸åР坆"
+#: templates/settings-personal.php:7
+msgid "File encryption is enabled."
+msgstr ""
+
+#: templates/settings-personal.php:11
+msgid "The following file types will not be encrypted:"
+msgstr ""
-#: templates/settings.php:5
+#: templates/settings.php:7
+msgid "Exclude the following file types from encryption:"
+msgstr ""
+
+#: templates/settings.php:12
msgid "None"
msgstr "ç„¡"
-
-#: templates/settings.php:10
-msgid "Enable Encryption"
-msgstr "啟用加密"
diff --git a/l10n/zh_TW/files_sharing.po b/l10n/zh_TW/files_sharing.po
index 01ec04db5b4..c60cf46d161 100644
--- a/l10n/zh_TW/files_sharing.po
+++ b/l10n/zh_TW/files_sharing.po
@@ -4,14 +4,15 @@
#
# Translators:
# <dw4dev@gmail.com>, 2012.
+# Pellaeon Lin <nfsmwlin@gmail.com>, 2013.
# <wu0809@msn.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-28 00:10+0100\n"
-"PO-Revision-Date: 2012-11-27 14:28+0000\n"
-"Last-Translator: dw4dev <dw4dev@gmail.com>\n"
+"POT-Creation-Date: 2013-01-25 00:05+0100\n"
+"PO-Revision-Date: 2013-01-24 13:15+0000\n"
+"Last-Translator: pellaeon <nfsmwlin@gmail.com>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -47,4 +48,4 @@ msgstr "無法é è¦½"
#: templates/public.php:43
msgid "web services under your control"
-msgstr ""
+msgstr "在您掌控之下的網路æœå‹™"
diff --git a/l10n/zh_TW/files_trashbin.po b/l10n/zh_TW/files_trashbin.po
new file mode 100644
index 00000000000..ffbd5fd24ea
--- /dev/null
+++ b/l10n/zh_TW/files_trashbin.po
@@ -0,0 +1,68 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ajax/delete.php:22
+#, php-format
+msgid "Couldn't delete %s permanently"
+msgstr ""
+
+#: ajax/undelete.php:41
+#, php-format
+msgid "Couldn't restore %s"
+msgstr ""
+
+#: js/trash.js:7 js/trash.js:94
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:33
+msgid "delete file permanently"
+msgstr ""
+
+#: js/trash.js:125 templates/index.php:17
+msgid "Name"
+msgstr "å稱"
+
+#: js/trash.js:126 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:135
+msgid "1 folder"
+msgstr "1 個資料夾"
+
+#: js/trash.js:137
+msgid "{count} folders"
+msgstr "{count} 個資料夾"
+
+#: js/trash.js:145
+msgid "1 file"
+msgstr "1 個檔案"
+
+#: js/trash.js:147
+msgid "{count} files"
+msgstr "{count} 個檔案"
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/zh_TW/files_versions.po b/l10n/zh_TW/files_versions.po
index de8f1475443..2855967dae2 100644
--- a/l10n/zh_TW/files_versions.po
+++ b/l10n/zh_TW/files_versions.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-29 00:04+0100\n"
-"PO-Revision-Date: 2012-11-28 01:33+0000\n"
-"Last-Translator: dw4dev <dw4dev@gmail.com>\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,20 +18,43 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr "所有逾期的版本"
+#: ajax/rollbackVersion.php:15
+#, php-format
+msgid "Could not revert: %s"
+msgstr ""
+
+#: history.php:40
+msgid "success"
+msgstr ""
+
+#: history.php:42
+#, php-format
+msgid "File %s was reverted to version %s"
+msgstr ""
+
+#: history.php:49
+msgid "failure"
+msgstr ""
+
+#: history.php:51
+#, php-format
+msgid "File %s could not be reverted to version %s"
+msgstr ""
+
+#: history.php:68
+msgid "No old versions available"
+msgstr ""
+
+#: history.php:73
+msgid "No path specified"
+msgstr ""
#: js/versions.js:16
msgid "History"
msgstr "æ­·å²"
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr "版本"
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
+#: templates/history.php:20
+msgid "Revert a file to a previous version by clicking on its revert button"
msgstr ""
#: templates/settings.php:3
diff --git a/l10n/zh_TW/lib.po b/l10n/zh_TW/lib.po
index 2bc0c14b6c0..9ce151b9dfe 100644
--- a/l10n/zh_TW/lib.po
+++ b/l10n/zh_TW/lib.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Pellaeon Lin <nfsmwlin@gmail.com>, 2013.
# <sofia168@livemail.tw>, 2012.
# <ywang1007+transifex@gmail.com>, 2012.
# ywang <ywang1007@gmail.com>, 2012.
@@ -10,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-27 00:10+0100\n"
-"PO-Revision-Date: 2012-11-26 09:03+0000\n"
-"Last-Translator: sofiasu <sofia168@livemail.tw>\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:40+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,57 +21,61 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: app.php:285
+#: app.php:339
msgid "Help"
msgstr "說明"
-#: app.php:292
+#: app.php:346
msgid "Personal"
msgstr "個人"
-#: app.php:297
+#: app.php:351
msgid "Settings"
msgstr "設定"
-#: app.php:302
+#: app.php:356
msgid "Users"
msgstr "使用者"
-#: app.php:309
+#: app.php:363
msgid "Apps"
msgstr "應用程å¼"
-#: app.php:311
+#: app.php:365
msgid "Admin"
msgstr "管ç†"
-#: files.php:361
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP 下載已關閉"
-#: files.php:362
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "檔案需è¦é€ä¸€ä¸‹è¼‰"
-#: files.php:362 files.php:387
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "回到檔案列表"
-#: files.php:386
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "鏿“‡çš„æª”案太大以致於無法產生壓縮檔"
+#: helper.php:226
+msgid "couldn't be determined"
+msgstr "無法判斷"
+
#: json.php:28
msgid "Application is not enabled"
msgstr "æ‡‰ç”¨ç¨‹å¼æœªå•Ÿç”¨"
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr "èªè­‰éŒ¯èª¤"
#: json.php:51
msgid "Token expired. Please reload page."
-msgstr "Token éŽæœŸ. è«‹é‡æ–°æ•´ç†é é¢"
+msgstr "Token éŽæœŸï¼Œè«‹é‡æ–°æ•´ç†é é¢ã€‚"
#: search/provider/file.php:17 search/provider/file.php:35
msgid "Files"
@@ -84,62 +89,159 @@ msgstr "文字"
msgid "Images"
msgstr "圖片"
-#: template.php:103
+#: setup.php:34
+msgid "Set an admin username."
+msgstr ""
+
+#: setup.php:37
+msgid "Set an admin password."
+msgstr ""
+
+#: setup.php:40
+msgid "Specify a data folder."
+msgstr ""
+
+#: setup.php:53
+#, php-format
+msgid "%s enter the database username."
+msgstr ""
+
+#: setup.php:56
+#, php-format
+msgid "%s enter the database name."
+msgstr ""
+
+#: setup.php:59
+#, php-format
+msgid "%s you may not use dots in the database name"
+msgstr ""
+
+#: setup.php:62
+#, php-format
+msgid "%s set the database host."
+msgstr ""
+
+#: setup.php:126 setup.php:291 setup.php:336
+msgid "PostgreSQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:127 setup.php:150 setup.php:204
+msgid "You need to enter either an existing account or the administrator."
+msgstr ""
+
+#: setup.php:149 setup.php:423 setup.php:489
+msgid "Oracle username and/or password not valid"
+msgstr ""
+
+#: setup.php:203
+msgid "MySQL username and/or password not valid"
+msgstr ""
+
+#: setup.php:255 setup.php:357 setup.php:366 setup.php:384 setup.php:394
+#: setup.php:403 setup.php:430 setup.php:496 setup.php:522 setup.php:529
+#: setup.php:540 setup.php:547 setup.php:556 setup.php:564 setup.php:573
+#: setup.php:579
+#, php-format
+msgid "DB Error: \"%s\""
+msgstr ""
+
+#: setup.php:256 setup.php:358 setup.php:367 setup.php:385 setup.php:395
+#: setup.php:404 setup.php:431 setup.php:497 setup.php:523 setup.php:530
+#: setup.php:541 setup.php:557 setup.php:565 setup.php:574
+#, php-format
+msgid "Offending command was: \"%s\""
+msgstr ""
+
+#: setup.php:270
+#, php-format
+msgid "MySQL user '%s'@'localhost' exists already."
+msgstr ""
+
+#: setup.php:271
+msgid "Drop this user from MySQL"
+msgstr ""
+
+#: setup.php:276
+#, php-format
+msgid "MySQL user '%s'@'%%' already exists"
+msgstr ""
+
+#: setup.php:277
+msgid "Drop this user from MySQL."
+msgstr ""
+
+#: setup.php:548 setup.php:580
+#, php-format
+msgid "Offending command was: \"%s\", name: %s, password: %s"
+msgstr ""
+
+#: setup.php:644
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "您的網é ä¼ºæœå™¨å°šæœªè¢«æ­£ç¢ºè¨­å®šä¾†é€²è¡Œæª”æ¡ˆåŒæ­¥ï¼Œå› ç‚ºæ‚¨çš„ WebDAV 界é¢ä¼¼ä¹Žç„¡æ³•使用。"
+
+#: setup.php:645
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "è«‹åƒè€ƒ<a href='%s'>å®‰è£æŒ‡å—</a>。"
+
+#: template.php:113
msgid "seconds ago"
msgstr "幾秒å‰"
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr "1 分é˜å‰"
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr "%d 分é˜å‰"
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
-msgstr "1å°æ™‚之å‰"
+msgstr "1 å°æ™‚之å‰"
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
-msgstr "%då°æ™‚之å‰"
+msgstr "%d å°æ™‚之å‰"
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr "今天"
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr "昨天"
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr "%d 天å‰"
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr "上個月"
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
-msgstr "%d個月之å‰"
+msgstr "%d 個月之å‰"
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr "去年"
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr "幾年å‰"
#: updater.php:75
#, php-format
msgid "%s is available. Get <a href=\"%s\">more information</a>"
-msgstr "%s 已經å¯ç”¨. å–å¾— <a href=\"%s\">更多資訊</a>"
+msgstr "%s 已經å¯ç”¨ã€‚å–å¾— <a href=\"%s\">更多資訊</a>"
#: updater.php:77
msgid "up to date"
@@ -152,4 +254,4 @@ msgstr "檢查更新已åœç”¨"
#: vcategories.php:188 vcategories.php:249
#, php-format
msgid "Could not find category \"%s\""
-msgstr "找ä¸åˆ°åˆ†é¡ž-\"%s\""
+msgstr "找ä¸åˆ°åˆ†é¡žï¼š\"%s\""
diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po
index 6168a8b0d36..6561fdcf050 100644
--- a/l10n/zh_TW/settings.po
+++ b/l10n/zh_TW/settings.po
@@ -5,6 +5,8 @@
# Translators:
# Donahue Chuang <soshinwu@gmail.com>, 2012.
# <dw4dev@gmail.com>, 2012.
+# <nfsmwlin@gmail.com>, 2013.
+# Pellaeon Lin <nfsmwlin@gmail.com>, 2013.
# <sy6614@yahoo.com.hk>, 2012.
# <weiyu871@ms14.url.com.tw>, 2012.
# <wu0809@msn.com>, 2012.
@@ -13,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-02-11 15:39+0100\n"
+"PO-Revision-Date: 2013-02-11 14:39+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -27,6 +29,15 @@ msgstr ""
msgid "Unable to load list from App Store"
msgstr "無法從 App Store è®€å–æ¸…å–®"
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "èªè­‰éŒ¯èª¤"
+
+#: ajax/changedisplayname.php:32
+msgid "Unable to change display name"
+msgstr "無法更改顯示å稱"
+
#: ajax/creategroup.php:10
msgid "Group already exists"
msgstr "群組已存在"
@@ -35,7 +46,7 @@ msgstr "群組已存在"
msgid "Unable to add group"
msgstr "群組增加失敗"
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr "未能啟動此app"
@@ -47,22 +58,10 @@ msgstr "Email已儲存"
msgid "Invalid email"
msgstr "無效的email"
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr "OpenID 已變更"
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr "無效請求"
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr "群組刪除錯誤"
-#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
-msgid "Authentication error"
-msgstr "èªè­‰éŒ¯èª¤"
-
#: ajax/removeuser.php:24
msgid "Unable to delete user"
msgstr "使用者刪除錯誤"
@@ -71,6 +70,10 @@ msgstr "使用者刪除錯誤"
msgid "Language changed"
msgstr "語言已變更"
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr "無效請求"
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr "管ç†è€…帳號無法從管ç†è€…群組中移除"
@@ -85,19 +88,47 @@ msgstr "使用者加入群組%s錯誤"
msgid "Unable to remove user from group %s"
msgstr "使用者移出群組%s錯誤"
-#: js/apps.js:28 js/apps.js:67
+#: ajax/updateapp.php:14
+msgid "Couldn't update app."
+msgstr "無法更新應用程å¼"
+
+#: js/apps.js:30
+msgid "Update to {appversion}"
+msgstr "更新至 {appversion}"
+
+#: js/apps.js:36 js/apps.js:76
msgid "Disable"
msgstr "åœç”¨"
-#: js/apps.js:28 js/apps.js:55
+#: js/apps.js:36 js/apps.js:64
msgid "Enable"
msgstr "啟用"
-#: js/personal.js:69
+#: js/apps.js:55
+msgid "Please wait...."
+msgstr "è«‹ç¨å€™..."
+
+#: js/apps.js:84
+msgid "Updating...."
+msgstr "更新中..."
+
+#: js/apps.js:87
+msgid "Error while updating app"
+msgstr "更新應用程å¼éŒ¯èª¤"
+
+#: js/apps.js:87
+msgid "Error"
+msgstr "錯誤"
+
+#: js/apps.js:90
+msgid "Updated"
+msgstr "已更新"
+
+#: js/personal.js:96
msgid "Saving..."
msgstr "儲存中..."
-#: personal.php:42 personal.php:43
+#: personal.php:34 personal.php:35
msgid "__language_name__"
msgstr "__語言_å稱__"
@@ -109,124 +140,132 @@ msgstr "添加你的 App"
msgid "More Apps"
msgstr "更多Apps"
-#: templates/apps.php:27
+#: templates/apps.php:24
msgid "Select an App"
msgstr "鏿“‡ä¸€å€‹æ‡‰ç”¨ç¨‹å¼"
-#: templates/apps.php:31
+#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
msgstr "查看應用程å¼é é¢æ–¼ apps.owncloud.com"
-#: templates/apps.php:32
+#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
msgstr "<span class=\"licence\"></span>-核准: <span class=\"author\"></span>"
+#: templates/apps.php:31
+msgid "Update"
+msgstr "æ›´æ–°"
+
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "用戶說明文件"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "管ç†è€…說明文件"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "線上說明文件"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "論壇"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr ""
+msgstr "Bugtracker"
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "商用支æ´"
#: templates/personal.php:8
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr "您已經使用了 <strong>%s</strong> ,目å‰å¯ç”¨ç©ºé–“為 <strong>%s</strong>"
-#: templates/personal.php:12
-msgid "Clients"
-msgstr "客戶"
-
-#: templates/personal.php:13
-msgid "Download Desktop Clients"
-msgstr ""
-
#: templates/personal.php:14
-msgid "Download Android Client"
+msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:15
-msgid "Download iOS Client"
+#: templates/personal.php:25
+msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:21 templates/users.php:23 templates/users.php:82
+#: templates/personal.php:36 templates/users.php:23 templates/users.php:81
msgid "Password"
msgstr "密碼"
-#: templates/personal.php:22
+#: templates/personal.php:37
msgid "Your password was changed"
msgstr "你的密碼已更改"
-#: templates/personal.php:23
+#: templates/personal.php:38
msgid "Unable to change your password"
msgstr "無法變更你的密碼"
-#: templates/personal.php:24
+#: templates/personal.php:39
msgid "Current password"
msgstr "ç›®å‰å¯†ç¢¼"
-#: templates/personal.php:25
+#: templates/personal.php:40
msgid "New password"
msgstr "新密碼"
-#: templates/personal.php:26
-msgid "show"
-msgstr "顯示"
-
-#: templates/personal.php:27
+#: templates/personal.php:42
msgid "Change password"
msgstr "變更密碼"
-#: templates/personal.php:33
+#: templates/personal.php:54 templates/users.php:80
+msgid "Display Name"
+msgstr "顯示å稱"
+
+#: templates/personal.php:55
+msgid "Your display name was changed"
+msgstr "已更改顯示å稱"
+
+#: templates/personal.php:56
+msgid "Unable to change your display name"
+msgstr "無法更改您的顯示å稱"
+
+#: templates/personal.php:59
+msgid "Change display name"
+msgstr "更改顯示å稱"
+
+#: templates/personal.php:68
msgid "Email"
msgstr "é›»å­éƒµä»¶"
-#: templates/personal.php:34
+#: templates/personal.php:69
msgid "Your email address"
msgstr "你的電å­éƒµä»¶ä¿¡ç®±"
-#: templates/personal.php:35
+#: templates/personal.php:70
msgid "Fill in an email address to enable password recovery"
msgstr "請填入電å­éƒµä»¶ä¿¡ç®±ä»¥ä¾¿å›žå¾©å¯†ç¢¼"
-#: templates/personal.php:41 templates/personal.php:42
+#: templates/personal.php:76 templates/personal.php:77
msgid "Language"
msgstr "語言"
-#: templates/personal.php:47
+#: templates/personal.php:82
msgid "Help translate"
msgstr "幫助翻譯"
-#: templates/personal.php:52
+#: templates/personal.php:87
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
-#: templates/personal.php:54
+#: templates/personal.php:89
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "在您的檔案管ç†å“¡ä¸­ä½¿ç”¨é€™å€‹åœ°å€ä¾†é€£ç·šåˆ° ownCloud"
-#: templates/personal.php:63
+#: templates/personal.php:98
msgid "Version"
-msgstr ""
+msgstr "版本"
-#: templates/personal.php:65
+#: templates/personal.php:100
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@@ -236,11 +275,11 @@ msgid ""
"License\">AGPL</abbr></a>."
msgstr "ç”±<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>許å¯è­‰ä¸‹ç™¼å¸ƒã€‚"
-#: templates/users.php:21 templates/users.php:81
-msgid "Name"
-msgstr "å稱"
+#: templates/users.php:21 templates/users.php:79
+msgid "Login Name"
+msgstr "登入å稱"
-#: templates/users.php:26 templates/users.php:83 templates/users.php:103
+#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
msgstr "群組"
@@ -250,28 +289,36 @@ msgstr "創造"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "é è¨­å„²å­˜å€"
-#: templates/users.php:42 templates/users.php:138
+#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "ç„¡é™åˆ¶"
-#: templates/users.php:60 templates/users.php:153
+#: templates/users.php:60 templates/users.php:157
msgid "Other"
msgstr "å…¶ä»–"
-#: templates/users.php:85 templates/users.php:117
+#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
msgstr "群組 管ç†å“¡"
-#: templates/users.php:87
+#: templates/users.php:86
msgid "Storage"
-msgstr ""
+msgstr "儲存å€"
-#: templates/users.php:133
+#: templates/users.php:97
+msgid "change display name"
+msgstr "修改顯示å稱"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "設定新密碼"
+
+#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "é è¨­"
-#: templates/users.php:161
+#: templates/users.php:165
msgid "Delete"
msgstr "刪除"
diff --git a/l10n/zh_TW/user_ldap.po b/l10n/zh_TW/user_ldap.po
index 2bf0669ac23..89db84884a7 100644
--- a/l10n/zh_TW/user_ldap.po
+++ b/l10n/zh_TW/user_ldap.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-02-08 00:10+0100\n"
+"PO-Revision-Date: 2013-02-07 23:11+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,58 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: ajax/deleteConfiguration.php:34
+msgid "Failed to delete the server configuration"
+msgstr ""
+
+#: ajax/testConfiguration.php:35
+msgid "The configuration is valid and the connection could be established!"
+msgstr ""
+
+#: ajax/testConfiguration.php:37
+msgid ""
+"The configuration is valid, but the Bind failed. Please check the server "
+"settings and credentials."
+msgstr ""
+
+#: ajax/testConfiguration.php:40
+msgid ""
+"The configuration is invalid. Please look in the ownCloud log for further "
+"details."
+msgstr ""
+
+#: js/settings.js:66
+msgid "Deletion failed"
+msgstr "移除失敗"
+
+#: js/settings.js:82
+msgid "Take over settings from recent server configuration?"
+msgstr ""
+
+#: js/settings.js:83
+msgid "Keep settings?"
+msgstr ""
+
+#: js/settings.js:97
+msgid "Cannot add server configuration"
+msgstr ""
+
+#: js/settings.js:121
+msgid "Connection test succeeded"
+msgstr ""
+
+#: js/settings.js:126
+msgid "Connection test failed"
+msgstr ""
+
+#: js/settings.js:136
+msgid "Do you really want to delete the current Server Configuration?"
+msgstr ""
+
+#: js/settings.js:137
+msgid "Confirm Deletion"
+msgstr ""
+
#: templates/settings.php:8
msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
@@ -27,158 +79,232 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
-msgid "Host"
+msgid "Server configuration"
msgstr ""
-#: templates/settings.php:15
+#: templates/settings.php:17
+msgid "Add Server Configuration"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Host"
+msgstr "主機"
+
+#: templates/settings.php:21
msgid ""
"You can omit the protocol, except you require SSL. Then start with ldaps://"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
msgid "Base DN"
msgstr ""
-#: templates/settings.php:16
+#: templates/settings.php:22
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:22
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid "User DN"
msgstr ""
-#: templates/settings.php:17
+#: templates/settings.php:23
msgid ""
"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."
msgstr ""
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "Password"
msgstr "密碼"
-#: templates/settings.php:18
+#: templates/settings.php:24
msgid "For anonymous access, leave DN and Password empty."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
msgid "User Login Filter"
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid ""
"Defines the filter to apply, when login is attempted. %%uid replaces the "
"username in the login action."
msgstr ""
-#: templates/settings.php:19
+#: templates/settings.php:25
#, php-format
msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "User List Filter"
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "Defines the filter to apply, when retrieving users."
msgstr ""
-#: templates/settings.php:20
+#: templates/settings.php:26
msgid "without any placeholder, e.g. \"objectClass=person\"."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Group Filter"
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "Defines the filter to apply, when retrieving groups."
msgstr ""
-#: templates/settings.php:21
+#: templates/settings.php:27
msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
msgstr ""
-#: templates/settings.php:24
+#: templates/settings.php:31
+msgid "Connection Settings"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Configuration Active"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "When unchecked, this configuration will be skipped."
+msgstr ""
+
+#: templates/settings.php:34
msgid "Port"
+msgstr "連接阜"
+
+#: templates/settings.php:35
+msgid "Backup (Replica) Host"
msgstr ""
-#: templates/settings.php:25
-msgid "Base User Tree"
+#: templates/settings.php:35
+msgid ""
+"Give an optional backup host. It must be a replica of the main LDAP/AD "
+"server."
msgstr ""
-#: templates/settings.php:26
-msgid "Base Group Tree"
+#: templates/settings.php:36
+msgid "Backup (Replica) Port"
msgstr ""
-#: templates/settings.php:27
-msgid "Group-Member association"
+#: templates/settings.php:37
+msgid "Disable Main Server"
msgstr ""
-#: templates/settings.php:28
+#: templates/settings.php:37
+msgid "When switched on, ownCloud will only connect to the replica server."
+msgstr ""
+
+#: templates/settings.php:38
msgid "Use TLS"
msgstr "使用TLS"
-#: templates/settings.php:28
-msgid "Do not use it for SSL connections, it will fail."
+#: templates/settings.php:38
+msgid "Do not use it additionally for LDAPS connections, it will fail."
msgstr ""
-#: templates/settings.php:29
+#: templates/settings.php:39
msgid "Case insensitve LDAP server (Windows)"
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Turn off SSL certificate validation."
msgstr "關閉 SSL 憑證驗證"
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid ""
"If connection only works with this option, import the LDAP server's SSL "
"certificate in your ownCloud server."
msgstr ""
-#: templates/settings.php:30
+#: templates/settings.php:40
msgid "Not recommended, use for testing only."
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:41
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Directory Settings"
+msgstr ""
+
+#: templates/settings.php:45
msgid "User Display Name Field"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:45
msgid "The LDAP attribute to use to generate the user`s ownCloud name."
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:46
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "One User Base DN per line"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "User Search Attributes"
+msgstr ""
+
+#: templates/settings.php:47 templates/settings.php:50
+msgid "Optional; one attribute per line"
+msgstr ""
+
+#: templates/settings.php:48
msgid "Group Display Name Field"
msgstr ""
-#: templates/settings.php:32
+#: templates/settings.php:48
msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
msgstr ""
-#: templates/settings.php:34
-msgid "in bytes"
+#: templates/settings.php:49
+msgid "Base Group Tree"
msgstr ""
-#: templates/settings.php:36
-msgid "in seconds. A change empties the cache."
+#: templates/settings.php:49
+msgid "One Group Base DN per line"
msgstr ""
-#: templates/settings.php:37
+#: templates/settings.php:50
+msgid "Group Search Attributes"
+msgstr ""
+
+#: templates/settings.php:51
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Special Attributes"
+msgstr ""
+
+#: templates/settings.php:56
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:58
msgid ""
"Leave empty for user name (default). Otherwise, specify an LDAP/AD "
"attribute."
msgstr ""
-#: templates/settings.php:39
+#: templates/settings.php:62
msgid "Help"
msgstr "說明"
diff --git a/l10n/zh_TW/user_webdavauth.po b/l10n/zh_TW/user_webdavauth.po
index 0870470a5c2..d99e5ba2a7f 100644
--- a/l10n/zh_TW/user_webdavauth.po
+++ b/l10n/zh_TW/user_webdavauth.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,17 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/l10n/zu_ZA/core.po b/l10n/zu_ZA/core.po
index c5466fa4b40..c559a642746 100644
--- a/l10n/zu_ZA/core.po
+++ b/l10n/zu_ZA/core.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-07 00:04+0100\n"
-"PO-Revision-Date: 2013-01-06 23:05+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Zulu (South Africa) (http://www.transifex.com/projects/p/owncloud/language/zu_ZA/)\n"
"MIME-Version: 1.0\n"
@@ -83,55 +83,55 @@ msgstr ""
msgid "Settings"
msgstr ""
-#: js/js.js:704
+#: js/js.js:711
msgid "seconds ago"
msgstr ""
-#: js/js.js:705
+#: js/js.js:712
msgid "1 minute ago"
msgstr ""
-#: js/js.js:706
+#: js/js.js:713
msgid "{minutes} minutes ago"
msgstr ""
-#: js/js.js:707
+#: js/js.js:714
msgid "1 hour ago"
msgstr ""
-#: js/js.js:708
+#: js/js.js:715
msgid "{hours} hours ago"
msgstr ""
-#: js/js.js:709
+#: js/js.js:716
msgid "today"
msgstr ""
-#: js/js.js:710
+#: js/js.js:717
msgid "yesterday"
msgstr ""
-#: js/js.js:711
+#: js/js.js:718
msgid "{days} days ago"
msgstr ""
-#: js/js.js:712
+#: js/js.js:719
msgid "last month"
msgstr ""
-#: js/js.js:713
+#: js/js.js:720
msgid "{months} months ago"
msgstr ""
-#: js/js.js:714
+#: js/js.js:721
msgid "months ago"
msgstr ""
-#: js/js.js:715
+#: js/js.js:722
msgid "last year"
msgstr ""
-#: js/js.js:716
+#: js/js.js:723
msgid "years ago"
msgstr ""
@@ -207,7 +207,6 @@ msgid "Password protect"
msgstr ""
#: js/share.js:168 templates/installation.php:44 templates/login.php:35
-#: templates/verify.php:13
msgid "Password"
msgstr ""
@@ -552,10 +551,6 @@ msgstr ""
msgid "Log in"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr ""
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr ""
@@ -568,17 +563,3 @@ msgstr ""
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
msgstr ""
-
-#: templates/verify.php:5
-msgid "Security Warning!"
-msgstr ""
-
-#: templates/verify.php:6
-msgid ""
-"Please verify your password. <br/>For security reasons you may be "
-"occasionally asked to enter your password again."
-msgstr ""
-
-#: templates/verify.php:16
-msgid "Verify"
-msgstr ""
diff --git a/l10n/zu_ZA/files.po b/l10n/zu_ZA/files.po
index d9c0a65c13d..ceaf28a6991 100644
--- a/l10n/zu_ZA/files.po
+++ b/l10n/zu_ZA/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 23:04+0000\n"
+"POT-Creation-Date: 2013-01-20 00:05+0100\n"
+"PO-Revision-Date: 2013-01-19 23:05+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Zulu (South Africa) (http://www.transifex.com/projects/p/owncloud/language/zu_ZA/)\n"
"MIME-Version: 1.0\n"
@@ -17,6 +17,11 @@ msgstr ""
"Language: zu_ZA\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ajax/delete.php:28 ajax/getstoragestats.php:11 ajax/upload.php:17
+#: ajax/upload.php:76 templates/index.php:18
+msgid "Upload"
+msgstr ""
+
#: ajax/move.php:17
#, php-format
msgid "Could not move %s - File with this name already exists"
@@ -31,46 +36,46 @@ msgstr ""
msgid "Unable to rename file"
msgstr ""
-#: ajax/upload.php:14
+#: ajax/upload.php:20
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:30
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:31
msgid ""
"The uploaded file exceeds the upload_max_filesize directive in php.ini: "
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:33
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:35
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:36
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:37
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:38
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:45
+#: ajax/upload.php:57
msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:69
+#: ajax/upload.php:91
msgid "Invalid directory."
msgstr ""
@@ -126,98 +131,100 @@ msgstr ""
msgid "deleted {files}"
msgstr ""
-#: js/files.js:31
+#: js/files.js:48
msgid "'.' is an invalid file name."
msgstr ""
-#: js/files.js:36
+#: js/files.js:53
msgid "File name cannot be empty."
msgstr ""
-#: js/files.js:45
+#: js/files.js:62
msgid ""
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not "
"allowed."
msgstr ""
-#: js/files.js:186
-msgid "generating ZIP-file, it may take some time."
+#: js/files.js:204
+msgid ""
+"Your download is being prepared. This might take some time if the files are "
+"big."
msgstr ""
-#: js/files.js:224
+#: js/files.js:242
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:224
+#: js/files.js:242
msgid "Upload Error"
msgstr ""
-#: js/files.js:241
+#: js/files.js:259
msgid "Close"
msgstr ""
-#: js/files.js:260 js/files.js:376 js/files.js:409
+#: js/files.js:278 js/files.js:397 js/files.js:431
msgid "Pending"
msgstr ""
-#: js/files.js:280
+#: js/files.js:298
msgid "1 file uploading"
msgstr ""
-#: js/files.js:283 js/files.js:338 js/files.js:353
+#: js/files.js:301 js/files.js:357 js/files.js:372
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:357 js/files.js:393
+#: js/files.js:376 js/files.js:414
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:464
+#: js/files.js:486
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:537
+#: js/files.js:559
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:543
+#: js/files.js:565
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:727
+#: js/files.js:775
msgid "{count} files scanned"
msgstr ""
-#: js/files.js:735
+#: js/files.js:783
msgid "error while scanning"
msgstr ""
-#: js/files.js:808 templates/index.php:64
+#: js/files.js:857 templates/index.php:64
msgid "Name"
msgstr ""
-#: js/files.js:809 templates/index.php:75
+#: js/files.js:858 templates/index.php:75
msgid "Size"
msgstr ""
-#: js/files.js:810 templates/index.php:77
+#: js/files.js:859 templates/index.php:77
msgid "Modified"
msgstr ""
-#: js/files.js:829
+#: js/files.js:878
msgid "1 folder"
msgstr ""
-#: js/files.js:831
+#: js/files.js:880
msgid "{count} folders"
msgstr ""
-#: js/files.js:839
+#: js/files.js:888
msgid "1 file"
msgstr ""
-#: js/files.js:841
+#: js/files.js:890
msgid "{count} files"
msgstr ""
@@ -269,10 +276,6 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:18
-msgid "Upload"
-msgstr ""
-
#: templates/index.php:41
msgid "Cancel upload"
msgstr ""
diff --git a/l10n/zu_ZA/files_versions.po b/l10n/zu_ZA/files_versions.po
index 7bc842be419..190d72f8853 100644
--- a/l10n/zu_ZA/files_versions.po
+++ b/l10n/zu_ZA/files_versions.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-06 00:00+0100\n"
-"PO-Revision-Date: 2012-08-12 22:37+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Zulu (South Africa) (http://www.transifex.com/projects/p/owncloud/language/zu_ZA/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +17,10 @@ msgstr ""
"Language: zu_ZA\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: js/settings-personal.js:31 templates/settings-personal.php:10
-msgid "Expire all versions"
-msgstr ""
-
#: js/versions.js:16
msgid "History"
msgstr ""
-#: templates/settings-personal.php:4
-msgid "Versions"
-msgstr ""
-
-#: templates/settings-personal.php:7
-msgid "This will delete all existing backup versions of your files"
-msgstr ""
-
#: templates/settings.php:3
msgid "Files Versioning"
msgstr ""
diff --git a/l10n/zu_ZA/lib.po b/l10n/zu_ZA/lib.po
index 248d04871da..f463152bf30 100644
--- a/l10n/zu_ZA/lib.po
+++ b/l10n/zu_ZA/lib.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-11-16 00:02+0100\n"
-"PO-Revision-Date: 2012-11-14 23:13+0000\n"
+"POT-Creation-Date: 2013-01-17 00:26+0100\n"
+"PO-Revision-Date: 2013-01-16 23:26+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Zulu (South Africa) (http://www.transifex.com/projects/p/owncloud/language/zu_ZA/)\n"
"MIME-Version: 1.0\n"
@@ -17,51 +17,55 @@ msgstr ""
"Language: zu_ZA\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: app.php:285
+#: app.php:301
msgid "Help"
msgstr ""
-#: app.php:292
+#: app.php:308
msgid "Personal"
msgstr ""
-#: app.php:297
+#: app.php:313
msgid "Settings"
msgstr ""
-#: app.php:302
+#: app.php:318
msgid "Users"
msgstr ""
-#: app.php:309
+#: app.php:325
msgid "Apps"
msgstr ""
-#: app.php:311
+#: app.php:327
msgid "Admin"
msgstr ""
-#: files.php:332
+#: files.php:365
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:333
+#: files.php:366
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:333 files.php:358
+#: files.php:366 files.php:391
msgid "Back to Files"
msgstr ""
-#: files.php:357
+#: files.php:390
msgid "Selected files too large to generate zip file."
msgstr ""
+#: helper.php:228
+msgid "couldn't be determined"
+msgstr ""
+
#: json.php:28
msgid "Application is not enabled"
msgstr ""
-#: json.php:39 json.php:64 json.php:77 json.php:89
+#: json.php:39 json.php:62 json.php:73
msgid "Authentication error"
msgstr ""
@@ -81,55 +85,55 @@ msgstr ""
msgid "Images"
msgstr ""
-#: template.php:103
+#: template.php:113
msgid "seconds ago"
msgstr ""
-#: template.php:104
+#: template.php:114
msgid "1 minute ago"
msgstr ""
-#: template.php:105
+#: template.php:115
#, php-format
msgid "%d minutes ago"
msgstr ""
-#: template.php:106
+#: template.php:116
msgid "1 hour ago"
msgstr ""
-#: template.php:107
+#: template.php:117
#, php-format
msgid "%d hours ago"
msgstr ""
-#: template.php:108
+#: template.php:118
msgid "today"
msgstr ""
-#: template.php:109
+#: template.php:119
msgid "yesterday"
msgstr ""
-#: template.php:110
+#: template.php:120
#, php-format
msgid "%d days ago"
msgstr ""
-#: template.php:111
+#: template.php:121
msgid "last month"
msgstr ""
-#: template.php:112
+#: template.php:122
#, php-format
msgid "%d months ago"
msgstr ""
-#: template.php:113
+#: template.php:123
msgid "last year"
msgstr ""
-#: template.php:114
+#: template.php:124
msgid "years ago"
msgstr ""
diff --git a/l10n/zu_ZA/settings.po b/l10n/zu_ZA/settings.po
index c8c1d7fb260..723004ab1e7 100644
--- a/l10n/zu_ZA/settings.po
+++ b/l10n/zu_ZA/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-30 00:04+0100\n"
-"PO-Revision-Date: 2012-12-29 23:05+0000\n"
+"POT-Creation-Date: 2013-01-12 00:09+0100\n"
+"PO-Revision-Date: 2013-01-11 23:09+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Zulu (South Africa) (http://www.transifex.com/projects/p/owncloud/language/zu_ZA/)\n"
"MIME-Version: 1.0\n"
@@ -29,7 +29,7 @@ msgstr ""
msgid "Unable to add group"
msgstr ""
-#: ajax/enableapp.php:12
+#: ajax/enableapp.php:11
msgid "Could not enable app. "
msgstr ""
@@ -41,14 +41,6 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:13
-msgid "OpenID Changed"
-msgstr ""
-
-#: ajax/openid.php:15 ajax/setlanguage.php:17 ajax/setlanguage.php:20
-msgid "Invalid request"
-msgstr ""
-
#: ajax/removegroup.php:13
msgid "Unable to delete group"
msgstr ""
@@ -65,6 +57,10 @@ msgstr ""
msgid "Language changed"
msgstr ""
+#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
+msgid "Invalid request"
+msgstr ""
+
#: ajax/togglegroups.php:12
msgid "Admins can't remove themself from the admin group"
msgstr ""
diff --git a/l10n/zu_ZA/user_ldap.po b/l10n/zu_ZA/user_ldap.po
index 3add8a2631e..e02fa17c60c 100644
--- a/l10n/zu_ZA/user_ldap.po
+++ b/l10n/zu_ZA/user_ldap.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-15 00:11+0100\n"
-"PO-Revision-Date: 2012-12-14 23:11+0000\n"
+"POT-Creation-Date: 2013-01-16 00:19+0100\n"
+"PO-Revision-Date: 2013-01-15 23:20+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Zulu (South Africa) (http://www.transifex.com/projects/p/owncloud/language/zu_ZA/)\n"
"MIME-Version: 1.0\n"
@@ -26,8 +26,8 @@ msgstr ""
#: templates/settings.php:11
msgid ""
-"<b>Warning:</b> The PHP LDAP module needs is not installed, the backend will"
-" not work. Please ask your system administrator to install it."
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
+"work. Please ask your system administrator to install it."
msgstr ""
#: templates/settings.php:15
@@ -44,6 +44,10 @@ msgid "Base DN"
msgstr ""
#: templates/settings.php:16
+msgid "One Base DN per line"
+msgstr ""
+
+#: templates/settings.php:16
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
@@ -114,10 +118,18 @@ msgstr ""
msgid "Base User Tree"
msgstr ""
+#: templates/settings.php:25
+msgid "One User Base DN per line"
+msgstr ""
+
#: templates/settings.php:26
msgid "Base Group Tree"
msgstr ""
+#: templates/settings.php:26
+msgid "One Group Base DN per line"
+msgstr ""
+
#: templates/settings.php:27
msgid "Group-Member association"
msgstr ""
diff --git a/l10n/zu_ZA/user_webdavauth.po b/l10n/zu_ZA/user_webdavauth.po
index 3a53e0a85e8..012774040c7 100644
--- a/l10n/zu_ZA/user_webdavauth.po
+++ b/l10n/zu_ZA/user_webdavauth.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-20 00:11+0100\n"
-"PO-Revision-Date: 2012-12-19 23:12+0000\n"
+"POT-Creation-Date: 2013-01-15 00:03+0100\n"
+"PO-Revision-Date: 2013-01-14 23:04+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Zulu (South Africa) (http://www.transifex.com/projects/p/owncloud/language/zu_ZA/)\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,17 @@ msgstr ""
"Language: zu_ZA\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: templates/settings.php:3
+msgid "WebDAV Authentication"
+msgstr ""
+
#: templates/settings.php:4
msgid "URL: http://"
msgstr ""
#: templates/settings.php:6
msgid ""
-"ownCloud will send the user credentials to this URL is interpret http 401 "
-"and http 403 as credentials wrong and all other codes as credentials "
-"correct."
+"ownCloud will send the user credentials to this URL. This plugin checks the "
+"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
+"credentials, and all other responses as valid credentials."
msgstr ""
diff --git a/lib/MDB2/Driver/sqlite3.php b/lib/MDB2/Driver/sqlite3.php
index 9839dafbce1..8f057cfb6e8 100644
--- a/lib/MDB2/Driver/sqlite3.php
+++ b/lib/MDB2/Driver/sqlite3.php
@@ -98,7 +98,7 @@ class MDB2_Driver_sqlite3 extends MDB2_Driver_Common
if ($this->connection) {
$native_code = $this->connection->lastErrorCode();
}
- $native_msg = html_entity_decode($this->_lasterror);
+ $native_msg = html_entity_decode($this->_lasterror);
// PHP 5.2+ prepends the function name to $php_errormsg, so we need
// this hack to work around it, per bug #9599.
diff --git a/lib/api.php b/lib/api.php
index cb67e0c2a89..abf1c3b0036 100644
--- a/lib/api.php
+++ b/lib/api.php
@@ -42,12 +42,12 @@ class OC_API {
private static function init() {
self::$server = new OC_OAuth_Server(new OC_OAuth_Store());
}
-
+
/**
* api actions
*/
protected static $actions = array();
-
+
/**
* registers an api call
* @param string $method the http method
@@ -58,7 +58,7 @@ class OC_API {
* @param array $defaults
* @param array $requirements
*/
- public static function register($method, $url, $action, $app,
+ public static function register($method, $url, $action, $app,
$authLevel = OC_API::USER_AUTH,
$defaults = array(),
$requirements = array()) {
@@ -73,7 +73,7 @@ class OC_API {
}
self::$actions[$name] = array('app' => $app, 'action' => $action, 'authlevel' => $authLevel);
}
-
+
/**
* handles an api call
* @param array $parameters
@@ -90,10 +90,15 @@ class OC_API {
if(self::isAuthorised(self::$actions[$name])) {
if(is_callable(self::$actions[$name]['action'])) {
$response = call_user_func(self::$actions[$name]['action'], $parameters);
+ if(!($response instanceof OC_OCS_Result)) {
+ $response = new OC_OCS_Result(null, 996, 'Internal Server Error');
+ }
} else {
$response = new OC_OCS_Result(null, 998, 'Api method not found');
- }
+ }
} else {
+ header('WWW-Authenticate: Basic realm="Authorization Required"');
+ header('HTTP/1.0 401 Unauthorized');
$response = new OC_OCS_Result(null, 997, 'Unauthorised');
}
// Send the response
@@ -103,7 +108,7 @@ class OC_API {
// logout the user to be stateless
OC_User::logout();
}
-
+
/**
* authenticate the api call
* @param array $action the action details as supplied to OC_API::register()
@@ -127,8 +132,7 @@ class OC_API {
return false;
} else {
$subAdmin = OC_SubAdmin::isSubAdmin($user);
- $admin = OC_Group::inGroup($user, 'admin');
- if($subAdmin || $admin) {
+ if($subAdmin) {
return true;
} else {
return false;
@@ -141,7 +145,7 @@ class OC_API {
if(!$user) {
return false;
} else {
- return OC_Group::inGroup($user, 'admin');
+ return OC_User::isAdminUser($user);
}
break;
default:
@@ -149,18 +153,18 @@ class OC_API {
return false;
break;
}
- }
-
+ }
+
/**
* http basic auth
* @return string|false (username, or false on failure)
*/
- private static function loginUser(){
+ private static function loginUser(){
$authUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
$authPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
return OC_User::login($authUser, $authPw) ? $authUser : false;
}
-
+
/**
* respond to a call
* @param int|array $result the result from the api method
@@ -184,10 +188,13 @@ class OC_API {
private static function toXML($array, $writer) {
foreach($array as $k => $v) {
- if (is_numeric($k)) {
+ if ($k[0] === '@') {
+ $writer->writeAttribute(substr($k, 1), $v);
+ continue;
+ } else if (is_numeric($k)) {
$k = 'element';
}
- if (is_array($v)) {
+ if(is_array($v)) {
$writer->startElement($k);
self::toXML($v, $writer);
$writer->endElement();
@@ -196,5 +203,5 @@ class OC_API {
}
}
}
-
+
}
diff --git a/lib/app.php b/lib/app.php
index e60bce2a201..bf7eeef0181 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -36,6 +36,16 @@ class OC_App{
static private $appTypes = array();
static private $loadedApps = array();
static private $checkedApps = array();
+ static private $altLogin = array();
+
+ /**
+ * @brief clean the appid
+ * @param $app Appid that needs to be cleaned
+ * @return string
+ */
+ public static function cleanAppId($app) {
+ return str_replace(array('\0', '/', '\\', '..'), '', $app);
+ }
/**
* @brief loads all apps
@@ -63,17 +73,17 @@ class OC_App{
if (!defined('DEBUG') || !DEBUG) {
if (is_null($types)
- && empty(OC_Util::$core_scripts)
- && empty(OC_Util::$core_styles)) {
+ && empty(OC_Util::$core_scripts)
+ && empty(OC_Util::$core_styles)) {
OC_Util::$core_scripts = OC_Util::$scripts;
- OC_Util::$scripts = array();
- OC_Util::$core_styles = OC_Util::$styles;
- OC_Util::$styles = array();
- }
+ OC_Util::$scripts = array();
+ OC_Util::$core_styles = OC_Util::$styles;
+ OC_Util::$styles = array();
}
- // return
- return true;
}
+ // return
+ return true;
+}
/**
* load a single app
@@ -137,11 +147,13 @@ class OC_App{
OC_Appconfig::setValue($app, 'types', $appTypes);
}
-
+
/**
* check if app is shipped
* @param string $appid the id of the app to check
* @return bool
+ *
+ * Check if an app that is installed is a shipped app or installed from the appstore.
*/
public static function isShipped($appid){
$info = self::getAppInfo($appid);
@@ -177,7 +189,7 @@ class OC_App{
* This function checks whether or not an app is enabled.
*/
public static function isEnabled( $app ) {
- if( 'files'==$app or 'yes' == OC_Appconfig::getValue( $app, 'enabled' )) {
+ if( 'files'==$app or ('yes' == OC_Appconfig::getValue( $app, 'enabled' ))) {
return true;
}
@@ -197,9 +209,10 @@ class OC_App{
if(!is_numeric($app)) {
$app = OC_Installer::installShippedApp($app);
}else{
+ $appdata=OC_OCSClient::getApplication($app);
$download=OC_OCSClient::getApplicationDownload($app, 1);
if(isset($download['downloadlink']) and $download['downloadlink']!='') {
- $app=OC_Installer::installApp(array('source'=>'http', 'href'=>$download['downloadlink']));
+ $app=OC_Installer::installApp(array('source'=>'http', 'href'=>$download['downloadlink'],'appdata'=>$appdata));
}
}
}
@@ -212,6 +225,9 @@ class OC_App{
return false;
}else{
OC_Appconfig::setValue( $app, 'enabled', 'yes' );
+ if(isset($appdata['id'])) {
+ OC_Appconfig::setValue( $app, 'ocsid', $appdata['id'] );
+ }
return true;
}
}else{
@@ -227,8 +243,13 @@ class OC_App{
* This function set an app as disabled in appconfig.
*/
public static function disable( $app ) {
- // check if app is a shiped app or not. if not delete
+ // check if app is a shipped app or not. if not delete
OC_Appconfig::setValue( $app, 'enabled', 'no' );
+
+ // check if app is a shipped app or not. if not delete
+ if(!OC_App::isShipped( $app )){
+ OC_Installer::removeApp( $app );
+ }
}
/**
@@ -274,6 +295,23 @@ class OC_App{
}
/**
+ * @brief Get the navigation entries for the $app
+ * @param string $app app
+ * @return array of the $data added with addNavigationEntry
+ */
+ public static function getAppNavigationEntries($app) {
+ if(is_file(self::getAppPath($app).'/appinfo/app.php')) {
+ $save = self::$navigation;
+ self::$navigation = array();
+ require $app.'/appinfo/app.php';
+ $app_entries = self::$navigation;
+ self::$navigation = $save;
+ return $app_entries;
+ }
+ return array();
+ }
+
+ /**
* @brief gets the active Menu entry
* @return string id or empty string
*
@@ -299,7 +337,7 @@ class OC_App{
if(OC_Config::getValue('knowledgebaseenabled', true)==true) {
$settings = array(
array( "id" => "help", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_help" ), "name" => $l->t("Help"), "icon" => OC_Helper::imagePath( "settings", "help.svg" ))
- );
+ );
}
// if the user is logged-in
@@ -313,14 +351,14 @@ class OC_App{
$settings[]=array( "id" => "settings", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_settings" ), "name" => $l->t("Settings"), "icon" => OC_Helper::imagePath( "settings", "settings.svg" ));
//SubAdmins are also allowed to access user management
- if(OC_SubAdmin::isSubAdmin($_SESSION["user_id"]) || OC_Group::inGroup( $_SESSION["user_id"], "admin" )) {
+ if(OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
// admin users menu
$settings[] = array( "id" => "core_users", "order" => 2, "href" => OC_Helper::linkToRoute( "settings_users" ), "name" => $l->t("Users"), "icon" => OC_Helper::imagePath( "settings", "users.svg" ));
}
// if the user is an admin
- if(OC_Group::inGroup( $_SESSION["user_id"], "admin" )) {
+ if(OC_User::isAdminUser(OC_User::getUser())) {
// admin apps menu
$settings[] = array( "id" => "core_apps", "order" => 3, "href" => OC_Helper::linkToRoute( "settings_apps" ).'?installed', "name" => $l->t("Apps"), "icon" => OC_Helper::imagePath( "settings", "apps.svg" ));
@@ -495,7 +533,7 @@ class OC_App{
* @return string
*/
public static function getCurrentApp() {
- $script=substr($_SERVER["SCRIPT_NAME"], strlen(OC::$WEBROOT)+1);
+ $script=substr(OC_Request::scriptName(), strlen(OC::$WEBROOT)+1);
$topFolder=substr($script, 0, strpos($script, '/'));
if (empty($topFolder)) {
$path_info = OC_Request::getPathInfo();
@@ -519,16 +557,16 @@ class OC_App{
$forms=array();
switch($type) {
case 'settings':
- $source=self::$settingsForms;
- break;
+ $source=self::$settingsForms;
+ break;
case 'admin':
- $source=self::$adminForms;
- break;
+ $source=self::$adminForms;
+ break;
case 'personal':
- $source=self::$personalForms;
- break;
+ $source=self::$personalForms;
+ break;
default:
- return array();
+ return array();
}
foreach($source as $form) {
$forms[]=include $form;
@@ -557,6 +595,14 @@ class OC_App{
self::$personalForms[]= $app.'/'.$page.'.php';
}
+ public static function registerLogIn($entry) {
+ self::$altLogin[] = $entry;
+ }
+
+ public static function getAlternativeLogIns() {
+ return self::$altLogin;
+ }
+
/**
* @brief: get a list of all apps in the apps folder
* @return array or app names (string IDs)
@@ -589,14 +635,84 @@ class OC_App{
}
/**
+ * @brief: Lists all apps, this is used in apps.php
+ * @return array
+ */
+ public static function listAllApps() {
+ $installedApps = OC_App::getAllApps();
+
+ //TODO which apps do we want to blacklist and how do we integrate blacklisting with the multi apps folder feature?
+
+ $blacklist = array('files');//we dont want to show configuration for these
+ $appList = array();
+
+ foreach ( $installedApps as $app ) {
+ if ( array_search( $app, $blacklist ) === false ) {
+
+ $info=OC_App::getAppInfo($app);
+
+ if (!isset($info['name'])) {
+ OC_Log::write('core', 'App id "'.$app.'" has no name in appinfo', OC_Log::ERROR);
+ continue;
+ }
+
+ if ( OC_Appconfig::getValue( $app, 'enabled', 'no') == 'yes' ) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+
+ $info['active'] = $active;
+
+ if(isset($info['shipped']) and ($info['shipped']=='true')) {
+ $info['internal']=true;
+ $info['internallabel']='Internal App';
+ $info['internalclass']='';
+ $info['update']=false;
+ } else {
+ $info['internal']=false;
+ $info['internallabel']='3rd Party';
+ $info['internalclass']='externalapp';
+ $info['update']=OC_Installer::isUpdateAvailable($app);
+ }
+
+ $info['preview'] = OC_Helper::imagePath('settings', 'trans.png');
+ $info['version'] = OC_App::getAppVersion($app);
+ $appList[] = $info;
+ }
+ }
+ $remoteApps = OC_App::getAppstoreApps();
+ if ( $remoteApps ) {
+ // Remove duplicates
+ foreach ( $appList as $app ) {
+ foreach ( $remoteApps AS $key => $remote ) {
+ if (
+ $app['name'] == $remote['name']
+ // To set duplicate detection to use OCS ID instead of string name,
+ // enable this code, remove the line of code above,
+ // and add <ocs_id>[ID]</ocs_id> to info.xml of each 3rd party app:
+ // OR $app['ocs_id'] == $remote['ocs_id']
+ ) {
+ unset( $remoteApps[$key]);
+ }
+ }
+ }
+ $combinedApps = array_merge( $appList, $remoteApps );
+ } else {
+ $combinedApps = $appList;
+ }
+ return $combinedApps;
+}
+
+ /**
* @brief: get a list of all apps on apps.owncloud.com
* @return array, multi-dimensional array of apps. Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description
*/
public static function getAppstoreApps( $filter = 'approved' ) {
- $catagoryNames = OC_OCSClient::getCategories();
- if ( is_array( $catagoryNames ) ) {
+ $categoryNames = OC_OCSClient::getCategories();
+ if ( is_array( $categoryNames ) ) {
// Check that categories of apps were retrieved correctly
- if ( ! $categories = array_keys( $catagoryNames ) ) {
+ if ( ! $categories = array_keys( $categoryNames ) ) {
return false;
}
@@ -609,6 +725,15 @@ class OC_App{
$app1[$i]['author'] = $app['personid'];
$app1[$i]['ocs_id'] = $app['id'];
$app1[$i]['internal'] = $app1[$i]['active'] = 0;
+ $app1[$i]['update'] = false;
+ if($app['label']=='recommended'){
+ $app1[$i]['internallabel'] = 'Recommended';
+ $app1[$i]['internalclass'] = 'recommendedapp';
+ }else{
+ $app1[$i]['internallabel'] = '3rd Party';
+ $app1[$i]['internalclass'] = 'externalapp';
+ }
+
// rating img
if($app['score']>=0 and $app['score']<5) $img=OC_Helper::imagePath( "core", "rating/s1.png" );
@@ -737,18 +862,18 @@ class OC_App{
/**
* @param string $appid
- * @return OC_FilesystemView
+ * @return \OC\Files\View
*/
public static function getStorage($appid) {
if(OC_App::isEnabled($appid)) {//sanity check
if(OC_User::isLoggedIn()) {
- $view = new OC_FilesystemView('/'.OC_User::getUser());
+ $view = new \OC\Files\View('/'.OC_User::getUser());
if(!$view->file_exists($appid)) {
$view->mkdir($appid);
}
- return new OC_FilesystemView('/'.OC_User::getUser().'/'.$appid);
+ return new \OC\Files\View('/'.OC_User::getUser().'/'.$appid);
}else{
- OC_Log::write('core', 'Can\'t get app storage, app, user not logged in', OC_Log::ERROR);
+ OC_Log::write('core', 'Can\'t get app storage, app '.$appid.', user not logged in', OC_Log::ERROR);
return false;
}
}else{
diff --git a/lib/archive/tar.php b/lib/archive/tar.php
index 0fa633c6038..e7c81389619 100644
--- a/lib/archive/tar.php
+++ b/lib/archive/tar.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-require_once 'Archive/Tar.php';
+require_once OC::$THIRDPARTYROOT . '/3rdparty/Archive/Tar.php';
class OC_Archive_TAR extends OC_Archive{
const PLAIN=0;
@@ -308,7 +308,7 @@ class OC_Archive_TAR extends OC_Archive{
if($mode=='r' or $mode=='rb') {
return fopen($tmpFile, $mode);
}else{
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
self::$tempFiles[$tmpFile]=$path;
return fopen('close://'.$tmpFile, $mode);
}
diff --git a/lib/archive/zip.php b/lib/archive/zip.php
index 1c967baa08f..8e31795ded1 100644
--- a/lib/archive/zip.php
+++ b/lib/archive/zip.php
@@ -171,7 +171,7 @@ class OC_Archive_ZIP extends OC_Archive{
$ext='';
}
$tmpFile=OCP\Files::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if($this->fileExists($path)) {
$this->extractFile($path, $tmpFile);
}
diff --git a/lib/backgroundjob.php b/lib/backgroundjob.php
index 28b5ce3af20..9619dcb732c 100644
--- a/lib/backgroundjob.php
+++ b/lib/backgroundjob.php
@@ -34,7 +34,7 @@ class OC_BackgroundJob{
public static function getExecutionType() {
return OC_Appconfig::getValue( 'core', 'backgroundjobs_mode', 'ajax' );
}
-
+
/**
* @brief sets the background jobs execution type
* @param $type execution type
diff --git a/lib/base.php b/lib/base.php
index 3d3e7d59f90..c60a97100f4 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -27,171 +27,179 @@ require_once 'public/constants.php';
* No, we can not put this class in its own file because it is used by
* OC_autoload!
*/
-class OC
-{
- /**
- * Assoziative array for autoloading. classname => filename
- */
- public static $CLASSPATH = array();
- /**
- * The installation path for owncloud on the server (e.g. /srv/http/owncloud)
- */
- public static $SERVERROOT = '';
- /**
- * the current request path relative to the owncloud root (e.g. files/index.php)
- */
- private static $SUBURI = '';
- /**
- * the owncloud root path for http requests (e.g. owncloud/)
- */
- public static $WEBROOT = '';
- /**
- * The installation path of the 3rdparty folder on the server (e.g. /srv/http/owncloud/3rdparty)
- */
- public static $THIRDPARTYROOT = '';
- /**
- * the root path of the 3rdparty folder for http requests (e.g. owncloud/3rdparty)
- */
- public static $THIRDPARTYWEBROOT = '';
- /**
- * The installation path array of the apps folder on the server (e.g. /srv/http/owncloud) 'path' and
- * web path in 'url'
- */
- public static $APPSROOTS = array();
- /*
- * requested app
- */
- public static $REQUESTEDAPP = '';
- /*
- * requested file of app
- */
- public static $REQUESTEDFILE = '';
- /**
- * check if owncloud runs in cli mode
- */
- public static $CLI = false;
- /*
- * OC router
- */
- protected static $router = null;
-
- /**
- * SPL autoload
- */
- public static function autoload($className)
- {
- if (array_key_exists($className, OC::$CLASSPATH)) {
- $path = OC::$CLASSPATH[$className];
- /** @TODO: Remove this when necessary
- Remove "apps/" from inclusion path for smooth migration to mutli app dir
- */
- if (strpos($path, 'apps/') === 0) {
- OC_Log::write('core', 'include path for class "' . $className . '" starts with "apps/"', OC_Log::DEBUG);
- $path = str_replace('apps/', '', $path);
- }
- } elseif (strpos($className, 'OC_') === 0) {
- $path = strtolower(str_replace('_', '/', substr($className, 3)) . '.php');
- } elseif (strpos($className, 'OC\\') === 0) {
- $path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
- } elseif (strpos($className, 'OCP\\') === 0) {
- $path = 'public/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
- } elseif (strpos($className, 'OCA\\') === 0) {
- $path = 'apps/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
- } elseif (strpos($className, 'Sabre_') === 0) {
- $path = str_replace('_', '/', $className) . '.php';
- } elseif (strpos($className, 'Symfony\\Component\\Routing\\') === 0) {
- $path = 'symfony/routing/' . str_replace('\\', '/', $className) . '.php';
- } elseif (strpos($className, 'Sabre\\VObject') === 0) {
- $path = str_replace('\\', '/', $className) . '.php';
- } elseif (strpos($className, 'Test_') === 0) {
- $path = 'tests/lib/' . strtolower(str_replace('_', '/', substr($className, 5)) . '.php');
- } else {
- return false;
- }
-
- if ($fullPath = stream_resolve_include_path($path)) {
- require_once $fullPath;
- }
- return false;
- }
-
- public static function initPaths()
- {
- // calculate the root directories
- OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4));
- OC::$SUBURI = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(OC::$SERVERROOT)));
- $scriptName = $_SERVER["SCRIPT_NAME"];
- if (substr($scriptName, -1) == '/') {
- $scriptName .= 'index.php';
- //make sure suburi follows the same rules as scriptName
- if (substr(OC::$SUBURI, -9) != 'index.php') {
- if (substr(OC::$SUBURI, -1) != '/') {
- OC::$SUBURI = OC::$SUBURI . '/';
- }
- OC::$SUBURI = OC::$SUBURI . 'index.php';
- }
- }
-
- OC::$WEBROOT = substr($scriptName, 0, strlen($scriptName) - strlen(OC::$SUBURI));
-
- if (OC::$WEBROOT != '' and OC::$WEBROOT[0] !== '/') {
- OC::$WEBROOT = '/' . OC::$WEBROOT;
- }
-
- // ensure we can find OC_Config
- set_include_path(
- OC::$SERVERROOT . '/lib' . PATH_SEPARATOR .
- get_include_path()
- );
-
- // search the 3rdparty folder
- if (OC_Config::getValue('3rdpartyroot', '') <> '' and OC_Config::getValue('3rdpartyurl', '') <> '') {
- OC::$THIRDPARTYROOT = OC_Config::getValue('3rdpartyroot', '');
- OC::$THIRDPARTYWEBROOT = OC_Config::getValue('3rdpartyurl', '');
- } elseif (file_exists(OC::$SERVERROOT . '/3rdparty')) {
- OC::$THIRDPARTYROOT = OC::$SERVERROOT;
- OC::$THIRDPARTYWEBROOT = OC::$WEBROOT;
- } elseif (file_exists(OC::$SERVERROOT . '/../3rdparty')) {
- OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/');
- OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/');
- } else {
- echo("3rdparty directory not found! Please put the ownCloud 3rdparty folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file.");
- exit;
- }
- // search the apps folder
- $config_paths = OC_Config::getValue('apps_paths', array());
- if (!empty($config_paths)) {
- foreach ($config_paths as $paths) {
- if (isset($paths['url']) && isset($paths['path'])) {
- $paths['url'] = rtrim($paths['url'], '/');
- $paths['path'] = rtrim($paths['path'], '/');
- OC::$APPSROOTS[] = $paths;
- }
- }
- } elseif (file_exists(OC::$SERVERROOT . '/apps')) {
- OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true);
- } elseif (file_exists(OC::$SERVERROOT . '/../apps')) {
- OC::$APPSROOTS[] = array('path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps', 'url' => '/apps', 'writable' => true);
- }
-
- if (empty(OC::$APPSROOTS)) {
- echo("apps directory not found! Please put the ownCloud apps folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file.");
- exit;
- }
- $paths = array();
- foreach (OC::$APPSROOTS as $path)
- $paths[] = $path['path'];
-
- // set the right include path
- set_include_path(
- OC::$SERVERROOT . '/lib' . PATH_SEPARATOR .
- OC::$SERVERROOT . '/config' . PATH_SEPARATOR .
- OC::$THIRDPARTYROOT . '/3rdparty' . PATH_SEPARATOR .
- implode($paths, PATH_SEPARATOR) . PATH_SEPARATOR .
- get_include_path() . PATH_SEPARATOR .
- OC::$SERVERROOT
- );
- }
+class OC {
+ /**
+ * Associative array for autoloading. classname => filename
+ */
+ public static $CLASSPATH = array();
+ /**
+ * The installation path for owncloud on the server (e.g. /srv/http/owncloud)
+ */
+ public static $SERVERROOT = '';
+ /**
+ * the current request path relative to the owncloud root (e.g. files/index.php)
+ */
+ private static $SUBURI = '';
+ /**
+ * the owncloud root path for http requests (e.g. owncloud/)
+ */
+ public static $WEBROOT = '';
+ /**
+ * The installation path of the 3rdparty folder on the server (e.g. /srv/http/owncloud/3rdparty)
+ */
+ public static $THIRDPARTYROOT = '';
+ /**
+ * the root path of the 3rdparty folder for http requests (e.g. owncloud/3rdparty)
+ */
+ public static $THIRDPARTYWEBROOT = '';
+ /**
+ * The installation path array of the apps folder on the server (e.g. /srv/http/owncloud) 'path' and
+ * web path in 'url'
+ */
+ public static $APPSROOTS = array();
+ /*
+ * requested app
+ */
+ public static $REQUESTEDAPP = '';
+ /*
+ * requested file of app
+ */
+ public static $REQUESTEDFILE = '';
+ /**
+ * check if owncloud runs in cli mode
+ */
+ public static $CLI = false;
+ /*
+ * OC router
+ */
+ protected static $router = null;
+
+ /**
+ * SPL autoload
+ */
+ public static function autoload($className) {
+ if (array_key_exists($className, OC::$CLASSPATH)) {
+ $path = OC::$CLASSPATH[$className];
+ /** @TODO: Remove this when necessary
+ Remove "apps/" from inclusion path for smooth migration to mutli app dir
+ */
+ if (strpos($path, 'apps/') === 0) {
+ OC_Log::write('core', 'include path for class "' . $className . '" starts with "apps/"', OC_Log::DEBUG);
+ $path = str_replace('apps/', '', $path);
+ }
+ } elseif (strpos($className, 'OC_') === 0) {
+ $path = strtolower(str_replace('_', '/', substr($className, 3)) . '.php');
+ } elseif (strpos($className, 'OC\\') === 0) {
+ $path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
+ } elseif (strpos($className, 'OCP\\') === 0) {
+ $path = 'public/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
+ } elseif (strpos($className, 'OCA\\') === 0) {
+ foreach (self::$APPSROOTS as $appDir) {
+ $path = $appDir['path'] . '/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
+ $fullPath = stream_resolve_include_path($path);
+ if (file_exists($fullPath)) {
+ require_once $fullPath;
+ return false;
+ }
+ }
+ } elseif (strpos($className, 'Sabre_') === 0) {
+ $path = str_replace('_', '/', $className) . '.php';
+ } elseif (strpos($className, 'Symfony\\Component\\Routing\\') === 0) {
+ $path = 'symfony/routing/' . str_replace('\\', '/', $className) . '.php';
+ } elseif (strpos($className, 'Sabre\\VObject') === 0) {
+ $path = str_replace('\\', '/', $className) . '.php';
+ } elseif (strpos($className, 'Test_') === 0) {
+ $path = 'tests/lib/' . strtolower(str_replace('_', '/', substr($className, 5)) . '.php');
+ } elseif (strpos($className, 'Test\\') === 0) {
+ $path = 'tests/lib/' . strtolower(str_replace('\\', '/', substr($className, 5)) . '.php');
+ } else {
+ return false;
+ }
+
+ if ($fullPath = stream_resolve_include_path($path)) {
+ require_once $fullPath;
+ }
+ return false;
+ }
+
+ public static function initPaths() {
+ // calculate the root directories
+ OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4));
+
+ // ensure we can find OC_Config
+ set_include_path(
+ OC::$SERVERROOT . '/lib' . PATH_SEPARATOR .
+ get_include_path()
+ );
+
+ OC::$SUBURI = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(OC::$SERVERROOT)));
+ $scriptName = OC_Request::scriptName();
+ if (substr($scriptName, -1) == '/') {
+ $scriptName .= 'index.php';
+ //make sure suburi follows the same rules as scriptName
+ if (substr(OC::$SUBURI, -9) != 'index.php') {
+ if (substr(OC::$SUBURI, -1) != '/') {
+ OC::$SUBURI = OC::$SUBURI . '/';
+ }
+ OC::$SUBURI = OC::$SUBURI . 'index.php';
+ }
+ }
+
+ OC::$WEBROOT = substr($scriptName, 0, strlen($scriptName) - strlen(OC::$SUBURI));
+
+ if (OC::$WEBROOT != '' and OC::$WEBROOT[0] !== '/') {
+ OC::$WEBROOT = '/' . OC::$WEBROOT;
+ }
+
+ // search the 3rdparty folder
+ if (OC_Config::getValue('3rdpartyroot', '') <> '' and OC_Config::getValue('3rdpartyurl', '') <> '') {
+ OC::$THIRDPARTYROOT = OC_Config::getValue('3rdpartyroot', '');
+ OC::$THIRDPARTYWEBROOT = OC_Config::getValue('3rdpartyurl', '');
+ } elseif (file_exists(OC::$SERVERROOT . '/3rdparty')) {
+ OC::$THIRDPARTYROOT = OC::$SERVERROOT;
+ OC::$THIRDPARTYWEBROOT = OC::$WEBROOT;
+ } elseif (file_exists(OC::$SERVERROOT . '/../3rdparty')) {
+ OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/');
+ OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/');
+ } else {
+ echo("3rdparty directory not found! Please put the ownCloud 3rdparty folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file.");
+ exit;
+ }
+ // search the apps folder
+ $config_paths = OC_Config::getValue('apps_paths', array());
+ if (!empty($config_paths)) {
+ foreach ($config_paths as $paths) {
+ if (isset($paths['url']) && isset($paths['path'])) {
+ $paths['url'] = rtrim($paths['url'], '/');
+ $paths['path'] = rtrim($paths['path'], '/');
+ OC::$APPSROOTS[] = $paths;
+ }
+ }
+ } elseif (file_exists(OC::$SERVERROOT . '/apps')) {
+ OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true);
+ } elseif (file_exists(OC::$SERVERROOT . '/../apps')) {
+ OC::$APPSROOTS[] = array('path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps', 'url' => '/apps', 'writable' => true);
+ }
+
+ if (empty(OC::$APPSROOTS)) {
+ echo("apps directory not found! Please put the ownCloud apps folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file.");
+ exit;
+ }
+ $paths = array();
+ foreach (OC::$APPSROOTS as $path) {
+ $paths[] = $path['path'];
+ }
+
+ // set the right include path
+ set_include_path(
+ OC::$SERVERROOT . '/lib' . PATH_SEPARATOR .
+ OC::$SERVERROOT . '/config' . PATH_SEPARATOR .
+ OC::$THIRDPARTYROOT . '/3rdparty' . PATH_SEPARATOR .
+ implode($paths, PATH_SEPARATOR) . PATH_SEPARATOR .
+ get_include_path() . PATH_SEPARATOR .
+ OC::$SERVERROOT
+ );
+ }
public static function checkConfig() {
if (file_exists(OC::$SERVERROOT . "/config/config.php") and !is_writable(OC::$SERVERROOT . "/config/config.php")) {
@@ -202,35 +210,39 @@ class OC
}
}
- public static function checkInstalled()
- {
- // Redirect to installer if not installed
- if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') {
- if (!OC::$CLI) {
- $url = 'http://' . $_SERVER['SERVER_NAME'] . OC::$WEBROOT . '/index.php';
- header("Location: $url");
- }
- exit();
- }
- }
-
- public static function checkSSL()
- {
- // redirect to https site if configured
- if (OC_Config::getValue("forcessl", false)) {
- header('Strict-Transport-Security: max-age=31536000');
- ini_set("session.cookie_secure", "on");
- if (OC_Request::serverProtocol() <> 'https' and !OC::$CLI) {
- $url = "https://" . OC_Request::serverHost() . $_SERVER['REQUEST_URI'];
- header("Location: $url");
- exit();
- }
- }
- }
+ public static function checkInstalled() {
+ // Redirect to installer if not installed
+ if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') {
+ if (!OC::$CLI) {
+ $url = 'http://' . $_SERVER['SERVER_NAME'] . OC::$WEBROOT . '/index.php';
+ header("Location: $url");
+ }
+ exit();
+ }
+ }
+
+ public static function checkSSL() {
+ // redirect to https site if configured
+ if (OC_Config::getValue("forcessl", false)) {
+ header('Strict-Transport-Security: max-age=31536000');
+ ini_set("session.cookie_secure", "on");
+ if (OC_Request::serverProtocol() <> 'https' and !OC::$CLI) {
+ $url = "https://" . OC_Request::serverHost() . OC_Request::requestUri();
+ header("Location: $url");
+ exit();
+ }
+ }
+ }
public static function checkMaintenanceMode() {
// Allow ajax update script to execute without being stopped
if (OC_Config::getValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') {
+ // send http status 503
+ header('HTTP/1.1 503 Service Temporarily Unavailable');
+ header('Status: 503 Service Temporarily Unavailable');
+ header('Retry-After: 120');
+
+ // render error page
$tmpl = new OC_Template('', 'error', 'guest');
$tmpl->assign('errors', array(1 => array('error' => 'ownCloud is in maintenance mode')));
$tmpl->printPage();
@@ -246,6 +258,7 @@ class OC
if ($showTemplate && !OC_Config::getValue('maintenance', false)) {
OC_Config::setValue('maintenance', true);
OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::DEBUG);
+ OC_Util::addscript('update');
$tmpl = new OC_Template('', 'update', 'guest');
$tmpl->assign('version', OC_Util::getVersionString());
$tmpl->printPage();
@@ -258,504 +271,518 @@ class OC
}
}
- public static function initTemplateEngine()
- {
- // Add the stuff we need always
- OC_Util::addScript("jquery-1.7.2.min");
- OC_Util::addScript("jquery-ui-1.8.16.custom.min");
- OC_Util::addScript("jquery-showpassword");
- OC_Util::addScript("jquery.infieldlabel");
- OC_Util::addScript("jquery-tipsy");
- OC_Util::addScript("oc-dialogs");
- OC_Util::addScript("js");
- OC_Util::addScript("eventsource");
- OC_Util::addScript("config");
- //OC_Util::addScript( "multiselect" );
- OC_Util::addScript('search', 'result');
- OC_Util::addScript('router');
-
- OC_Util::addStyle("styles");
- OC_Util::addStyle("multiselect");
- OC_Util::addStyle("jquery-ui-1.8.16.custom");
- OC_Util::addStyle("jquery-tipsy");
- }
-
- public static function initSession()
- {
- // prevents javascript from accessing php session cookies
- ini_set('session.cookie_httponly', '1;');
-
- // set the session name to the instance id - which is unique
- session_name(OC_Util::getInstanceId());
-
- // (re)-initialize session
- session_start();
-
- // regenerate session id periodically to avoid session fixation
- if (!isset($_SESSION['SID_CREATED'])) {
- $_SESSION['SID_CREATED'] = time();
- } else if (time() - $_SESSION['SID_CREATED'] > 900) {
- session_regenerate_id(true);
- $_SESSION['SID_CREATED'] = time();
- }
-
- // session timeout
- if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 3600)) {
- if (isset($_COOKIE[session_name()])) {
- setcookie(session_name(), '', time() - 42000, '/');
- }
- session_unset();
- session_destroy();
- session_start();
- }
- $_SESSION['LAST_ACTIVITY'] = time();
- }
-
- public static function getRouter()
- {
- if (!isset(OC::$router)) {
- OC::$router = new OC_Router();
- OC::$router->loadRoutes();
- }
-
- return OC::$router;
- }
-
- public static function init()
- {
- // register autoloader
- spl_autoload_register(array('OC', 'autoload'));
- setlocale(LC_ALL, 'en_US.UTF-8');
-
- // set some stuff
- //ob_start();
- error_reporting(E_ALL | E_STRICT);
- if (defined('DEBUG') && DEBUG) {
- ini_set('display_errors', 1);
- }
- self::$CLI = (php_sapi_name() == 'cli');
-
- date_default_timezone_set('UTC');
- ini_set('arg_separator.output', '&amp;');
-
- // try to switch magic quotes off.
- if (get_magic_quotes_gpc()) {
- @set_magic_quotes_runtime(false);
- }
-
- //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
-
- //try to set the maximum execution time to 60min
- @set_time_limit(3600);
- @ini_set('max_execution_time', 3600);
- @ini_set('max_input_time', 3600);
-
- //try to set the maximum filesize to 10G
- @ini_set('upload_max_filesize', '10G');
- @ini_set('post_max_size', '10G');
- @ini_set('file_uploads', '50');
-
- //try to set the session lifetime to 60min
- @ini_set('gc_maxlifetime', '3600');
-
- //copy http auth headers for apache+php-fcgid work around
- if (isset($_SERVER['HTTP_XAUTHORIZATION']) && !isset($_SERVER['HTTP_AUTHORIZATION'])) {
- $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_XAUTHORIZATION'];
- }
-
- //set http auth headers for apache+php-cgi work around
- if (isset($_SERVER['HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
- list($name, $password) = explode(':', base64_decode($matches[1]), 2);
- $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
- $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
- }
-
- //set http auth headers for apache+php-cgi work around if variable gets renamed by apache
- if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)) {
- list($name, $password) = explode(':', base64_decode($matches[1]), 2);
- $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
- $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
- }
-
- self::initPaths();
-
- register_shutdown_function(array('OC_Log', 'onShutdown'));
- set_error_handler(array('OC_Log', 'onError'));
- set_exception_handler(array('OC_Log', 'onException'));
-
- // set debug mode if an xdebug session is active
- if (!defined('DEBUG') || !DEBUG) {
- if (isset($_COOKIE['XDEBUG_SESSION'])) {
- define('DEBUG', true);
- }
- }
-
- // register the stream wrappers
- require_once 'streamwrappers.php';
- stream_wrapper_register("fakedir", "OC_FakeDirStream");
- stream_wrapper_register('static', 'OC_StaticStreamWrapper');
- stream_wrapper_register('close', 'OC_CloseStreamWrapper');
-
- self::checkConfig();
- self::checkInstalled();
- self::checkSSL();
- self::initSession();
- self::initTemplateEngine();
- self::checkMaintenanceMode();
- self::checkUpgrade();
-
- $errors = OC_Util::checkServer();
- if (count($errors) > 0) {
- OC_Template::printGuestPage('', 'error', array('errors' => $errors));
- exit;
- }
-
- // User and Groups
- if (!OC_Config::getValue("installed", false)) {
- $_SESSION['user_id'] = '';
- }
-
- OC_User::useBackend(new OC_User_Database());
- OC_Group::useBackend(new OC_Group_Database());
-
- if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id']) && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) {
- OC_User::logout();
- }
-
- // Load Apps
- // This includes plugins for users and filesystems as well
- global $RUNTIME_NOAPPS;
- global $RUNTIME_APPTYPES;
- if (!$RUNTIME_NOAPPS) {
- if ($RUNTIME_APPTYPES) {
- OC_App::loadApps($RUNTIME_APPTYPES);
- } else {
- OC_App::loadApps();
- }
- }
-
- //setup extra user backends
- OC_User::setupBackends();
-
- self::registerCacheHooks();
- self::registerFilesystemHooks();
- self::registerShareHooks();
-
- //make sure temporary files are cleaned up
- register_shutdown_function(array('OC_Helper', 'cleanTmp'));
-
- //parse the given parameters
- self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app']) ? str_replace(array('\0', '/', '\\', '..'), '', strip_tags($_GET['app'])) : OC_Config::getValue('defaultapp', 'files'));
- if (substr_count(self::$REQUESTEDAPP, '?') != 0) {
- $app = substr(self::$REQUESTEDAPP, 0, strpos(self::$REQUESTEDAPP, '?'));
- $param = substr($_GET['app'], strpos($_GET['app'], '?') + 1);
- parse_str($param, $get);
- $_GET = array_merge($_GET, $get);
- self::$REQUESTEDAPP = $app;
- $_GET['app'] = $app;
- }
- self::$REQUESTEDFILE = (isset($_GET['getfile']) ? $_GET['getfile'] : null);
- if (substr_count(self::$REQUESTEDFILE, '?') != 0) {
- $file = substr(self::$REQUESTEDFILE, 0, strpos(self::$REQUESTEDFILE, '?'));
- $param = substr(self::$REQUESTEDFILE, strpos(self::$REQUESTEDFILE, '?') + 1);
- parse_str($param, $get);
- $_GET = array_merge($_GET, $get);
- self::$REQUESTEDFILE = $file;
- $_GET['getfile'] = $file;
- }
- if (!is_null(self::$REQUESTEDFILE)) {
- $subdir = OC_App::getAppPath(OC::$REQUESTEDAPP) . '/' . self::$REQUESTEDFILE;
- $parent = OC_App::getAppPath(OC::$REQUESTEDAPP);
- if (!OC_Helper::issubdirectory($subdir, $parent)) {
- self::$REQUESTEDFILE = null;
- header('HTTP/1.0 404 Not Found');
- exit;
- }
- }
-
- // write error into log if locale can't be set
- if (OC_Util::issetlocaleworking() == false) {
- OC_Log::write('core', 'setting locate to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR);
- }
- if (OC_Config::getValue('installed', false)) {
- if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
- OC_Util::addScript('backgroundjobs');
+ public static function initTemplateEngine() {
+ // Add the stuff we need always
+ OC_Util::addScript("jquery-1.7.2.min");
+ OC_Util::addScript("jquery-ui-1.10.0.custom");
+ OC_Util::addScript("jquery-showpassword");
+ OC_Util::addScript("jquery.infieldlabel");
+ OC_Util::addScript("jquery-tipsy");
+ OC_Util::addScript("oc-dialogs");
+ OC_Util::addScript("js");
+ OC_Util::addScript("eventsource");
+ OC_Util::addScript("config");
+ //OC_Util::addScript( "multiselect" );
+ OC_Util::addScript('search', 'result');
+ OC_Util::addScript('router');
+
+ OC_Util::addStyle("styles");
+ OC_Util::addStyle("multiselect");
+ OC_Util::addStyle("jquery-ui-1.10.0.custom");
+ OC_Util::addStyle("jquery-tipsy");
+ OC_Util::addScript("oc-requesttoken");
+ }
+
+ public static function initSession() {
+ // prevents javascript from accessing php session cookies
+ ini_set('session.cookie_httponly', '1;');
+
+ // set the session name to the instance id - which is unique
+ session_name(OC_Util::getInstanceId());
+
+ // (re)-initialize session
+ session_start();
+
+ // regenerate session id periodically to avoid session fixation
+ if (!isset($_SESSION['SID_CREATED'])) {
+ $_SESSION['SID_CREATED'] = time();
+ } else if (time() - $_SESSION['SID_CREATED'] > 900) {
+ session_regenerate_id(true);
+ $_SESSION['SID_CREATED'] = time();
+ }
+
+ // session timeout
+ if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 3600)) {
+ if (isset($_COOKIE[session_name()])) {
+ setcookie(session_name(), '', time() - 42000, '/');
+ }
+ session_unset();
+ session_destroy();
+ session_start();
+ }
+ $_SESSION['LAST_ACTIVITY'] = time();
+ }
+
+ public static function getRouter() {
+ if (!isset(OC::$router)) {
+ OC::$router = new OC_Router();
+ OC::$router->loadRoutes();
+ }
+
+ return OC::$router;
+ }
+
+
+ public static function loadAppClassPaths() {
+ foreach (OC_APP::getEnabledApps() as $app) {
+ $file = OC_App::getAppPath($app) . '/appinfo/classpath.php';
+ if (file_exists($file)) {
+ require_once $file;
+ }
+ }
+ }
+
+
+ public static function init() {
+ // register autoloader
+ spl_autoload_register(array('OC', 'autoload'));
+ OC_Util::issetlocaleworking();
+
+ // set some stuff
+ //ob_start();
+ error_reporting(E_ALL | E_STRICT);
+ if (defined('DEBUG') && DEBUG) {
+ ini_set('display_errors', 1);
+ }
+ self::$CLI = (php_sapi_name() == 'cli');
+
+ date_default_timezone_set('UTC');
+ ini_set('arg_separator.output', '&amp;');
+
+ // try to switch magic quotes off.
+ if (get_magic_quotes_gpc()) {
+ @set_magic_quotes_runtime(false);
+ }
+
+ //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
+
+ //try to set the maximum execution time to 60min
+ @set_time_limit(3600);
+ @ini_set('max_execution_time', 3600);
+ @ini_set('max_input_time', 3600);
+
+ //try to set the maximum filesize to 10G
+ @ini_set('upload_max_filesize', '10G');
+ @ini_set('post_max_size', '10G');
+ @ini_set('file_uploads', '50');
+
+ //try to set the session lifetime to 60min
+ @ini_set('gc_maxlifetime', '3600');
+
+ //copy http auth headers for apache+php-fcgid work around
+ if (isset($_SERVER['HTTP_XAUTHORIZATION']) && !isset($_SERVER['HTTP_AUTHORIZATION'])) {
+ $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_XAUTHORIZATION'];
+ }
+
+ //set http auth headers for apache+php-cgi work around
+ if (isset($_SERVER['HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
+ list($name, $password) = explode(':', base64_decode($matches[1]), 2);
+ $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
+ $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
+ }
+
+ //set http auth headers for apache+php-cgi work around if variable gets renamed by apache
+ if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)) {
+ list($name, $password) = explode(':', base64_decode($matches[1]), 2);
+ $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
+ $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
+ }
+
+ self::initPaths();
+
+ if (!defined('PHPUNIT_RUN')) {
+ register_shutdown_function(array('OC_Log', 'onShutdown'));
+ set_error_handler(array('OC_Log', 'onError'));
+ set_exception_handler(array('OC_Log', 'onException'));
+ }
+
+ // set debug mode if an xdebug session is active
+ if (!defined('DEBUG') || !DEBUG) {
+ if (isset($_COOKIE['XDEBUG_SESSION'])) {
+ define('DEBUG', true);
+ }
+ }
+
+ // register the stream wrappers
+ stream_wrapper_register('fakedir', 'OC\Files\Stream\Dir');
+ stream_wrapper_register('static', 'OC\Files\Stream\StaticStream');
+ stream_wrapper_register('close', 'OC\Files\Stream\Close');
+ stream_wrapper_register('oc', 'OC\Files\Stream\OC');
+
+ self::checkConfig();
+ self::checkInstalled();
+ self::checkSSL();
+ self::initSession();
+ self::initTemplateEngine();
+
+ $errors = OC_Util::checkServer();
+ if (count($errors) > 0) {
+ OC_Template::printGuestPage('', 'error', array('errors' => $errors));
+ exit;
+ }
+
+ // User and Groups
+ if (!OC_Config::getValue("installed", false)) {
+ $_SESSION['user_id'] = '';
+ }
+
+ OC_User::useBackend(new OC_User_Database());
+ OC_Group::useBackend(new OC_Group_Database());
+
+ if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id']) && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) {
+ OC_User::logout();
+ }
+
+ // Load Apps
+ // This includes plugins for users and filesystems as well
+ global $RUNTIME_NOAPPS;
+ global $RUNTIME_APPTYPES;
+ if (!$RUNTIME_NOAPPS) {
+ if ($RUNTIME_APPTYPES) {
+ OC_App::loadApps($RUNTIME_APPTYPES);
+ } else {
+ OC_App::loadApps();
+ }
+ }
+
+ //setup extra user backends
+ OC_User::setupBackends();
+
+ self::registerCacheHooks();
+ self::registerFilesystemHooks();
+ self::registerShareHooks();
+
+ //make sure temporary files are cleaned up
+ register_shutdown_function(array('OC_Helper', 'cleanTmp'));
+
+ //parse the given parameters
+ self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app']) ? OC_App::cleanAppId(strip_tags($_GET['app'])) : OC_Config::getValue('defaultapp', 'files'));
+ if (substr_count(self::$REQUESTEDAPP, '?') != 0) {
+ $app = substr(self::$REQUESTEDAPP, 0, strpos(self::$REQUESTEDAPP, '?'));
+ $param = substr($_GET['app'], strpos($_GET['app'], '?') + 1);
+ parse_str($param, $get);
+ $_GET = array_merge($_GET, $get);
+ self::$REQUESTEDAPP = $app;
+ $_GET['app'] = $app;
+ }
+ self::$REQUESTEDFILE = (isset($_GET['getfile']) ? $_GET['getfile'] : null);
+ if (substr_count(self::$REQUESTEDFILE, '?') != 0) {
+ $file = substr(self::$REQUESTEDFILE, 0, strpos(self::$REQUESTEDFILE, '?'));
+ $param = substr(self::$REQUESTEDFILE, strpos(self::$REQUESTEDFILE, '?') + 1);
+ parse_str($param, $get);
+ $_GET = array_merge($_GET, $get);
+ self::$REQUESTEDFILE = $file;
+ $_GET['getfile'] = $file;
+ }
+ if (!is_null(self::$REQUESTEDFILE)) {
+ $subdir = OC_App::getAppPath(OC::$REQUESTEDAPP) . '/' . self::$REQUESTEDFILE;
+ $parent = OC_App::getAppPath(OC::$REQUESTEDAPP);
+ if (!OC_Helper::issubdirectory($subdir, $parent)) {
+ self::$REQUESTEDFILE = null;
+ header('HTTP/1.0 404 Not Found');
+ exit;
+ }
+ }
+
+ // write error into log if locale can't be set
+ if (OC_Util::issetlocaleworking() == false) {
+ OC_Log::write('core', 'setting locale to en_US.UTF-8/en_US.UTF8 failed. Support is probably not installed on your system', OC_Log::ERROR);
+ }
+ if (OC_Config::getValue('installed', false)) {
+ if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
+ OC_Util::addScript('backgroundjobs');
+ }
+ }
+ }
+
+ /**
+ * register hooks for the cache
+ */
+ public static function registerCacheHooks() {
+ // register cache cleanup jobs
+ OC_BackgroundJob_RegularTask::register('OC_Cache_FileGlobal', 'gc');
+ OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener');
+ }
+
+ /**
+ * register hooks for the filesystem
+ */
+ public static function registerFilesystemHooks() {
+ // Check for blacklisted files
+ OC_Hook::connect('OC_Filesystem', 'write', 'OC_Filesystem', 'isBlacklisted');
+ OC_Hook::connect('OC_Filesystem', 'rename', 'OC_Filesystem', 'isBlacklisted');
+ }
+
+ /**
+ * register hooks for sharing
+ */
+ public static function registerShareHooks() {
+ OC_Hook::connect('OC_User', 'post_deleteUser', 'OCP\Share', 'post_deleteUser');
+ OC_Hook::connect('OC_User', 'post_addToGroup', 'OCP\Share', 'post_addToGroup');
+ OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OCP\Share', 'post_removeFromGroup');
+ OC_Hook::connect('OC_User', 'post_deleteGroup', 'OCP\Share', 'post_deleteGroup');
+ }
+
+ /**
+ * @brief Handle the request
+ */
+ public static function handleRequest() {
+ // 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)) {
+ require_once 'core/setup.php';
+ exit();
+ }
+
+ $request = OC_Request::getPathInfo();
+ if(substr($request, -3) !== '.js'){// we need these files during the upgrade
+ self::checkMaintenanceMode();
+ self::checkUpgrade();
+ }
+
+ if (!self::$CLI) {
+ try {
+ OC_App::loadApps();
+ OC::getRouter()->match(OC_Request::getPathInfo());
+ return;
+ } catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) {
+ //header('HTTP/1.0 404 Not Found');
+ } catch (Symfony\Component\Routing\Exception\MethodNotAllowedException $e) {
+ OC_Response::setStatus(405);
+ return;
+ }
+ }
+
+ $app = OC::$REQUESTEDAPP;
+ $file = OC::$REQUESTEDFILE;
+ $param = array('app' => $app, 'file' => $file);
+ // Handle app css files
+ if (substr($file, -3) == 'css') {
+ self::loadCSSFile($param);
+ return;
+ }
+
+ // Handle redirect URL for logged in users
+ if (isset($_REQUEST['redirect_url']) && OC_User::isLoggedIn()) {
+ $location = OC_Helper::makeURLAbsolute(urldecode($_REQUEST['redirect_url']));
+ header('Location: ' . $location);
+ return;
+ }
+ // Handle WebDAV
+ if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') {
+ header('location: ' . OC_Helper::linkToRemote('webdav'));
+ return;
+ }
+
+ // Someone is logged in :
+ if (OC_User::isLoggedIn()) {
+ OC_App::loadApps();
+ OC_User::setupBackends();
+ if (isset($_GET["logout"]) and ($_GET["logout"])) {
+ if (isset($_COOKIE['oc_token'])) {
+ OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']);
+ }
+ OC_User::logout();
+ header("Location: " . OC::$WEBROOT . '/');
+ } else {
+ if (is_null($file)) {
+ $param['file'] = 'index.php';
+ }
+ $file_ext = substr($param['file'], -3);
+ if ($file_ext != 'php'
+ || !self::loadAppScriptFile($param)
+ ) {
+ header('HTTP/1.0 404 Not Found');
+ }
+ }
+ return;
+ }
+ // Not handled and not logged in
+ self::handleLogin();
+ }
+
+ public static function loadAppScriptFile($param) {
+ OC_App::loadApps();
+ $app = $param['app'];
+ $file = $param['file'];
+ $app_path = OC_App::getAppPath($app);
+ $file = $app_path . '/' . $file;
+ unset($app, $app_path);
+ if (file_exists($file)) {
+ require_once $file;
+ return true;
+ }
+ return false;
+ }
+
+ public static function loadCSSFile($param) {
+ $app = $param['app'];
+ $file = $param['file'];
+ $app_path = OC_App::getAppPath($app);
+ if (file_exists($app_path . '/' . $file)) {
+ $app_web_path = OC_App::getAppWebPath($app);
+ $filepath = $app_web_path . '/' . $file;
+ $minimizer = new OC_Minimizer_CSS();
+ $info = array($app_path, $app_web_path, $file);
+ $minimizer->output(array($info), $filepath);
+ }
+ }
+
+ protected static function handleLogin() {
+ OC_App::loadApps(array('prelogin'));
+ $error = array();
+ // remember was checked after last login
+ if (OC::tryRememberLogin()) {
+ $error[] = 'invalidcookie';
+
+ // Someone wants to log in :
+ } elseif (OC::tryFormLogin()) {
+ $error[] = 'invalidpassword';
+
+ // The user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP
+ } elseif (OC::tryBasicAuthLogin()) {
+ $error[] = 'invalidpassword';
+ }
+ OC_Util::displayLoginPage(array_unique($error));
+ }
+
+ protected static function cleanupLoginTokens($user) {
+ $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
+ $tokens = OC_Preferences::getKeys($user, 'login_token');
+ foreach ($tokens as $token) {
+ $time = OC_Preferences::getValue($user, 'login_token', $token);
+ if ($time < $cutoff) {
+ OC_Preferences::deleteKey($user, 'login_token', $token);
+ }
+ }
+ }
+
+ protected static function tryRememberLogin() {
+ if (!isset($_COOKIE["oc_remember_login"])
+ || !isset($_COOKIE["oc_token"])
+ || !isset($_COOKIE["oc_username"])
+ || !$_COOKIE["oc_remember_login"]
+ ) {
+ return false;
+ }
+ OC_App::loadApps(array('authentication'));
+ if (defined("DEBUG") && DEBUG) {
+ OC_Log::write('core', 'Trying to login from cookie', OC_Log::DEBUG);
+ }
+ // confirm credentials in cookie
+ if (isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) {
+ // delete outdated cookies
+ self::cleanupLoginTokens($_COOKIE['oc_username']);
+ // get stored tokens
+ $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token');
+ // test cookies token against stored tokens
+ if (in_array($_COOKIE['oc_token'], $tokens, true)) {
+ // replace successfully used token with a new one
+ OC_Preferences::deleteKey($_COOKIE['oc_username'], 'login_token', $_COOKIE['oc_token']);
+ $token = OC_Util::generate_random_bytes(32);
+ OC_Preferences::setValue($_COOKIE['oc_username'], 'login_token', $token, time());
+ OC_User::setMagicInCookie($_COOKIE['oc_username'], $token);
+ // login
+ OC_User::setUserId($_COOKIE['oc_username']);
+ OC_Util::redirectToDefaultPage();
+ // doesn't return
+ }
+ // if you reach this point you have changed your password
+ // or you are an attacker
+ // we can not delete tokens here because users may reach
+ // this point multiple times after a password change
+ OC_Log::write('core', 'Authentication cookie rejected for user ' . $_COOKIE['oc_username'], OC_Log::WARN);
+ }
+ OC_User::unsetMagicInCookie();
+ return true;
+ }
+
+ protected static function tryFormLogin() {
+ if (!isset($_POST["user"]) || !isset($_POST['password'])) {
+ return false;
+ }
+
+ OC_App::loadApps();
+
+ //setup extra user backends
+ OC_User::setupBackends();
+
+ if (OC_User::login($_POST["user"], $_POST["password"])) {
+ // setting up the time zone
+ if (isset($_POST['timezone-offset'])) {
+ $_SESSION['timezone'] = $_POST['timezone-offset'];
+ }
+
+ self::cleanupLoginTokens($_POST['user']);
+ if (!empty($_POST["remember_login"])) {
+ if (defined("DEBUG") && DEBUG) {
+ OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG);
+ }
+ $token = OC_Util::generate_random_bytes(32);
+ OC_Preferences::setValue($_POST['user'], 'login_token', $token, time());
+ OC_User::setMagicInCookie($_POST["user"], $token);
+ } else {
+ OC_User::unsetMagicInCookie();
+ }
+ OC_Util::redirectToDefaultPage();
+ exit();
+ }
+ return true;
+ }
+
+ protected static function tryBasicAuthLogin() {
+ if (!isset($_SERVER["PHP_AUTH_USER"])
+ || !isset($_SERVER["PHP_AUTH_PW"])
+ ) {
+ return false;
+ }
+ OC_App::loadApps(array('authentication'));
+ if (OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) {
+ //OC_Log::write('core',"Logged in with HTTP Authentication", OC_Log::DEBUG);
+ OC_User::unsetMagicInCookie();
+ $_REQUEST['redirect_url'] = OC_Request::requestUri();
+ OC_Util::redirectToDefaultPage();
}
+ return true;
}
- }
-
- /**
- * register hooks for the cache
- */
- public static function registerCacheHooks()
- {
- // register cache cleanup jobs
- OC_BackgroundJob_RegularTask::register('OC_Cache_FileGlobal', 'gc');
- OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener');
- }
-
- /**
- * register hooks for the filesystem
- */
- public static function registerFilesystemHooks()
- {
- // Check for blacklisted files
- OC_Hook::connect('OC_Filesystem', 'write', 'OC_Filesystem', 'isBlacklisted');
- OC_Hook::connect('OC_Filesystem', 'rename', 'OC_Filesystem', 'isBlacklisted');
- }
-
- /**
- * register hooks for sharing
- */
- public static function registerShareHooks()
- {
- OC_Hook::connect('OC_User', 'post_deleteUser', 'OCP\Share', 'post_deleteUser');
- OC_Hook::connect('OC_User', 'post_addToGroup', 'OCP\Share', 'post_addToGroup');
- OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OCP\Share', 'post_removeFromGroup');
- OC_Hook::connect('OC_User', 'post_deleteGroup', 'OCP\Share', 'post_deleteGroup');
- }
-
- /**
- * @brief Handle the request
- */
- public static function handleRequest()
- {
- if (!OC_Config::getValue('installed', false)) {
- require_once 'core/setup.php';
- exit();
- }
- // Handle redirect URL for logged in users
- if (isset($_REQUEST['redirect_url']) && OC_User::isLoggedIn()) {
- $location = OC_Helper::makeURLAbsolute(urldecode($_REQUEST['redirect_url']));
- header('Location: ' . $location);
- return;
- }
- // Handle WebDAV
- if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') {
- header('location: ' . OC_Helper::linkToRemote('webdav'));
- return;
- }
- try {
- OC::getRouter()->match(OC_Request::getPathInfo());
- return;
- } catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) {
- //header('HTTP/1.0 404 Not Found');
- } catch (Symfony\Component\Routing\Exception\MethodNotAllowedException $e) {
- OC_Response::setStatus(405);
- return;
- }
- $app = OC::$REQUESTEDAPP;
- $file = OC::$REQUESTEDFILE;
- $param = array('app' => $app, 'file' => $file);
- // Handle app css files
- if (substr($file, -3) == 'css') {
- self::loadCSSFile($param);
- return;
- }
- // Someone is logged in :
- if (OC_User::isLoggedIn()) {
- OC_App::loadApps();
- OC_User::setupBackends();
- if (isset($_GET["logout"]) and ($_GET["logout"])) {
- if (isset($_COOKIE['oc_token'])) {
- OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']);
- }
- OC_User::logout();
- header("Location: " . OC::$WEBROOT . '/');
- } else {
- if (is_null($file)) {
- $param['file'] = 'index.php';
- }
- $file_ext = substr($param['file'], -3);
- if ($file_ext != 'php'
- || !self::loadAppScriptFile($param)
- ) {
- header('HTTP/1.0 404 Not Found');
- }
- }
- return;
- }
- // Not handled and not logged in
- self::handleLogin();
- }
-
- public static function loadAppScriptFile($param)
- {
- OC_App::loadApps();
- $app = $param['app'];
- $file = $param['file'];
- $app_path = OC_App::getAppPath($app);
- $file = $app_path . '/' . $file;
- unset($app, $app_path);
- if (file_exists($file)) {
- require_once $file;
- return true;
- }
- return false;
- }
-
- public static function loadCSSFile($param)
- {
- $app = $param['app'];
- $file = $param['file'];
- $app_path = OC_App::getAppPath($app);
- if (file_exists($app_path . '/' . $file)) {
- $app_web_path = OC_App::getAppWebPath($app);
- $filepath = $app_web_path . '/' . $file;
- $minimizer = new OC_Minimizer_CSS();
- $info = array($app_path, $app_web_path, $file);
- $minimizer->output(array($info), $filepath);
- }
- }
-
- protected static function handleLogin()
- {
- OC_App::loadApps(array('prelogin'));
- $error = array();
- // remember was checked after last login
- if (OC::tryRememberLogin()) {
- $error[] = 'invalidcookie';
-
- // Someone wants to log in :
- } elseif (OC::tryFormLogin()) {
- $error[] = 'invalidpassword';
-
- // The user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP
- } elseif (OC::tryBasicAuthLogin()) {
- $error[] = 'invalidpassword';
- }
- OC_Util::displayLoginPage(array_unique($error));
- }
-
- protected static function cleanupLoginTokens($user)
- {
- $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
- $tokens = OC_Preferences::getKeys($user, 'login_token');
- foreach ($tokens as $token) {
- $time = OC_Preferences::getValue($user, 'login_token', $token);
- if ($time < $cutoff) {
- OC_Preferences::deleteKey($user, 'login_token', $token);
- }
- }
- }
-
- protected static function tryRememberLogin()
- {
- if (!isset($_COOKIE["oc_remember_login"])
- || !isset($_COOKIE["oc_token"])
- || !isset($_COOKIE["oc_username"])
- || !$_COOKIE["oc_remember_login"]
- ) {
- return false;
- }
- OC_App::loadApps(array('authentication'));
- if (defined("DEBUG") && DEBUG) {
- OC_Log::write('core', 'Trying to login from cookie', OC_Log::DEBUG);
- }
- // confirm credentials in cookie
- if (isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) {
- // delete outdated cookies
- self::cleanupLoginTokens($_COOKIE['oc_username']);
- // get stored tokens
- $tokens = OC_Preferences::getKeys($_COOKIE['oc_username'], 'login_token');
- // test cookies token against stored tokens
- if (in_array($_COOKIE['oc_token'], $tokens, true)) {
- // replace successfully used token with a new one
- OC_Preferences::deleteKey($_COOKIE['oc_username'], 'login_token', $_COOKIE['oc_token']);
- $token = OC_Util::generate_random_bytes(32);
- OC_Preferences::setValue($_COOKIE['oc_username'], 'login_token', $token, time());
- OC_User::setMagicInCookie($_COOKIE['oc_username'], $token);
- // login
- OC_User::setUserId($_COOKIE['oc_username']);
- OC_Util::redirectToDefaultPage();
- // doesn't return
- }
- // if you reach this point you have changed your password
- // or you are an attacker
- // we can not delete tokens here because users may reach
- // this point multiple times after a password change
- OC_Log::write('core', 'Authentication cookie rejected for user ' . $_COOKIE['oc_username'], OC_Log::WARN);
- }
- OC_User::unsetMagicInCookie();
- return true;
- }
-
- protected static function tryFormLogin()
- {
- if (!isset($_POST["user"]) || !isset($_POST['password'])) {
- return false;
- }
-
- OC_App::loadApps();
-
- //setup extra user backends
- OC_User::setupBackends();
-
- if (OC_User::login($_POST["user"], $_POST["password"])) {
- // setting up the time zone
- if (isset($_POST['timezone-offset'])) {
- $_SESSION['timezone'] = $_POST['timezone-offset'];
- }
-
- self::cleanupLoginTokens($_POST['user']);
- if (!empty($_POST["remember_login"])) {
- if (defined("DEBUG") && DEBUG) {
- OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG);
- }
- $token = OC_Util::generate_random_bytes(32);
- OC_Preferences::setValue($_POST['user'], 'login_token', $token, time());
- OC_User::setMagicInCookie($_POST["user"], $token);
- } else {
- OC_User::unsetMagicInCookie();
- }
- OC_Util::redirectToDefaultPage();
- exit();
- }
- return true;
- }
-
- protected static function tryBasicAuthLogin()
- {
- if (!isset($_SERVER["PHP_AUTH_USER"])
- || !isset($_SERVER["PHP_AUTH_PW"])
- ) {
- return false;
- }
- OC_App::loadApps(array('authentication'));
- if (OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) {
- //OC_Log::write('core',"Logged in with HTTP Authentication", OC_Log::DEBUG);
- OC_User::unsetMagicInCookie();
- $_REQUEST['redirect_url'] = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '');
- OC_Util::redirectToDefaultPage();
- }
- return true;
- }
}
// define runtime variables - unless this already has been done
if (!isset($RUNTIME_NOAPPS)) {
- $RUNTIME_NOAPPS = false;
+ $RUNTIME_NOAPPS = false;
}
if (!function_exists('get_temp_dir')) {
- function get_temp_dir()
- {
- if ($temp = ini_get('upload_tmp_dir')) return $temp;
- if ($temp = getenv('TMP')) return $temp;
- if ($temp = getenv('TEMP')) return $temp;
- if ($temp = getenv('TMPDIR')) return $temp;
- $temp = tempnam(__FILE__, '');
- if (file_exists($temp)) {
- unlink($temp);
- return dirname($temp);
- }
- if ($temp = sys_get_temp_dir()) return $temp;
-
- return null;
- }
+ function get_temp_dir() {
+ if ($temp = ini_get('upload_tmp_dir')) return $temp;
+ if ($temp = getenv('TMP')) return $temp;
+ if ($temp = getenv('TEMP')) return $temp;
+ if ($temp = getenv('TMPDIR')) return $temp;
+ $temp = tempnam(__FILE__, '');
+ if (file_exists($temp)) {
+ unlink($temp);
+ return dirname($temp);
+ }
+ if ($temp = sys_get_temp_dir()) return $temp;
+
+ return null;
+ }
}
OC::init();
diff --git a/lib/cache/apc.php b/lib/cache/apc.php
index 6dda0a0ff8c..895d307ea26 100644
--- a/lib/cache/apc.php
+++ b/lib/cache/apc.php
@@ -57,7 +57,7 @@ class OC_Cache_APC {
if(!function_exists('apc_exists')) {
function apc_exists($keys)
{
- $result;
+ $result=false;
apc_fetch($keys, $result);
return $result;
}
diff --git a/lib/cache/file.php b/lib/cache/file.php
index 27d8b19f36e..f9ecf41dcac 100644
--- a/lib/cache/file.php
+++ b/lib/cache/file.php
@@ -15,11 +15,11 @@ class OC_Cache_File{
}
if(OC_User::isLoggedIn()) {
$subdir = 'cache';
- $view = new OC_FilesystemView('/'.OC_User::getUser());
+ $view = new \OC\Files\View('/'.OC_User::getUser());
if(!$view->file_exists($subdir)) {
$view->mkdir($subdir);
}
- $this->storage = new OC_FilesystemView('/'.OC_User::getUser().'/'.$subdir);
+ $this->storage = new \OC\Files\View('/'.OC_User::getUser().'/'.$subdir);
return $this->storage;
}else{
OC_Log::write('core', 'Can\'t get cache storage, user not logged in', OC_Log::ERROR);
diff --git a/lib/connector/sabre/ServiceUnavailable.php b/lib/connector/sabre/ServiceUnavailable.php
new file mode 100644
index 00000000000..c1cc815c989
--- /dev/null
+++ b/lib/connector/sabre/ServiceUnavailable.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @license AGPL3
+ */
+
+class Sabre_DAV_Exception_ServiceUnavailable extends Sabre_DAV_Exception {
+
+ /**
+ * Returns the HTTP statuscode for this exception
+ *
+ * @return int
+ */
+ public function getHTTPCode() {
+
+ return 503;
+ }
+}
diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php
index 6076aed6fcd..e29059d0395 100644
--- a/lib/connector/sabre/directory.php
+++ b/lib/connector/sabre/directory.php
@@ -62,7 +62,36 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
}
} else {
$newPath = $this->path . '/' . $name;
- OC_Filesystem::file_put_contents($newPath, $data);
+
+ // mark file as partial while uploading (ignored by the scanner)
+ $partpath = $newPath . '.part';
+
+ \OC\Files\Filesystem::file_put_contents($partpath, $data);
+
+ //detect aborted upload
+ if (isset ($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PUT' ) {
+ if (isset($_SERVER['CONTENT_LENGTH'])) {
+ $expected = $_SERVER['CONTENT_LENGTH'];
+ $actual = \OC\Files\Filesystem::filesize($partpath);
+ if ($actual != $expected) {
+ \OC\Files\Filesystem::unlink($partpath);
+ throw new Sabre_DAV_Exception_BadRequest(
+ 'expected filesize ' . $expected . ' got ' . $actual);
+ }
+ }
+ }
+
+ // rename to correct path
+ \OC\Files\Filesystem::rename($partpath, $newPath);
+
+ // allow sync clients to send the mtime along in a header
+ $mtime = OC_Request::hasModificationTime();
+ if ($mtime !== false) {
+ if(\OC\Files\Filesystem::touch($newPath, $mtime)) {
+ header('X-OC-MTime: accepted');
+ }
+ }
+
return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath);
}
@@ -78,7 +107,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
public function createDirectory($name) {
$newPath = $this->path . '/' . $name;
- OC_Filesystem::mkdir($newPath);
+ \OC\Files\Filesystem::mkdir($newPath);
}
@@ -93,7 +122,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
$path = $this->path . '/' . $name;
if (is_null($info)) {
- $info = OC_Files::getFileInfo($path);
+ $info = \OC\Files\Filesystem::getFileInfo($path);
}
if (!$info) {
@@ -116,12 +145,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
* @return Sabre_DAV_INode[]
*/
public function getChildren() {
- $folder_content = OC_Files::getDirectoryContent($this->path);
+
+ $folder_content = \OC\Files\Filesystem::getDirectoryContent($this->path);
$paths = array();
foreach($folder_content as $info) {
$paths[] = $this->path.'/'.$info['name'];
+ $properties[$this->path.'/'.$info['name']][self::GETETAG_PROPERTYNAME] = '"' . $info['etag'] . '"';
}
- $properties = array_fill_keys($paths, array());
if(count($paths)>0) {
//
// the number of arguments within IN conditions are limited in most databases
@@ -137,7 +167,9 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
$propertypath = $row['propertypath'];
$propertyname = $row['propertyname'];
$propertyvalue = $row['propertyvalue'];
- $properties[$propertypath][$propertyname] = $propertyvalue;
+ if($propertyname !== self::GETETAG_PROPERTYNAME) {
+ $properties[$propertypath][$propertyname] = $propertyvalue;
+ }
}
}
}
@@ -160,7 +192,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
public function childExists($name) {
$path = $this->path . '/' . $name;
- return OC_Filesystem::file_exists($path);
+ return \OC\Files\Filesystem::file_exists($path);
}
@@ -173,7 +205,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
if ($this->path != "/Shared") {
foreach($this->getChildren() as $child) $child->delete();
- OC_Filesystem::rmdir($this->path);
+ \OC\Files\Filesystem::rmdir($this->path);
}
}
@@ -184,10 +216,10 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
* @return array
*/
public function getQuotaInfo() {
- $rootInfo=OC_FileCache_Cached::get('');
+ $rootInfo=\OC\Files\Filesystem::getFileInfo('');
return array(
$rootInfo['size'],
- OC_Filesystem::free_space()
+ \OC\Files\Filesystem::free_space()
);
}
diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index 8d963a1cf8d..61165d9956d 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -45,7 +45,34 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function put($data) {
- OC_Filesystem::file_put_contents($this->path, $data);
+ // mark file as partial while uploading (ignored by the scanner)
+ $partpath = $this->path . '.part';
+
+ \OC\Files\Filesystem::file_put_contents($partpath, $data);
+
+ //detect aborted upload
+ if (isset ($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PUT' ) {
+ if (isset($_SERVER['CONTENT_LENGTH'])) {
+ $expected = $_SERVER['CONTENT_LENGTH'];
+ $actual = \OC\Files\Filesystem::filesize($partpath);
+ if ($actual != $expected) {
+ \OC\Files\Filesystem::unlink($partpath);
+ throw new Sabre_DAV_Exception_BadRequest(
+ 'expected filesize ' . $expected . ' got ' . $actual);
+ }
+ }
+ }
+
+ // rename to correct path
+ \OC\Files\Filesystem::rename($partpath, $this->path);
+
+ //allow sync clients to send the mtime along in a header
+ $mtime = OC_Request::hasModificationTime();
+ if ($mtime !== false) {
+ if(\OC\Files\Filesystem::touch($this->path, $mtime)) {
+ header('X-OC-MTime: accepted');
+ }
+ }
return OC_Connector_Sabre_Node::getETagPropertyForPath($this->path);
}
@@ -57,7 +84,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function get() {
- return OC_Filesystem::fopen($this->path, 'rb');
+ return \OC\Files\Filesystem::fopen($this->path,'rb');
}
@@ -68,7 +95,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function delete() {
- OC_Filesystem::unlink($this->path);
+ \OC\Files\Filesystem::unlink($this->path);
}
@@ -98,16 +125,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
if (isset($properties[self::GETETAG_PROPERTYNAME])) {
return $properties[self::GETETAG_PROPERTYNAME];
}
- return $this->getETagPropertyForPath($this->path);
- }
-
- /**
- * Creates a ETag for this path.
- * @param string $path Path of the file
- * @return string|null Returns null if the ETag can not effectively be determined
- */
- static protected function createETag($path) {
- return OC_Filesystem::hash('md5', $path);
+ return null;
}
/**
@@ -122,7 +140,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
return $this->fileinfo_cache['mimetype'];
}
- return OC_Filesystem::getMimeType($this->path);
+ return \OC\Files\Filesystem::getMimeType($this->path);
}
}
diff --git a/lib/connector/sabre/maintenanceplugin.php b/lib/connector/sabre/maintenanceplugin.php
new file mode 100644
index 00000000000..329fa4443ad
--- /dev/null
+++ b/lib/connector/sabre/maintenanceplugin.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2013 Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @license AGPL3
+ */
+
+require 'ServiceUnavailable.php';
+
+class OC_Connector_Sabre_MaintenancePlugin extends Sabre_DAV_ServerPlugin
+{
+
+ /**
+ * Reference to main server object
+ *
+ * @var Sabre_DAV_Server
+ */
+ private $server;
+
+ /**
+ * This initializes the plugin.
+ *
+ * This function is called by Sabre_DAV_Server, after
+ * addPlugin is called.
+ *
+ * This method should set up the required event subscriptions.
+ *
+ * @param Sabre_DAV_Server $server
+ * @return void
+ */
+ public function initialize(Sabre_DAV_Server $server) {
+
+ $this->server = $server;
+ $this->server->subscribeEvent('beforeMethod', array($this, 'checkMaintenanceMode'), 10);
+ }
+
+ /**
+ * This method is called before any HTTP method and returns http status code 503
+ * in case the system is in maintenance mode.
+ *
+ * @throws Sabre_DAV_Exception_ServiceUnavailable
+ * @internal param string $method
+ * @return bool
+ */
+ public function checkMaintenanceMode() {
+ if (OC_Config::getValue('maintenance', false)) {
+ throw new Sabre_DAV_Exception_ServiceUnavailable();
+ }
+
+ return true;
+ }
+}
diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php
index 52350072fb2..52995630211 100644
--- a/lib/connector/sabre/node.php
+++ b/lib/connector/sabre/node.php
@@ -84,12 +84,12 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
$newPath = $parentPath . '/' . $newName;
$oldPath = $this->path;
- OC_Filesystem::rename($this->path, $newPath);
+ \OC\Files\Filesystem::rename($this->path,$newPath);
$this->path = $newPath;
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ? WHERE `userid` = ? AND `propertypath` = ?' );
- $query->execute( array( $newPath, OC_User::getUser(), $oldPath ));
+ $query->execute( array( $newPath,OC_User::getUser(), $oldPath ));
}
@@ -104,9 +104,9 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
*/
protected function getFileinfoCache() {
if (!isset($this->fileinfo_cache)) {
- if ($fileinfo_cache = OC_FileCache::get($this->path)) {
+ if ($fileinfo_cache = \OC\Files\Filesystem::getFileInfo($this->path)) {
} else {
- $fileinfo_cache = OC_Filesystem::stat($this->path);
+ $fileinfo_cache = \OC\Files\Filesystem::stat($this->path);
}
$this->fileinfo_cache = $fileinfo_cache;
@@ -134,7 +134,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
* Even if the modification time is set to a custom value the access time is set to now.
*/
public function touch($mtime) {
- OC_Filesystem::touch($this->path, $mtime);
+ \OC\Files\Filesystem::touch($this->path, $mtime);
}
/**
@@ -154,15 +154,17 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
}
}
else {
- if( strcmp( $propertyName, self::LASTMODIFIED_PROPERTYNAME) === 0 ) {
+ if( strcmp( $propertyName, self::GETETAG_PROPERTYNAME) === 0 ) {
+ \OC\Files\Filesystem::putFileInfo($this->path, array('etag'=> $propertyValue));
+ } elseif( strcmp( $propertyName, self::LASTMODIFIED_PROPERTYNAME) === 0 ) {
$this->touch($propertyValue);
} else {
if(!array_key_exists( $propertyName, $existing )) {
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
- $query->execute( array( OC_User::getUser(), $this->path, $propertyName, $propertyValue ));
+ $query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue ));
} else {
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ? WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
- $query->execute( array( $propertyValue, OC_User::getUser(), $this->path, $propertyName ));
+ $query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName ));
}
}
}
@@ -176,9 +178,9 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
* @brief Returns a list of properties for this nodes.;
* @param array $properties
* @return array
- * @note The properties list is a list of propertynames the client
- * requested, encoded as xmlnamespace#tagName, for example:
- * http://www.example.org/namespace#author If the array is empty, all
+ * @note The properties list is a list of propertynames the client
+ * requested, encoded as xmlnamespace#tagName, for example:
+ * http://www.example.org/namespace#author If the array is empty, all
* properties should be returned
*/
public function getProperties($properties) {
@@ -190,6 +192,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
while( $row = $result->fetchRow()) {
$this->property_cache[$row['propertyname']] = $row['propertyvalue'];
}
+ $this->property_cache[self::GETETAG_PROPERTYNAME] = $this->getETagPropertyForPath($this->path);
}
// if the array was empty, we need to return everything
@@ -205,57 +208,16 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
}
/**
- * @brief Creates a ETag for this path.
- * @param string $path Path of the file
- * @return string|null Returns null if the ETag can not effectively be determined
- */
- static protected function createETag($path) {
- if(self::$ETagFunction) {
- $hash = call_user_func(self::$ETagFunction, $path);
- return $hash;
- }else{
- return uniqid('', true);
- }
- }
-
- /**
- * @brief Returns the ETag surrounded by double-quotes for this path.
+ * Returns the ETag surrounded by double-quotes for this path.
* @param string $path Path of the file
* @return string|null Returns null if the ETag can not effectively be determined
*/
static public function getETagPropertyForPath($path) {
- $tag = self::createETag($path);
- if (empty($tag)) {
- return null;
+ $data = \OC\Files\Filesystem::getFileInfo($path);
+ if (isset($data['etag'])) {
+ return '"'.$data['etag'].'"';
}
- $etag = '"'.$tag.'"';
- $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
- $query->execute( array( OC_User::getUser(), $path, self::GETETAG_PROPERTYNAME, $etag ));
- return $etag;
+ return null;
}
- /**
- * @brief Remove the ETag from the cache.
- * @param string $path Path of the file
- */
- static public function removeETagPropertyForPath($path) {
- // remove tags from this and parent paths
- $paths = array();
- while ($path != '/' && $path != '.' && $path != '' && $path != '\\') {
- $paths[] = $path;
- $path = dirname($path);
- }
- if (empty($paths)) {
- return;
- }
- $paths[] = $path;
- $path_placeholders = join(',', array_fill(0, count($paths), '?'));
- $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties`'
- .' WHERE `userid` = ?'
- .' AND `propertyname` = ?'
- .' AND `propertypath` IN ('.$path_placeholders.')'
- );
- $vals = array( OC_User::getUser(), self::GETETAG_PROPERTYNAME );
- $query->execute(array_merge( $vals, $paths ));
- }
}
diff --git a/lib/connector/sabre/quotaplugin.php b/lib/connector/sabre/quotaplugin.php
index fbbb4a3cf6f..ce9a968eb3c 100644
--- a/lib/connector/sabre/quotaplugin.php
+++ b/lib/connector/sabre/quotaplugin.php
@@ -50,7 +50,7 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin {
$uri='/'.$uri;
}
list($parentUri, $newName) = Sabre_DAV_URLUtil::splitPath($uri);
- if ($length > OC_Filesystem::free_space($parentUri)) {
+ if ($length > \OC\Files\Filesystem::free_space($parentUri)) {
throw new Sabre_DAV_Exception_InsufficientStorage();
}
}
diff --git a/lib/connector/sabre/request.php b/lib/connector/sabre/request.php
new file mode 100644
index 00000000000..97a27996bf3
--- /dev/null
+++ b/lib/connector/sabre/request.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Stefan Herbrechtsmeier
+ * @copyright 2012 Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
+ *
+ * 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/>.
+ *
+ */
+
+class OC_Connector_Sabre_Request extends Sabre_HTTP_Request {
+ /**
+ * Returns the requested uri
+ *
+ * @return string
+ */
+ public function getUri() {
+ return OC_Request::requestUri();
+ }
+
+ /**
+ * Returns a specific item from the _SERVER array.
+ *
+ * Do not rely on this feature, it is for internal use only.
+ *
+ * @param string $field
+ * @return string
+ */
+ public function getRawServerValue($field) {
+ if($field == 'REQUEST_URI'){
+ return $this->getUri();
+ }
+ else{
+ return isset($this->_SERVER[$field])?$this->_SERVER[$field]:null;
+ }
+ }
+}
diff --git a/lib/db.php b/lib/db.php
index 74e7ca5b0e0..51f7c7679d4 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -41,6 +41,8 @@ class OC_DB {
const BACKEND_PDO=0;
const BACKEND_MDB2=1;
+ static private $preparedQueries = array();
+
/**
* @var MDB2_Driver_Common
*/
@@ -121,6 +123,7 @@ class OC_DB {
return true;
}
}
+ self::$preparedQueries = array();
// The global data we need
$name = OC_Config::getValue( "dbname", "owncloud" );
$host = OC_Config::getValue( "dbhost", "" );
@@ -181,7 +184,14 @@ class OC_DB {
try{
self::$PDO=new PDO($dsn, $user, $pass, $opts);
}catch(PDOException $e) {
- OC_Template::printErrorPage( 'can not connect to database, using '.$type.'. ('.$e->getMessage().')' );
+ 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();
}
// We always, really always want associative arrays
self::$PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
@@ -201,6 +211,7 @@ class OC_DB {
return true;
}
}
+ self::$preparedQueries = array();
// The global data we need
$name = OC_Config::getValue( "dbname", "owncloud" );
$host = OC_Config::getValue( "dbhost", "" );
@@ -277,7 +288,13 @@ class OC_DB {
if( PEAR::isError( self::$MDB2 )) {
OC_Log::write('core', self::$MDB2->getUserInfo(), OC_Log::FATAL);
OC_Log::write('core', self::$MDB2->getMessage(), OC_Log::FATAL);
- OC_Template::printErrorPage( 'can not connect to database, using '.$type.'. ('.self::$MDB2->getUserInfo().')' );
+ 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();
}
// We always, really always want associative arrays
@@ -321,7 +338,12 @@ class OC_DB {
$query.=$limitsql;
}
}
+ } else {
+ if (isset(self::$preparedQueries[$query])) {
+ return self::$preparedQueries[$query];
+ }
}
+ $rawQuery = $query;
// Optimize the query
$query = self::processQuery( $query );
@@ -343,6 +365,9 @@ class OC_DB {
}
$result=new PDOStatementWrapper($result);
}
+ if (is_null($limit) || $limit == -1) {
+ self::$preparedQueries[$rawQuery] = $result;
+ }
return $result;
}
@@ -428,6 +453,9 @@ class OC_DB {
$CONFIG_DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" );
$CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
+ // cleanup the cached queries
+ self::$preparedQueries = array();
+
self::connectScheme();
// read file
@@ -588,7 +616,7 @@ class OC_DB {
error_log('DB error: '.$entry);
OC_Template::printErrorPage( $entry );
}
-
+
if($result->numRows() == 0) {
$query = 'INSERT INTO "' . $table . '" ("'
. implode('","', array_keys($input)) . '") VALUES("'
@@ -623,7 +651,7 @@ class OC_DB {
return $result->execute();
}
-
+
/**
* @brief does minor changes to query
* @param string $query Query string
diff --git a/lib/filecache.php b/lib/filecache.php
deleted file mode 100644
index c3256c783e6..00000000000
--- a/lib/filecache.php
+++ /dev/null
@@ -1,534 +0,0 @@
-<?php
-
-/**
-* @author Robin Appelman
-* @copyright 2011 Robin Appelman icewind1991@gmail.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/>.
-*
-*/
-
-/**
- * provide caching for filesystem info in the database
- *
- * not used by OC_Filesystem for reading filesystem info,
- * instread apps should use OC_FileCache::get where possible
- *
- * It will try to keep the data up to date but changes from outside ownCloud can invalidate the cache
- */
-class OC_FileCache{
-
- /**
- * get the filesystem info from the cache
- * @param string path
- * @param string root (optional)
- * @return array
- *
- * returns an associative array with the following keys:
- * - size
- * - mtime
- * - ctime
- * - mimetype
- * - encrypted
- * - versioned
- */
- public static function get($path, $root=false) {
- if(OC_FileCache_Update::hasUpdated($path, $root)) {
- if($root===false) {//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$path));
- }else{
- OC_FileCache_Update::update($path, $root);
- }
- }
- return OC_FileCache_Cached::get($path, $root);
- }
-
- /**
- * put filesystem info in the cache
- * @param string $path
- * @param array data
- * @param string root (optional)
- * @note $data is an associative array in the same format as returned
- * by get
- */
- public static function put($path, $data, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $fullpath=OC_Filesystem::normalizePath($root.'/'.$path);
- $parent=self::getParentId($fullpath);
- $id=self::getId($fullpath, '');
- if(isset(OC_FileCache_Cached::$savedData[$fullpath])) {
- $data=array_merge(OC_FileCache_Cached::$savedData[$fullpath], $data);
- unset(OC_FileCache_Cached::$savedData[$fullpath]);
- }
- if($id!=-1) {
- self::update($id, $data);
- return;
- }
-
- // add parent directory to the file cache if it does not exist yet.
- if ($parent == -1 && $fullpath != $root) {
- $parentDir = dirname($path);
- self::scanFile($parentDir);
- $parent = self::getParentId($fullpath);
- }
-
- if(!isset($data['size']) or !isset($data['mtime'])) {//save incomplete data for the next time we write it
- OC_FileCache_Cached::$savedData[$fullpath]=$data;
- return;
- }
- if(!isset($data['encrypted'])) {
- $data['encrypted']=false;
- }
- if(!isset($data['versioned'])) {
- $data['versioned']=false;
- }
- $mimePart=dirname($data['mimetype']);
- $data['size']=(int)$data['size'];
- $data['ctime']=(int)$data['mtime'];
- $data['writable']=(int)$data['writable'];
- $data['encrypted']=(int)$data['encrypted'];
- $data['versioned']=(int)$data['versioned'];
- $user=OC_User::getUser();
- $query=OC_DB::prepare('INSERT INTO `*PREFIX*fscache`(`parent`, `name`, `path`, `path_hash`, `size`, `mtime`, `ctime`, `mimetype`, `mimepart`,`user`,`writable`,`encrypted`,`versioned`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)');
- $result=$query->execute(array($parent, basename($fullpath), $fullpath, md5($fullpath), $data['size'], $data['mtime'], $data['ctime'], $data['mimetype'], $mimePart, $user, $data['writable'], $data['encrypted'], $data['versioned']));
- if(OC_DB::isError($result)) {
- OC_Log::write('files', 'error while writing file('.$fullpath.') to cache', OC_Log::ERROR);
- }
-
- if($cache=OC_Cache::getUserCache(true)) {
- $cache->remove('fileid/'.$fullpath);//ensure we don't have -1 cached
- }
- }
-
- /**
- * update filesystem info of a file
- * @param int $id
- * @param array $data
- */
- private static function update($id, $data) {
- $arguments=array();
- $queryParts=array();
- foreach(array('size','mtime','ctime','mimetype','encrypted','versioned', 'writable') as $attribute) {
- if(isset($data[$attribute])) {
- //Convert to int it args are false
- if($data[$attribute] === false) {
- $arguments[] = 0;
- }else{
- $arguments[] = $data[$attribute];
- }
- $queryParts[]='`'.$attribute.'`=?';
- }
- }
- if(isset($data['mimetype'])) {
- $arguments[]=dirname($data['mimetype']);
- $queryParts[]='`mimepart`=?';
- }
- $arguments[]=$id;
-
- if(!empty($queryParts)) {
- $sql = 'UPDATE `*PREFIX*fscache` SET '.implode(' , ', $queryParts).' WHERE `id`=?';
- $query=OC_DB::prepare($sql);
- $result=$query->execute($arguments);
- if(OC_DB::isError($result)) {
- OC_Log::write('files', 'error while updating file('.$id.') in cache', OC_Log::ERROR);
- }
- }
- }
-
- /**
- * register a file move in the cache
- * @param string oldPath
- * @param string newPath
- * @param string root (optional)
- */
- public static function move($oldPath, $newPath, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- // If replacing an existing file, delete the file
- if (self::inCache($newPath, $root)) {
- self::delete($newPath, $root);
- }
- $oldPath=$root.$oldPath;
- $newPath=$root.$newPath;
- $newParent=self::getParentId($newPath);
- $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `parent`=? ,`name`=?, `path`=?, `path_hash`=? WHERE `path_hash`=?');
- $query->execute(array($newParent, basename($newPath), $newPath, md5($newPath), md5($oldPath)));
-
- if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$oldPath)) {
- $cache->set('fileid/'.$newPath, $cache->get('fileid/'.$oldPath));
- $cache->remove('fileid/'.$oldPath);
- }
-
- $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `path` LIKE ?');
- $oldLength=strlen($oldPath);
- $updateQuery=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `path`=?, `path_hash`=? WHERE `path_hash`=?');
- while($row= $query->execute(array($oldPath.'/%'))->fetchRow()) {
- $old=$row['path'];
- $new=$newPath.substr($old, $oldLength);
- $updateQuery->execute(array($new, md5($new), md5($old)));
-
- if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$old)) {
- $cache->set('fileid/'.$new, $cache->get('fileid/'.$old));
- $cache->remove('fileid/'.$old);
- }
- }
- }
-
- /**
- * delete info from the cache
- * @param string path
- * @param string root (optional)
- */
- public static function delete($path, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- $query->execute(array(md5($root.$path)));
-
- //delete everything inside the folder
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `path` LIKE ?');
- $query->execute(array($root.$path.'/%'));
-
- OC_Cache::remove('fileid/'.$root.$path);
- }
-
- /**
- * return array of filenames matching the querty
- * @param string $query
- * @param boolean $returnData
- * @param string root (optional)
- * @return array of filepaths
- */
- public static function search($search, $returnData=false, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $rootLen=strlen($root);
- if(!$returnData) {
- $select = '`path`';
- }else{
- $select = '*';
- }
- if (OC_Config::getValue('dbtype') === 'oci8') {
- $where = 'LOWER(`name`) LIKE LOWER(?) AND `user`=?';
- } else {
- $where = '`name` LIKE ? AND `user`=?';
- }
- $query=OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*fscache` WHERE '.$where);
- $result=$query->execute(array("%$search%", OC_User::getUser()));
- $names=array();
- while($row=$result->fetchRow()) {
- if(!$returnData) {
- $names[]=substr($row['path'], $rootLen);
- }else{
- $row['path']=substr($row['path'], $rootLen);
- $names[]=$row;
- }
- }
- return $names;
- }
-
- /**
- * get all files and folders in a folder
- * @param string path
- * @param string root (optional)
- * @return array
- *
- * returns an array of assiciative arrays with the following keys:
- * - name
- * - size
- * - mtime
- * - ctime
- * - mimetype
- * - encrypted
- * - versioned
- */
- public static function getFolderContent($path, $root=false, $mimetype_filter='') {
- if(OC_FileCache_Update::hasUpdated($path, $root, true)) {
- OC_FileCache_Update::updateFolder($path, $root);
- }
- return OC_FileCache_Cached::getFolderContent($path, $root, $mimetype_filter);
- }
-
- /**
- * check if a file or folder is in the cache
- * @param string $path
- * @param string root (optional)
- * @return bool
- */
- public static function inCache($path, $root=false) {
- return self::getId($path, $root)!=-1;
- }
-
- /**
- * get the file id as used in the cache
- * @param string path
- * @param string root (optional)
- * @return int
- */
- public static function getId($path, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
-
- $fullPath=$root.$path;
- if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$fullPath)) {
- return $cache->get('fileid/'.$fullPath);
- }
-
- $query=OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- $result=$query->execute(array(md5($fullPath)));
- if(OC_DB::isError($result)) {
- OC_Log::write('files', 'error while getting file id of '.$path, OC_Log::ERROR);
- return -1;
- }
-
- $result=$result->fetchRow();
- if(is_array($result)) {
- $id=$result['id'];
- }else{
- $id=-1;
- }
- if($cache=OC_Cache::getUserCache(true)) {
- $cache->set('fileid/'.$fullPath, $id);
- }
-
- return $id;
- }
-
- /**
- * get the file path from the id, relative to the home folder of the user
- * @param int id
- * @param string user (optional)
- * @return string
- */
- public static function getPath($id, $user='') {
- if(!$user) {
- $user=OC_User::getUser();
- }
- $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `id`=? AND `user`=?');
- $result=$query->execute(array($id, $user));
- $row=$result->fetchRow();
- $path=$row['path'];
- $root='/'.$user.'/files';
- if(substr($path, 0, strlen($root))!=$root) {
- return false;
- }
- return substr($path, strlen($root));
- }
-
- /**
- * get the file id of the parent folder, taking into account '/' has no parent
- * @param string $path
- * @return int
- */
- private static function getParentId($path) {
- if($path=='/') {
- return -1;
- }else{
- return self::getId(dirname($path), '');
- }
- }
-
- /**
- * adjust the size of the parent folders
- * @param string $path
- * @param int $sizeDiff
- * @param string root (optinal)
- */
- public static function increaseSize($path, $sizeDiff, $root=false) {
- if($sizeDiff==0) return;
- $item = OC_FileCache_Cached::get($path);
- //stop walking up the filetree if we hit a non-folder or reached to root folder
- if($path == '/' || $path=='' || $item['mimetype'] !== 'httpd/unix-directory') {
- return;
- }
- $id = $item['id'];
- while($id!=-1) {//walk up the filetree increasing the size of all parent folders
- $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `size`=`size`+? WHERE `id`=?');
- $query->execute(array($sizeDiff, $id));
- $path=dirname($path);
- if($path == '' or $path =='/') {
- return;
- }
- $parent = OC_FileCache_Cached::get($path);
- $id = $parent['id'];
- //stop walking up the filetree if we hit a non-folder
- if($parent['mimetype'] !== 'httpd/unix-directory') {
- return;
- }
- }
- }
-
- /**
- * recursively scan the filesystem and fill the cache
- * @param string $path
- * @param OC_EventSource $eventSource (optional)
- * @param int $count (optional)
- * @param string $root (optional)
- */
- public static function scan($path, $eventSource=false,&$count=0, $root=false) {
- if($eventSource) {
- $eventSource->send('scanning', array('file'=>$path, 'count'=>$count));
- }
- $lastSend=$count;
- // NOTE: Ugly hack to prevent shared files from going into the cache (the source already exists somewhere in the cache)
- if (substr($path, 0, 7) == '/Shared') {
- return;
- }
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
- self::scanFile($path, $root);
- $dh=$view->opendir($path.'/');
- $totalSize=0;
- if($dh) {
- while (($filename = readdir($dh)) !== false) {
- if($filename != '.' and $filename != '..') {
- $file=$path.'/'.$filename;
- if($view->is_dir($file.'/')) {
- self::scan($file, $eventSource, $count, $root);
- }else{
- $totalSize+=self::scanFile($file, $root);
- $count++;
- if($count>$lastSend+25 and $eventSource) {
- $lastSend=$count;
- $eventSource->send('scanning', array('file'=>$path, 'count'=>$count));
- }
- }
- }
- }
- }
-
- OC_FileCache_Update::cleanFolder($path, $root);
- self::increaseSize($path, $totalSize, $root);
- }
-
- /**
- * scan a single file
- * @param string path
- * @param string root (optional)
- * @return int size of the scanned file
- */
- public static function scanFile($path, $root=false) {
- // NOTE: Ugly hack to prevent shared files from going into the cache (the source already exists somewhere in the cache)
- if (substr($path, 0, 7) == '/Shared') {
- return;
- }
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
- if(!$view->is_readable($path)) return; //cant read, nothing we can do
- clearstatcache();
- $mimetype=$view->getMimeType($path);
- $stat=$view->stat($path);
- if($mimetype=='httpd/unix-directory') {
- $stat['size'] = 0;
- $writable=$view->is_writable($path.'/');
- }else{
- $writable=$view->is_writable($path);
- }
- $stat['mimetype']=$mimetype;
- $stat['writable']=$writable;
- if($path=='/') {
- $path='';
- }
- self::put($path, $stat, $root);
- return $stat['size'];
- }
-
- /**
- * find files by mimetype
- * @param string $part1
- * @param string $part2 (optional)
- * @param string root (optional)
- * @return array of file paths
- *
- * $part1 and $part2 together form the complete mimetype.
- * e.g. searchByMime('text', 'plain')
- *
- * seccond mimetype part can be ommited
- * e.g. searchByMime('audio')
- */
- public static function searchByMime($part1, $part2=null, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $rootLen=strlen($root);
- $root .= '%';
- $user=OC_User::getUser();
- if(!$part2) {
- $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `mimepart`=? AND `user`=? AND `path` LIKE ?');
- $result=$query->execute(array($part1, $user, $root));
- }else{
- $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `mimetype`=? AND `user`=? AND `path` LIKE ? ');
- $result=$query->execute(array($part1.'/'.$part2, $user, $root));
- }
- $names=array();
- while($row=$result->fetchRow()) {
- $names[]=substr($row['path'], $rootLen);
- }
- return $names;
- }
-
- /**
- * clean old pre-path_hash entries
- */
- public static function clean() {
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE LENGTH(`path_hash`)<30');
- $query->execute();
- }
-
- /**
- * clear filecache entries
- * @param string user (optonal)
- */
- public static function clear($user='') {
- if($user) {
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `user`=?');
- $query->execute(array($user));
- }else{
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache`');
- $query->execute();
- }
- }
-
- /**
- * trigger an update for the cache by setting the mtimes to 0
- * @param string $user (optional)
- */
- public static function triggerUpdate($user='') {
- if($user) {
- $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `mtime`=0 WHERE `user`=? AND `mimetype`= ? ');
- $query->execute(array($user,'httpd/unix-directory'));
- }else{
- $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `mtime`=0 AND `mimetype`= ? ');
- $query->execute(array('httpd/unix-directory'));
- }
- }
-}
-
-//watch for changes and try to keep the cache up to date
-OC_Hook::connect('OC_Filesystem', 'post_write', 'OC_FileCache_Update', 'fileSystemWatcherWrite');
-OC_Hook::connect('OC_Filesystem', 'post_delete', 'OC_FileCache_Update', 'fileSystemWatcherDelete');
-OC_Hook::connect('OC_Filesystem', 'post_rename', 'OC_FileCache_Update', 'fileSystemWatcherRename');
-OC_Hook::connect('OC_User', 'post_deleteUser', 'OC_FileCache_Update', 'deleteFromUser');
diff --git a/lib/filecache/cached.php b/lib/filecache/cached.php
deleted file mode 100644
index 5e0a00746b9..00000000000
--- a/lib/filecache/cached.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-/**
- * get data from the filecache without checking for updates
- */
-class OC_FileCache_Cached{
- public static $savedData=array();
-
- public static function get($path, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $path=$root.$path;
- $stmt=OC_DB::prepare('SELECT `id`, `path`,`ctime`,`mtime`,`mimetype`,`size`,`encrypted`,`versioned`,`writable` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- if ( ! OC_DB::isError($stmt) ) {
- $result=$stmt->execute(array(md5($path)));
- if ( ! OC_DB::isError($result) ) {
- $result = $result->fetchRow();
- } else {
- OC:Log::write('OC_FileCache_Cached', 'could not execute get: '. OC_DB::getErrorMessage($result), OC_Log::ERROR);
- $result = false;
- }
- } else {
- OC_Log::write('OC_FileCache_Cached', 'could not prepare get: '. OC_DB::getErrorMessage($stmt), OC_Log::ERROR);
- $result = false;
- }
- if(is_array($result)) {
- if(isset(self::$savedData[$path])) {
- $result=array_merge($result, self::$savedData[$path]);
- }
- return $result;
- }else{
- if(isset(self::$savedData[$path])) {
- return self::$savedData[$path];
- }else{
- return array();
- }
- }
- }
-
- /**
- * get all files and folders in a folder
- * @param string path
- * @param string root (optional)
- * @return array
- *
- * returns an array of assiciative arrays with the following keys:
- * - path
- * - name
- * - size
- * - mtime
- * - ctime
- * - mimetype
- * - encrypted
- * - versioned
- */
- public static function getFolderContent($path, $root=false, $mimetype_filter='') {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $parent=OC_FileCache::getId($path, $root);
- if($parent==-1) {
- return array();
- }
- $query=OC_DB::prepare('SELECT `id`,`path`,`name`,`ctime`,`mtime`,`mimetype`,`size`,`encrypted`,`versioned`,`writable` FROM `*PREFIX*fscache` WHERE `parent`=? AND (`mimetype` LIKE ? OR `mimetype` = ?)');
- $result=$query->execute(array($parent, $mimetype_filter.'%', 'httpd/unix-directory'))->fetchAll();
- if(is_array($result)) {
- return $result;
- }else{
- OC_Log::write('files', 'getFolderContent(): file not found in cache ('.$path.')', OC_Log::DEBUG);
- return false;
- }
- }
-}
diff --git a/lib/filecache/update.php b/lib/filecache/update.php
deleted file mode 100644
index bc403113e7c..00000000000
--- a/lib/filecache/update.php
+++ /dev/null
@@ -1,227 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-/**
- * handles updating the filecache according to outside changes
- */
-class OC_FileCache_Update{
- /**
- * check if a file or folder is updated outside owncloud
- * @param string path
- * @param string root (optional)
- * @param boolean folder
- * @return bool
- */
- public static function hasUpdated($path, $root=false, $folder=false) {
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
- if(!$view->file_exists($path)) {
- return false;
- }
- $cachedData=OC_FileCache_Cached::get($path, $root);
- if(isset($cachedData['mtime'])) {
- $cachedMTime=$cachedData['mtime'];
- if($folder) {
- return $view->hasUpdated($path.'/', $cachedMTime);
- }else{
- return $view->hasUpdated($path, $cachedMTime);
- }
- }else{//file not in cache, so it has to be updated
- if(($path=='/' or $path=='') and $root===false) {//dont auto update the home folder, it will be scanned
- return false;
- }
- return true;
- }
- }
-
- /**
- * delete non existing files from the cache
- */
- public static function cleanFolder($path, $root=false) {
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
-
- $cachedContent=OC_FileCache_Cached::getFolderContent($path, $root);
- foreach($cachedContent as $fileData) {
- $path=$fileData['path'];
- $file=$view->getRelativePath($path);
- if(!$view->file_exists($file)) {
- if($root===false) {//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem', 'post_delete', array('path'=>$file));
- }else{
- self::delete($file, $root);
- }
- }
- }
- }
-
- /**
- * update the cache according to changes in the folder
- * @param string path
- * @param string root (optional)
- */
- public static function updateFolder($path, $root=false) {
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
- $dh=$view->opendir($path.'/');
- if($dh) {//check for changed/new files
- while (($filename = readdir($dh)) !== false) {
- if($filename != '.' and $filename != '..' and $filename != '') {
- $file=$path.'/'.$filename;
- $isDir=$view->is_dir($file);
- if(self::hasUpdated($file, $root, $isDir)) {
- if($isDir) {
- self::updateFolder($file, $root);
- }elseif($root===false) {//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$file));
- }else{
- self::update($file, $root);
- }
- }
- }
- }
- }
-
- self::cleanFolder($path, $root);
-
- //update the folder last, so we can calculate the size correctly
- if($root===false) {//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$path));
- }else{
- self::update($path, $root);
- }
- }
-
- /**
- * called when changes are made to files
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherWrite($params) {
- $path=$params['path'];
- self::update($path);
- }
-
- /**
- * called when files are deleted
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherDelete($params) {
- $path=$params['path'];
- self::delete($path);
- }
-
- /**
- * called when files are deleted
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherRename($params) {
- $oldPath=$params['oldpath'];
- $newPath=$params['newpath'];
- self::rename($oldPath, $newPath);
- }
-
- /**
- * update the filecache according to changes to the filesystem
- * @param string path
- * @param string root (optional)
- */
- public static function update($path, $root=false) {
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
-
- $mimetype=$view->getMimeType($path);
-
- $size=0;
- $cached=OC_FileCache_Cached::get($path, $root);
- $cachedSize=isset($cached['size'])?$cached['size']:0;
-
- if($view->is_dir($path.'/')) {
- if(OC_FileCache::inCache($path, $root)) {
- $cachedContent=OC_FileCache_Cached::getFolderContent($path, $root);
- foreach($cachedContent as $file) {
- $size+=$file['size'];
- }
- $mtime=$view->filemtime($path.'/');
- $ctime=$view->filectime($path.'/');
- $writable=$view->is_writable($path.'/');
- OC_FileCache::put($path, array('size'=>$size,'mtime'=>$mtime,'ctime'=>$ctime,'mimetype'=>$mimetype, 'writable'=>$writable));
- }else{
- $count=0;
- OC_FileCache::scan($path, null, $count, $root);
- return; //increaseSize is already called inside scan
- }
- }else{
- $size=OC_FileCache::scanFile($path, $root);
- }
- if($path !== '' and $path !== '/') {
- OC_FileCache::increaseSize(dirname($path), $size-$cachedSize, $root);
- }
- }
-
- /**
- * update the filesystem after a delete has been detected
- * @param string path
- * @param string root (optional)
- */
- public static function delete($path, $root=false) {
- $cached=OC_FileCache_Cached::get($path, $root);
- if(!isset($cached['size'])) {
- return;
- }
- $size=$cached['size'];
- OC_FileCache::increaseSize(dirname($path), -$size, $root);
- OC_FileCache::delete($path, $root);
- }
-
- /**
- * update the filesystem after a rename has been detected
- * @param string oldPath
- * @param string newPath
- * @param string root (optional)
- */
- public static function rename($oldPath, $newPath, $root=false) {
- if(!OC_FileCache::inCache($oldPath, $root)) {
- return;
- }
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
-
- $cached=OC_FileCache_Cached::get($oldPath, $root);
- $oldSize=$cached['size'];
- OC_FileCache::increaseSize(dirname($oldPath), -$oldSize, $root);
- OC_FileCache::increaseSize(dirname($newPath), $oldSize, $root);
- OC_FileCache::move($oldPath, $newPath);
- }
-
- /**
- * delete files owned by user from the cache
- * @param string $parameters$parameters["uid"])
- */
- public static function deleteFromUser($parameters) {
- OC_FileCache::clear($parameters["uid"]);
- }
-}
diff --git a/lib/filechunking.php b/lib/filechunking.php
index 55a4d730430..d63a0d72c83 100644
--- a/lib/filechunking.php
+++ b/lib/filechunking.php
@@ -94,49 +94,49 @@ class OC_FileChunking {
}
public function file_assemble($path) {
- $absolutePath = OC_Filesystem::normalizePath(OC_Filesystem::getView()->getAbsolutePath($path));
+ $absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path));
$data = '';
// use file_put_contents as method because that best matches what this function does
- if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && OC_Filesystem::isValidPath($path)) {
- $path = OC_Filesystem::getView()->getRelativePath($absolutePath);
- $exists = OC_Filesystem::file_exists($path);
+ if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && \OC\Files\Filesystem::isValidPath($path)) {
+ $path = \OC\Files\Filesystem::getView()->getRelativePath($absolutePath);
+ $exists = \OC\Files\Filesystem::file_exists($path);
$run = true;
if(!$exists) {
OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_create,
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_create,
array(
- OC_Filesystem::signal_param_path => $path,
- OC_Filesystem::signal_param_run => &$run
+ \OC\Files\Filesystem::signal_param_path => $path,
+ \OC\Files\Filesystem::signal_param_run => &$run
)
);
}
OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_write,
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_write,
array(
- OC_Filesystem::signal_param_path => $path,
- OC_Filesystem::signal_param_run => &$run
+ \OC\Files\Filesystem::signal_param_path => $path,
+ \OC\Files\Filesystem::signal_param_run => &$run
)
);
if(!$run) {
return false;
}
- $target = OC_Filesystem::fopen($path, 'w');
+ $target = \OC\Files\Filesystem::fopen($path, 'w');
if($target) {
$count = $this->assemble($target);
fclose($target);
if(!$exists) {
OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_create,
- array( OC_Filesystem::signal_param_path => $path)
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_post_create,
+ array( \OC\Files\Filesystem::signal_param_path => $path)
);
}
OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_write,
- array( OC_Filesystem::signal_param_path => $path)
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_post_write,
+ array( \OC\Files\Filesystem::signal_param_path => $path)
);
OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count);
return $count > 0;
diff --git a/lib/fileproxy.php b/lib/fileproxy.php
index 2f81bde64a1..52ec79b4bdb 100644
--- a/lib/fileproxy.php
+++ b/lib/fileproxy.php
@@ -36,7 +36,7 @@
* The return value of the post-proxy will be used as the new result of the operation
* The operations that have a post-proxy are:
* file_get_contents, is_file, is_dir, file_exists, stat, is_readable,
- * is_writable, fileatime, filemtime, filectime, file_get_contents,
+ * is_writable, filemtime, filectime, file_get_contents,
* getMimeType, hash, fopen, free_space and search
*/
diff --git a/lib/fileproxy/fileoperations.php b/lib/fileproxy/fileoperations.php
index 516629adaec..47ccd8f8c26 100644
--- a/lib/fileproxy/fileoperations.php
+++ b/lib/fileproxy/fileoperations.php
@@ -28,10 +28,10 @@ class OC_FileProxy_FileOperations extends OC_FileProxy{
static $rootView;
public function premkdir($path) {
- if(!self::$rootView) {
- self::$rootView = new OC_FilesystemView('');
+ if(!self::$rootView){
+ self::$rootView = new \OC\Files\View('');
}
return !self::$rootView->file_exists($path);
}
-} \ No newline at end of file
+}
diff --git a/lib/fileproxy/quota.php b/lib/fileproxy/quota.php
index 742e02d471b..7e0f631c8fb 100644
--- a/lib/fileproxy/quota.php
+++ b/lib/fileproxy/quota.php
@@ -22,7 +22,7 @@
*/
/**
- * user quota managment
+ * user quota management
*/
class OC_FileProxy_Quota extends OC_FileProxy{
@@ -57,26 +57,28 @@ class OC_FileProxy_Quota extends OC_FileProxy{
* @return int
*/
private function getFreeSpace($path) {
- $storage=OC_Filesystem::getStorage($path);
- $owner=$storage->getOwner($path);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($path);
+ $owner=$storage->getOwner($internalPath);
+ if (!$owner) {
+ return -1;
+ }
$totalSpace=$this->getQuota($owner);
if($totalSpace==-1) {
return -1;
}
- $rootInfo=OC_FileCache::get('', "/".$owner."/files");
- // TODO Remove after merge of share_api
- if (OC_FileCache::inCache('/Shared', "/".$owner."/files")) {
- $sharedInfo=OC_FileCache::get('/Shared', "/".$owner."/files");
- } else {
- $sharedInfo = null;
- }
+ $view = new \OC\Files\View("/".$owner."/files");
+
+ $rootInfo=$view->getFileInfo('/');
$usedSpace=isset($rootInfo['size'])?$rootInfo['size']:0;
- $usedSpace=isset($sharedInfo['size'])?$usedSpace-$sharedInfo['size']:$usedSpace;
return $totalSpace-$usedSpace;
}
-
+
public function postFree_space($path, $space) {
$free=$this->getFreeSpace($path);
if($free==-1) {
@@ -93,8 +95,8 @@ class OC_FileProxy_Quota extends OC_FileProxy{
}
public function preCopy($path1, $path2) {
- if(!self::$rootView) {
- self::$rootView = new OC_FilesystemView('');
+ if(!self::$rootView){
+ self::$rootView = new \OC\Files\View('');
}
return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==-1);
}
diff --git a/lib/files.php b/lib/files.php
index 69097e41074..e3245653f99 100644
--- a/lib/files.php
+++ b/lib/files.php
@@ -1,147 +1,51 @@
<?php
/**
-* ownCloud
-*
-* @author Frank Karlitschek
-* @copyright 2012 Frank Karlitschek frank@owncloud.org
-*
-* 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 Frank Karlitschek
+ * @copyright 2012 Frank Karlitschek frank@owncloud.org
+ *
+ * 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/>.
+ *
+ */
/**
* Class for fileserver access
*
*/
class OC_Files {
- static $tmpFiles=array();
+ static $tmpFiles = array();
- /**
- * get the filesystem info
- * @param string path
- * @return array
- *
- * returns an associative array with the following keys:
- * - size
- * - mtime
- * - ctime
- * - mimetype
- * - encrypted
- * - versioned
- */
- public static function getFileInfo($path) {
- $path = OC_Filesystem::normalizePath($path);
- if (($path == '/Shared' || substr($path, 0, 8) == '/Shared/') && OC_App::isEnabled('files_sharing')) {
- if ($path == '/Shared') {
- list($info) = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP_ROOT);
- } else {
- $info = array();
- if (OC_Filesystem::file_exists($path)) {
- $info['size'] = OC_Filesystem::filesize($path);
- $info['mtime'] = OC_Filesystem::filemtime($path);
- $info['ctime'] = OC_Filesystem::filectime($path);
- $info['mimetype'] = OC_Filesystem::getMimeType($path);
- $info['encrypted'] = false;
- $info['versioned'] = false;
- }
- }
- } else {
- $info = OC_FileCache::get($path);
- }
- return $info;
- }
-
- /**
- * get the content of a directory
- * @param dir $directory path under datadirectory
- */
- public static function getDirectoryContent($directory, $mimetype_filter = '') {
- $directory=OC_Filesystem::normalizePath($directory);
- if($directory=='/') {
- $directory='';
- }
- $files = array();
- if (($directory == '/Shared' || substr($directory, 0, 8) == '/Shared/') && OC_App::isEnabled('files_sharing')) {
- if ($directory == '/Shared') {
- $files = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP, array('folder' => $directory, 'mimetype_filter' => $mimetype_filter));
- } else {
- $pos = strpos($directory, '/', 8);
- // Get shared folder name
- if ($pos !== false) {
- $itemTarget = substr($directory, 7, $pos - 7);
- } else {
- $itemTarget = substr($directory, 7);
- }
- $files = OCP\Share::getItemSharedWith('folder', $itemTarget, OC_Share_Backend_File::FORMAT_FILE_APP, array('folder' => $directory, 'mimetype_filter' => $mimetype_filter));
- }
- } else {
- $files = OC_FileCache::getFolderContent($directory, false, $mimetype_filter);
- foreach ($files as &$file) {
- $file['directory'] = $directory;
- $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
- $permissions = OCP\PERMISSION_READ;
- // NOTE: Remove check when new encryption is merged
- if (!$file['encrypted']) {
- $permissions |= OCP\PERMISSION_SHARE;
- }
- if ($file['type'] == 'dir' && $file['writable']) {
- $permissions |= OCP\PERMISSION_CREATE;
- }
- if ($file['writable']) {
- $permissions |= OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE;
- }
- $file['permissions'] = $permissions;
- }
- if ($directory == '' && OC_App::isEnabled('files_sharing')) {
- // Add 'Shared' folder
- $files = array_merge($files, OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP_ROOT));
- }
- }
- usort($files, "fileCmp");//TODO: remove this once ajax is merged
- return $files;
+ static public function getFileInfo($path){
+ return \OC\Files\Filesystem::getFileInfo($path);
}
- public static function searchByMime($mimetype_filter) {
- $files = array();
- $dirs_to_check = array('');
- while (!empty($dirs_to_check)) {
- // get next subdir to check
- $dir = array_pop($dirs_to_check);
- $dir_content = self::getDirectoryContent($dir, $mimetype_filter);
- foreach($dir_content as $file) {
- if ($file['type'] == 'file') {
- $files[] = $dir.'/'.$file['name'];
- }
- else {
- $dirs_to_check[] = $dir.'/'.$file['name'];
- }
- }
- }
- return $files;
+ static public function getDirectoryContent($path){
+ return \OC\Files\Filesystem::getDirectoryContent($path);
}
/**
- * return the content of a file or return a zip file containning multiply files
- *
- * @param dir $dir
- * @param file $file ; seperated list of files to download
- * @param boolean $only_header ; boolean to only send header of the request
- */
+ * return the content of a file or return a zip file containing multiple files
+ *
+ * @param string $dir
+ * @param string $file ; separated list of files to download
+ * @param boolean $only_header ; boolean to only send header of the request
+ */
public static function get($dir, $files, $only_header = false) {
$xsendfile = false;
- if (isset($_SERVER['MOD_X_SENDFILE_ENABLED']) ||
+ if (isset($_SERVER['MOD_X_SENDFILE_ENABLED']) ||
isset($_SERVER['MOD_X_ACCEL_REDIRECT_ENABLED'])) {
$xsendfile = true;
}
@@ -149,7 +53,7 @@ class OC_Files {
$files=explode(';', $files);
}
- if(is_array($files)) {
+ if (is_array($files)) {
self::validateZipDownload($dir, $files);
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
@@ -162,19 +66,20 @@ class OC_Files {
if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==true) {
exit("cannot open <$filename>\n");
}
- foreach($files as $file) {
- $file=$dir.'/'.$file;
- if(OC_Filesystem::is_file($file)) {
- $tmpFile=OC_Filesystem::toTmpFile($file);
- self::$tmpFiles[]=$tmpFile;
+ foreach ($files as $file) {
+ $file = $dir . '/' . $file;
+ if (\OC\Files\Filesystem::is_file($file)) {
+ $tmpFile = \OC\Files\Filesystem::toTmpFile($file);
+ self::$tmpFiles[] = $tmpFile;
$zip->addFile($tmpFile, basename($file));
- }elseif(OC_Filesystem::is_dir($file)) {
+ } elseif (\OC\Files\Filesystem::is_dir($file)) {
self::zipAddDir($file, $zip);
}
}
$zip->close();
+ $name = basename($dir) . '.zip';
set_time_limit($executionTime);
- }elseif(OC_Filesystem::is_dir($dir.'/'.$files)) {
+ } elseif (\OC\Files\Filesystem::is_dir($dir . '/' . $files)) {
self::validateZipDownload($dir, $files);
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
@@ -187,53 +92,55 @@ class OC_Files {
if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==true) {
exit("cannot open <$filename>\n");
}
- $file=$dir.'/'.$files;
+ $file = $dir . '/' . $files;
self::zipAddDir($file, $zip);
$zip->close();
+ $name = $files . '.zip';
set_time_limit($executionTime);
- }else{
- $zip=false;
- $filename=$dir.'/'.$files;
+ } else {
+ $zip = false;
+ $filename = $dir . '/' . $files;
+ $name = $files;
}
OC_Util::obEnd();
- if($zip or OC_Filesystem::is_readable($filename)) {
+ if ($zip or \OC\Files\Filesystem::isReadable($filename)) {
if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
- header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' );
+ header( 'Content-Disposition: attachment; filename="' . rawurlencode($name) . '"' );
} else {
- header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) )
- . '; filename="' . rawurlencode( basename($filename) ) . '"' );
+ header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($name)
+ . '; filename="' . rawurlencode($name) . '"' );
}
header('Content-Transfer-Encoding: binary');
OC_Response::disableCaching();
- if($zip) {
+ if ($zip) {
ini_set('zlib.output_compression', 'off');
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($filename));
self::addSendfileHeader($filename);
}else{
- header('Content-Type: '.OC_Filesystem::getMimeType($filename));
- header("Content-Length: ".OC_Filesystem::filesize($filename));
- $storage = OC_Filesystem::getStorage($filename);
- if ($storage instanceof OC_Filestorage_Local) {
- self::addSendfileHeader(OC_Filesystem::getLocalFile($filename));
+ header('Content-Type: '.\OC\Files\Filesystem::getMimeType($filename));
+ header("Content-Length: ".\OC\Files\Filesystem::filesize($filename));
+ list($storage) = \OC\Files\Filesystem::resolvePath($filename);
+ if ($storage instanceof \OC\File\Storage\Local) {
+ self::addSendfileHeader(\OC\Files\Filesystem::getLocalFile($filename));
}
}
- }elseif($zip or !OC_Filesystem::file_exists($filename)) {
+ } elseif ($zip or !\OC\Files\Filesystem::file_exists($filename)) {
header("HTTP/1.0 404 Not Found");
- $tmpl = new OC_Template( '', '404', 'guest' );
- $tmpl->assign('file', $filename);
+ $tmpl = new OC_Template('', '404', 'guest');
+ $tmpl->assign('file', $name);
$tmpl->printPage();
- }else{
+ } else {
header("HTTP/1.0 403 Forbidden");
die('403 Forbidden');
}
if($only_header) {
return ;
}
- if($zip) {
- $handle=fopen($filename, 'r');
+ if ($zip) {
+ $handle = fopen($filename, 'r');
if ($handle) {
- $chunkSize = 8*1024;// 1 MB chunks
+ $chunkSize = 8 * 1024; // 1 MB chunks
while (!feof($handle)) {
echo fread($handle, $chunkSize);
flush();
@@ -243,10 +150,10 @@ class OC_Files {
unlink($filename);
}
}else{
- OC_Filesystem::readfile($filename);
+ \OC\Files\Filesystem::readfile($filename);
}
- foreach(self::$tmpFiles as $tmpFile) {
- if(file_exists($tmpFile) and is_file($tmpFile)) {
+ foreach (self::$tmpFiles as $tmpFile) {
+ if (file_exists($tmpFile) and is_file($tmpFile)) {
unlink($tmpFile);
}
}
@@ -269,97 +176,27 @@ class OC_Files {
foreach($files as $file) {
$filename=$file['name'];
$file=$dir.'/'.$filename;
- if(OC_Filesystem::is_file($file)) {
- $tmpFile=OC_Filesystem::toTmpFile($file);
+ if(\OC\Files\Filesystem::is_file($file)) {
+ $tmpFile=\OC\Files\Filesystem::toTmpFile($file);
OC_Files::$tmpFiles[]=$tmpFile;
$zip->addFile($tmpFile, $internalDir.$filename);
- }elseif(OC_Filesystem::is_dir($file)) {
+ }elseif(\OC\Files\Filesystem::is_dir($file)) {
self::zipAddDir($file, $zip, $internalDir);
}
}
}
- /**
- * move a file or folder
- *
- * @param dir $sourceDir
- * @param file $source
- * @param dir $targetDir
- * @param file $target
- */
- public static function move($sourceDir, $source, $targetDir, $target) {
- if(OC_User::isLoggedIn() && ($sourceDir != '' || $source != 'Shared')) {
- $targetFile=self::normalizePath($targetDir.'/'.$target);
- $sourceFile=self::normalizePath($sourceDir.'/'.$source);
- return OC_Filesystem::rename($sourceFile, $targetFile);
- } else {
- return false;
- }
- }
-
- /**
- * copy a file or folder
- *
- * @param dir $sourceDir
- * @param file $source
- * @param dir $targetDir
- * @param file $target
- */
- public static function copy($sourceDir, $source, $targetDir, $target) {
- if(OC_User::isLoggedIn()) {
- $targetFile=$targetDir.'/'.$target;
- $sourceFile=$sourceDir.'/'.$source;
- return OC_Filesystem::copy($sourceFile, $targetFile);
- }
- }
-
- /**
- * create a new file or folder
- *
- * @param dir $dir
- * @param file $name
- * @param type $type
- */
- public static function newFile($dir, $name, $type) {
- if(OC_User::isLoggedIn()) {
- $file=$dir.'/'.$name;
- if($type=='dir') {
- return OC_Filesystem::mkdir($file);
- }elseif($type=='file') {
- $fileHandle=OC_Filesystem::fopen($file, 'w');
- if($fileHandle) {
- fclose($fileHandle);
- return true;
- }else{
- return false;
- }
- }
- }
- }
/**
- * deletes a file or folder
- *
- * @param dir $dir
- * @param file $name
- */
- public static function delete($dir, $file) {
- if(OC_User::isLoggedIn() && ($dir!= '' || $file != 'Shared')) {
- $file=$dir.'/'.$file;
- return OC_Filesystem::unlink($file);
- }
- }
-
- /**
- * checks if the selected files are within the size constraint. If not, outputs an error page.
- *
- * @param dir $dir
- * @param files $files
- */
+ * checks if the selected files are within the size constraint. If not, outputs an error page.
+ *
+ * @param dir $dir
+ * @param files $files
+ */
static function validateZipDownload($dir, $files) {
- if(!OC_Config::getValue('allowZipDownload', true)) {
+ if (!OC_Config::getValue('allowZipDownload', true)) {
$l = OC_L10N::get('lib');
header("HTTP/1.0 409 Conflict");
- $tmpl = new OC_Template( '', 'error', 'user' );
+ $tmpl = new OC_Template('', 'error', 'user');
$errors = array(
array(
'error' => $l->t('ZIP download is turned off.'),
@@ -372,19 +209,19 @@ class OC_Files {
}
$zipLimit = OC_Config::getValue('maxZipInputSize', OC_Helper::computerFileSize('800 MB'));
- if($zipLimit > 0) {
+ if ($zipLimit > 0) {
$totalsize = 0;
- if(is_array($files)) {
- foreach($files as $file) {
- $totalsize += OC_Filesystem::filesize($dir.'/'.$file);
+ if (is_array($files)) {
+ foreach ($files as $file) {
+ $totalsize += \OC\Files\Filesystem::filesize($dir . '/' . $file);
}
- }else{
- $totalsize += OC_Filesystem::filesize($dir.'/'.$files);
+ } else {
+ $totalsize += \OC\Files\Filesystem::filesize($dir . '/' . $files);
}
- if($totalsize > $zipLimit) {
+ if ($totalsize > $zipLimit) {
$l = OC_L10N::get('lib');
header("HTTP/1.0 409 Conflict");
- $tmpl = new OC_Template( '', 'error', 'user' );
+ $tmpl = new OC_Template('', 'error', 'user');
$errors = array(
array(
'error' => $l->t('Selected files too large to generate zip file.'),
@@ -399,78 +236,31 @@ class OC_Files {
}
/**
- * try to detect the mime type of a file
- *
- * @param string path
- * @return string guessed mime type
- */
- static function getMimeType($path) {
- return OC_Filesystem::getMimeType($path);
- }
-
- /**
- * get a file tree
- *
- * @param string path
- * @return array
- */
- static function getTree($path) {
- return OC_Filesystem::getTree($path);
- }
-
- /**
- * pull a file from a remote server
- * @param string source
- * @param string token
- * @param string dir
- * @param string file
- * @return string guessed mime type
- */
- static function pull($source, $token, $dir, $file) {
- $tmpfile=tempnam(get_temp_dir(), 'remoteCloudFile');
- $fp=fopen($tmpfile, 'w+');
- $url=$source.="/files/pull.php?token=$token";
- $ch=curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_FILE, $fp);
- curl_exec($ch);
- fclose($fp);
- $info=curl_getinfo($ch);
- $httpCode=$info['http_code'];
- curl_close($ch);
- if($httpCode==200 or $httpCode==0) {
- OC_Filesystem::fromTmpFile($tmpfile, $dir.'/'.$file);
- return true;
- }else{
- return false;
- }
- }
-
- /**
* set the maximum upload size limit for apache hosts using .htaccess
+ *
* @param int size filesisze in bytes
* @return false on failure, size on success
*/
static function setUploadLimit($size) {
//don't allow user to break his config -- upper boundary
- if($size > PHP_INT_MAX) {
+ if ($size > PHP_INT_MAX) {
//max size is always 1 byte lower than computerFileSize returns
- if($size > PHP_INT_MAX+1)
+ if ($size > PHP_INT_MAX + 1)
return false;
- $size -=1;
+ $size -= 1;
} else {
- $size=OC_Helper::humanFileSize($size);
- $size=substr($size, 0, -1);//strip the B
- $size=str_replace(' ', '', $size); //remove the space between the size and the postfix
+ $size = OC_Helper::humanFileSize($size);
+ $size = substr($size, 0, -1); //strip the B
+ $size = str_replace(' ', '', $size); //remove the space between the size and the postfix
}
//don't allow user to break his config -- broken or malicious size input
- if(intval($size) == 0) {
+ if (intval($size) == 0) {
return false;
}
- $htaccess = @file_get_contents(OC::$SERVERROOT.'/.htaccess'); //supress errors in case we don't have permissions for
- if(!$htaccess) {
+ $htaccess = @file_get_contents(OC::$SERVERROOT . '/.htaccess'); //supress errors in case we don't have permissions for
+ if (!$htaccess) {
return false;
}
@@ -479,52 +269,26 @@ class OC_Files {
'post_max_size'
);
- foreach($phpValueKeys as $key) {
- $pattern = '/php_value '.$key.' (\S)*/';
- $setting = 'php_value '.$key.' '.$size;
- $hasReplaced = 0;
- $content = preg_replace($pattern, $setting, $htaccess, 1, $hasReplaced);
- if($content !== null) {
+ foreach ($phpValueKeys as $key) {
+ $pattern = '/php_value ' . $key . ' (\S)*/';
+ $setting = 'php_value ' . $key . ' ' . $size;
+ $hasReplaced = 0;
+ $content = preg_replace($pattern, $setting, $htaccess, 1, $hasReplaced);
+ if ($content !== null) {
$htaccess = $content;
}
- if($hasReplaced == 0) {
+ if ($hasReplaced == 0) {
$htaccess .= "\n" . $setting;
}
}
//check for write permissions
- if(is_writable(OC::$SERVERROOT.'/.htaccess')) {
- file_put_contents(OC::$SERVERROOT.'/.htaccess', $htaccess);
+ if (is_writable(OC::$SERVERROOT . '/.htaccess')) {
+ file_put_contents(OC::$SERVERROOT . '/.htaccess', $htaccess);
return OC_Helper::computerFileSize($size);
} else {
- OC_Log::write('files', 'Can\'t write upload limit to '.OC::$SERVERROOT.'/.htaccess. Please check the file permissions', OC_Log::WARN);
+ OC_Log::write('files', 'Can\'t write upload limit to ' . OC::$SERVERROOT . '/.htaccess. Please check the file permissions', OC_Log::WARN);
}
-
return false;
}
-
- /**
- * normalize a path, removing any double, add leading /, etc
- * @param string $path
- * @return string
- */
- static public function normalizePath($path) {
- $path='/'.$path;
- $old='';
- while($old!=$path) {//replace any multiplicity of slashes with a single one
- $old=$path;
- $path=str_replace('//', '/', $path);
- }
- return $path;
- }
-}
-
-function fileCmp($a, $b) {
- if($a['type']=='dir' and $b['type']!='dir') {
- return -1;
- }elseif($a['type']!='dir' and $b['type']=='dir') {
- return 1;
- }else{
- return strnatcasecmp($a['name'], $b['name']);
- }
}
diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
new file mode 100644
index 00000000000..dcb6e8fd39a
--- /dev/null
+++ b/lib/files/cache/cache.php
@@ -0,0 +1,527 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+/**
+ * Metadata cache for the filesystem
+ *
+ * don't use this class directly if you need to get metadata, use \OC\Files\Filesystem::getFileInfo instead
+ */
+class Cache {
+ const NOT_FOUND = 0;
+ const PARTIAL = 1; //only partial data available, file not cached in the database
+ const SHALLOW = 2; //folder in cache, but not all child files are completely scanned
+ const COMPLETE = 3;
+
+ /**
+ * @var array partial data for the cache
+ */
+ private $partial = array();
+
+ /**
+ * @var string
+ */
+ private $storageId;
+
+ /**
+ * numeric storage id
+ *
+ * @var int $numericId
+ */
+ private $numericId;
+
+ private $mimetypeIds = array();
+ private $mimetypes = array();
+
+ /**
+ * @param \OC\Files\Storage\Storage|string $storage
+ */
+ public function __construct($storage) {
+ if ($storage instanceof \OC\Files\Storage\Storage) {
+ $this->storageId = $storage->getId();
+ } else {
+ $this->storageId = $storage;
+ }
+
+ $query = \OC_DB::prepare('SELECT `numeric_id` FROM `*PREFIX*storages` WHERE `id` = ?');
+ $result = $query->execute(array($this->storageId));
+ if ($row = $result->fetchRow()) {
+ $this->numericId = $row['numeric_id'];
+ } else {
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*storages`(`id`) VALUES(?)');
+ $query->execute(array($this->storageId));
+ $this->numericId = \OC_DB::insertid('*PREFIX*filecache');
+ }
+ }
+
+ public function getNumericStorageId() {
+ return $this->numericId;
+ }
+
+ /**
+ * normalize mimetypes
+ *
+ * @param string $mime
+ * @return int
+ */
+ public function getMimetypeId($mime) {
+ if (!isset($this->mimetypeIds[$mime])) {
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?');
+ $result = $query->execute(array($mime));
+ if ($row = $result->fetchRow()) {
+ $this->mimetypeIds[$mime] = $row['id'];
+ } else {
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*mimetypes`(`mimetype`) VALUES(?)');
+ $query->execute(array($mime));
+ $this->mimetypeIds[$mime] = \OC_DB::insertid('*PREFIX*mimetypes');
+ }
+ $this->mimetypes[$this->mimetypeIds[$mime]] = $mime;
+ }
+ return $this->mimetypeIds[$mime];
+ }
+
+ public function getMimetype($id) {
+ if (!isset($this->mimetypes[$id])) {
+ $query = \OC_DB::prepare('SELECT `mimetype` FROM `*PREFIX*mimetypes` WHERE `id` = ?');
+ $result = $query->execute(array($id));
+ if ($row = $result->fetchRow()) {
+ $this->mimetypes[$id] = $row['mimetype'];
+ } else {
+ return null;
+ }
+ }
+ return $this->mimetypes[$id];
+ }
+
+ /**
+ * get the stored metadata of a file or folder
+ *
+ * @param string/int $file
+ * @return array
+ */
+ public function get($file) {
+ if (is_string($file) or $file == '') {
+ $where = 'WHERE `storage` = ? AND `path_hash` = ?';
+ $params = array($this->numericId, md5($file));
+ } else { //file id
+ $where = 'WHERE `fileid` = ?';
+ $params = array($file);
+ }
+ $query = \OC_DB::prepare(
+ 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
+ FROM `*PREFIX*filecache` ' . $where);
+ $result = $query->execute($params);
+ $data = $result->fetchRow();
+
+ //merge partial data
+ if (!$data and is_string($file)) {
+ if (isset($this->partial[$file])) {
+ $data = $this->partial[$file];
+ }
+ } else {
+ //fix types
+ $data['fileid'] = (int)$data['fileid'];
+ $data['size'] = (int)$data['size'];
+ $data['mtime'] = (int)$data['mtime'];
+ $data['encrypted'] = (bool)$data['encrypted'];
+ $data['storage'] = $this->storageId;
+ $data['mimetype'] = $this->getMimetype($data['mimetype']);
+ $data['mimepart'] = $this->getMimetype($data['mimepart']);
+ }
+
+ return $data;
+ }
+
+ /**
+ * get the metadata of all files stored in $folder
+ *
+ * @param string $folder
+ * @return array
+ */
+ public function getFolderContents($folder) {
+ $fileId = $this->getId($folder);
+ if ($fileId > -1) {
+ $query = \OC_DB::prepare(
+ 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
+ FROM `*PREFIX*filecache` WHERE parent = ? ORDER BY `name` ASC');
+ $result = $query->execute(array($fileId));
+ $files = $result->fetchAll();
+ foreach ($files as &$file) {
+ $file['mimetype'] = $this->getMimetype($file['mimetype']);
+ $file['mimepart'] = $this->getMimetype($file['mimepart']);
+ }
+ return $files;
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * store meta data for a file or folder
+ *
+ * @param string $file
+ * @param array $data
+ *
+ * @return int file id
+ */
+ public function put($file, array $data) {
+ if (($id = $this->getId($file)) > -1) {
+ $this->update($id, $data);
+ return $id;
+ } else {
+ if (isset($this->partial[$file])) { //add any saved partial data
+ $data = array_merge($this->partial[$file], $data);
+ unset($this->partial[$file]);
+ }
+
+ $requiredFields = array('size', 'mtime', 'mimetype');
+ foreach ($requiredFields as $field) {
+ if (!isset($data[$field])) { //data not complete save as partial and return
+ $this->partial[$file] = $data;
+ return -1;
+ }
+ }
+
+ $data['path'] = $file;
+ $data['parent'] = $this->getParentId($file);
+ $data['name'] = basename($file);
+ $data['encrypted'] = isset($data['encrypted']) ? ((int)$data['encrypted']) : 0;
+
+ list($queryParts, $params) = $this->buildParts($data);
+ $queryParts[] = '`storage`';
+ $params[] = $this->numericId;
+ $valuesPlaceholder = array_fill(0, count($queryParts), '?');
+
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`(' . implode(', ', $queryParts) . ') VALUES(' . implode(', ', $valuesPlaceholder) . ')');
+ $query->execute($params);
+
+ return (int)\OC_DB::insertid('*PREFIX*filecache');
+ }
+ }
+
+ /**
+ * update the metadata in the cache
+ *
+ * @param int $id
+ * @param array $data
+ */
+ public function update($id, array $data) {
+ list($queryParts, $params) = $this->buildParts($data);
+ $params[] = $id;
+
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=? WHERE fileid = ?');
+ $query->execute($params);
+ }
+
+ /**
+ * extract query parts and params array from data array
+ *
+ * @param array $data
+ * @return array
+ */
+ function buildParts(array $data) {
+ $fields = array('path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'encrypted', 'etag');
+ $params = array();
+ $queryParts = array();
+ foreach ($data as $name => $value) {
+ if (array_search($name, $fields) !== false) {
+ if ($name === 'path') {
+ $params[] = md5($value);
+ $queryParts[] = '`path_hash`';
+ } elseif ($name === 'mimetype') {
+ $params[] = $this->getMimetypeId(substr($value, 0, strpos($value, '/')));
+ $queryParts[] = '`mimepart`';
+ $value = $this->getMimetypeId($value);
+ }
+ $params[] = $value;
+ $queryParts[] = '`' . $name . '`';
+ }
+ }
+ return array($queryParts, $params);
+ }
+
+ /**
+ * get the file id for a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getId($file) {
+ $pathHash = md5($file);
+
+ $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?');
+ $result = $query->execute(array($this->numericId, $pathHash));
+
+ if ($row = $result->fetchRow()) {
+ return $row['fileid'];
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * get the id of the parent folder of a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getParentId($file) {
+ if ($file === '') {
+ return -1;
+ } else {
+ $parent = dirname($file);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ return $this->getId($parent);
+ }
+ }
+
+ /**
+ * check if a file is available in the cache
+ *
+ * @param string $file
+ * @return bool
+ */
+ public function inCache($file) {
+ return $this->getId($file) != -1;
+ }
+
+ /**
+ * remove a file or folder from the cache
+ *
+ * @param string $file
+ */
+ public function remove($file) {
+ $entry = $this->get($file);
+ if ($entry['mimetype'] === 'httpd/unix-directory') {
+ $children = $this->getFolderContents($file);
+ foreach ($children as $child) {
+ $this->remove($child['path']);
+ }
+ }
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $query->execute(array($entry['fileid']));
+ }
+
+ /**
+ * Move a file or folder in the cache
+ *
+ * @param string $source
+ * @param string $target
+ */
+ public function move($source, $target) {
+ $sourceId = $this->getId($source);
+ $newParentId = $this->getParentId($target);
+
+ //find all child entries
+ $query = \OC_DB::prepare('SELECT `path`, `fileid` FROM `*PREFIX*filecache` WHERE `path` LIKE ?');
+ $result = $query->execute(array($source . '/%'));
+ $childEntries = $result->fetchAll();
+ $sourceLength = strlen($source);
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ? WHERE `fileid` = ?');
+
+ foreach ($childEntries as $child) {
+ $targetPath = $target . substr($child['path'], $sourceLength);
+ $query->execute(array($targetPath, md5($targetPath), $child['fileid']));
+ }
+
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `parent` =? WHERE `fileid` = ?');
+ $query->execute(array($target, md5($target), $newParentId, $sourceId));
+ }
+
+ /**
+ * remove all entries for files that are stored on the storage from the cache
+ */
+ public function clear() {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE storage = ?');
+ $query->execute(array($this->numericId));
+
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*storages` WHERE id = ?');
+ $query->execute(array($this->storageId));
+ }
+
+ /**
+ * @param string $file
+ *
+ * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+ */
+ public function getStatus($file) {
+ $pathHash = md5($file);
+ $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?');
+ $result = $query->execute(array($this->numericId, $pathHash));
+ if ($row = $result->fetchRow()) {
+ if ((int)$row['size'] === -1) {
+ return self::SHALLOW;
+ } else {
+ return self::COMPLETE;
+ }
+ } else {
+ if (isset($this->partial[$file])) {
+ return self::PARTIAL;
+ } else {
+ return self::NOT_FOUND;
+ }
+ }
+ }
+
+ /**
+ * search for files matching $pattern
+ *
+ * @param string $pattern
+ * @return array of file data
+ */
+ public function search($pattern) {
+ $query = \OC_DB::prepare('
+ SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
+ FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `storage` = ?'
+ );
+ $result = $query->execute(array($pattern, $this->numericId));
+ $files = array();
+ while ($row = $result->fetchRow()) {
+ $row['mimetype'] = $this->getMimetype($row['mimetype']);
+ $row['mimepart'] = $this->getMimetype($row['mimepart']);
+ $files[] = $row;
+ }
+ return $files;
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $mimetype
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ if (strpos($mimetype, '/')) {
+ $where = '`mimetype` = ?';
+ } else {
+ $where = '`mimepart` = ?';
+ }
+ $query = \OC_DB::prepare('
+ SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
+ FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `storage` = ?'
+ );
+ $mimetype = $this->getMimetypeId($mimetype);
+ $result = $query->execute(array($mimetype, $this->numericId));
+ $files = array();
+ while ($row = $result->fetchRow()) {
+ $row['mimetype'] = $this->getMimetype($row['mimetype']);
+ $row['mimepart'] = $this->getMimetype($row['mimepart']);
+ $files[] = $row;
+ }
+ return $files;
+ }
+
+ /**
+ * update the folder size and the size of all parent folders
+ *
+ * @param $path
+ */
+ public function correctFolderSize($path) {
+ $this->calculateFolderSize($path);
+ if ($path !== '') {
+ $parent = dirname($path);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ $this->correctFolderSize($parent);
+ }
+ }
+
+ /**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @return int
+ */
+ public function calculateFolderSize($path) {
+ $id = $this->getId($path);
+ if ($id === -1) {
+ return 0;
+ }
+ $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*filecache` WHERE `parent` = ? AND `storage` = ?');
+ $result = $query->execute(array($id, $this->numericId));
+ $totalSize = 0;
+ $hasChilds = 0;
+ while ($row = $result->fetchRow()) {
+ $hasChilds = true;
+ $size = (int)$row['size'];
+ if ($size === -1) {
+ $totalSize = -1;
+ break;
+ } else {
+ $totalSize += $size;
+ }
+ }
+
+ if ($hasChilds) {
+ $this->update($id, array('size' => $totalSize));
+ }
+ return $totalSize;
+ }
+
+ /**
+ * get all file ids on the files on the storage
+ *
+ * @return int[]
+ */
+ public function getAll() {
+ $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ?');
+ $result = $query->execute(array($this->numericId));
+ $ids = array();
+ while ($row = $result->fetchRow()) {
+ $ids[] = $row['fileid'];
+ }
+ return $ids;
+ }
+
+ /**
+ * find a folder in the cache which has not been fully scanned
+ *
+ * If multiply incomplete folders are in the cache, the one with the highest id will be returned,
+ * use the one with the highest id gives the best result with the background scanner, since that is most
+ * likely the folder where we stopped scanning previously
+ *
+ * @return string|bool the path of the folder or false when no folder matched
+ */
+ public function getIncomplete() {
+ $query = \OC_DB::prepare('SELECT `path` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1');
+ $query->execute(array($this->numericId));
+ if ($row = $query->fetchRow()) {
+ return $row['path'];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * get the storage id of the storage for a file and the internal path of the file
+ *
+ * @return array, first element holding the storage id, second the path
+ */
+ static public function getById($id) {
+ $query = \OC_DB::prepare('SELECT `storage`, `path` FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $result = $query->execute(array($id));
+ if ($row = $result->fetchRow()) {
+ $numericId = $row['storage'];
+ $path = $row['path'];
+ } else {
+ return null;
+ }
+
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?');
+ $result = $query->execute(array($numericId));
+ if ($row = $result->fetchRow()) {
+ return array($row['id'], $path);
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/lib/files/cache/legacy.php b/lib/files/cache/legacy.php
new file mode 100644
index 00000000000..33d4b8e7c9f
--- /dev/null
+++ b/lib/files/cache/legacy.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+/**
+ * Provide read only support for the old filecache
+ */
+class Legacy {
+ private $user;
+
+ private $cacheHasItems = null;
+
+ public function __construct($user) {
+ $this->user = $user;
+ }
+
+ function getCount() {
+ $query = \OC_DB::prepare('SELECT COUNT(`id`) AS `count` FROM `*PREFIX*fscache` WHERE `user` = ?');
+ $result = $query->execute(array($this->user));
+ if ($row = $result->fetchRow()) {
+ return $row['count'];
+ } else {
+ return 0;
+ }
+ }
+
+ /**
+ * check if a legacy cache is present and holds items
+ *
+ * @return bool
+ */
+ function hasItems() {
+ if (!is_null($this->cacheHasItems)) {
+ return $this->cacheHasItems;
+ }
+ try {
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `user` = ? LIMIT 1');
+ } catch (\Exception $e) {
+ $this->cacheHasItems = false;
+ return false;
+ }
+ try {
+ $result = $query->execute(array($this->user));
+ } catch (\Exception $e) {
+ $this->cacheHasItems = false;
+ return false;
+ }
+ $this->cacheHasItems = (bool)$result->fetchRow();
+ return $this->cacheHasItems;
+ }
+
+ /**
+ * @param string|int $path
+ * @return array
+ */
+ function get($path) {
+ if (is_numeric($path)) {
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `id` = ?');
+ } else {
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `path` = ?');
+ }
+ $result = $query->execute(array($path));
+ return $result->fetchRow();
+ }
+
+ /**
+ * @param int $id
+ * @return array
+ */
+ function getChildren($id) {
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `parent` = ?');
+ $result = $query->execute(array($id));
+ return $result->fetchAll();
+ }
+}
diff --git a/lib/files/cache/permissions.php b/lib/files/cache/permissions.php
new file mode 100644
index 00000000000..d0968337f02
--- /dev/null
+++ b/lib/files/cache/permissions.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+class Permissions {
+ /**
+ * @var string $storageId
+ */
+ private $storageId;
+
+ /**
+ * @param \OC\Files\Storage\Storage|string $storage
+ */
+ public function __construct($storage){
+ if($storage instanceof \OC\Files\Storage\Storage){
+ $this->storageId = $storage->getId();
+ }else{
+ $this->storageId = $storage;
+ }
+ }
+
+ /**
+ * get the permissions for a single file
+ *
+ * @param int $fileId
+ * @param string $user
+ * @return int (-1 if file no permissions set)
+ */
+ public function get($fileId, $user) {
+ $query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?');
+ $result = $query->execute(array($user, $fileId));
+ if ($row = $result->fetchRow()) {
+ return $row['permissions'];
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * set the permissions of a file
+ *
+ * @param int $fileId
+ * @param string $user
+ * @param int $permissions
+ */
+ public function set($fileId, $user, $permissions) {
+ if (self::get($fileId, $user) !== -1) {
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?');
+ } else {
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )');
+ }
+ $query->execute(array($permissions, $user, $fileId));
+ }
+
+ /**
+ * get the permissions of multiply files
+ *
+ * @param int[] $fileIds
+ * @param string $user
+ * @return int[]
+ */
+ public function getMultiple($fileIds, $user) {
+ if (count($fileIds) === 0) {
+ return array();
+ }
+ $params = $fileIds;
+ $params[] = $user;
+ $inPart = implode(', ', array_fill(0, count($fileIds), '?'));
+
+ $query = \OC_DB::prepare('SELECT `fileid`, `permissions` FROM `*PREFIX*permissions` WHERE `fileid` IN (' . $inPart . ') AND `user` = ?');
+ $result = $query->execute($params);
+ $filePermissions = array();
+ while ($row = $result->fetchRow()) {
+ $filePermissions[$row['fileid']] = $row['permissions'];
+ }
+ return $filePermissions;
+ }
+
+ /**
+ * remove the permissions for a file
+ *
+ * @param int $fileId
+ * @param string $user
+ */
+ public function remove($fileId, $user) {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
+ $query->execute(array($fileId, $user));
+ }
+
+ public function removeMultiple($fileIds, $user) {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
+ foreach($fileIds as $fileId){
+ $query->execute(array($fileId, $user));
+ }
+ }
+}
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
new file mode 100644
index 00000000000..5a9a119458e
--- /dev/null
+++ b/lib/files/cache/scanner.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+class Scanner {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage;
+
+ /**
+ * @var string $storageId
+ */
+ private $storageId;
+
+ /**
+ * @var \OC\Files\Cache\Cache $cache
+ */
+ private $cache;
+
+ const SCAN_RECURSIVE = true;
+ const SCAN_SHALLOW = false;
+
+ public function __construct(\OC\Files\Storage\Storage $storage) {
+ $this->storage = $storage;
+ $this->storageId = $this->storage->getId();
+ $this->cache = $storage->getCache();
+ }
+
+ /**
+ * get all the metadata of a file or folder
+ * *
+ *
+ * @param string $path
+ * @return array with metadata of the file
+ */
+ public function getData($path) {
+ $data = array();
+ if (!$this->storage->isReadable($path)) return null; //cant read, nothing we can do
+ $data['mimetype'] = $this->storage->getMimeType($path);
+ $data['mtime'] = $this->storage->filemtime($path);
+ if ($data['mimetype'] == 'httpd/unix-directory') {
+ $data['size'] = -1; //unknown
+ } else {
+ $data['size'] = $this->storage->filesize($path);
+ }
+ $data['etag'] = $this->storage->getETag($path);
+ return $data;
+ }
+
+ /**
+ * scan a single file and store it in the cache
+ *
+ * @param string $file
+ * @return array with metadata of the scanned file
+ */
+ public function scanFile($file) {
+ \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_file', array('path' => $file, 'storage' => $this->storageId));
+ $data = $this->getData($file);
+ if ($data) {
+ if ($file) {
+ $parent = dirname($file);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ if (!$this->cache->inCache($parent)) {
+ $this->scanFile($parent);
+ }
+ }
+ $id = $this->cache->put($file, $data);
+ }
+ return $data;
+ }
+
+ /**
+ * scan all the files in a folder and store them in the cache
+ *
+ * @param string $path
+ * @param SCAN_RECURSIVE/SCAN_SHALLOW $recursive
+ * @param bool $onlyChilds
+ * @return int the size of the scanned folder or -1 if the size is unknown at this stage
+ */
+ public function scan($path, $recursive = self::SCAN_RECURSIVE, $onlyChilds = false) {
+ \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_folder', array('path' => $path, 'storage' => $this->storageId));
+ $childQueue = array();
+ if (!$onlyChilds) {
+ $this->scanFile($path);
+ }
+
+ $size = 0;
+ if ($this->storage->is_dir($path) && ($dh = $this->storage->opendir($path))) {
+ \OC_DB::beginTransaction();
+ while ($file = readdir($dh)) {
+ if (!$this->isIgnoredFile($file)) {
+ $child = ($path) ? $path . '/' . $file : $file;
+ $data = $this->scanFile($child);
+ if ($data) {
+ if ($data['mimetype'] === 'httpd/unix-directory') {
+ if ($recursive === self::SCAN_RECURSIVE) {
+ $childQueue[] = $child;
+ $data['size'] = 0;
+ } else {
+ $data['size'] = -1;
+ }
+ } else {
+ }
+ if ($data['size'] === -1) {
+ $size = -1;
+ } elseif ($size !== -1) {
+ $size += $data['size'];
+ }
+ }
+ }
+ }
+ \OC_DB::commit();
+ foreach ($childQueue as $child) {
+ $childSize = $this->scan($child, self::SCAN_RECURSIVE, true);
+ if ($childSize === -1) {
+ $size = -1;
+ } else {
+ $size += $childSize;
+ }
+ }
+ if ($size !== -1) {
+ $this->cache->put($path, array('size' => $size));
+ }
+ }
+ return $size;
+ }
+
+ /**
+ * @brief check if the file should be ignored when scanning
+ * NOTE: files with a '.part' extension are ignored as well!
+ * prevents unfinished put requests to be scanned
+ * @param String $file
+ * @return boolean
+ */
+ private function isIgnoredFile($file) {
+ if ($file === '.' || $file === '..'
+ || pathinfo($file,PATHINFO_EXTENSION) === 'part')
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * walk over any folders that are not fully scanned yet and scan them
+ */
+ public function backgroundScan() {
+ while (($path = $this->cache->getIncomplete()) !== false) {
+ $this->scan($path);
+ $this->cache->correctFolderSize($path);
+ }
+ }
+}
diff --git a/lib/files/cache/updater.php b/lib/files/cache/updater.php
new file mode 100644
index 00000000000..d04541c219f
--- /dev/null
+++ b/lib/files/cache/updater.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+/**
+ * listen to filesystem hooks and change the cache accordingly
+ */
+class Updater {
+
+ /**
+ * resolve a path to a storage and internal path
+ *
+ * @param string $path
+ * @return array consisting of the storage and the internal path
+ */
+ static public function resolvePath($path) {
+ $view = \OC\Files\Filesystem::getView();
+ return $view->resolvePath($path);
+ }
+
+ static public function writeUpdate($path) {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = self::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($internalPath);
+ $scanner = $storage->getScanner($internalPath);
+ $scanner->scan($internalPath, Scanner::SCAN_SHALLOW);
+ $cache->correctFolderSize($internalPath);
+ self::correctFolder($path, $storage->filemtime($internalPath));
+ }
+ }
+
+ static public function deleteUpdate($path) {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = self::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($internalPath);
+ $cache->remove($internalPath);
+ $cache->correctFolderSize($internalPath);
+ self::correctFolder($path, time());
+ }
+ }
+
+ /**
+ * Update the mtime and ETag of all parent folders
+ *
+ * @param string $path
+ * @param string $time
+ */
+ static public function correctFolder($path, $time) {
+ if ($path !== '' && $path !== '/') {
+ $parent = dirname($path);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = self::resolvePath($parent);
+ if ($storage) {
+ $cache = $storage->getCache();
+ $id = $cache->getId($internalPath);
+ if ($id !== -1) {
+ $cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath)));
+ self::correctFolder($parent, $time);
+ }
+ }
+ }
+ }
+
+ /**
+ * @param array $params
+ */
+ static public function writeHook($params) {
+ self::writeUpdate($params['path']);
+ }
+
+ /**
+ * @param array $params
+ */
+ static public function renameHook($params) {
+ self::deleteUpdate($params['oldpath']);
+ self::writeUpdate($params['newpath']);
+ }
+
+ /**
+ * @param array $params
+ */
+ static public function deleteHook($params) {
+ self::deleteUpdate($params['path']);
+ }
+}
diff --git a/lib/files/cache/upgrade.php b/lib/files/cache/upgrade.php
new file mode 100644
index 00000000000..eb8c7297c3e
--- /dev/null
+++ b/lib/files/cache/upgrade.php
@@ -0,0 +1,159 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+class Upgrade {
+ /**
+ * @var Legacy $legacy
+ */
+ private $legacy;
+
+ private $numericIds = array();
+
+ private $mimeTypeIds = array();
+
+ /**
+ * @param Legacy $legacy
+ */
+ public function __construct($legacy) {
+ $this->legacy = $legacy;
+ }
+
+ /**
+ * Preform a shallow upgrade
+ *
+ * @param string $path
+ * @param int $mode
+ */
+ function upgradePath($path, $mode = Scanner::SCAN_RECURSIVE) {
+ if (!$this->legacy->hasItems()) {
+ return;
+ }
+ \OC_Hook::emit('\OC\Files\Cache\Upgrade', 'migrate_path', $path);
+
+ if ($row = $this->legacy->get($path)) {
+ $data = $this->getNewData($row);
+ $this->insert($data);
+
+ $this->upgradeChilds($data['id'], $mode);
+ }
+ }
+
+ /**
+ * @param int $id
+ */
+ function upgradeChilds($id, $mode = Scanner::SCAN_RECURSIVE) {
+ $children = $this->legacy->getChildren($id);
+ foreach ($children as $child) {
+ $childData = $this->getNewData($child);
+ \OC_Hook::emit('\OC\Files\Cache\Upgrade', 'migrate_path', $child['path']);
+ $this->insert($childData);
+ if ($mode == Scanner::SCAN_RECURSIVE) {
+ $this->upgradeChilds($child['id']);
+ }
+ }
+ }
+
+ /**
+ * @param array $data the data for the new cache
+ */
+ function insert($data) {
+ if (!$this->inCache($data['storage'], $data['path_hash'])) {
+ $insertQuery = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`
+ ( `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` )
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
+
+ $insertQuery->execute(array($data['id'], $data['storage'], $data['path'], $data['path_hash'], $data['parent'], $data['name'],
+ $data['mimetype'], $data['mimepart'], $data['size'], $data['mtime'], $data['encrypted']));
+ }
+ }
+
+ /**
+ * @param string $storage
+ * @param string $pathHash
+ * @return bool
+ */
+ function inCache($storage, $pathHash) {
+ $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?');
+ $result = $query->execute(array($storage, $pathHash));
+ return (bool)$result->fetchRow();
+ }
+
+ /**
+ * get the new data array from the old one
+ *
+ * @param array $data the data from the old cache
+ * @return array
+ */
+ function getNewData($data) {
+ $newData = $data;
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($data['path']);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath;
+ */
+ $newData['path_hash'] = md5($internalPath);
+ $newData['path'] = $internalPath;
+ $newData['storage'] = $this->getNumericId($storage);
+ $newData['parent'] = ($internalPath === '') ? -1 : $data['parent'];
+ $newData['permissions'] = ($data['writable']) ? \OCP\PERMISSION_ALL : \OCP\PERMISSION_READ;
+ $newData['storage_object'] = $storage;
+ $newData['mimetype'] = $this->getMimetypeId($newData['mimetype'], $storage);
+ $newData['mimepart'] = $this->getMimetypeId($newData['mimepart'], $storage);
+ return $newData;
+ }
+
+ /**
+ * get the numeric storage id
+ *
+ * @param \OC\Files\Storage\Storage $storage
+ * @return int
+ */
+ function getNumericId($storage) {
+ $storageId = $storage->getId();
+ if (!isset($this->numericIds[$storageId])) {
+ $cache = $storage->getCache();
+ $this->numericIds[$storageId] = $cache->getNumericStorageId();
+ }
+ return $this->numericIds[$storageId];
+ }
+
+ /**
+ * @param string $mimetype
+ * @param \OC\Files\Storage\Storage $storage
+ * @return int
+ */
+ function getMimetypeId($mimetype, $storage) {
+ if (!isset($this->mimeTypeIds[$mimetype])) {
+ $cache = new Cache($storage);
+ $this->mimeTypeIds[$mimetype] = $cache->getMimetypeId($mimetype);
+ }
+ return $this->mimeTypeIds[$mimetype];
+ }
+
+ /**
+ * check if a cache upgrade is required for $user
+ *
+ * @param string $user
+ * @return bool
+ */
+ static function needUpgrade($user) {
+ $cacheVersion = (int)\OCP\Config::getUserValue($user, 'files', 'cache_version', 4);
+ return $cacheVersion < 5;
+ }
+
+ /**
+ * mark the filecache as upgrade
+ *
+ * @param string $user
+ */
+ static function upgradeDone($user) {
+ \OCP\Config::setUserValue($user, 'files', 'cache_version', 5);
+ }
+}
diff --git a/lib/files/cache/watcher.php b/lib/files/cache/watcher.php
new file mode 100644
index 00000000000..31059ec7f56
--- /dev/null
+++ b/lib/files/cache/watcher.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+/**
+ * check the storage backends for updates and change the cache accordingly
+ */
+class Watcher {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage;
+
+ /**
+ * @var Cache $cache
+ */
+ private $cache;
+
+ /**
+ * @var Scanner $scanner;
+ */
+ private $scanner;
+
+ /**
+ * @param \OC\Files\Storage\Storage $storage
+ */
+ public function __construct(\OC\Files\Storage\Storage $storage) {
+ $this->storage = $storage;
+ $this->cache = $storage->getCache();
+ $this->scanner = $storage->getScanner();
+ }
+
+ /**
+ * check $path for updates
+ *
+ * @param string $path
+ */
+ public function checkUpdate($path) {
+ $cachedEntry = $this->cache->get($path);
+ if ($this->storage->hasUpdated($path, $cachedEntry['mtime'])) {
+ if ($this->storage->is_dir($path)) {
+ $this->scanner->scan($path, Scanner::SCAN_SHALLOW);
+ } else {
+ $this->scanner->scanFile($path);
+ }
+ if ($cachedEntry['mimetype'] === 'httpd/unix-directory') {
+ $this->cleanFolder($path);
+ }
+ $this->cache->correctFolderSize($path);
+ }
+ }
+
+ /**
+ * remove deleted files in $path from the cache
+ *
+ * @param string $path
+ */
+ public function cleanFolder($path) {
+ $cachedContent = $this->cache->getFolderContents($path);
+ foreach ($cachedContent as $entry) {
+ if (!$this->storage->file_exists($entry['path'])) {
+ $this->cache->remove($entry['path']);
+ }
+ }
+ }
+}
diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php
new file mode 100644
index 00000000000..a0c3c4b9b75
--- /dev/null
+++ b/lib/files/filesystem.php
@@ -0,0 +1,637 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Class for abstraction of filesystem functions
+ * This class won't call any filesystem functions for itself but but will pass them to the correct OC_Filestorage object
+ * this class should also handle all the file permission related stuff
+ *
+ * Hooks provided:
+ * read(path)
+ * write(path, &run)
+ * post_write(path)
+ * create(path, &run) (when a file is created, both create and write will be emitted in that order)
+ * post_create(path)
+ * delete(path, &run)
+ * post_delete(path)
+ * rename(oldpath,newpath, &run)
+ * post_rename(oldpath,newpath)
+ * copy(oldpath,newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emitted in that order)
+ * post_rename(oldpath,newpath)
+ *
+ * the &run parameter can be set to false to prevent the operation from occurring
+ */
+
+namespace OC\Files;
+
+class Filesystem {
+ public static $loaded = false;
+ /**
+ * @var \OC\Files\View $defaultInstance
+ */
+ static private $defaultInstance;
+
+
+ /**
+ * classname which used for hooks handling
+ * used as signalclass in OC_Hooks::emit()
+ */
+ const CLASSNAME = 'OC_Filesystem';
+
+ /**
+ * signalname emitted before file renaming
+ *
+ * @param string $oldpath
+ * @param string $newpath
+ */
+ const signal_rename = 'rename';
+
+ /**
+ * signal emitted after file renaming
+ *
+ * @param string $oldpath
+ * @param string $newpath
+ */
+ const signal_post_rename = 'post_rename';
+
+ /**
+ * signal emitted before file/dir creation
+ *
+ * @param string $path
+ * @param bool $run changing this flag to false in hook handler will cancel event
+ */
+ const signal_create = 'create';
+
+ /**
+ * signal emitted after file/dir creation
+ *
+ * @param string $path
+ * @param bool $run changing this flag to false in hook handler will cancel event
+ */
+ const signal_post_create = 'post_create';
+
+ /**
+ * signal emits before file/dir copy
+ *
+ * @param string $oldpath
+ * @param string $newpath
+ * @param bool $run changing this flag to false in hook handler will cancel event
+ */
+ const signal_copy = 'copy';
+
+ /**
+ * signal emits after file/dir copy
+ *
+ * @param string $oldpath
+ * @param string $newpath
+ */
+ const signal_post_copy = 'post_copy';
+
+ /**
+ * signal emits before file/dir save
+ *
+ * @param string $path
+ * @param bool $run changing this flag to false in hook handler will cancel event
+ */
+ const signal_write = 'write';
+
+ /**
+ * signal emits after file/dir save
+ *
+ * @param string $path
+ */
+ const signal_post_write = 'post_write';
+
+ /**
+ * signal emits when reading file/dir
+ *
+ * @param string $path
+ */
+ const signal_read = 'read';
+
+ /**
+ * signal emits when removing file/dir
+ *
+ * @param string $path
+ */
+ const signal_delete = 'delete';
+
+ /**
+ * parameters definitions for signals
+ */
+ const signal_param_path = 'path';
+ const signal_param_oldpath = 'oldpath';
+ const signal_param_newpath = 'newpath';
+
+ /**
+ * run - changing this flag to false in hook handler will cancel event
+ */
+ const signal_param_run = 'run';
+
+ /**
+ * get the mountpoint of the storage object for a path
+ ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
+ *
+ * @param string $path
+ * @return string
+ */
+ static public function getMountPoint($path) {
+ $mount = Mount::find($path);
+ if ($mount) {
+ return $mount->getMountPoint();
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * get a list of all mount points in a directory
+ *
+ * @param string $path
+ * @return string[]
+ */
+ static public function getMountPoints($path) {
+ $result = array();
+ $mounts = Mount::findIn($path);
+ foreach ($mounts as $mount) {
+ $result[] = $mount->getMountPoint();
+ }
+ return $result;
+ }
+
+ /**
+ * get the storage mounted at $mountPoint
+ *
+ * @param string $mountPoint
+ * @return \OC\Files\Storage\Storage
+ */
+ public static function getStorage($mountPoint) {
+ $mount = Mount::find($mountPoint);
+ return $mount->getStorage();
+ }
+
+ /**
+ * resolve a path to a storage and internal path
+ *
+ * @param string $path
+ * @return array consisting of the storage and the internal path
+ */
+ static public function resolvePath($path) {
+ $mount = Mount::find($path);
+ if ($mount) {
+ return array($mount->getStorage(), $mount->getInternalPath($path));
+ } else {
+ return array(null, null);
+ }
+ }
+
+ static public function init($user, $root) {
+ if (self::$defaultInstance) {
+ return false;
+ }
+ self::$defaultInstance = new View($root);
+
+ //load custom mount config
+ self::initMountPoints($user);
+
+ self::$loaded = true;
+
+ return true;
+ }
+
+ /**
+ * Initialize system and personal mount points for a user
+ *
+ * @param string $user
+ */
+ public static function initMountPoints($user = '') {
+ if ($user == '') {
+ $user = \OC_User::getUser();
+ }
+ // Load system mount points
+ if (is_file(\OC::$SERVERROOT . '/config/mount.php')) {
+ $mountConfig = include 'config/mount.php';
+ if (isset($mountConfig['global'])) {
+ foreach ($mountConfig['global'] as $mountPoint => $options) {
+ self::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ if (isset($mountConfig['group'])) {
+ foreach ($mountConfig['group'] as $group => $mounts) {
+ if (\OC_Group::inGroup($user, $group)) {
+ foreach ($mounts as $mountPoint => $options) {
+ $mountPoint = self::setUserVars($user, $mountPoint);
+ foreach ($options as &$option) {
+ $option = self::setUserVars($user, $option);
+ }
+ self::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ }
+ }
+ if (isset($mountConfig['user'])) {
+ foreach ($mountConfig['user'] as $mountUser => $mounts) {
+ if ($user === 'all' or strtolower($mountUser) === strtolower($user)) {
+ foreach ($mounts as $mountPoint => $options) {
+ $mountPoint = self::setUserVars($user, $mountPoint);
+ foreach ($options as &$option) {
+ $option = self::setUserVars($user, $option);
+ }
+ self::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ }
+ }
+ }
+ // Load personal mount points
+ $root = \OC_User::getHome($user);
+ self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
+ if (is_file($root . '/mount.php')) {
+ $mountConfig = include $root . '/mount.php';
+ if (isset($mountConfig['user'][$user])) {
+ foreach ($mountConfig['user'][$user] as $mountPoint => $options) {
+ self::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ }
+ }
+
+ /**
+ * fill in the correct values for $user, and $password placeholders
+ *
+ * @param string $input
+ * @param string $input
+ * @return string
+ */
+ private static function setUserVars($user, $input) {
+ return str_replace('$user', $user, $input);
+ }
+
+ /**
+ * get the default filesystem view
+ *
+ * @return View
+ */
+ static public function getView() {
+ return self::$defaultInstance;
+ }
+
+ /**
+ * tear down the filesystem, removing all storage providers
+ */
+ static public function tearDown() {
+ self::clearMounts();
+ }
+
+ /**
+ * @brief get the relative path of the root data directory for the current user
+ * @return string
+ *
+ * Returns path like /admin/files
+ */
+ static public function getRoot() {
+ return self::$defaultInstance->getRoot();
+ }
+
+ /**
+ * clear all mounts and storage backends
+ */
+ public static function clearMounts() {
+ Mount::clear();
+ }
+
+ /**
+ * mount an \OC\Files\Storage\Storage in our virtual filesystem
+ *
+ * @param \OC\Files\Storage\Storage|string $class
+ * @param array $arguments
+ * @param string $mountpoint
+ */
+ static public function mount($class, $arguments, $mountpoint) {
+ new Mount($class, $mountpoint, $arguments);
+ }
+
+ /**
+ * return the path to a local version of the file
+ * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
+ *
+ * @param string $path
+ * @return string
+ */
+ static public function getLocalFile($path) {
+ return self::$defaultInstance->getLocalFile($path);
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ static public function getLocalFolder($path) {
+ return self::$defaultInstance->getLocalFolder($path);
+ }
+
+ /**
+ * return path to file which reflects one visible in browser
+ *
+ * @param string $path
+ * @return string
+ */
+ static public function getLocalPath($path) {
+ $datadir = \OC_User::getHome(\OC_User::getUser()) . '/files';
+ $newpath = $path;
+ if (strncmp($newpath, $datadir, strlen($datadir)) == 0) {
+ $newpath = substr($path, strlen($datadir));
+ }
+ return $newpath;
+ }
+
+ /**
+ * check if the requested path is valid
+ *
+ * @param string $path
+ * @return bool
+ */
+ static public function isValidPath($path) {
+ $path = self::normalizePath($path);
+ if (!$path || $path[0] !== '/') {
+ $path = '/' . $path;
+ }
+ if (strstr($path, '/../') || strrchr($path, '/') === '/..') {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * checks if a file is blacklisted for storage in the filesystem
+ * Listens to write and rename hooks
+ *
+ * @param array $data from hook
+ */
+ static public function isBlacklisted($data) {
+ $blacklist = \OC_Config::getValue('blacklisted_files', array('.htaccess'));
+ if (isset($data['path'])) {
+ $path = $data['path'];
+ } else if (isset($data['newpath'])) {
+ $path = $data['newpath'];
+ }
+ if (isset($path)) {
+ $filename = strtolower(basename($path));
+ if (in_array($filename, $blacklist)) {
+ $data['run'] = false;
+ }
+ }
+ }
+
+ /**
+ * following functions are equivalent to their php builtin equivalents for arguments/return values.
+ */
+ static public function mkdir($path) {
+ return self::$defaultInstance->mkdir($path);
+ }
+
+ static public function rmdir($path) {
+ return self::$defaultInstance->rmdir($path);
+ }
+
+ static public function opendir($path) {
+ return self::$defaultInstance->opendir($path);
+ }
+
+ static public function readdir($path) {
+ return self::$defaultInstance->readdir($path);
+ }
+
+ static public function is_dir($path) {
+ return self::$defaultInstance->is_dir($path);
+ }
+
+ static public function is_file($path) {
+ return self::$defaultInstance->is_file($path);
+ }
+
+ static public function stat($path) {
+ return self::$defaultInstance->stat($path);
+ }
+
+ static public function filetype($path) {
+ return self::$defaultInstance->filetype($path);
+ }
+
+ static public function filesize($path) {
+ return self::$defaultInstance->filesize($path);
+ }
+
+ static public function readfile($path) {
+ return self::$defaultInstance->readfile($path);
+ }
+
+ static public function isCreatable($path) {
+ return self::$defaultInstance->isCreatable($path);
+ }
+
+ static public function isReadable($path) {
+ return self::$defaultInstance->isReadable($path);
+ }
+
+ static public function isUpdatable($path) {
+ return self::$defaultInstance->isUpdatable($path);
+ }
+
+ static public function isDeletable($path) {
+ return self::$defaultInstance->isDeletable($path);
+ }
+
+ static public function isSharable($path) {
+ return self::$defaultInstance->isSharable($path);
+ }
+
+ static public function file_exists($path) {
+ return self::$defaultInstance->file_exists($path);
+ }
+
+ static public function filemtime($path) {
+ return self::$defaultInstance->filemtime($path);
+ }
+
+ static public function touch($path, $mtime = null) {
+ return self::$defaultInstance->touch($path, $mtime);
+ }
+
+ static public function file_get_contents($path) {
+ return self::$defaultInstance->file_get_contents($path);
+ }
+
+ static public function file_put_contents($path, $data) {
+ return self::$defaultInstance->file_put_contents($path, $data);
+ }
+
+ static public function unlink($path) {
+ return self::$defaultInstance->unlink($path);
+ }
+
+ static public function rename($path1, $path2) {
+ return self::$defaultInstance->rename($path1, $path2);
+ }
+
+ static public function copy($path1, $path2) {
+ return self::$defaultInstance->copy($path1, $path2);
+ }
+
+ static public function fopen($path, $mode) {
+ return self::$defaultInstance->fopen($path, $mode);
+ }
+
+ static public function toTmpFile($path) {
+ return self::$defaultInstance->toTmpFile($path);
+ }
+
+ static public function fromTmpFile($tmpFile, $path) {
+ return self::$defaultInstance->fromTmpFile($tmpFile, $path);
+ }
+
+ static public function getMimeType($path) {
+ return self::$defaultInstance->getMimeType($path);
+ }
+
+ static public function hash($type, $path, $raw = false) {
+ return self::$defaultInstance->hash($type, $path, $raw);
+ }
+
+ static public function free_space($path = '/') {
+ return self::$defaultInstance->free_space($path);
+ }
+
+ static public function search($query) {
+ return self::$defaultInstance->search($query);
+ }
+
+ static public function searchByMime($query) {
+ return self::$defaultInstance->searchByMime($query);
+ }
+
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @param int $time
+ * @return bool
+ */
+ static public function hasUpdated($path, $time) {
+ return self::$defaultInstance->hasUpdated($path, $time);
+ }
+
+ /**
+ * @brief Fix common problems with a file path
+ * @param string $path
+ * @param bool $stripTrailingSlash
+ * @return string
+ */
+ public static function normalizePath($path, $stripTrailingSlash = true) {
+ if ($path == '') {
+ return '/';
+ }
+ //no windows style slashes
+ $path = str_replace('\\', '/', $path);
+ //add leading slash
+ if ($path[0] !== '/') {
+ $path = '/' . $path;
+ }
+ //remove duplicate slashes
+ while (strpos($path, '//') !== false) {
+ $path = str_replace('//', '/', $path);
+ }
+ //remove trailing slash
+ if ($stripTrailingSlash and strlen($path) > 1 and substr($path, -1, 1) === '/') {
+ $path = substr($path, 0, -1);
+ }
+ //normalize unicode if possible
+ if (class_exists('Normalizer')) {
+ $path = \Normalizer::normalize($path);
+ }
+ return $path;
+ }
+
+ /**
+ * get the filesystem info
+ *
+ * @param string $path
+ * @return array
+ *
+ * returns an associative array with the following keys:
+ * - size
+ * - mtime
+ * - mimetype
+ * - encrypted
+ * - versioned
+ */
+ public static function getFileInfo($path) {
+ return self::$defaultInstance->getFileInfo($path);
+ }
+
+ /**
+ * change file metadata
+ *
+ * @param string $path
+ * @param array $data
+ * @return int
+ *
+ * returns the fileid of the updated file
+ */
+ public static function putFileInfo($path, $data) {
+ return self::$defaultInstance->putFileInfo($path, $data);
+ }
+
+ /**
+ * get the content of a directory
+ *
+ * @param string $directory path under datadirectory
+ * @return array
+ */
+ public static function getDirectoryContent($directory) {
+ return self::$defaultInstance->getDirectoryContent($directory);
+ }
+
+ /**
+ * Get the path of a file by id
+ *
+ * Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file
+ *
+ * @param int $id
+ * @return string
+ */
+ public static function getPath($id) {
+ return self::$defaultInstance->getPath($id);
+ }
+
+ /**
+ * Get the owner for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public static function getOwner($path) {
+ return self::$defaultInstance->getOwner($path);
+ }
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ static public function getETag($path) {
+ return self::$defaultInstance->getETag($path);
+ }
+}
+
+\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook');
+\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook');
+\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
+
+\OC_Util::setupFS();
diff --git a/lib/files/mapper.php b/lib/files/mapper.php
new file mode 100644
index 00000000000..71b665e49bb
--- /dev/null
+++ b/lib/files/mapper.php
@@ -0,0 +1,216 @@
+<?php
+
+namespace OC\Files;
+
+/**
+ * class Mapper is responsible to translate logical paths to physical paths and reverse
+ */
+class Mapper
+{
+ /**
+ * @param string $logicPath
+ * @param bool $create indicates if the generated physical name shall be stored in the database or not
+ * @return string the physical path
+ */
+ public function logicToPhysical($logicPath, $create) {
+ $physicalPath = $this->resolveLogicPath($logicPath);
+ if ($physicalPath !== null) {
+ return $physicalPath;
+ }
+
+ return $this->create($logicPath, $create);
+ }
+
+ /**
+ * @param string $physicalPath
+ * @return string|null
+ */
+ public function physicalToLogic($physicalPath) {
+ $logicPath = $this->resolvePhysicalPath($physicalPath);
+ if ($logicPath !== null) {
+ return $logicPath;
+ }
+
+ $this->insert($physicalPath, $physicalPath);
+ return $physicalPath;
+ }
+
+ /**
+ * @param string $path
+ * @param bool $isLogicPath indicates if $path is logical or physical
+ * @param $recursive
+ */
+ public function removePath($path, $isLogicPath, $recursive) {
+ if ($recursive) {
+ $path=$path.'%';
+ }
+
+ if ($isLogicPath) {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*file_map` WHERE `logic_path` LIKE ?');
+ $query->execute(array($path));
+ } else {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*file_map` WHERE `physic_path` LIKE ?');
+ $query->execute(array($path));
+ }
+ }
+
+ /**
+ * @param $path1
+ * @param $path2
+ * @throws \Exception
+ */
+ public function copy($path1, $path2)
+ {
+ $path1 = $this->stripLast($path1);
+ $path2 = $this->stripLast($path2);
+ $physicPath1 = $this->logicToPhysical($path1, true);
+ $physicPath2 = $this->logicToPhysical($path2, true);
+
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path` LIKE ?');
+ $result = $query->execute(array($path1.'%'));
+ $updateQuery = \OC_DB::prepare('UPDATE `*PREFIX*file_map`'
+ .' SET `logic_path` = ?'
+ .' AND `physic_path` = ?'
+ .' WHERE `logic_path` = ?');
+ while( $row = $result->fetchRow()) {
+ $currentLogic = $row['logic_path'];
+ $currentPhysic = $row['physic_path'];
+ $newLogic = $path2.$this->stripRootFolder($currentLogic, $path1);
+ $newPhysic = $physicPath2.$this->stripRootFolder($currentPhysic, $physicPath1);
+ if ($path1 !== $currentLogic) {
+ try {
+ $updateQuery->execute(array($newLogic, $newPhysic, $currentLogic));
+ } catch (\Exception $e) {
+ error_log('Mapper::Copy failed '.$currentLogic.' -> '.$newLogic.'\n'.$e);
+ throw $e;
+ }
+ }
+ }
+ }
+
+ /**
+ * @param $path
+ * @param $root
+ * @return bool|string
+ */
+ public function stripRootFolder($path, $root) {
+ if (strpos($path, $root) !== 0) {
+ // throw exception ???
+ return false;
+ }
+ if (strlen($path) > strlen($root)) {
+ return substr($path, strlen($root));
+ }
+
+ return '';
+ }
+
+ private function stripLast($path) {
+ if (substr($path, -1) == '/') {
+ $path = substr_replace($path ,'',-1);
+ }
+ return $path;
+ }
+
+ private function resolveLogicPath($logicPath) {
+ $logicPath = $this->stripLast($logicPath);
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path_hash` = ?');
+ $result = $query->execute(array(md5($logicPath)));
+ $result = $result->fetchRow();
+
+ return $result['physic_path'];
+ }
+
+ private function resolvePhysicalPath($physicalPath) {
+ $physicalPath = $this->stripLast($physicalPath);
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path_hash` = ?');
+ $result = $query->execute(array(md5($physicalPath)));
+ $result = $result->fetchRow();
+
+ return $result['logic_path'];
+ }
+
+ private function create($logicPath, $store) {
+ $logicPath = $this->stripLast($logicPath);
+ $index = 0;
+
+ // create the slugified path
+ $physicalPath = $this->slugifyPath($logicPath);
+
+ // detect duplicates
+ while ($this->resolvePhysicalPath($physicalPath) !== null) {
+ $physicalPath = $this->slugifyPath($physicalPath, $index++);
+ }
+
+ // insert the new path mapping if requested
+ if ($store) {
+ $this->insert($logicPath, $physicalPath);
+ }
+
+ return $physicalPath;
+ }
+
+ private function insert($logicPath, $physicalPath) {
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*file_map`(`logic_path`, `physic_path`, `logic_path_hash`, `physic_path_hash`) VALUES(?, ?, ?, ?)');
+ $query->execute(array($logicPath, $physicalPath, md5($logicPath), md5($physicalPath)));
+ }
+
+ private function slugifyPath($path, $index=null) {
+ $pathElements = explode('/', $path);
+ $sluggedElements = array();
+
+ // skip slugging the drive letter on windows - TODO: test if local path
+ if (strpos(strtolower(php_uname('s')), 'win') !== false) {
+ $sluggedElements[]= $pathElements[0];
+ array_shift($pathElements);
+ }
+ foreach ($pathElements as $pathElement) {
+ // TODO: remove file ext before slugify on last element
+ $sluggedElements[] = self::slugify($pathElement);
+ }
+
+ //
+ // TODO: add the index before the file extension
+ //
+ if ($index !== null) {
+ $last= end($sluggedElements);
+ array_pop($sluggedElements);
+ array_push($sluggedElements, $last.'-'.$index);
+ }
+ return implode(DIRECTORY_SEPARATOR, $sluggedElements);
+ }
+
+ /**
+ * Modifies a string to remove all non ASCII characters and spaces.
+ *
+ * @param string $text
+ * @return string
+ */
+ private function slugify($text)
+ {
+ // replace non letter or digits by -
+ $text = preg_replace('~[^\\pL\d]+~u', '-', $text);
+
+ // trim
+ $text = trim($text, '-');
+
+ // transliterate
+ if (function_exists('iconv')) {
+ $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
+ }
+
+ // lowercase
+ $text = strtolower($text);
+
+ // remove unwanted characters
+ $text = preg_replace('~[^-\w]+~', '', $text);
+
+ if (empty($text))
+ {
+ // TODO: we better generate a guid in this case
+ return 'n-a';
+ }
+
+ return $text;
+ }
+}
diff --git a/lib/files/mount.php b/lib/files/mount.php
new file mode 100644
index 00000000000..74ee483b1be
--- /dev/null
+++ b/lib/files/mount.php
@@ -0,0 +1,188 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files;
+
+class Mount {
+ /**
+ * @var Mount[]
+ */
+ static private $mounts = array();
+
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage = null;
+ private $class;
+ private $storageId;
+ private $arguments = array();
+ private $mountPoint;
+
+ /**
+ * @param string|\OC\Files\Storage\Storage $storage
+ * @param string $mountpoint
+ * @param array $arguments (optional)
+ */
+ public function __construct($storage, $mountpoint, $arguments = null) {
+ if (is_null($arguments)) {
+ $arguments = array();
+ }
+
+ $mountpoint = self::formatPath($mountpoint);
+ if ($storage instanceof \OC\Files\Storage\Storage) {
+ $this->class = get_class($storage);
+ $this->storage = $storage;
+ } else {
+ // Update old classes to new namespace
+ if (strpos($storage, 'OC_Filestorage_') !== false) {
+ $storage = '\OC\Files\Storage\\' . substr($storage, 15);
+ }
+ $this->class = $storage;
+ $this->arguments = $arguments;
+ }
+ $this->mountPoint = $mountpoint;
+
+ self::$mounts[$this->mountPoint] = $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMountPoint() {
+ return $this->mountPoint;
+ }
+
+ /**
+ * @return \OC\Files\Storage\Storage
+ */
+ private function createStorage() {
+ if (class_exists($this->class)) {
+ try {
+ return new $this->class($this->arguments);
+ } catch (\Exception $exception) {
+ \OC_Log::write('core', $exception->getMessage(), \OC_Log::ERROR);
+ return null;
+ }
+ } else {
+ \OC_Log::write('core', 'storage backend ' . $this->class . ' not found', \OC_Log::ERROR);
+ return null;
+ }
+ }
+
+ /**
+ * @return \OC\Files\Storage\Storage
+ */
+ public function getStorage() {
+ if (is_null($this->storage)) {
+ $this->storage = $this->createStorage();
+ }
+ return $this->storage;
+ }
+
+ /**
+ * @return string
+ */
+ public function getStorageId() {
+ if (!$this->storageId) {
+ if (is_null($this->storage)) {
+ $this->storage = $this->createStorage();
+ }
+ $this->storageId = $this->storage->getId();
+ }
+ return $this->storageId;
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ public function getInternalPath($path) {
+ if ($this->mountPoint === $path or $this->mountPoint . '/' === $path) {
+ $internalPath = '';
+ } else {
+ $internalPath = substr($path, strlen($this->mountPoint));
+ }
+ return $internalPath;
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ private static function formatPath($path) {
+ $path = Filesystem::normalizePath($path);
+ if (strlen($path) > 1) {
+ $path .= '/';
+ }
+ return $path;
+ }
+
+ /**
+ * Find the mount for $path
+ *
+ * @param $path
+ * @return Mount
+ */
+ public static function find($path) {
+ $path = self::formatPath($path);
+ if (isset(self::$mounts[$path])) {
+ return self::$mounts[$path];
+ }
+
+ \OC_Hook::emit('OC_Filesystem', 'get_mountpoint', array('path' => $path));
+ $foundMountPoint = '';
+ $mountPoints = array_keys(self::$mounts);
+ foreach ($mountPoints as $mountpoint) {
+ if (strpos($path, $mountpoint) === 0 and strlen($mountpoint) > strlen($foundMountPoint)) {
+ $foundMountPoint = $mountpoint;
+ }
+ }
+ if (isset(self::$mounts[$foundMountPoint])) {
+ return self::$mounts[$foundMountPoint];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Find all mounts in $path
+ *
+ * @param $path
+ * @return Mount[]
+ */
+ public static function findIn($path) {
+ $path = self::formatPath($path);
+ $result = array();
+ $pathLength = strlen($path);
+ $mountPoints = array_keys(self::$mounts);
+ foreach ($mountPoints as $mountPoint) {
+ if (substr($mountPoint, 0, $pathLength) === $path and strlen($mountPoint) > $pathLength) {
+ $result[] = self::$mounts[$mountPoint];
+ }
+ }
+ return $result;
+ }
+
+ public static function clear() {
+ self::$mounts = array();
+ }
+
+ /**
+ * @param string $id
+ * @return \OC\Files\Storage\Storage[]
+ */
+ public static function findById($id) {
+ $result = array();
+ foreach (self::$mounts as $mount) {
+ if ($mount->getStorageId() === $id) {
+ $result[] = $mount;
+ }
+ }
+ return $result;
+ }
+}
diff --git a/lib/filestorage/common.php b/lib/files/storage/common.php
index e2af0c6d7f4..89d603917eb 100644
--- a/lib/filestorage/common.php
+++ b/lib/files/storage/common.php
@@ -1,51 +1,34 @@
<?php
-
/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski GapczynskiM@gmail.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/>.
-*/
+ * Copyright (c) 2012 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\Files\Storage;
/**
* Storage backend class for providing common filesystem operation methods
* which are not storage-backend specific.
*
- * OC_Filestorage_Common is never used directly; it is extended by all other
+ * \OC\Files\Storage\Common is never used directly; it is extended by all other
* storage backends, where its methods may be overridden, and additional
* (backend-specific) methods are defined.
*
- * Some OC_Filestorage_Common methods call functions which are first defined
+ * Some \OC\Files\Storage\Common methods call functions which are first defined
* in classes which extend it, e.g. $this->stat() .
*/
-abstract class OC_Filestorage_Common extends OC_Filestorage {
+abstract class Common implements \OC\Files\Storage\Storage {
public function __construct($parameters) {}
-// abstract public function mkdir($path);
-// abstract public function rmdir($path);
-// abstract public function opendir($path);
public function is_dir($path) {
return $this->filetype($path)=='dir';
}
public function is_file($path) {
return $this->filetype($path)=='file';
}
-// abstract public function stat($path);
-// abstract public function filetype($path);
public function filesize($path) {
if($this->is_dir($path)) {
return 0;//by definition
@@ -55,29 +38,40 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
}
}
public function isCreatable($path) {
- return $this->isUpdatable($path);
+ if ($this->is_dir($path) && $this->isUpdatable($path)) {
+ return true;
+ }
+ return false;
}
-// abstract public function isReadable($path);
-// abstract public function isUpdatable($path);
public function isDeletable($path) {
return $this->isUpdatable($path);
}
public function isSharable($path) {
return $this->isReadable($path);
}
-// abstract public function file_exists($path);
- public function filectime($path) {
- $stat = $this->stat($path);
- return $stat['ctime'];
+ public function getPermissions($path){
+ $permissions = 0;
+ if($this->isCreatable($path)){
+ $permissions |= \OCP\PERMISSION_CREATE;
+ }
+ if($this->isReadable($path)){
+ $permissions |= \OCP\PERMISSION_READ;
+ }
+ if($this->isUpdatable($path)){
+ $permissions |= \OCP\PERMISSION_UPDATE;
+ }
+ if($this->isDeletable($path)){
+ $permissions |= \OCP\PERMISSION_DELETE;
+ }
+ if($this->isSharable($path)){
+ $permissions |= \OCP\PERMISSION_SHARE;
+ }
+ return $permissions;
}
public function filemtime($path) {
$stat = $this->stat($path);
return $stat['mtime'];
}
- public function fileatime($path) {
- $stat = $this->stat($path);
- return $stat['atime'];
- }
public function file_get_contents($path) {
$handle = $this->fopen($path, "r");
if(!$handle) {
@@ -89,94 +83,58 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
}
return fread($handle, $size);
}
- public function file_put_contents($path, $data) {
+ public function file_put_contents($path,$data) {
$handle = $this->fopen($path, "w");
return fwrite($handle, $data);
}
-// abstract public function unlink($path);
- public function rename($path1, $path2) {
- if($this->copy($path1, $path2)) {
+ public function rename($path1,$path2) {
+ if($this->copy($path1,$path2)) {
return $this->unlink($path1);
}else{
return false;
}
}
- public function copy($path1, $path2) {
- $source=$this->fopen($path1, 'r');
- $target=$this->fopen($path2, 'w');
- $count=OC_Helper::streamCopy($source, $target);
+ public function copy($path1,$path2) {
+ $source=$this->fopen($path1,'r');
+ $target=$this->fopen($path2,'w');
+ $count=\OC_Helper::streamCopy($source,$target);
return $count>0;
}
-// abstract public function fopen($path, $mode);
/**
* @brief Deletes all files and folders recursively within a directory
- * @param $directory The directory whose contents will be deleted
- * @param $empty Flag indicating whether directory will be emptied
- * @returns true/false
+ * @param string $directory The directory whose contents will be deleted
+ * @param bool $empty Flag indicating whether directory will be emptied
+ * @returns bool
*
* @note By default the directory specified by $directory will be
* deleted together with its contents. To avoid this set $empty to true
*/
public function deleteAll( $directory, $empty = false ) {
-
- // strip leading slash
- if( substr( $directory, 0, 1 ) == "/" ) {
-
- $directory = substr( $directory, 1 );
-
- }
-
- // strip trailing slash
- if( substr( $directory, -1) == "/" ) {
-
- $directory = substr( $directory, 0, -1 );
-
- }
+ $directory = trim($directory,'/');
if ( !$this->file_exists( \OCP\USER::getUser() . '/' . $directory ) || !$this->is_dir( \OCP\USER::getUser() . '/' . $directory ) ) {
-
return false;
-
- } elseif( !$this->is_readable( \OCP\USER::getUser() . '/' . $directory ) ) {
-
+ } elseif( !$this->isReadable( \OCP\USER::getUser() . '/' . $directory ) ) {
return false;
-
} else {
-
$directoryHandle = $this->opendir( \OCP\USER::getUser() . '/' . $directory );
-
while ( $contents = readdir( $directoryHandle ) ) {
-
if ( $contents != '.' && $contents != '..') {
-
$path = $directory . "/" . $contents;
-
if ( $this->is_dir( $path ) ) {
-
- deleteAll( $path );
-
+ $this->deleteAll( $path );
} else {
-
$this->unlink( \OCP\USER::getUser() .'/' . $path ); // TODO: make unlink use same system path as is_dir
-
}
}
-
}
-
//$this->closedir( $directoryHandle ); // TODO: implement closedir in OC_FSV
-
if ( $empty == false ) {
-
if ( !$this->rmdir( $directory ) ) {
-
- return false;
-
+ return false;
}
-
}
-
return true;
}
@@ -188,73 +146,71 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
if($this->is_dir($path)) {
return 'httpd/unix-directory';
}
- $source=$this->fopen($path, 'r');
+ $source=$this->fopen($path,'r');
if(!$source) {
return false;
}
- $head=fread($source, 8192);//8kb should suffice to determine a mimetype
- if($pos=strrpos($path, '.')) {
- $extension=substr($path, $pos);
+ $head=fread($source,8192);//8kb should suffice to determine a mimetype
+ if($pos=strrpos($path,'.')) {
+ $extension=substr($path,$pos);
}else{
$extension='';
}
- $tmpFile=OC_Helper::tmpFile($extension);
- file_put_contents($tmpFile, $head);
- $mime=OC_Helper::getMimeType($tmpFile);
+ $tmpFile=\OC_Helper::tmpFile($extension);
+ file_put_contents($tmpFile,$head);
+ $mime=\OC_Helper::getMimeType($tmpFile);
unlink($tmpFile);
return $mime;
}
- public function hash($type, $path, $raw = false) {
- $tmpFile=$this->getLocalFile();
- $hash=hash($type, $tmpFile, $raw);
+ public function hash($type,$path,$raw = false) {
+ $tmpFile=$this->getLocalFile($path);
+ $hash=hash($type,$tmpFile,$raw);
unlink($tmpFile);
return $hash;
}
-// abstract public function free_space($path);
public function search($query) {
return $this->searchInDir($query);
}
public function getLocalFile($path) {
return $this->toTmpFile($path);
}
- private function toTmpFile($path) {//no longer in the storage api, still usefull here
- $source=$this->fopen($path, 'r');
+ private function toTmpFile($path) {//no longer in the storage api, still useful here
+ $source=$this->fopen($path,'r');
if(!$source) {
return false;
}
- if($pos=strrpos($path, '.')) {
- $extension=substr($path, $pos);
+ if($pos=strrpos($path,'.')) {
+ $extension=substr($path,$pos);
}else{
$extension='';
}
- $tmpFile=OC_Helper::tmpFile($extension);
- $target=fopen($tmpFile, 'w');
- OC_Helper::streamCopy($source, $target);
+ $tmpFile=\OC_Helper::tmpFile($extension);
+ $target=fopen($tmpFile,'w');
+ \OC_Helper::streamCopy($source,$target);
return $tmpFile;
}
public function getLocalFolder($path) {
- $baseDir=OC_Helper::tmpFolder();
- $this->addLocalFolder($path, $baseDir);
+ $baseDir=\OC_Helper::tmpFolder();
+ $this->addLocalFolder($path,$baseDir);
return $baseDir;
}
- private function addLocalFolder($path, $target) {
+ private function addLocalFolder($path,$target) {
if($dh=$this->opendir($path)) {
while($file=readdir($dh)) {
if($file!=='.' and $file!=='..') {
if($this->is_dir($path.'/'.$file)) {
mkdir($target.'/'.$file);
- $this->addLocalFolder($path.'/'.$file, $target.'/'.$file);
+ $this->addLocalFolder($path.'/'.$file,$target.'/'.$file);
}else{
$tmp=$this->toTmpFile($path.'/'.$file);
- rename($tmp, $target.'/'.$file);
+ rename($tmp,$target.'/'.$file);
}
}
}
}
}
-// abstract public function touch($path, $mtime=null);
- protected function searchInDir($query, $dir='') {
+ protected function searchInDir($query,$dir='') {
$files=array();
$dh=$this->opendir($dir);
if($dh) {
@@ -264,7 +220,7 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
$files[]=$dir.'/'.$item;
}
if($this->is_dir($dir.'/'.$item)) {
- $files=array_merge($files, $this->searchInDir($query, $dir.'/'.$item));
+ $files=array_merge($files,$this->searchInDir($query,$dir.'/'.$item));
}
}
}
@@ -273,20 +229,76 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
/**
* check if a file or folder has been updated since $time
+ * @param string $path
* @param int $time
* @return bool
*/
- public function hasUpdated($path, $time) {
+ public function hasUpdated($path,$time) {
return $this->filemtime($path)>$time;
}
+ public function getCache($path=''){
+ return new \OC\Files\Cache\Cache($this);
+ }
+
+ public function getScanner($path=''){
+ return new \OC\Files\Cache\Scanner($this);
+ }
+
+ public function getPermissionsCache($path=''){
+ return new \OC\Files\Cache\Permissions($this);
+ }
+
+ public function getWatcher($path=''){
+ return new \OC\Files\Cache\Watcher($this);
+ }
+
/**
* get the owner of a path
- * @param $path The path to get the owner
+ * @param string $path The path to get the owner
* @return string uid or false
*/
public function getOwner($path) {
- return OC_User::getUser();
+ return \OC_User::getUser();
+ }
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path){
+ $ETagFunction = \OC_Connector_Sabre_Node::$ETagFunction;
+ if($ETagFunction) {
+ $hash = call_user_func($ETagFunction, $path);
+ return $hash;
+ }else{
+ return uniqid();
+ }
+ }
+
+ /**
+ * clean a path, i.e. remove all redundant '.' and '..'
+ * making sure that it can't point to higher than '/'
+ * @param $path The path to clean
+ * @return string cleaned path
+ */
+ public function cleanPath($path) {
+ if (strlen($path) == 0 or $path[0] != '/') {
+ $path = '/' . $path;
+ }
+
+ $output = array();
+ foreach (explode('/', $path) as $chunk) {
+ if ($chunk == '..') {
+ array_pop($output);
+ } else if ($chunk == '.') {
+ } else {
+ $output[] = $chunk;
+ }
+ }
+ return implode('/', $output);
}
public function test() {
diff --git a/lib/filestorage/commontest.php b/lib/files/storage/commontest.php
index 3b038b3fda9..fbdb7fbf110 100644
--- a/lib/filestorage/commontest.php
+++ b/lib/files/storage/commontest.php
@@ -22,20 +22,25 @@
*/
/**
- * test implementation for OC_FileStorage_Common with OC_FileStorage_Local
+ * test implementation for \OC\Files\Storage\Common with \OC\Files\Storage\Local
*/
-class OC_Filestorage_CommonTest extends OC_Filestorage_Common{
+namespace OC\Files\Storage;
+
+class CommonTest extends \OC\Files\Storage\Common{
/**
* underlying local storage used for missing functions
- * @var OC_FileStorage_Local
+ * @var \OC\Files\Storage\Local
*/
private $storage;
public function __construct($params) {
- $this->storage=new OC_Filestorage_Local($params);
+ $this->storage=new \OC\Files\Storage\Local($params);
}
+ public function getId(){
+ return 'test::'.$this->storage->getId();
+ }
public function mkdir($path) {
return $this->storage->mkdir($path);
}
diff --git a/lib/filestorage/local.php b/lib/files/storage/local.php
index 910b3fa039d..9fe01135866 100644
--- a/lib/filestorage/local.php
+++ b/lib/files/storage/local.php
@@ -1,8 +1,21 @@
<?php
/**
+ * Copyright (c) 2012 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\Files\Storage;
+
+if (\OC_Util::runningOnWindows()) {
+ require_once 'mappedlocal.php';
+} else {
+
+/**
* for local filestore, we only have to map the paths
*/
-class OC_Filestorage_Local extends OC_Filestorage_Common{
+class Local extends \OC\Files\Storage\Common{
protected $datadir;
public function __construct($arguments) {
$this->datadir=$arguments['datadir'];
@@ -10,6 +23,11 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
$this->datadir.='/';
}
}
+ public function __destruct() {
+ }
+ public function getId(){
+ return 'local::'.$this->datadir;
+ }
public function mkdir($path) {
return @mkdir($this->datadir.$path);
}
@@ -20,7 +38,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
return opendir($this->datadir.$path);
}
public function is_dir($path) {
- if(substr($path, -1)=='/') {
+ if(substr($path,-1)=='/') {
$path=substr($path, 0, -1);
}
return is_dir($this->datadir.$path);
@@ -68,9 +86,6 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
public function file_exists($path) {
return file_exists($this->datadir.$path);
}
- public function filectime($path) {
- return filectime($this->datadir.$path);
- }
public function filemtime($path) {
return filemtime($this->datadir.$path);
}
@@ -92,7 +107,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
public function file_get_contents($path) {
return file_get_contents($this->datadir.$path);
}
- public function file_put_contents($path, $data) {
+ public function file_put_contents($path, $data) {//trigger_error("$path = ".var_export($path, 1));
return file_put_contents($this->datadir.$path, $data);
}
public function unlink($path) {
@@ -100,11 +115,11 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
}
public function rename($path1, $path2) {
if (!$this->isUpdatable($path1)) {
- OC_Log::write('core', 'unable to rename, file is not writable : '.$path1, OC_Log::ERROR);
+ \OC_Log::write('core','unable to rename, file is not writable : '.$path1,\OC_Log::ERROR);
return false;
}
if(! $this->file_exists($path1)) {
- OC_Log::write('core', 'unable to rename, file does not exists : '.$path1, OC_Log::ERROR);
+ \OC_Log::write('core','unable to rename, file does not exists : '.$path1,\OC_Log::ERROR);
return false;
}
@@ -143,7 +158,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
public function getMimeType($path) {
if($this->isReadable($path)) {
- return OC_Helper::getMimeType($this->datadir.$path);
+ return \OC_Helper::getMimeType($this->datadir . $path);
}else{
return false;
}
@@ -175,7 +190,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
// Windows OS: we use COM to access the filesystem
if (strpos($name, 'win') !== false) {
if (class_exists('COM')) {
- $fsobj = new COM("Scripting.FileSystemObject");
+ $fsobj = new \COM("Scripting.FileSystemObject");
$f = $fsobj->GetFile($fullPath);
return $f->Size;
}
@@ -188,7 +203,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
}
} else {
- OC_Log::write('core', 'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name, OC_Log::ERROR);
+ \OC_Log::write('core', 'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name, \OC_Log::ERROR);
}
return 0;
@@ -236,3 +251,4 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
return $this->filemtime($path)>$time;
}
}
+}
diff --git a/lib/files/storage/mappedlocal.php b/lib/files/storage/mappedlocal.php
new file mode 100644
index 00000000000..80dd79bc41f
--- /dev/null
+++ b/lib/files/storage/mappedlocal.php
@@ -0,0 +1,335 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Storage;
+
+/**
+ * for local filestore, we only have to map the paths
+ */
+class Local extends \OC\Files\Storage\Common{
+ protected $datadir;
+ private $mapper;
+
+ public function __construct($arguments) {
+ $this->datadir=$arguments['datadir'];
+ if(substr($this->datadir, -1)!=='/') {
+ $this->datadir.='/';
+ }
+
+ $this->mapper= new \OC\Files\Mapper();
+ }
+ public function __destruct() {
+ if (defined('PHPUNIT_RUN')) {
+ $this->mapper->removePath($this->datadir, true, true);
+ }
+ }
+ public function getId(){
+ return 'local::'.$this->datadir;
+ }
+ public function mkdir($path) {
+ return @mkdir($this->buildPath($path));
+ }
+ public function rmdir($path) {
+ if ($result = @rmdir($this->buildPath($path))) {
+ $this->cleanMapper($path);
+ }
+ return $result;
+ }
+ public function opendir($path) {
+ $files = array('.', '..');
+ $physicalPath= $this->buildPath($path);
+
+ $logicalPath = $this->mapper->physicalToLogic($physicalPath);
+ $dh = opendir($physicalPath);
+ while ($file = readdir($dh)) {
+ if ($file === '.' or $file === '..') {
+ continue;
+ }
+
+ $logicalFilePath = $this->mapper->physicalToLogic($physicalPath.DIRECTORY_SEPARATOR.$file);
+
+ $file= $this->mapper->stripRootFolder($logicalFilePath, $logicalPath);
+ $file = $this->stripLeading($file);
+ $files[]= $file;
+ }
+
+ \OC\Files\Stream\Dir::register('local-win32'.$path, $files);
+ return opendir('fakedir://local-win32'.$path);
+ }
+ public function is_dir($path) {
+ if(substr($path,-1)=='/') {
+ $path=substr($path, 0, -1);
+ }
+ return is_dir($this->buildPath($path));
+ }
+ public function is_file($path) {
+ return is_file($this->buildPath($path));
+ }
+ public function stat($path) {
+ $fullPath = $this->buildPath($path);
+ $statResult = stat($fullPath);
+
+ if ($statResult['size'] < 0) {
+ $size = self::getFileSizeFromOS($fullPath);
+ $statResult['size'] = $size;
+ $statResult[7] = $size;
+ }
+ return $statResult;
+ }
+ public function filetype($path) {
+ $filetype=filetype($this->buildPath($path));
+ if($filetype=='link') {
+ $filetype=filetype(realpath($this->buildPath($path)));
+ }
+ return $filetype;
+ }
+ public function filesize($path) {
+ if($this->is_dir($path)) {
+ return 0;
+ }else{
+ $fullPath = $this->buildPath($path);
+ $fileSize = filesize($fullPath);
+ if ($fileSize < 0) {
+ return self::getFileSizeFromOS($fullPath);
+ }
+
+ return $fileSize;
+ }
+ }
+ public function isReadable($path) {
+ return is_readable($this->buildPath($path));
+ }
+ public function isUpdatable($path) {
+ return is_writable($this->buildPath($path));
+ }
+ public function file_exists($path) {
+ return file_exists($this->buildPath($path));
+ }
+ public function filemtime($path) {
+ return filemtime($this->buildPath($path));
+ }
+ public function touch($path, $mtime=null) {
+ // sets the modification time of the file to the given value.
+ // If mtime is nil the current time is set.
+ // note that the access time of the file always changes to the current time.
+ if(!is_null($mtime)) {
+ $result=touch( $this->buildPath($path), $mtime );
+ }else{
+ $result=touch( $this->buildPath($path));
+ }
+ if( $result ) {
+ clearstatcache( true, $this->buildPath($path) );
+ }
+
+ return $result;
+ }
+ public function file_get_contents($path) {
+ return file_get_contents($this->buildPath($path));
+ }
+ public function file_put_contents($path, $data) {//trigger_error("$path = ".var_export($path, 1));
+ return file_put_contents($this->buildPath($path), $data);
+ }
+ public function unlink($path) {
+ return $this->delTree($path);
+ }
+ public function rename($path1, $path2) {
+ if (!$this->isUpdatable($path1)) {
+ \OC_Log::write('core','unable to rename, file is not writable : '.$path1,\OC_Log::ERROR);
+ return false;
+ }
+ if(! $this->file_exists($path1)) {
+ \OC_Log::write('core','unable to rename, file does not exists : '.$path1,\OC_Log::ERROR);
+ return false;
+ }
+
+ $physicPath1 = $this->buildPath($path1);
+ $physicPath2 = $this->buildPath($path2);
+ if($return=rename($physicPath1, $physicPath2)) {
+ // mapper needs to create copies or all children
+ $this->copyMapping($path1, $path2);
+ $this->cleanMapper($physicPath1, false, true);
+ }
+ return $return;
+ }
+ public function copy($path1, $path2) {
+ if($this->is_dir($path2)) {
+ if(!$this->file_exists($path2)) {
+ $this->mkdir($path2);
+ }
+ $source=substr($path1, strrpos($path1, '/')+1);
+ $path2.=$source;
+ }
+ if($return=copy($this->buildPath($path1), $this->buildPath($path2))) {
+ // mapper needs to create copies or all children
+ $this->copyMapping($path1, $path2);
+ }
+ return $return;
+ }
+ public function fopen($path, $mode) {
+ if($return=fopen($this->buildPath($path), $mode)) {
+ switch($mode) {
+ case 'r':
+ break;
+ case 'r+':
+ case 'w+':
+ case 'x+':
+ case 'a+':
+ break;
+ case 'w':
+ case 'x':
+ case 'a':
+ break;
+ }
+ }
+ return $return;
+ }
+
+ public function getMimeType($path) {
+ if($this->isReadable($path)) {
+ return \OC_Helper::getMimeType($this->buildPath($path));
+ }else{
+ return false;
+ }
+ }
+
+ private function delTree($dir, $isLogicPath=true) {
+ $dirRelative=$dir;
+ if ($isLogicPath) {
+ $dir=$this->buildPath($dir);
+ }
+ if (!file_exists($dir)) {
+ return true;
+ }
+ if (!is_dir($dir) || is_link($dir)) {
+ if($return=unlink($dir)) {
+ $this->cleanMapper($dir, false);
+ return $return;
+ }
+ }
+ foreach (scandir($dir) as $item) {
+ if ($item == '.' || $item == '..') {
+ continue;
+ }
+ if(is_file($dir.'/'.$item)) {
+ if(unlink($dir.'/'.$item)) {
+ $this->cleanMapper($dir.'/'.$item, false);
+ }
+ }elseif(is_dir($dir.'/'.$item)) {
+ if (!$this->delTree($dir. "/" . $item, false)) {
+ return false;
+ };
+ }
+ }
+ if($return=rmdir($dir)) {
+ $this->cleanMapper($dir, false);
+ }
+ return $return;
+ }
+
+ private static function getFileSizeFromOS($fullPath) {
+ $name = strtolower(php_uname('s'));
+ // Windows OS: we use COM to access the filesystem
+ if (strpos($name, 'win') !== false) {
+ if (class_exists('COM')) {
+ $fsobj = new \COM("Scripting.FileSystemObject");
+ $f = $fsobj->GetFile($fullPath);
+ return $f->Size;
+ }
+ } else if (strpos($name, 'bsd') !== false) {
+ if (\OC_Helper::is_function_enabled('exec')) {
+ return (float)exec('stat -f %z ' . escapeshellarg($fullPath));
+ }
+ } else if (strpos($name, 'linux') !== false) {
+ if (\OC_Helper::is_function_enabled('exec')) {
+ return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
+ }
+ } else {
+ \OC_Log::write('core', 'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name, \OC_Log::ERROR);
+ }
+
+ return 0;
+ }
+
+ public function hash($path, $type, $raw=false) {
+ return hash_file($type, $this->buildPath($path), $raw);
+ }
+
+ public function free_space($path) {
+ return @disk_free_space($this->buildPath($path));
+ }
+
+ public function search($query) {
+ return $this->searchInDir($query);
+ }
+ public function getLocalFile($path) {
+ return $this->buildPath($path);
+ }
+ public function getLocalFolder($path) {
+ return $this->buildPath($path);
+ }
+
+ protected function searchInDir($query, $dir='', $isLogicPath=true) {
+ $files=array();
+ $physicalDir = $this->buildPath($dir);
+ foreach (scandir($physicalDir) as $item) {
+ if ($item == '.' || $item == '..')
+ continue;
+ $physicalItem = $this->mapper->physicalToLogic($physicalDir.DIRECTORY_SEPARATOR.$item);
+ $item = substr($physicalItem, strlen($physicalDir)+1);
+
+ if(strstr(strtolower($item), strtolower($query)) !== false) {
+ $files[]=$dir.'/'.$item;
+ }
+ if(is_dir($physicalItem)) {
+ $files=array_merge($files, $this->searchInDir($query, $physicalItem, false));
+ }
+ }
+ return $files;
+ }
+
+ /**
+ * check if a file or folder has been updated since $time
+ * @param string $path
+ * @param int $time
+ * @return bool
+ */
+ public function hasUpdated($path, $time) {
+ return $this->filemtime($path)>$time;
+ }
+
+ private function buildPath($path, $create=true) {
+ $path = $this->stripLeading($path);
+ $fullPath = $this->datadir.$path;
+ return $this->mapper->logicToPhysical($fullPath, $create);
+ }
+
+ private function cleanMapper($path, $isLogicPath=true, $recursive=true) {
+ $fullPath = $path;
+ if ($isLogicPath) {
+ $fullPath = $this->datadir.$path;
+ }
+ $this->mapper->removePath($fullPath, $isLogicPath, $recursive);
+ }
+
+ private function copyMapping($path1, $path2) {
+ $path1 = $this->stripLeading($path1);
+ $path2 = $this->stripLeading($path2);
+
+ $fullPath1 = $this->datadir.$path1;
+ $fullPath2 = $this->datadir.$path2;
+
+ $this->mapper->copy($fullPath1, $fullPath2);
+ }
+
+ private function stripLeading($path) {
+ if(strpos($path, '/') === 0) {
+ $path = substr($path, 1);
+ }
+
+ return $path;
+ }
+}
diff --git a/lib/files/storage/storage.php b/lib/files/storage/storage.php
new file mode 100644
index 00000000000..2cc835236ba
--- /dev/null
+++ b/lib/files/storage/storage.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Storage;
+
+/**
+ * Provide a common interface to all different storage options
+ */
+interface Storage{
+ public function __construct($parameters);
+ public function getId();
+ public function mkdir($path);
+ public function rmdir($path);
+ public function opendir($path);
+ public function is_dir($path);
+ public function is_file($path);
+ public function stat($path);
+ public function filetype($path);
+ public function filesize($path);
+ public function isCreatable($path);
+ public function isReadable($path);
+ public function isUpdatable($path);
+ public function isDeletable($path);
+ public function isSharable($path);
+ public function getPermissions($path);
+ public function file_exists($path);
+ public function filemtime($path);
+ public function file_get_contents($path);
+ public function file_put_contents($path,$data);
+ public function unlink($path);
+ public function rename($path1,$path2);
+ public function copy($path1,$path2);
+ public function fopen($path,$mode);
+ public function getMimeType($path);
+ public function hash($type,$path,$raw = false);
+ public function free_space($path);
+ public function search($query);
+ public function touch($path, $mtime=null);
+ public function getLocalFile($path);// get a path to a local version of the file, whether the original file is local or remote
+ public function getLocalFolder($path);// get a path to a local version of the folder, whether the original file is local or remote
+ /**
+ * check if a file or folder has been updated since $time
+ * @param int $time
+ * @return bool
+ *
+ * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
+ * returning true for other changes in the folder is optional
+ */
+ public function hasUpdated($path,$time);
+
+ /**
+ * @param string $path
+ * @return \OC\Files\Cache\Cache
+ */
+ public function getCache($path='');
+ /**
+ * @param string $path
+ * @return \OC\Files\Cache\Scanner
+ */
+ public function getScanner($path='');
+
+ public function getOwner($path);
+
+ /**
+ * @param string $path
+ * @return \OC\Files\Cache\Permissions
+ */
+ public function getPermissionsCache($path='');
+
+ /**
+ * @param string $path
+ * @return \OC\Files\Cache\Watcher
+ */
+ public function getWatcher($path='');
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path);
+}
diff --git a/lib/files/storage/temporary.php b/lib/files/storage/temporary.php
new file mode 100644
index 00000000000..d84dbda2e39
--- /dev/null
+++ b/lib/files/storage/temporary.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Storage;
+
+/**
+ * local storage backend in temporary folder for testing purpose
+ */
+class Temporary extends Local{
+ public function __construct($arguments) {
+ parent::__construct(array('datadir' => \OC_Helper::tmpFolder()));
+ }
+
+ public function cleanUp() {
+ \OC_Helper::rmdirr($this->datadir);
+ }
+
+ public function __destruct() {
+ parent::__destruct();
+ $this->cleanUp();
+ }
+}
diff --git a/lib/files/stream/close.php b/lib/files/stream/close.php
new file mode 100644
index 00000000000..80de3497c36
--- /dev/null
+++ b/lib/files/stream/close.php
@@ -0,0 +1,100 @@
+<?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.
+ */
+
+namespace OC\Files\Stream;
+
+/**
+ * stream wrapper that provides a callback on stream close
+ */
+class Close {
+ private static $callBacks = array();
+ private $path = '';
+ private $source;
+ private static $open = array();
+
+ public function stream_open($path, $mode, $options, &$opened_path) {
+ $path = substr($path, strlen('close://'));
+ $this->path = $path;
+ $this->source = fopen($path, $mode);
+ if (is_resource($this->source)) {
+ $this->meta = stream_get_meta_data($this->source);
+ }
+ self::$open[] = $path;
+ return is_resource($this->source);
+ }
+
+ public function stream_seek($offset, $whence = SEEK_SET) {
+ fseek($this->source, $offset, $whence);
+ }
+
+ public function stream_tell() {
+ return ftell($this->source);
+ }
+
+ public function stream_read($count) {
+ return fread($this->source, $count);
+ }
+
+ public function stream_write($data) {
+ return fwrite($this->source, $data);
+ }
+
+ public function stream_set_option($option, $arg1, $arg2) {
+ switch ($option) {
+ case STREAM_OPTION_BLOCKING:
+ stream_set_blocking($this->source, $arg1);
+ break;
+ case STREAM_OPTION_READ_TIMEOUT:
+ stream_set_timeout($this->source, $arg1, $arg2);
+ break;
+ case STREAM_OPTION_WRITE_BUFFER:
+ stream_set_write_buffer($this->source, $arg1, $arg2);
+ }
+ }
+
+ public function stream_stat() {
+ return fstat($this->source);
+ }
+
+ public function stream_lock($mode) {
+ flock($this->source, $mode);
+ }
+
+ public function stream_flush() {
+ return fflush($this->source);
+ }
+
+ public function stream_eof() {
+ return feof($this->source);
+ }
+
+ public function url_stat($path) {
+ $path = substr($path, strlen('close://'));
+ if (file_exists($path)) {
+ return stat($path);
+ } else {
+ return false;
+ }
+ }
+
+ public function stream_close() {
+ fclose($this->source);
+ if (isset(self::$callBacks[$this->path])) {
+ call_user_func(self::$callBacks[$this->path], $this->path);
+ }
+ }
+
+ public function unlink($path) {
+ $path = substr($path, strlen('close://'));
+ return unlink($path);
+ }
+
+ public static function registerCallback($path, $callback) {
+ self::$callBacks[$path] = $callback;
+ }
+}
diff --git a/lib/files/stream/dir.php b/lib/files/stream/dir.php
new file mode 100644
index 00000000000..6ca884fc994
--- /dev/null
+++ b/lib/files/stream/dir.php
@@ -0,0 +1,47 @@
+<?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.
+ */
+
+namespace OC\Files\Stream;
+
+class Dir {
+ private static $dirs = array();
+ private $name;
+ private $index;
+
+ public function dir_opendir($path, $options) {
+ $this->name = substr($path, strlen('fakedir://'));
+ $this->index = 0;
+ if (!isset(self::$dirs[$this->name])) {
+ self::$dirs[$this->name] = array();
+ }
+ return true;
+ }
+
+ public function dir_readdir() {
+ if ($this->index >= count(self::$dirs[$this->name])) {
+ return false;
+ }
+ $filename = self::$dirs[$this->name][$this->index];
+ $this->index++;
+ return $filename;
+ }
+
+ public function dir_closedir() {
+ $this->name = '';
+ return true;
+ }
+
+ public function dir_rewinddir() {
+ $this->index = 0;
+ return true;
+ }
+
+ public static function register($path, $content) {
+ self::$dirs[$path] = $content;
+ }
+}
diff --git a/lib/files/stream/oc.php b/lib/files/stream/oc.php
new file mode 100644
index 00000000000..88e7e062df9
--- /dev/null
+++ b/lib/files/stream/oc.php
@@ -0,0 +1,129 @@
+<?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.
+ */
+
+namespace OC\Files\Stream;
+
+/**
+ * a stream wrappers for ownCloud's virtual filesystem
+ */
+class OC {
+ /**
+ * @var \OC\Files\View
+ */
+ static private $rootView;
+
+ private $path;
+ private $dirSource;
+ private $fileSource;
+ private $meta;
+
+ private function setup(){
+ if (!self::$rootView) {
+ self::$rootView = new \OC\Files\View('');
+ }
+ }
+
+ public function stream_open($path, $mode, $options, &$opened_path) {
+ $this->setup();
+ $path = substr($path, strlen('oc://'));
+ $this->path = $path;
+ $this->fileSource = self::$rootView->fopen($path, $mode);
+ if (is_resource($this->fileSource)) {
+ $this->meta = stream_get_meta_data($this->fileSource);
+ }
+ return is_resource($this->fileSource);
+ }
+
+ public function stream_seek($offset, $whence = SEEK_SET) {
+ fseek($this->fileSource, $offset, $whence);
+ }
+
+ public function stream_tell() {
+ return ftell($this->fileSource);
+ }
+
+ public function stream_read($count) {
+ return fread($this->fileSource, $count);
+ }
+
+ public function stream_write($data) {
+ return fwrite($this->fileSource, $data);
+ }
+
+ public function stream_set_option($option, $arg1, $arg2) {
+ switch ($option) {
+ case STREAM_OPTION_BLOCKING:
+ stream_set_blocking($this->fileSource, $arg1);
+ break;
+ case STREAM_OPTION_READ_TIMEOUT:
+ stream_set_timeout($this->fileSource, $arg1, $arg2);
+ break;
+ case STREAM_OPTION_WRITE_BUFFER:
+ stream_set_write_buffer($this->fileSource, $arg1, $arg2);
+ }
+ }
+
+ public function stream_stat() {
+ return fstat($this->fileSource);
+ }
+
+ public function stream_lock($mode) {
+ flock($this->fileSource, $mode);
+ }
+
+ public function stream_flush() {
+ return fflush($this->fileSource);
+ }
+
+ public function stream_eof() {
+ return feof($this->fileSource);
+ }
+
+ public function url_stat($path) {
+ $this->setup();
+ $path = substr($path, strlen('oc://'));
+ if (self::$rootView->file_exists($path)) {
+ return self::$rootView->stat($path);
+ } else {
+ return false;
+ }
+ }
+
+ public function stream_close() {
+ fclose($this->fileSource);
+ }
+
+ public function unlink($path) {
+ $this->setup();
+ $path = substr($path, strlen('oc://'));
+ return self::$rootView->unlink($path);
+ }
+
+ public function dir_opendir($path, $options) {
+ $this->setup();
+ $path = substr($path, strlen('oc://'));
+ $this->path = $path;
+ $this->dirSource = self::$rootView->opendir($path);
+ if (is_resource($this->dirSource)) {
+ $this->meta = stream_get_meta_data($this->dirSource);
+ }
+ return is_resource($this->dirSource);
+ }
+
+ public function dir_readdir() {
+ return readdir($this->dirSource);
+ }
+
+ public function dir_closedir() {
+ closedir($this->dirSource);
+ }
+
+ public function dir_rewinddir() {
+ rewinddir($this->dirSource);
+ }
+}
diff --git a/lib/streamwrappers.php b/lib/files/stream/staticstream.php
index 981c280f0dd..7725a6a5a04 100644
--- a/lib/streamwrappers.php
+++ b/lib/files/stream/staticstream.php
@@ -1,54 +1,30 @@
<?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.
+ */
-class OC_FakeDirStream{
- public static $dirs=array();
- private $name;
- private $index;
-
- public function dir_opendir($path, $options) {
- $this->name=substr($path, strlen('fakedir://'));
- $this->index=0;
- if(!isset(self::$dirs[$this->name])) {
- self::$dirs[$this->name]=array();
- }
- return true;
- }
-
- public function dir_readdir() {
- if($this->index>=count(self::$dirs[$this->name])) {
- return false;
- }
- $filename=self::$dirs[$this->name][$this->index];
- $this->index++;
- return $filename;
- }
-
- public function dir_closedir() {
- $this->name='';
- return true;
- }
-
- public function dir_rewinddir() {
- $this->index=0;
- return true;
- }
-}
+namespace OC\Files\Stream;
-class OC_StaticStreamWrapper {
+class StaticStream {
public $context;
protected static $data = array();
- protected $path = '';
+ protected $path = '';
protected $pointer = 0;
protected $writable = false;
- public function stream_close() {}
+ public function stream_close() {
+ }
public function stream_eof() {
return $this->pointer >= strlen(self::$data[$this->path]);
}
- public function stream_flush() {}
+ public function stream_flush() {
+ }
public function stream_open($path, $mode, $options, &$opened_path) {
switch ($mode[0]) {
@@ -213,89 +189,3 @@ class OC_StaticStreamWrapper {
return false;
}
}
-
-/**
- * stream wrapper that provides a callback on stream close
- */
-class OC_CloseStreamWrapper{
- public static $callBacks=array();
- private $path='';
- private $source;
- private static $open=array();
- public function stream_open($path, $mode, $options, &$opened_path) {
- $path=substr($path, strlen('close://'));
- $this->path=$path;
- $this->source=fopen($path, $mode);
- if(is_resource($this->source)) {
- $this->meta=stream_get_meta_data($this->source);
- }
- self::$open[]=$path;
- return is_resource($this->source);
- }
-
- public function stream_seek($offset, $whence=SEEK_SET) {
- fseek($this->source, $offset, $whence);
- }
-
- public function stream_tell() {
- return ftell($this->source);
- }
-
- public function stream_read($count) {
- return fread($this->source, $count);
- }
-
- public function stream_write($data) {
- return fwrite($this->source, $data);
- }
-
- public function stream_set_option($option, $arg1, $arg2) {
- switch($option) {
- case STREAM_OPTION_BLOCKING:
- stream_set_blocking($this->source, $arg1);
- break;
- case STREAM_OPTION_READ_TIMEOUT:
- stream_set_timeout($this->source, $arg1, $arg2);
- break;
- case STREAM_OPTION_WRITE_BUFFER:
- stream_set_write_buffer($this->source, $arg1, $arg2);
- }
- }
-
- public function stream_stat() {
- return fstat($this->source);
- }
-
- public function stream_lock($mode) {
- flock($this->source, $mode);
- }
-
- public function stream_flush() {
- return fflush($this->source);
- }
-
- public function stream_eof() {
- return feof($this->source);
- }
-
- public function url_stat($path) {
- $path=substr($path, strlen('close://'));
- if(file_exists($path)) {
- return stat($path);
- }else{
- return false;
- }
- }
-
- public function stream_close() {
- fclose($this->source);
- if(isset(self::$callBacks[$this->path])) {
- call_user_func(self::$callBacks[$this->path], $this->path);
- }
- }
-
- public function unlink($path) {
- $path=substr($path, strlen('close://'));
- return unlink($path);
- }
-}
diff --git a/lib/files/view.php b/lib/files/view.php
new file mode 100644
index 00000000000..1a234228eab
--- /dev/null
+++ b/lib/files/view.php
@@ -0,0 +1,970 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Class to provide access to ownCloud filesystem via a "view", and methods for
+ * working with files within that view (e.g. read, write, delete, etc.). Each
+ * view is restricted to a set of directories via a virtual root. The default view
+ * uses the currently logged in user's data directory as root (parts of
+ * OC_Filesystem are merely a wrapper for OC_FilesystemView).
+ *
+ * Apps that need to access files outside of the user data folders (to modify files
+ * belonging to a user other than the one currently logged in, for example) should
+ * use this class directly rather than using OC_Filesystem, or making use of PHP's
+ * built-in file manipulation functions. This will ensure all hooks and proxies
+ * are triggered correctly.
+ *
+ * Filesystem functions are not called directly; they are passed to the correct
+ * \OC\Files\Storage\Storage object
+ */
+
+namespace OC\Files;
+
+class View {
+ private $fakeRoot = '';
+ private $internal_path_cache = array();
+ private $storage_cache = array();
+
+ public function __construct($root) {
+ $this->fakeRoot = $root;
+ }
+
+ public function getAbsolutePath($path = '/') {
+ if (!$path) {
+ $path = '/';
+ }
+ if ($path[0] !== '/') {
+ $path = '/' . $path;
+ }
+ return $this->fakeRoot . $path;
+ }
+
+ /**
+ * change the root to a fake root
+ *
+ * @param string $fakeRoot
+ * @return bool
+ */
+ public function chroot($fakeRoot) {
+ if (!$fakeRoot == '') {
+ if ($fakeRoot[0] !== '/') {
+ $fakeRoot = '/' . $fakeRoot;
+ }
+ }
+ $this->fakeRoot = $fakeRoot;
+ }
+
+ /**
+ * get the fake root
+ *
+ * @return string
+ */
+ public function getRoot() {
+ return $this->fakeRoot;
+ }
+
+ /**
+ * get path relative to the root of the view
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getRelativePath($path) {
+ if ($this->fakeRoot == '') {
+ return $path;
+ }
+ if (strpos($path, $this->fakeRoot) !== 0) {
+ return null;
+ } else {
+ $path = substr($path, strlen($this->fakeRoot));
+ if (strlen($path) === 0) {
+ return '/';
+ } else {
+ return $path;
+ }
+ }
+ }
+
+ /**
+ * get the mountpoint of the storage object for a path
+ ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getMountPoint($path) {
+ return Filesystem::getMountPoint($this->getAbsolutePath($path));
+ }
+
+ /**
+ * resolve a path to a storage and internal path
+ *
+ * @param string $path
+ * @return array consisting of the storage and the internal path
+ */
+ public function resolvePath($path) {
+ return Filesystem::resolvePath($this->getAbsolutePath($path));
+ }
+
+ /**
+ * return the path to a local version of the file
+ * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFile($path) {
+ $parent = substr($path, 0, strrpos($path, '/'));
+ $path = $this->getAbsolutePath($path);
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if (Filesystem::isValidPath($parent) and $storage) {
+ return $storage->getLocalFile($internalPath);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFolder($path) {
+ $parent = substr($path, 0, strrpos($path, '/'));
+ $path = $this->getAbsolutePath($path);
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if (Filesystem::isValidPath($parent) and $storage) {
+ return $storage->getLocalFolder($internalPath);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * the following functions operate with arguments and return values identical
+ * to those of their PHP built-in equivalents. Mostly they are merely wrappers
+ * for \OC\Files\Storage\Storage via basicOperation().
+ */
+ public function mkdir($path) {
+ return $this->basicOperation('mkdir', $path, array('create', 'write'));
+ }
+
+ public function rmdir($path) {
+ return $this->basicOperation('rmdir', $path, array('delete'));
+ }
+
+ public function opendir($path) {
+ return $this->basicOperation('opendir', $path, array('read'));
+ }
+
+ public function readdir($handle) {
+ $fsLocal = new Storage\Local(array('datadir' => '/'));
+ return $fsLocal->readdir($handle);
+ }
+
+ public function is_dir($path) {
+ if ($path == '/') {
+ return true;
+ }
+ return $this->basicOperation('is_dir', $path);
+ }
+
+ public function is_file($path) {
+ if ($path == '/') {
+ return false;
+ }
+ return $this->basicOperation('is_file', $path);
+ }
+
+ public function stat($path) {
+ return $this->basicOperation('stat', $path);
+ }
+
+ public function filetype($path) {
+ return $this->basicOperation('filetype', $path);
+ }
+
+ public function filesize($path) {
+ return $this->basicOperation('filesize', $path);
+ }
+
+ public function readfile($path) {
+ @ob_end_clean();
+ $handle = $this->fopen($path, 'rb');
+ if ($handle) {
+ $chunkSize = 8192; // 8 MB chunks
+ while (!feof($handle)) {
+ echo fread($handle, $chunkSize);
+ flush();
+ }
+ $size = $this->filesize($path);
+ return $size;
+ }
+ return false;
+ }
+
+ public function isCreatable($path) {
+ return $this->basicOperation('isCreatable', $path);
+ }
+
+ public function isReadable($path) {
+ return $this->basicOperation('isReadable', $path);
+ }
+
+ public function isUpdatable($path) {
+ return $this->basicOperation('isUpdatable', $path);
+ }
+
+ public function isDeletable($path) {
+ return $this->basicOperation('isDeletable', $path);
+ }
+
+ public function isSharable($path) {
+ return $this->basicOperation('isSharable', $path);
+ }
+
+ public function file_exists($path) {
+ if ($path == '/') {
+ return true;
+ }
+ return $this->basicOperation('file_exists', $path);
+ }
+
+ public function filemtime($path) {
+ return $this->basicOperation('filemtime', $path);
+ }
+
+ public function touch($path, $mtime = null) {
+ if (!is_null($mtime) and !is_numeric($mtime)) {
+ $mtime = strtotime($mtime);
+ }
+ return $this->basicOperation('touch', $path, array('write'), $mtime);
+ }
+
+ public function file_get_contents($path) {
+ return $this->basicOperation('file_get_contents', $path, array('read'));
+ }
+
+ public function file_put_contents($path, $data) {
+ if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier
+ $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
+ if (\OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && Filesystem::isValidPath($path)) {
+ $path = $this->getRelativePath($absolutePath);
+ $exists = $this->file_exists($path);
+ $run = true;
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ if (!$exists) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_create,
+ array(
+ Filesystem::signal_param_path => $path,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_write,
+ array(
+ Filesystem::signal_param_path => $path,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ if (!$run) {
+ return false;
+ }
+ $target = $this->fopen($path, 'w');
+ if ($target) {
+ $count = \OC_Helper::streamCopy($data, $target);
+ fclose($target);
+ fclose($data);
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ if (!$exists) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_create,
+ array(Filesystem::signal_param_path => $path)
+ );
+ }
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_write,
+ array(Filesystem::signal_param_path => $path)
+ );
+ }
+ \OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count);
+ return $count > 0;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ } else {
+ return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data);
+ }
+ }
+
+ public function unlink($path) {
+ return $this->basicOperation('unlink', $path, array('delete'));
+ }
+
+ public function deleteAll($directory, $empty = false) {
+ return $this->basicOperation('deleteAll', $directory, array('delete'), $empty);
+ }
+
+ public function rename($path1, $path2) {
+ $postFix1 = (substr($path1, -1, 1) === '/') ? '/' : '';
+ $postFix2 = (substr($path2, -1, 1) === '/') ? '/' : '';
+ $absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1));
+ $absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2));
+ if (\OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and Filesystem::isValidPath($path2)) {
+ $path1 = $this->getRelativePath($absolutePath1);
+ $path2 = $this->getRelativePath($absolutePath2);
+
+ if ($path1 == null or $path2 == null) {
+ return false;
+ }
+ $run = true;
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME, Filesystem::signal_rename,
+ array(
+ Filesystem::signal_param_oldpath => $path1,
+ Filesystem::signal_param_newpath => $path2,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ if ($run) {
+ $mp1 = $this->getMountPoint($path1 . $postFix1);
+ $mp2 = $this->getMountPoint($path2 . $postFix2);
+ if ($mp1 == $mp2) {
+ list($storage, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1);
+ list(, $internalPath2) = Filesystem::resolvePath($absolutePath2 . $postFix2);
+ if ($storage) {
+ $result = $storage->rename($internalPath1, $internalPath2);
+ } else {
+ $result = false;
+ }
+ } else {
+ $source = $this->fopen($path1 . $postFix1, 'r');
+ $target = $this->fopen($path2 . $postFix2, 'w');
+ $count = \OC_Helper::streamCopy($source, $target);
+ list($storage1, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1);
+ $storage1->unlink($internalPath1);
+ $result = $count > 0;
+ }
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_rename,
+ array(
+ Filesystem::signal_param_oldpath => $path1,
+ Filesystem::signal_param_newpath => $path2
+ )
+ );
+ }
+ return $result;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public function copy($path1, $path2) {
+ $postFix1 = (substr($path1, -1, 1) === '/') ? '/' : '';
+ $postFix2 = (substr($path2, -1, 1) === '/') ? '/' : '';
+ $absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1));
+ $absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2));
+ if (\OC_FileProxy::runPreProxies('copy', $absolutePath1, $absolutePath2) and Filesystem::isValidPath($path2)) {
+ $path1 = $this->getRelativePath($absolutePath1);
+ $path2 = $this->getRelativePath($absolutePath2);
+
+ if ($path1 == null or $path2 == null) {
+ return false;
+ }
+ $run = true;
+ $exists = $this->file_exists($path2);
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_copy,
+ array(
+ Filesystem::signal_param_oldpath => $path1,
+ Filesystem::signal_param_newpath => $path2,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ if ($run and !$exists) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_create,
+ array(
+ Filesystem::signal_param_path => $path2,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ if ($run) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_write,
+ array(
+ Filesystem::signal_param_path => $path2,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ }
+ if ($run) {
+ $mp1 = $this->getMountPoint($path1 . $postFix1);
+ $mp2 = $this->getMountPoint($path2 . $postFix2);
+ if ($mp1 == $mp2) {
+ list($storage, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1);
+ list(, $internalPath2) = Filesystem::resolvePath($absolutePath2 . $postFix2);
+ if ($storage) {
+ $result = $storage->copy($internalPath1, $internalPath2);
+ } else {
+ $result = false;
+ }
+ } else {
+ $source = $this->fopen($path1 . $postFix1, 'r');
+ $target = $this->fopen($path2 . $postFix2, 'w');
+ $result = \OC_Helper::streamCopy($source, $target);
+ }
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_copy,
+ array(
+ Filesystem::signal_param_oldpath => $path1,
+ Filesystem::signal_param_newpath => $path2
+ )
+ );
+ if (!$exists) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_create,
+ array(Filesystem::signal_param_path => $path2)
+ );
+ }
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_write,
+ array(Filesystem::signal_param_path => $path2)
+ );
+ }
+ return $result;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public function fopen($path, $mode) {
+ $hooks = array();
+ switch ($mode) {
+ case 'r':
+ case 'rb':
+ $hooks[] = 'read';
+ break;
+ case 'r+':
+ case 'rb+':
+ case 'w+':
+ case 'wb+':
+ case 'x+':
+ case 'xb+':
+ case 'a+':
+ case 'ab+':
+ $hooks[] = 'read';
+ $hooks[] = 'write';
+ break;
+ case 'w':
+ case 'wb':
+ case 'x':
+ case 'xb':
+ case 'a':
+ case 'ab':
+ $hooks[] = 'write';
+ break;
+ default:
+ \OC_Log::write('core', 'invalid mode (' . $mode . ') for ' . $path, \OC_Log::ERROR);
+ }
+
+ return $this->basicOperation('fopen', $path, $hooks, $mode);
+ }
+
+ public function toTmpFile($path) {
+ if (Filesystem::isValidPath($path)) {
+ $source = $this->fopen($path, 'r');
+ if ($source) {
+ $extension = pathinfo($path, PATHINFO_EXTENSION);
+ $tmpFile = \OC_Helper::tmpFile($extension);
+ file_put_contents($tmpFile, $source);
+ return $tmpFile;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public function fromTmpFile($tmpFile, $path) {
+ if (Filesystem::isValidPath($path)) {
+ if (!$tmpFile) {
+ debug_print_backtrace();
+ }
+ $source = fopen($tmpFile, 'r');
+ if ($source) {
+ $this->file_put_contents($path, $source);
+ unlink($tmpFile);
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public function getMimeType($path) {
+ return $this->basicOperation('getMimeType', $path);
+ }
+
+ public function hash($type, $path, $raw = false) {
+ $postFix = (substr($path, -1, 1) === '/') ? '/' : '';
+ $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
+ if (\OC_FileProxy::runPreProxies('hash', $absolutePath) && Filesystem::isValidPath($path)) {
+ $path = $this->getRelativePath($absolutePath);
+ if ($path == null) {
+ return false;
+ }
+ if (Filesystem::$loaded && $this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_read,
+ array(Filesystem::signal_param_path => $path)
+ );
+ }
+ list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
+ if ($storage) {
+ $result = $storage->hash($type, $internalPath, $raw);
+ $result = \OC_FileProxy::runPostProxies('hash', $absolutePath, $result);
+ return $result;
+ }
+ }
+ return null;
+ }
+
+ public function free_space($path = '/') {
+ return $this->basicOperation('free_space', $path);
+ }
+
+ /**
+ * @brief abstraction layer for basic filesystem functions: wrapper for \OC\Files\Storage\Storage
+ * @param string $operation
+ * @param string $path
+ * @param array $hooks (optional)
+ * @param mixed $extraParam (optional)
+ * @return mixed
+ *
+ * This method takes requests for basic filesystem functions (e.g. reading & writing
+ * files), processes hooks and proxies, sanitises paths, and finally passes them on to
+ * \OC\Files\Storage\Storage for delegation to a storage backend for execution
+ */
+ private function basicOperation($operation, $path, $hooks = array(), $extraParam = null) {
+ $postFix = (substr($path, -1, 1) === '/') ? '/' : '';
+ $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
+ if (\OC_FileProxy::runPreProxies($operation, $absolutePath, $extraParam) and Filesystem::isValidPath($path)) {
+ $path = $this->getRelativePath($absolutePath);
+ if ($path == null) {
+ return false;
+ }
+ $run = $this->runHooks($hooks, $path);
+ list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
+ if ($run and $storage) {
+ if (!is_null($extraParam)) {
+ $result = $storage->$operation($internalPath, $extraParam);
+ } else {
+ $result = $storage->$operation($internalPath);
+ }
+ $result = \OC_FileProxy::runPostProxies($operation, $this->getAbsolutePath($path), $result);
+ if (Filesystem::$loaded and $this->fakeRoot == Filesystem::getRoot()) {
+ if ($operation != 'fopen') { //no post hooks for fopen, the file stream is still open
+ $this->runHooks($hooks, $path, true);
+ }
+ }
+ return $result;
+ }
+ }
+ return null;
+ }
+
+ private function runHooks($hooks, $path, $post = false) {
+ $prefix = ($post) ? 'post_' : '';
+ $run = true;
+ if (Filesystem::$loaded and $this->fakeRoot == Filesystem::getRoot()) {
+ foreach ($hooks as $hook) {
+ if ($hook != 'read') {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ $prefix . $hook,
+ array(
+ Filesystem::signal_param_run => &$run,
+ Filesystem::signal_param_path => $path
+ )
+ );
+ } elseif (!$post) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ $prefix . $hook,
+ array(
+ Filesystem::signal_param_path => $path
+ )
+ );
+ }
+ }
+ }
+ return $run;
+ }
+
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @param int $time
+ * @return bool
+ */
+ public function hasUpdated($path, $time) {
+ return $this->basicOperation('hasUpdated', $path, array(), $time);
+ }
+
+ /**
+ * get the filesystem info
+ *
+ * @param string $path
+ * @return array
+ *
+ * returns an associative array with the following keys:
+ * - size
+ * - mtime
+ * - mimetype
+ * - encrypted
+ * - versioned
+ */
+ public function getFileInfo($path) {
+ $data = array();
+ if (!Filesystem::isValidPath($path)) {
+ return $data;
+ }
+ $path = Filesystem::normalizePath($this->fakeRoot . '/' . $path);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($internalPath);
+ $permissionsCache = $storage->getPermissionsCache($internalPath);
+ $user = \OC_User::getUser();
+
+ if (!$cache->inCache($internalPath)) {
+ $scanner = $storage->getScanner($internalPath);
+ $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
+ } else {
+ $watcher = $storage->getWatcher($internalPath);
+ $watcher->checkUpdate($internalPath);
+ }
+
+ $data = $cache->get($internalPath);
+
+ if ($data and $data['fileid']) {
+ if ($data['mimetype'] === 'httpd/unix-directory') {
+ //add the sizes of other mountpoints to the folder
+ $mountPoints = Filesystem::getMountPoints($path);
+ foreach ($mountPoints as $mountPoint) {
+ $subStorage = Filesystem::getStorage($mountPoint);
+ if ($subStorage) {
+ $subCache = $subStorage->getCache('');
+ $rootEntry = $subCache->get('');
+ $data['size'] += $rootEntry['size'];
+ }
+ }
+ }
+
+ $permissions = $permissionsCache->get($data['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $storage->getPermissions($internalPath);
+ $permissionsCache->set($data['fileid'], $user, $permissions);
+ }
+ $data['permissions'] = $permissions;
+ }
+ }
+ return $data;
+ }
+
+ /**
+ * get the content of a directory
+ *
+ * @param string $directory path under datadirectory
+ * @return array
+ */
+ public function getDirectoryContent($directory, $mimetype_filter = '') {
+ $result = array();
+ if (!Filesystem::isValidPath($directory)) {
+ return $result;
+ }
+ $path = Filesystem::normalizePath($this->fakeRoot . '/' . $directory);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($internalPath);
+ $permissionsCache = $storage->getPermissionsCache($internalPath);
+ $user = \OC_User::getUser();
+
+ if ($cache->getStatus($internalPath) < Cache\Cache::COMPLETE) {
+ $scanner = $storage->getScanner($internalPath);
+ $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
+ } else {
+ $watcher = $storage->getWatcher($internalPath);
+ $watcher->checkUpdate($internalPath);
+ }
+
+ $files = $cache->getFolderContents($internalPath); //TODO: mimetype_filter
+
+ $ids = array();
+ foreach ($files as $i => $file) {
+ $files[$i]['type'] = $file['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
+ $ids[] = $file['fileid'];
+
+ $permissions = $permissionsCache->get($file['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $storage->getPermissions($file['path']);
+ $permissionsCache->set($file['fileid'], $user, $permissions);
+ }
+ $files[$i]['permissions'] = $permissions;
+ }
+
+ //add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders
+ $mountPoints = Filesystem::getMountPoints($path);
+ $dirLength = strlen($path);
+ foreach ($mountPoints as $mountPoint) {
+ $subStorage = Filesystem::getStorage($mountPoint);
+ if ($subStorage) {
+ $subCache = $subStorage->getCache('');
+
+ if ($subCache->getStatus('') === Cache\Cache::NOT_FOUND) {
+ $subScanner = $subStorage->getScanner('');
+ $subScanner->scanFile('');
+ }
+
+ $rootEntry = $subCache->get('');
+ if ($rootEntry) {
+ $relativePath = trim(substr($mountPoint, $dirLength), '/');
+ if ($pos = strpos($relativePath, '/')) { //mountpoint inside subfolder add size to the correct folder
+ $entryName = substr($relativePath, 0, $pos);
+ foreach ($files as &$entry) {
+ if ($entry['name'] === $entryName) {
+ $entry['size'] += $rootEntry['size'];
+ }
+ }
+ } else { //mountpoint in this folder, add an entry for it
+ $rootEntry['name'] = $relativePath;
+ $rootEntry['type'] = $rootEntry['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
+ $subPermissionsCache = $subStorage->getPermissionsCache('');
+ $permissions = $subPermissionsCache->get($rootEntry['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $subStorage->getPermissions($rootEntry['path']);
+ $subPermissionsCache->set($rootEntry['fileid'], $user, $permissions);
+ }
+ $rootEntry['permissions'] = $permissions;
+
+ //remove any existing entry with the same name
+ foreach ($files as $i => $file) {
+ if ($file['name'] === $rootEntry['name']) {
+ unset($files[$i]);
+ break;
+ }
+ }
+ $files[] = $rootEntry;
+ }
+ }
+ }
+ }
+
+ if ($mimetype_filter) {
+ foreach ($files as $file) {
+ if (strpos($mimetype_filter, '/')) {
+ if ($file['mimetype'] === $mimetype_filter) {
+ $result[] = $file;
+ }
+ } else {
+ if ($file['mimepart'] === $mimetype_filter) {
+ $result[] = $file;
+ }
+ }
+ }
+ } else {
+ $result = $files;
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * change file metadata
+ *
+ * @param string $path
+ * @param array $data
+ * @return int
+ *
+ * returns the fileid of the updated file
+ */
+ public function putFileInfo($path, $data) {
+ $path = Filesystem::normalizePath($this->fakeRoot . '/' . $path);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($path);
+
+ if (!$cache->inCache($internalPath)) {
+ $scanner = $storage->getScanner($internalPath);
+ $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
+ }
+
+ return $cache->put($internalPath, $data);
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * search for files with the name matching $query
+ *
+ * @param string $query
+ * @return array
+ */
+ public function search($query) {
+ return $this->searchCommon('%' . $query . '%', 'search');
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $query
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ return $this->searchCommon($mimetype, 'searchByMime');
+ }
+
+ /**
+ * @param string $query
+ * @param string $method
+ * @return array
+ */
+ private function searchCommon($query, $method) {
+ $files = array();
+ $rootLength = strlen($this->fakeRoot);
+
+ $mountPoint = Filesystem::getMountPoint($this->fakeRoot);
+ $storage = Filesystem::getStorage($mountPoint);
+ if ($storage) {
+ $cache = $storage->getCache('');
+
+ $results = $cache->$method($query);
+ foreach ($results as $result) {
+ if (substr($mountPoint . $result['path'], 0, $rootLength) === $this->fakeRoot) {
+ $result['path'] = substr($mountPoint . $result['path'], $rootLength);
+ $files[] = $result;
+ }
+ }
+
+ $mountPoints = Filesystem::getMountPoints($this->fakeRoot);
+ foreach ($mountPoints as $mountPoint) {
+ $storage = Filesystem::getStorage($mountPoint);
+ if ($storage) {
+ $cache = $storage->getCache('');
+
+ $relativeMountPoint = substr($mountPoint, $rootLength);
+ $results = $cache->$method($query);
+ foreach ($results as $result) {
+ $result['path'] = $relativeMountPoint . $result['path'];
+ $files[] = $result;
+ }
+ }
+ }
+ }
+ return $files;
+ }
+
+ /**
+ * Get the owner for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getOwner($path) {
+ return $this->basicOperation('getOwner', $path);
+ }
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path) {
+ /**
+ * @var Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = $this->resolvePath($path);
+ if ($storage) {
+ return $storage->getETag($internalPath);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Get the path of a file by id, relative to the view
+ *
+ * Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file
+ *
+ * @param int $id
+ * @return string
+ */
+ public function getPath($id) {
+ list($storage, $internalPath) = Cache\Cache::getById($id);
+ $mounts = Mount::findById($storage);
+ foreach ($mounts as $mount) {
+ /**
+ * @var \OC\Files\Mount $mount
+ */
+ $fullPath = $mount->getMountPoint() . $internalPath;
+ if (!is_null($path = $this->getRelativePath($fullPath))) {
+ return $path;
+ }
+ }
+ return null;
+ }
+}
diff --git a/lib/filestorage.php b/lib/filestorage.php
deleted file mode 100644
index 922abcdd706..00000000000
--- a/lib/filestorage.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-/**
-* ownCloud
-*
-* @author Frank Karlitschek
-* @copyright 2012 Frank Karlitschek frank@owncloud.org
-*
-* 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/>.
-*/
-
-/**
- * Provide a common interface to all different storage options
- */
-abstract class OC_Filestorage{
- abstract public function __construct($parameters);
- abstract public function mkdir($path);
- abstract public function rmdir($path);
- abstract public function opendir($path);
- abstract public function is_dir($path);
- abstract public function is_file($path);
- abstract public function stat($path);
- abstract public function filetype($path);
- abstract public function filesize($path);
- abstract public function isCreatable($path);
- abstract public function isReadable($path);
- abstract public function isUpdatable($path);
- abstract public function isDeletable($path);
- abstract public function isSharable($path);
- abstract public function file_exists($path);
- abstract public function filectime($path);
- abstract public function filemtime($path);
- abstract public function file_get_contents($path);
- abstract public function file_put_contents($path, $data);
- abstract public function unlink($path);
- abstract public function rename($path1, $path2);
- abstract public function copy($path1, $path2);
- abstract public function fopen($path, $mode);
- abstract public function getMimeType($path);
- abstract public function hash($type, $path, $raw = false);
- abstract public function free_space($path);
- abstract public function search($query);
- abstract public function touch($path, $mtime=null);
- abstract public function getLocalFile($path);// get a path to a local version of the file, whether the original file is local or remote
- abstract public function getLocalFolder($path);// get a path to a local version of the folder, whether the original file is local or remote
- /**
- * check if a file or folder has been updated since $time
- * @param int $time
- * @return bool
- *
- * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
- * returning true for other changes in the folder is optional
- */
- abstract public function hasUpdated($path, $time);
- abstract public function getOwner($path);
- abstract public function test();
-}
diff --git a/lib/filestorage/temporary.php b/lib/filestorage/temporary.php
deleted file mode 100644
index 876ba045a63..00000000000
--- a/lib/filestorage/temporary.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * local storage backnd in temporary folder for testing purpores
- */
-class OC_Filestorage_Temporary extends OC_Filestorage_Local{
- public function __construct($arguments) {
- $this->datadir=OC_Helper::tmpFolder();
- }
-
- public function cleanUp() {
- OC_Helper::rmdirr($this->datadir);
- }
-
- public function __destruct() {
- $this->cleanUp();
- }
-}
diff --git a/lib/filesystem.php b/lib/filesystem.php
index aa03593908d..e86bea6bff9 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -1,26 +1,11 @@
<?php
/**
-* ownCloud
-*
-* @author Frank Karlitschek
-* @copyright 2012 Frank Karlitschek frank@owncloud.org
-*
-* 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/>.
-*
-*/
-
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
/**
* Class for abstraction of filesystem functions
@@ -31,578 +16,397 @@
* read(path)
* write(path, &run)
* post_write(path)
- * create(path, &run) (when a file is created, both create and write will be emited in that order)
+ * create(path, &run) (when a file is created, both create and write will be emitted in that order)
* post_create(path)
* delete(path, &run)
* post_delete(path)
- * rename(oldpath, newpath, &run)
- * post_rename(oldpath, newpath)
- * copy(oldpath, newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emited in that order)
- * post_rename(oldpath, newpath)
+ * rename(oldpath,newpath, &run)
+ * post_rename(oldpath,newpath)
+ * copy(oldpath,newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emitted in that order)
+ * post_rename(oldpath,newpath)
*
- * the &run parameter can be set to false to prevent the operation from occuring
+ * the &run parameter can be set to false to prevent the operation from occurring
*/
-class OC_Filesystem{
- static private $storages=array();
- static private $mounts=array();
- static private $loadedUsers=array();
- public static $loaded=false;
- /**
- * @var OC_Filestorage $defaultInstance
- */
- static private $defaultInstance;
-
-
- /**
- * classname which used for hooks handling
- * used as signalclass in OC_Hooks::emit()
- */
- const CLASSNAME = 'OC_Filesystem';
-
- /**
- * signalname emited before file renaming
- * @param oldpath
- * @param newpath
- */
- const signal_rename = 'rename';
-
- /**
- * signal emited after file renaming
- * @param oldpath
- * @param newpath
- */
- const signal_post_rename = 'post_rename';
-
- /**
- * signal emited before file/dir creation
- * @param path
- * @param run changing this flag to false in hook handler will cancel event
- */
- const signal_create = 'create';
-
- /**
- * signal emited after file/dir creation
- * @param path
- * @param run changing this flag to false in hook handler will cancel event
- */
- const signal_post_create = 'post_create';
-
- /**
- * signal emits before file/dir copy
- * @param oldpath
- * @param newpath
- * @param run changing this flag to false in hook handler will cancel event
- */
- const signal_copy = 'copy';
-
- /**
- * signal emits after file/dir copy
- * @param oldpath
- * @param newpath
- */
- const signal_post_copy = 'post_copy';
-
- /**
- * signal emits before file/dir save
- * @param path
- * @param run changing this flag to false in hook handler will cancel event
- */
- const signal_write = 'write';
-
- /**
- * signal emits after file/dir save
- * @param path
- */
- const signal_post_write = 'post_write';
-
- /**
- * signal emits when reading file/dir
- * @param path
- */
- const signal_read = 'read';
-
- /**
- * signal emits when removing file/dir
- * @param path
- */
- const signal_delete = 'delete';
-
+/**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
+class OC_Filesystem {
/**
- * parameters definitions for signals
+ * get the mountpoint of the storage object for a path
+ ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
+ * @return string
*/
- const signal_param_path = 'path';
- const signal_param_oldpath = 'oldpath';
- const signal_param_newpath = 'newpath';
+ static public function getMountPoint($path) {
+ return \OC\Files\Filesystem::getMountPoint($path);
+ }
/**
- * run - changing this flag to false in hook handler will cancel event
+ * resolve a path to a storage and internal path
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
+ * @return array consisting of the storage and the internal path
*/
- const signal_param_run = 'run';
+ static public function resolvePath($path) {
+ return \OC\Files\Filesystem::resolvePath($path);
+ }
/**
- * get the mountpoint of the storage object for a path
- ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
- *
- * @param string path
- * @return string
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
*/
- static public function getMountPoint($path) {
- OC_Hook::emit(self::CLASSNAME, 'get_mountpoint', array('path'=>$path));
- if(!$path) {
- $path='/';
- }
- if($path[0]!=='/') {
- $path='/'.$path;
- }
- $path=str_replace('//', '/', $path);
- $foundMountPoint='';
- $mountPoints=array_keys(OC_Filesystem::$mounts);
- foreach($mountPoints as $mountpoint) {
- if($mountpoint==$path) {
- return $mountpoint;
- }
- if(strpos($path, $mountpoint)===0 and strlen($mountpoint)>strlen($foundMountPoint)) {
- $foundMountPoint=$mountpoint;
- }
- }
- return $foundMountPoint;
- }
-
- /**
- * get the part of the path relative to the mountpoint of the storage it's stored in
- * @param string path
- * @return bool
- */
- static public function getInternalPath($path) {
- $mountPoint=self::getMountPoint($path);
- $internalPath=substr($path, strlen($mountPoint));
- return $internalPath;
- }
-
- static private function mountPointsLoaded($user) {
- return in_array($user, self::$loadedUsers);
- }
-
- /**
- * get the storage object for a path
- * @param string path
- * @return OC_Filestorage
- */
- static public function getStorage($path) {
- $user = ltrim(substr($path, 0, strpos($path, '/', 1)), '/');
- // check mount points if file was shared from a different user
- if ($user != OC_User::getUser() && !self::mountPointsLoaded($user)) {
- OC_Util::loadUserMountPoints($user);
- self::loadSystemMountPoints($user);
- self::$loadedUsers[] = $user;
- }
-
- $mountpoint=self::getMountPoint($path);
- if($mountpoint) {
- if(!isset(OC_Filesystem::$storages[$mountpoint])) {
- $mount=OC_Filesystem::$mounts[$mountpoint];
- OC_Filesystem::$storages[$mountpoint]=OC_Filesystem::createStorage($mount['class'], $mount['arguments']);
- }
- return OC_Filesystem::$storages[$mountpoint];
- }
- }
-
- static private function loadSystemMountPoints($user) {
- if(is_file(OC::$SERVERROOT.'/config/mount.php')) {
- $mountConfig=include OC::$SERVERROOT.'/config/mount.php';
- if(isset($mountConfig['global'])) {
- foreach($mountConfig['global'] as $mountPoint=>$options) {
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
-
- if(isset($mountConfig['group'])) {
- foreach($mountConfig['group'] as $group=>$mounts) {
- if(OC_Group::inGroup($user, $group)) {
- foreach($mounts as $mountPoint=>$options) {
- $mountPoint=self::setUserVars($mountPoint, $user);
- foreach($options as &$option) {
- $option=self::setUserVars($option, $user);
- }
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
- }
- }
-
- if(isset($mountConfig['user'])) {
- foreach($mountConfig['user'] as $mountUser=>$mounts) {
- if($user==='all' or strtolower($mountUser)===strtolower($user)) {
- foreach($mounts as $mountPoint=>$options) {
- $mountPoint=self::setUserVars($mountPoint, $user);
- foreach($options as &$option) {
- $option=self::setUserVars($option, $user);
- }
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
- }
- }
-
- $mtime=filemtime(OC::$SERVERROOT.'/config/mount.php');
- $previousMTime=OC_Appconfig::getValue('files', 'mountconfigmtime', 0);
- if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated
- OC_FileCache::triggerUpdate();
- OC_Appconfig::setValue('files', 'mountconfigmtime', $mtime);
- }
- }
- }
-
- static public function init($root, $user = '') {
- if(self::$defaultInstance) {
- return false;
- }
- self::$defaultInstance=new OC_FilesystemView($root);
-
- //load custom mount config
- if (!isset($user)) {
- $user = OC_User::getUser();
- }
- self::loadSystemMountPoints($user);
-
- self::$loaded=true;
- }
-
- /**
- * fill in the correct values for $user, and $password placeholders
- * @param string intput
- * @return string
- */
- private static function setUserVars($input, $user) {
- if (isset($user)) {
- return str_replace('$user', $user, $input);
- } else {
- return str_replace('$user', OC_User::getUser(), $input);
- }
+ static public function init($user, $root) {
+ return \OC\Files\Filesystem::init($user, $root);
}
/**
* get the default filesystem view
- * @return OC_FilesystemView
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @return \OC\Files\View
*/
static public function getView() {
- return self::$defaultInstance;
+ return \OC\Files\Filesystem::getView();
}
/**
* tear down the filesystem, removing all storage providers
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
*/
static public function tearDown() {
- self::$storages=array();
- }
-
- /**
- * create a new storage of a specific type
- * @param string type
- * @param array arguments
- * @return OC_Filestorage
- */
- static private function createStorage($class, $arguments) {
- if(class_exists($class)) {
- try {
- return new $class($arguments);
- } catch (Exception $exception) {
- OC_Log::write('core', $exception->getMessage(), OC_Log::ERROR);
- return false;
- }
- }else{
- OC_Log::write('core', 'storage backend '.$class.' not found', OC_Log::ERROR);
- return false;
- }
- }
-
- /**
- * change the root to a fake root
- * @param string fakeRoot
- * @return bool
- */
- static public function chroot($fakeRoot) {
- return self::$defaultInstance->chroot($fakeRoot);
+ \OC\Files\Filesystem::tearDown();
}
/**
* @brief get the relative path of the root data directory for the current user
* @return string
*
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
* Returns path like /admin/files
*/
static public function getRoot() {
- return self::$defaultInstance->getRoot();
+ return \OC\Files\Filesystem::getRoot();
}
/**
* clear all mounts and storage backends
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
*/
public static function clearMounts() {
- self::$mounts=array();
- self::$storages=array();
+ \OC\Files\Filesystem::clearMounts();
}
/**
- * mount an OC_Filestorage in our virtual filesystem
- * @param OC_Filestorage storage
- * @param string mountpoint
- */
+ * mount an \OC\Files\Storage\Storage in our virtual filesystem
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param \OC\Files\Storage\Storage $class
+ * @param array $arguments
+ * @param string $mountpoint
+ */
static public function mount($class, $arguments, $mountpoint) {
- if($mountpoint[0]!='/') {
- $mountpoint='/'.$mountpoint;
- }
- if(substr($mountpoint, -1)!=='/') {
- $mountpoint=$mountpoint.'/';
- }
- self::$mounts[$mountpoint]=array('class'=>$class, 'arguments'=>$arguments);
+ \OC\Files\Filesystem::mount($class, $arguments, $mountpoint);
}
/**
- * return the path to a local version of the file
- * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
- * @param string path
- * @return string
- */
+ * return the path to a local version of the file
+ * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
+ * @return string
+ */
static public function getLocalFile($path) {
- return self::$defaultInstance->getLocalFile($path);
+ return \OC\Files\Filesystem::getLocalFile($path);
}
+
/**
- * @param string path
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
* @return string
*/
static public function getLocalFolder($path) {
- return self::$defaultInstance->getLocalFolder($path);
+ return \OC\Files\Filesystem::getLocalFolder($path);
}
/**
- * return path to file which reflects one visible in browser
- * @param string path
- * @return string
- */
+ * return path to file which reflects one visible in browser
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
+ * @return string
+ */
static public function getLocalPath($path) {
- $datadir = OC_User::getHome(OC_User::getUser()).'/files';
- $newpath = $path;
- if (strncmp($newpath, $datadir, strlen($datadir)) == 0) {
- $newpath = substr($path, strlen($datadir));
- }
- return $newpath;
+ return \OC\Files\Filesystem::getLocalPath($path);
}
/**
* check if the requested path is valid
- * @param string path
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
* @return bool
*/
static public function isValidPath($path) {
- $path = self::normalizePath($path);
- if(!$path || $path[0]!=='/') {
- $path='/'.$path;
- }
- if(strstr($path, '/../') || strrchr($path, '/') === '/..' ) {
- return false;
- }
- if(self::isFileBlacklisted($path)) {
- return false;
- }
- return true;
+ return \OC\Files\Filesystem::isValidPath($path);
}
/**
- * checks if a file is blacklsited for storage in the filesystem
+ * checks if a file is blacklisted for storage in the filesystem
* Listens to write and rename hooks
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
* @param array $data from hook
*/
static public function isBlacklisted($data) {
- if (isset($data['path'])) {
- $path = $data['path'];
- } else if (isset($data['newpath'])) {
- $path = $data['newpath'];
- }
- if (isset($path)) {
- $data['run'] = !self::isFileBlacklisted($path);
- }
- }
-
- static public function isFileBlacklisted($path) {
- $blacklist = array('.htaccess');
- $filename = strtolower(basename($path));
- return in_array($filename, $blacklist);
+ \OC\Files\Filesystem::isBlacklisted($data);
}
/**
- * following functions are equivilent to their php buildin equivilents for arguments/return values.
+ * following functions are equivalent to their php builtin equivalents for arguments/return values.
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
*/
static public function mkdir($path) {
- return self::$defaultInstance->mkdir($path);
+ return \OC\Files\Filesystem::mkdir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function rmdir($path) {
- return self::$defaultInstance->rmdir($path);
+ return \OC\Files\Filesystem::rmdir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function opendir($path) {
- return self::$defaultInstance->opendir($path);
+ return \OC\Files\Filesystem::opendir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function readdir($path) {
- return self::$defaultInstance->readdir($path);
+ return \OC\Files\Filesystem::readdir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function is_dir($path) {
- return self::$defaultInstance->is_dir($path);
+ return \OC\Files\Filesystem::is_dir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function is_file($path) {
- return self::$defaultInstance->is_file($path);
+ return \OC\Files\Filesystem::is_file($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function stat($path) {
- return self::$defaultInstance->stat($path);
+ return \OC\Files\Filesystem::stat($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function filetype($path) {
- return self::$defaultInstance->filetype($path);
+ return \OC\Files\Filesystem::filetype($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function filesize($path) {
- return self::$defaultInstance->filesize($path);
+ return \OC\Files\Filesystem::filesize($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function readfile($path) {
- return self::$defaultInstance->readfile($path);
+ return \OC\Files\Filesystem::readfile($path);
}
+
/**
- * @deprecated Replaced by isReadable() as part of CRUDS
- */
+ * @deprecated Replaced by isReadable() as part of CRUDS
+ */
static public function is_readable($path) {
- return self::$defaultInstance->is_readable($path);
+ return \OC\Files\Filesystem::isReadable($path);
}
+
/**
- * @deprecated Replaced by isCreatable(), isUpdatable(), isDeletable() as part of CRUDS
- */
- static public function is_writable($path) {
- return self::$defaultInstance->is_writable($path);
- }
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isCreatable($path) {
- return self::$defaultInstance->isCreatable($path);
+ return \OC\Files\Filesystem::isCreatable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isReadable($path) {
- return self::$defaultInstance->isReadable($path);
+ return \OC\Files\Filesystem::isReadable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isUpdatable($path) {
- return self::$defaultInstance->isUpdatable($path);
+ return \OC\Files\Filesystem::isUpdatable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isDeletable($path) {
- return self::$defaultInstance->isDeletable($path);
+ return \OC\Files\Filesystem::isDeletable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isSharable($path) {
- return self::$defaultInstance->isSharable($path);
+ return \OC\Files\Filesystem::isSharable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function file_exists($path) {
- return self::$defaultInstance->file_exists($path);
- }
- static public function filectime($path) {
- return self::$defaultInstance->filectime($path);
+ return \OC\Files\Filesystem::file_exists($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function filemtime($path) {
- return self::$defaultInstance->filemtime($path);
+ return \OC\Files\Filesystem::filemtime($path);
}
- static public function touch($path, $mtime=null) {
- return self::$defaultInstance->touch($path, $mtime);
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
+ static public function touch($path, $mtime = null) {
+ return \OC\Files\Filesystem::touch($path, $mtime);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function file_get_contents($path) {
- return self::$defaultInstance->file_get_contents($path);
+ return \OC\Files\Filesystem::file_get_contents($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function file_put_contents($path, $data) {
- return self::$defaultInstance->file_put_contents($path, $data);
+ return \OC\Files\Filesystem::file_put_contents($path, $data);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function unlink($path) {
- return self::$defaultInstance->unlink($path);
+ return \OC\Files\Filesystem::unlink($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function rename($path1, $path2) {
- return self::$defaultInstance->rename($path1, $path2);
+ return \OC\Files\Filesystem::rename($path1, $path2);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function copy($path1, $path2) {
- return self::$defaultInstance->copy($path1, $path2);
+ return \OC\Files\Filesystem::copy($path1, $path2);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function fopen($path, $mode) {
- return self::$defaultInstance->fopen($path, $mode);
+ return \OC\Files\Filesystem::fopen($path, $mode);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function toTmpFile($path) {
- return self::$defaultInstance->toTmpFile($path);
+ return \OC\Files\Filesystem::toTmpFile($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function fromTmpFile($tmpFile, $path) {
- return self::$defaultInstance->fromTmpFile($tmpFile, $path);
+ return \OC\Files\Filesystem::fromTmpFile($tmpFile, $path);
}
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function getMimeType($path) {
- return self::$defaultInstance->getMimeType($path);
+ return \OC\Files\Filesystem::getMimeType($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function hash($type, $path, $raw = false) {
- return self::$defaultInstance->hash($type, $path, $raw);
+ return \OC\Files\Filesystem::hash($type, $path, $raw);
}
- static public function free_space($path='/') {
- return self::$defaultInstance->free_space($path);
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
+ static public function free_space($path = '/') {
+ return \OC\Files\Filesystem::free_space($path);
}
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function search($query) {
- return OC_FileCache::search($query);
+ return \OC\Files\Filesystem::search($query);
}
/**
* check if a file or folder has been updated since $time
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
* @param int $time
* @return bool
*/
static public function hasUpdated($path, $time) {
- return self::$defaultInstance->hasUpdated($path, $time);
- }
-
- static public function removeETagHook($params, $root = false) {
- if (isset($params['path'])) {
- $path=$params['path'];
- } else {
- $path=$params['oldpath'];
- }
-
- if ($root) { // reduce path to the required part of it (no 'username/files')
- $fakeRootView = new OC_FilesystemView($root);
- $count = 1;
- $path=str_replace(OC_App::getStorage("files")->getAbsolutePath(), "", $fakeRootView->getAbsolutePath($path), $count);
- }
-
- $path = self::normalizePath($path);
- OC_Connector_Sabre_Node::removeETagPropertyForPath($path);
+ return \OC\Files\Filesystem::hasUpdated($path, $time);
}
/**
* normalize a path
- * @param string path
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
* @param bool $stripTrailingSlash
* @return string
*/
- public static function normalizePath($path, $stripTrailingSlash=true) {
- if($path=='') {
- return '/';
- }
- //no windows style slashes
- $path=str_replace('\\', '/', $path);
- //add leading slash
- if($path[0]!=='/') {
- $path='/'.$path;
- }
- //remove trainling slash
- if($stripTrailingSlash and strlen($path)>1 and substr($path, -1, 1)==='/') {
- $path=substr($path, 0, -1);
- }
- //remove duplicate slashes
- while(strpos($path, '//')!==false) {
- $path=str_replace('//', '/', $path);
- }
- //normalize unicode if possible
- if(class_exists('Normalizer')) {
- $path=Normalizer::normalize($path);
- }
- return $path;
+ public static function normalizePath($path, $stripTrailingSlash = true) {
+ return \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash);
}
}
-OC_Hook::connect('OC_Filesystem', 'post_write', 'OC_Filesystem', 'removeETagHook');
-OC_Hook::connect('OC_Filesystem', 'post_delete', 'OC_Filesystem', 'removeETagHook');
-OC_Hook::connect('OC_Filesystem', 'post_rename', 'OC_Filesystem', 'removeETagHook');
-
-OC_Util::setupFS();
-require_once 'filecache.php';
diff --git a/lib/filesystemview.php b/lib/filesystemview.php
index e944ae5045d..d6bca62e06a 100644
--- a/lib/filesystemview.php
+++ b/lib/filesystemview.php
@@ -1,658 +1,9 @@
<?php
/**
- * ownCloud
- *
- * @author Frank Karlitschek
- * @copyright 2012 Frank Karlitschek frank@owncloud.org
- *
- * 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/>.
- */
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file. */
-
-/**
- * Class to provide access to ownCloud filesystem via a "view", and methods for
- * working with files within that view (e.g. read, write, delete, etc.). Each
- * view is restricted to a set of directories via a virtual root. The default view
- * uses the currently logged in user's data directory as root (parts of
- * OC_Filesystem are merely a wrapper for OC_FilesystemView).
- *
- * Apps that need to access files outside of the user data folders (to modify files
- * belonging to a user other than the one currently logged in, for example) should
- * use this class directly rather than using OC_Filesystem, or making use of PHP's
- * built-in file manipulation functions. This will ensure all hooks and proxies
- * are triggered correctly.
- *
- * Filesystem functions are not called directly; they are passed to the correct
- * OC_Filestorage object
- */
-
-class OC_FilesystemView {
- private $fakeRoot='';
- private $internal_path_cache=array();
- private $storage_cache=array();
-
- public function __construct($root) {
- $this->fakeRoot=$root;
- }
-
- public function getAbsolutePath($path = '/') {
- if(!$path || $path[0]!=='/') {
- $path='/'.$path;
- }
- return $this->fakeRoot.$path;
- }
-
- /**
- * change the root to a fake toor
- * @param string fakeRoot
- * @return bool
- */
- public function chroot($fakeRoot) {
- if(!$fakeRoot=='') {
- if($fakeRoot[0]!=='/') {
- $fakeRoot='/'.$fakeRoot;
- }
- }
- $this->fakeRoot=$fakeRoot;
- }
-
- /**
- * get the fake root
- * @return string
- */
- public function getRoot() {
- return $this->fakeRoot;
- }
-
- /**
- * get the part of the path relative to the mountpoint of the storage it's stored in
- * @param string path
- * @return bool
- */
- public function getInternalPath($path) {
- if (!isset($this->internal_path_cache[$path])) {
- $this->internal_path_cache[$path] = OC_Filesystem::getInternalPath($this->getAbsolutePath($path));
- }
- return $this->internal_path_cache[$path];
- }
-
- /**
- * get path relative to the root of the view
- * @param string path
- * @return string
- */
- public function getRelativePath($path) {
- if($this->fakeRoot=='') {
- return $path;
- }
- if(strpos($path, $this->fakeRoot)!==0) {
- return null;
- }else{
- $path=substr($path, strlen($this->fakeRoot));
- if(strlen($path)===0) {
- return '/';
- }else{
- return $path;
- }
- }
- }
-
- /**
- * get the storage object for a path
- * @param string path
- * @return OC_Filestorage
- */
- public function getStorage($path) {
- if (!isset($this->storage_cache[$path])) {
- $this->storage_cache[$path] = OC_Filesystem::getStorage($this->getAbsolutePath($path));
- }
- return $this->storage_cache[$path];
- }
-
- /**
- * get the mountpoint of the storage object for a path
- ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
- *
- * @param string path
- * @return string
- */
- public function getMountPoint($path) {
- return OC_Filesystem::getMountPoint($this->getAbsolutePath($path));
- }
-
- /**
- * return the path to a local version of the file
- * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
- * @param string path
- * @return string
- */
- public function getLocalFile($path) {
- $parent=substr($path, 0, strrpos($path, '/'));
- if(OC_Filesystem::isValidPath($parent) and $storage=$this->getStorage($path)) {
- return $storage->getLocalFile($this->getInternalPath($path));
- }
- }
- /**
- * @param string path
- * @return string
- */
- public function getLocalFolder($path) {
- $parent=substr($path, 0, strrpos($path, '/'));
- if(OC_Filesystem::isValidPath($parent) and $storage=$this->getStorage($path)) {
- return $storage->getLocalFolder($this->getInternalPath($path));
- }
- }
-
- /**
- * the following functions operate with arguments and return values identical
- * to those of their PHP built-in equivalents. Mostly they are merely wrappers
- * for OC_Filestorage via basicOperation().
- */
- public function mkdir($path) {
- return $this->basicOperation('mkdir', $path, array('create', 'write'));
- }
- public function rmdir($path) {
- return $this->basicOperation('rmdir', $path, array('delete'));
- }
- public function opendir($path) {
- return $this->basicOperation('opendir', $path, array('read'));
- }
- public function readdir($handle) {
- $fsLocal= new OC_Filestorage_Local( array( 'datadir' => '/' ) );
- return $fsLocal->readdir( $handle );
- }
- public function is_dir($path) {
- if($path=='/') {
- return true;
- }
- return $this->basicOperation('is_dir', $path);
- }
- public function is_file($path) {
- if($path=='/') {
- return false;
- }
- return $this->basicOperation('is_file', $path);
- }
- public function stat($path) {
- return $this->basicOperation('stat', $path);
- }
- public function filetype($path) {
- return $this->basicOperation('filetype', $path);
- }
- public function filesize($path) {
- return $this->basicOperation('filesize', $path);
- }
- public function readfile($path) {
- OC_Util::obEnd();
- $handle=$this->fopen($path, 'rb');
- if ($handle) {
- $chunkSize = 8192;// 8 MB chunks
- while (!feof($handle)) {
- echo fread($handle, $chunkSize);
- flush();
- }
- $size=$this->filesize($path);
- return $size;
- }
- return false;
- }
- /**
- * @deprecated Replaced by isReadable() as part of CRUDS
- */
- public function is_readable($path) {
- return $this->basicOperation('isReadable', $path);
- }
- /**
- * @deprecated Replaced by isCreatable(), isUpdatable(), isDeletable() as part of CRUDS
- */
- public function is_writable($path) {
- return $this->basicOperation('isUpdatable', $path);
- }
- public function isCreatable($path) {
- return $this->basicOperation('isCreatable', $path);
- }
- public function isReadable($path) {
- return $this->basicOperation('isReadable', $path);
- }
- public function isUpdatable($path) {
- return $this->basicOperation('isUpdatable', $path);
- }
- public function isDeletable($path) {
- return $this->basicOperation('isDeletable', $path);
- }
- public function isSharable($path) {
- return $this->basicOperation('isSharable', $path);
- }
- public function file_exists($path) {
- if($path=='/') {
- return true;
- }
- return $this->basicOperation('file_exists', $path);
- }
- public function filectime($path) {
- return $this->basicOperation('filectime', $path);
- }
- public function filemtime($path) {
- return $this->basicOperation('filemtime', $path);
- }
- public function touch($path, $mtime=null) {
- if(!is_null($mtime) and !is_numeric($mtime)) {
- $mtime = strtotime($mtime);
- }
- return $this->basicOperation('touch', $path, array('write'), $mtime);
- }
- public function file_get_contents($path) {
- return $this->basicOperation('file_get_contents', $path, array('read'));
- }
- public function file_put_contents($path, $data) {
- if(is_resource($data)) {//not having to deal with streams in file_put_contents makes life easier
- $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path));
- if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && OC_Filesystem::isValidPath($path)) {
- $path = $this->getRelativePath($absolutePath);
- $exists = $this->file_exists($path);
- $run = true;
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- if(!$exists) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_create,
- array(
- OC_Filesystem::signal_param_path => $path,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_write,
- array(
- OC_Filesystem::signal_param_path => $path,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- if(!$run) {
- return false;
- }
- $target=$this->fopen($path, 'w');
- if($target) {
- $count=OC_Helper::streamCopy($data, $target);
- fclose($target);
- fclose($data);
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- if(!$exists) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_create,
- array( OC_Filesystem::signal_param_path => $path)
- );
- }
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_write,
- array( OC_Filesystem::signal_param_path => $path)
- );
- }
- OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count);
- return $count > 0;
- }else{
- return false;
- }
- }
- }else{
- return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data);
- }
- }
- public function unlink($path) {
- return $this->basicOperation('unlink', $path, array('delete'));
- }
- public function deleteAll( $directory, $empty = false ) {
- return $this->basicOperation( 'deleteAll', $directory, array('delete'), $empty );
- }
- public function rename($path1, $path2) {
- $postFix1=(substr($path1, -1, 1)==='/')?'/':'';
- $postFix2=(substr($path2, -1, 1)==='/')?'/':'';
- $absolutePath1 = OC_Filesystem::normalizePath($this->getAbsolutePath($path1));
- $absolutePath2 = OC_Filesystem::normalizePath($this->getAbsolutePath($path2));
- if(OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and OC_Filesystem::isValidPath($path2)) {
- $path1 = $this->getRelativePath($absolutePath1);
- $path2 = $this->getRelativePath($absolutePath2);
-
- if($path1 == null or $path2 == null) {
- return false;
- }
- $run=true;
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME, OC_Filesystem::signal_rename,
- array(
- OC_Filesystem::signal_param_oldpath => $path1,
- OC_Filesystem::signal_param_newpath => $path2,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- if($run) {
- $mp1 = $this->getMountPoint($path1.$postFix1);
- $mp2 = $this->getMountPoint($path2.$postFix2);
- if($mp1 == $mp2) {
- if($storage = $this->getStorage($path1)) {
- $result = $storage->rename($this->getInternalPath($path1.$postFix1), $this->getInternalPath($path2.$postFix2));
- }
- } else {
- $source = $this->fopen($path1.$postFix1, 'r');
- $target = $this->fopen($path2.$postFix2, 'w');
- $count = OC_Helper::streamCopy($source, $target);
- $storage1 = $this->getStorage($path1);
- $storage1->unlink($this->getInternalPath($path1.$postFix1));
- $result = $count>0;
- }
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_rename,
- array(
- OC_Filesystem::signal_param_oldpath => $path1,
- OC_Filesystem::signal_param_newpath => $path2
- )
- );
- }
- return $result;
- }
- }
- }
- public function copy($path1, $path2) {
- $postFix1=(substr($path1, -1, 1)==='/')?'/':'';
- $postFix2=(substr($path2, -1, 1)==='/')?'/':'';
- $absolutePath1 = OC_Filesystem::normalizePath($this->getAbsolutePath($path1));
- $absolutePath2 = OC_Filesystem::normalizePath($this->getAbsolutePath($path2));
- if(OC_FileProxy::runPreProxies('copy', $absolutePath1, $absolutePath2) and OC_Filesystem::isValidPath($path2)) {
- $path1 = $this->getRelativePath($absolutePath1);
- $path2 = $this->getRelativePath($absolutePath2);
-
- if($path1 == null or $path2 == null) {
- return false;
- }
- $run=true;
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_copy,
- array(
- OC_Filesystem::signal_param_oldpath => $path1,
- OC_Filesystem::signal_param_newpath=>$path2,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- $exists=$this->file_exists($path2);
- if($run and !$exists) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_create,
- array(
- OC_Filesystem::signal_param_path => $path2,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- if($run) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_write,
- array(
- OC_Filesystem::signal_param_path => $path2,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- }
- if($run) {
- $mp1=$this->getMountPoint($path1.$postFix1);
- $mp2=$this->getMountPoint($path2.$postFix2);
- if($mp1 == $mp2) {
- if($storage = $this->getStorage($path1.$postFix1)) {
- $result=$storage->copy($this->getInternalPath($path1.$postFix1), $this->getInternalPath($path2.$postFix2));
- }
- } else {
- $source = $this->fopen($path1.$postFix1, 'r');
- $target = $this->fopen($path2.$postFix2, 'w');
- $result = OC_Helper::streamCopy($source, $target);
- }
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- // If the file to be copied originates within
- // the user's data directory
-
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_copy,
- array(
- OC_Filesystem::signal_param_oldpath => $path1,
- OC_Filesystem::signal_param_newpath=>$path2
- )
- );
- if(!$exists) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_create,
- array(OC_Filesystem::signal_param_path => $path2)
- );
- }
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_write,
- array( OC_Filesystem::signal_param_path => $path2)
- );
-
- } else {
- // If this is not a normal file copy operation
- // and the file originates somewhere else
- // (e.g. a version rollback operation), do not
- // perform all the other post_write actions
-
- // Update webdav properties
- OC_Filesystem::removeETagHook(array("path" => $path2), $this->fakeRoot);
-
- $splitPath2 = explode( '/', $path2 );
-
- // Only cache information about files
- // that are being copied from within
- // the user files directory. Caching
- // other files, like VCS backup files,
- // serves no purpose
- if ( $splitPath2[1] == 'files' ) {
-
- OC_FileCache_Update::update($path2, $this->fakeRoot);
-
- }
-
- }
-
- return $result;
-
- }
- }
- }
- public function fopen($path, $mode) {
- $hooks=array();
- switch($mode) {
- case 'r':
- case 'rb':
- $hooks[]='read';
- break;
- case 'r+':
- case 'rb+':
- case 'w+':
- case 'wb+':
- case 'x+':
- case 'xb+':
- case 'a+':
- case 'ab+':
- $hooks[]='read';
- $hooks[]='write';
- break;
- case 'w':
- case 'wb':
- case 'x':
- case 'xb':
- case 'a':
- case 'ab':
- $hooks[]='write';
- break;
- default:
- OC_Log::write('core', 'invalid mode ('.$mode.') for '.$path, OC_Log::ERROR);
- }
-
- return $this->basicOperation('fopen', $path, $hooks, $mode);
- }
- public function toTmpFile($path) {
- if(OC_Filesystem::isValidPath($path)) {
- $source = $this->fopen($path, 'r');
- if($source) {
- $extension='';
- $extOffset=strpos($path, '.');
- if($extOffset !== false) {
- $extension=substr($path, strrpos($path, '.'));
- }
- $tmpFile = OC_Helper::tmpFile($extension);
- file_put_contents($tmpFile, $source);
- return $tmpFile;
- }
- }
- }
- public function fromTmpFile($tmpFile, $path) {
- if(OC_Filesystem::isValidPath($path)) {
- if(!$tmpFile) {
- debug_print_backtrace();
- }
- $source=fopen($tmpFile, 'r');
- if($source) {
- $this->file_put_contents($path, $source);
- unlink($tmpFile);
- return true;
- } else {
- }
- } else {
- return false;
- }
- }
-
- public function getMimeType($path) {
- return $this->basicOperation('getMimeType', $path);
- }
- public function hash($type, $path, $raw = false) {
- $postFix=(substr($path, -1, 1)==='/')?'/':'';
- $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path));
- if (OC_FileProxy::runPreProxies('hash', $absolutePath) && OC_Filesystem::isValidPath($path)) {
- $path = $this->getRelativePath($absolutePath);
- if ($path == null) {
- return false;
- }
- if (OC_Filesystem::$loaded && $this->fakeRoot == OC_Filesystem::getRoot()) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_read,
- array( OC_Filesystem::signal_param_path => $path)
- );
- }
- if ($storage = $this->getStorage($path.$postFix)) {
- $result = $storage->hash($type, $this->getInternalPath($path.$postFix), $raw);
- $result = OC_FileProxy::runPostProxies('hash', $absolutePath, $result);
- return $result;
- }
- }
- return null;
- }
-
- public function free_space($path='/') {
- return $this->basicOperation('free_space', $path);
- }
-
- /**
- * @brief abstraction layer for basic filesystem functions: wrapper for OC_Filestorage
- * @param string $operation
- * @param string #path
- * @param array (optional) hooks
- * @param mixed (optional) $extraParam
- * @return mixed
- *
- * This method takes requests for basic filesystem functions (e.g. reading & writing
- * files), processes hooks and proxies, sanitises paths, and finally passes them on to
- * OC_Filestorage for delegation to a storage backend for execution
- */
- private function basicOperation($operation, $path, $hooks=array(), $extraParam=null) {
- $postFix=(substr($path, -1, 1)==='/')?'/':'';
- $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path));
- if(OC_FileProxy::runPreProxies($operation, $absolutePath, $extraParam) and OC_Filesystem::isValidPath($path)) {
- $path = $this->getRelativePath($absolutePath);
- if($path == null) {
- return false;
- }
- $internalPath = $this->getInternalPath($path.$postFix);
- $run=$this->runHooks($hooks, $path);
- if($run and $storage = $this->getStorage($path.$postFix)) {
- if(!is_null($extraParam)) {
- $result = $storage->$operation($internalPath, $extraParam);
- } else {
- $result = $storage->$operation($internalPath);
- }
- $result = OC_FileProxy::runPostProxies($operation, $this->getAbsolutePath($path), $result);
- if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()) {
- if($operation!='fopen') {//no post hooks for fopen, the file stream is still open
- $this->runHooks($hooks, $path, true);
- }
- }
- return $result;
- }
- }
- return null;
- }
-
- private function runHooks($hooks, $path, $post=false) {
- $prefix=($post)?'post_':'';
- $run=true;
- if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()) {
- foreach($hooks as $hook) {
- if($hook!='read') {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- $prefix.$hook,
- array(
- OC_Filesystem::signal_param_run => &$run,
- OC_Filesystem::signal_param_path => $path
- )
- );
- } elseif(!$post) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- $prefix.$hook,
- array(
- OC_Filesystem::signal_param_path => $path
- )
- );
- }
- }
- }
- return $run;
- }
-
- /**
- * check if a file or folder has been updated since $time
- * @param int $time
- * @return bool
- */
- public function hasUpdated($path, $time) {
- return $this->basicOperation('hasUpdated', $path, array(), $time);
- }
-}
+class OC_FilesystemView extends \OC\Files\View {}
diff --git a/lib/group.php b/lib/group.php
index ed9482418bd..5afef769361 100644
--- a/lib/group.php
+++ b/lib/group.php
@@ -286,4 +286,33 @@ class OC_Group {
}
return $users;
}
+
+ /**
+ * @brief get a list of all display names in a group
+ * @returns array with display names (value) and user ids(key)
+ */
+ public static function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+ $displayNames=array();
+ foreach(self::$_usedBackends as $backend) {
+ $displayNames = array_merge($backend->displayNamesInGroup($gid, $search, $limit, $offset), $displayNames);
+ }
+ return $displayNames;
+ }
+
+ /**
+ * @brief get a list of all display names in several groups
+ * @param array $gids
+ * @param string $search
+ * @param int $limit
+ * @param int $offset
+ * @return array with display names (Key) user ids (value)
+ */
+ public static function displayNamesInGroups($gids, $search = '', $limit = -1, $offset = 0) {
+ $displayNames = array();
+ foreach ($gids as $gid) {
+ // TODO Need to apply limits to groups as total
+ $displayNames = array_merge(array_diff(self::displayNamesInGroup($gid, $search, $limit, $offset), $displayNames), $displayNames);
+ }
+ return $displayNames;
+ }
}
diff --git a/lib/group/backend.php b/lib/group/backend.php
index 9ff432d0663..4f6570c3be3 100644
--- a/lib/group/backend.php
+++ b/lib/group/backend.php
@@ -133,5 +133,23 @@ abstract class OC_Group_Backend implements OC_Group_Interface {
public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
return array();
}
+
+ /**
+ * @brief get a list of all display names in a group
+ * @param string $gid
+ * @param string $search
+ * @param int $limit
+ * @param int $offset
+ * @return array with display names (value) and user ids (key)
+ */
+ public function DisplayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+ $displayNames = '';
+ $users = $this->usersInGroup($gid, $search, $limit, $offset);
+ foreach ( $users as $user ) {
+ $DisplayNames[$user] = $user;
+ }
+
+ return $DisplayNames;
+ }
}
diff --git a/lib/group/database.php b/lib/group/database.php
index 6eca98ba019..1e2328f4c08 100644
--- a/lib/group/database.php
+++ b/lib/group/database.php
@@ -208,4 +208,25 @@ class OC_Group_Database extends OC_Group_Backend {
}
return $users;
}
+
+ /**
+ * @brief get a list of all display names in a group
+ * @param string $gid
+ * @param string $search
+ * @param int $limit
+ * @param int $offset
+ * @return array with display names (value) and user ids (key)
+ */
+ public function DisplayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+ $displayNames = '';
+
+ $stmt = OC_DB::prepare('SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname` FROM `*PREFIX*users` INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid` WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?', $limit, $offset);
+ $result = $stmt->execute(array($gid, $search.'%'));
+ $users = array();
+ while ($row = $result->fetchRow()) {
+ $displayName = trim($row['displayname'], ' ');
+ $displayNames[$row['uid']] = empty($displayName) ? $row['uid'] : $displayName;
+ }
+ return $displayNames;
+ }
}
diff --git a/lib/helper.php b/lib/helper.php
index 1aba2a38100..2713ffed451 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -78,11 +78,8 @@ class OC_Helper {
}
}
- if (!empty($args)) {
- $urlLinkTo .= '?';
- foreach($args as $k => $v) {
- $urlLinkTo .= '&'.$k.'='.urlencode($v);
- }
+ if ($args && $query = http_build_query($args, '', '&')) {
+ $urlLinkTo .= '?'.$query;
}
return $urlLinkTo;
@@ -193,8 +190,9 @@ class OC_Helper {
if(isset($alias[$mimetype])) {
$mimetype=$alias[$mimetype];
}
- // Replace slash with a minus
+ // Replace slash and backslash with a minus
$mimetype = str_replace( "/", "-", $mimetype );
+ $mimetype = str_replace( "\\", "-", $mimetype );
// Is it a dir?
if( $mimetype == "dir" ) {
@@ -223,6 +221,10 @@ class OC_Helper {
* Makes 2048 to 2 kB.
*/
public static function humanFileSize( $bytes ) {
+ if( $bytes < 0 ) {
+ $l = OC_L10N::get('lib');
+ return $l->t("couldn't be determined");
+ }
if( $bytes < 1024 ) {
return "$bytes B";
}
@@ -322,7 +324,7 @@ class OC_Helper {
self::copyr("$src/$file", "$dest/$file");
}
}
- }elseif(file_exists($src) && !OC_Filesystem::isFileBlacklisted($src)) {
+ }elseif(file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) {
copy($src, $dest);
}
}
@@ -392,13 +394,12 @@ class OC_Helper {
// it looks like we have a 'file' command,
// lets see if it does have mime support
$path=escapeshellarg($path);
- $fp = popen("file -i -b $path 2>/dev/null", "r");
+ $fp = popen("file -b --mime-type $path 2>/dev/null", "r");
$reply = fgets($fp);
pclose($fp);
- // we have smth like 'text/x-c++; charset=us-ascii\n'
- // and need to eliminate everything starting with semicolon including trailing LF
- $mimeType = preg_replace('/;.*/ms', '', trim($reply));
+ //trim the newline
+ $mimeType = trim($reply);
}
return $mimeType;
@@ -435,8 +436,9 @@ class OC_Helper {
//FIXME: should also check for value validation (i.e. the email is an email).
public static function init_var($s, $d="") {
$r = $d;
- if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s]))
- $r = stripslashes(htmlspecialchars($_REQUEST[$s]));
+ if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
+ $r = OC_Util::sanitizeHTML($_REQUEST[$s]);
+ }
return $r;
}
@@ -549,7 +551,7 @@ class OC_Helper {
fclose($fh);
return $file;
}
-
+
/**
* create a temporary folder with an unique filename
* @return string
@@ -616,7 +618,7 @@ class OC_Helper {
$newpath = $path . '/' . $filename;
$counter = 2;
- while (OC_Filesystem::file_exists($newpath)) {
+ while (\OC\Files\Filesystem::file_exists($newpath)) {
$newname = $name . ' (' . $counter . ')' . $ext;
$newpath = $path . '/' . $newname;
$counter++;
@@ -625,37 +627,17 @@ class OC_Helper {
return $newpath;
}
- /*
- * checks if $sub is a subdirectory of $parent
+ /**
+ * @brief Checks if $sub is a subdirectory of $parent
*
* @param string $sub
* @param string $parent
* @return bool
*/
public static function issubdirectory($sub, $parent) {
- if($sub == null || $sub == '' || $parent == null || $parent == '') {
- return false;
- }
- $realpath_sub = realpath($sub);
- $realpath_parent = realpath($parent);
- if(($realpath_sub == false && substr_count($realpath_sub, './') != 0) || ($realpath_parent == false && substr_count($realpath_parent, './') != 0)) { //it checks for both ./ and ../
- return false;
- }
- if($realpath_sub && $realpath_sub != '' && $realpath_parent && $realpath_parent != '') {
- if(substr($realpath_sub, 0, strlen($realpath_parent)) == $realpath_parent) {
- return true;
- }
- }else{
- if(substr($sub, 0, strlen($parent)) == $parent) {
- return true;
- }
+ if (strpos(realpath($sub), realpath($parent)) === 0) {
+ return true;
}
- /*echo 'SUB: ' . $sub . "\n";
- echo 'PAR: ' . $parent . "\n";
- echo 'REALSUB: ' . $realpath_sub . "\n";
- echo 'REALPAR: ' . $realpath_parent . "\n";
- echo substr($realpath_sub, 0, strlen($realpath_parent));
- exit;*/
return false;
}
@@ -695,8 +677,8 @@ class OC_Helper {
$start = intval($start);
$length = intval($length);
$string = mb_substr($string, 0, $start, $encoding) .
- $replacement .
- mb_substr($string, $start+$length, mb_strlen($string, 'UTF-8')-$start, $encoding);
+ $replacement .
+ mb_substr($string, $start+$length, mb_strlen($string, 'UTF-8')-$start, $encoding);
return $string;
}
@@ -765,6 +747,23 @@ class OC_Helper {
}
/**
+ * @brief calculates the maximum upload size respecting system settings, free space and user quota
+ *
+ * @param $dir the current folder where the user currently operates
+ * @return number of bytes representing
+ */
+ public static function maxUploadFilesize($dir) {
+ $upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize'));
+ $post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
+ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
+
+ $freeSpace = \OC\Files\Filesystem::free_space($dir);
+ $freeSpace = max($freeSpace, 0);
+
+ return min($maxUploadFilesize, $freeSpace);
+ }
+
+ /**
* Checks if a function is available
* @param string $function_name
* @return bool
@@ -783,4 +782,23 @@ class OC_Helper {
}
return true;
}
+
+ /**
+ * Calculate the disc space
+ */
+ public static function getStorageInfo() {
+ $rootInfo = \OC\Files\Filesystem::getFileInfo('/');
+ $used = $rootInfo['size'];
+ if ($used < 0) {
+ $used = 0;
+ }
+ $free = \OC\Files\Filesystem::free_space();
+ $total = $free + $used;
+ if ($total == 0) {
+ $total = 1; // prevent division by zero
+ }
+ $relative = round(($used / $total) * 10000) / 100;
+
+ return array('free' => $free, 'used' => $used, 'total' => $total, 'relative' => $relative);
+ }
}
diff --git a/lib/hook.php b/lib/hook.php
index 4da331bb5d8..e30aefb5e18 100644
--- a/lib/hook.php
+++ b/lib/hook.php
@@ -20,19 +20,22 @@ class OC_Hook{
* TODO: write example
*/
static public function connect( $signalclass, $signalname, $slotclass, $slotname ) {
- // Create the data structure
+ // If we're trying to connect to an emitting class that isn't
+ // yet registered, register it
if( !array_key_exists( $signalclass, self::$registered )) {
self::$registered[$signalclass] = array();
}
- if( !array_key_exists( $signalname, self::$registered[$signalclass] )) {
+ // If we're trying to connect to an emitting method that isn't
+ // yet registered, register it with the emitting class
+ if( !array_key_exists( $signalname, self::$registered[$signalclass] )) {
self::$registered[$signalclass][$signalname] = array();
}
-
- // register hook
+
+ // Connect the hook handler to the requested emitter
self::$registered[$signalclass][$signalname][] = array(
"class" => $slotclass,
"name" => $slotname );
-
+
// No chance for failure ;-)
return true;
}
@@ -49,14 +52,19 @@ class OC_Hook{
* TODO: write example
*/
static public function emit( $signalclass, $signalname, $params = array()) {
- // Return false if there are no slots
+
+ // Return false if no hook handlers are listening to this
+ // emitting class
if( !array_key_exists( $signalclass, self::$registered )) {
return false;
}
+
+ // Return false if no hook handlers are listening to this
+ // emitting method
if( !array_key_exists( $signalname, self::$registered[$signalclass] )) {
return false;
}
-
+
// Call all slots
foreach( self::$registered[$signalclass][$signalname] as $i ) {
try {
diff --git a/lib/image.php b/lib/image.php
index 2043a452541..eaa35350bcb 100644
--- a/lib/image.php
+++ b/lib/image.php
@@ -455,7 +455,7 @@ class OC_Image {
default:
// this is mostly file created from encrypted file
- $this->resource = imagecreatefromstring(\OC_Filesystem::file_get_contents(\OC_Filesystem::getLocalPath($imagepath)));
+ $this->resource = imagecreatefromstring(\OC\Files\Filesystem::file_get_contents(\OC\Files\Filesystem::getLocalPath($imagepath)));
$itype = IMAGETYPE_PNG;
OC_Log::write('core', 'OC_Image->loadFromFile, Default', OC_Log::DEBUG);
break;
@@ -646,7 +646,7 @@ class OC_Image {
fclose($fh);
return $im;
}
-
+
/**
* @brief Resizes the image preserving ratio.
* @param $maxsize The maximum size of either the width or height.
diff --git a/lib/installer.php b/lib/installer.php
index 7dc8b0cef8d..c86f801b5fc 100644
--- a/lib/installer.php
+++ b/lib/installer.php
@@ -141,13 +141,17 @@ class OC_Installer{
return false;
}
- //check if an app with the same id is already installed
- if(self::isInstalled( $info['id'] )) {
- OC_Log::write('core', 'App already installed', OC_Log::WARN);
+ // check if shipped tag is set which is only allowed for apps that are shipped with ownCloud
+ if(isset($info['shipped']) and ($info['shipped']=='true')) {
+ OC_Log::write('core', 'App can\'t be installed because it contains the <shipped>true</shippe> tag which is not allowed for non shipped apps', OC_Log::ERROR);
+ OC_Helper::rmdirr($extractDir);
+ return false;
+ }
+
+ // check if the ocs version is the same as the version in info.xml/version
+ if(!isset($info['version']) or ($info['version']<>$data['appdata']['version'])) {
+ OC_Log::write('core', 'App can\'t be installed because the version in info.xml/version is not the same as the version reported from the app store', OC_Log::ERROR);
OC_Helper::rmdirr($extractDir);
- if($data['source']=='http') {
- unlink($path);
- }
return false;
}
@@ -226,7 +230,6 @@ class OC_Installer{
/**
* @brief Update an application
* @param $data array with all information
- * @returns integer
*
* This function installs an app. All information needed are passed in the
* associative array $data.
@@ -250,9 +253,55 @@ class OC_Installer{
*
* upgrade.php can determine the current installed version of the app using "OC_Appconfig::getValue($appid, 'installed_version')"
*/
- public static function upgradeApp( $data = array()) {
- // TODO: write function
- return true;
+ public static function updateApp( $app ) {
+ $ocsid=OC_Appconfig::getValue( $app, 'ocsid');
+ OC_App::disable($app);
+ OC_App::enable($ocsid);
+ return(true);
+ }
+
+ /**
+ * @brief Check if an update for the app is available
+ * @param $name name of the application
+ * @returns empty string is no update available or the version number of the update
+ *
+ * The function will check if an update for a version is available
+ */
+ public static function isUpdateAvailable( $app ) {
+ $ocsid=OC_Appconfig::getValue( $app, 'ocsid', '');
+
+ if($ocsid<>''){
+
+ $ocsdata=OC_OCSClient::getApplication($ocsid);
+ $ocsversion= (string) $ocsdata['version'];
+ $currentversion=OC_App::getAppVersion($app);
+ if($ocsversion<>$currentversion){
+ return($ocsversion);
+
+ }else{
+ return('');
+ }
+
+ }else{
+ return('');
+ }
+
+ }
+
+ /**
+ * @brief Check if app is already downloaded
+ * @param $name name of the application to remove
+ * @returns true/false
+ *
+ * The function will check if the app is already downloaded in the apps repository
+ */
+ public static function isDownloaded( $name ) {
+
+ $downloaded=false;
+ foreach(OC::$APPSROOTS as $dir) {
+ if(is_dir($dir['path'].'/'.$name)) $downloaded=true;
+ }
+ return($downloaded);
}
/**
@@ -276,8 +325,36 @@ class OC_Installer{
* this has to be done by the function oc_app_uninstall().
*/
public static function removeApp( $name, $options = array()) {
- // TODO: write function
- return true;
+
+ if(isset($options['keeppreferences']) and $options['keeppreferences']==false ){
+ // todo
+ // remove preferences
+ }
+
+ if(isset($options['keepappconfig']) and $options['keepappconfig']==false ){
+ // todo
+ // remove app config
+ }
+
+ if(isset($options['keeptables']) and $options['keeptables']==false ){
+ // todo
+ // remove app database tables
+ }
+
+ if(isset($options['keepfiles']) and $options['keepfiles']==false ){
+ // todo
+ // remove user files
+ }
+
+ if(OC_Installer::isDownloaded( $name )) {
+ $appdir=OC_App::getInstallPath().'/'.$name;
+ OC_Helper::rmdirr($appdir);
+
+ }else{
+ OC_Log::write('core', 'can\'t remove app '.$name.'. It is not installed.', OC_Log::ERROR);
+
+ }
+
}
/**
diff --git a/lib/json.php b/lib/json.php
index 204430411c0..f929e958957 100644
--- a/lib/json.php
+++ b/lib/json.php
@@ -57,9 +57,7 @@ class OC_JSON{
* Check if the user is a admin, send json error msg if not
*/
public static function checkAdminUser() {
- self::checkLoggedIn();
- self::verifyUser();
- if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )) {
+ if( !OC_User::isAdminUser(OC_User::getUser())) {
$l = OC_L10N::get('lib');
self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit();
@@ -70,9 +68,7 @@ class OC_JSON{
* Check if the user is a subadmin, send json error msg if not
*/
public static function checkSubAdminUser() {
- self::checkLoggedIn();
- self::verifyUser();
- if(!OC_Group::inGroup(OC_User::getUser(), 'admin') && !OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
+ if(!OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
$l = OC_L10N::get('lib');
self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit();
@@ -80,19 +76,6 @@ class OC_JSON{
}
/**
- * Check if the user verified the login with his password
- */
- public static function verifyUser() {
- if(OC_Config::getValue('enhancedauth', false) === true) {
- if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) {
- $l = OC_L10N::get('lib');
- self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
- exit();
- }
- }
- }
-
- /**
* Send json error msg
*/
public static function error($data = array()) {
diff --git a/lib/l10n.php b/lib/l10n.php
index f70dfa5e34e..e272bcd79f3 100644
--- a/lib/l10n.php
+++ b/lib/l10n.php
@@ -97,7 +97,7 @@ class OC_L10N{
if ($this->app === true) {
return;
}
- $app = $this->app;
+ $app = OC_App::cleanAppId($this->app);
$lang = $this->lang;
$this->app = true;
// Find the right language
@@ -141,15 +141,15 @@ class OC_L10N{
}
}
- /**
- * @brief Translating
- * @param $text String The text we need a translation for
- * @param array $parameters default:array() Parameters for sprintf
- * @return \OC_L10N_String Translation or the same text
- *
- * Returns the translation. If no translation is found, $text will be
- * returned.
- */
+ /**
+ * @brief Translating
+ * @param $text String The text we need a translation for
+ * @param array $parameters default:array() Parameters for sprintf
+ * @return \OC_L10N_String Translation or the same text
+ *
+ * Returns the translation. If no translation is found, $text will be
+ * returned.
+ */
public function t($text, $parameters = array()) {
return new OC_L10N_String($this, $text, $parameters);
}
@@ -287,7 +287,7 @@ class OC_L10N{
}
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
- $accepted_languages = preg_split('/,\s*/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+ $accepted_languages = preg_split('/,\s*/', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));
if(is_array($app)) {
$available = $app;
}
diff --git a/lib/l10n/af_ZA.php b/lib/l10n/af_ZA.php
new file mode 100644
index 00000000000..38e91288fbe
--- /dev/null
+++ b/lib/l10n/af_ZA.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Hulp",
+"Personal" => "Persoonlik",
+"Settings" => "Instellings",
+"Users" => "Gebruikers",
+"Apps" => "Toepassings",
+"Admin" => "Admin"
+);
diff --git a/lib/l10n/bg_BG.php b/lib/l10n/bg_BG.php
index 31f37458b81..fed7f29cbb2 100644
--- a/lib/l10n/bg_BG.php
+++ b/lib/l10n/bg_BG.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Файловете трÑбва да Ñе изтеглÑÑ‚ един по един.",
"Back to Files" => "Ðазад към файловете",
"Selected files too large to generate zip file." => "Избраните файлове Ñа прекалено големи за генерирането на ZIP архив.",
+"couldn't be determined" => "не може да Ñе определи",
"Application is not enabled" => "Приложението не е включено.",
"Authentication error" => "Възникна проблем Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñта",
"Token expired. Please reload page." => "Ключът е изтекъл, Ð¼Ð¾Ð»Ñ Ð¿Ñ€ÐµÐ·Ð°Ñ€ÐµÐ´ÐµÑ‚Ðµ Ñтраницата",
diff --git a/lib/l10n/bn_BD.php b/lib/l10n/bn_BD.php
index 275d3c0f05c..cb6ff4455a9 100644
--- a/lib/l10n/bn_BD.php
+++ b/lib/l10n/bn_BD.php
@@ -2,17 +2,28 @@
"Help" => "সহায়িকা",
"Personal" => "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত",
"Settings" => "নিয়ামকসমূহ",
-"Users" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারিবৃনà§à¦¦",
-"Apps" => "অà§à¦¯à¦¾à¦ªà¦¸",
+"Users" => "বà§à¦¯à¦­à¦¹à¦¾à¦°à¦•ারী",
+"Apps" => "অà§à¦¯à¦¾à¦ª",
"Admin" => "পà§à¦°à¦¶à¦¾à¦¸à¦•",
-"Authentication error" => "নিশà§à¦šà¦¿à¦¤à¦•রণে সমসà§à¦¯à¦¾ দেখা দিয়েছে",
+"ZIP download is turned off." => "ZIP ডাউনলোড বনà§à¦§ করা আছে।",
+"Files need to be downloaded one by one." => "ফাইলগà§à¦²à§‹ à¦à¦•ে à¦à¦•ে ডাউনলোড করা আবশà§à¦¯à¦•।",
+"Back to Files" => "ফাইলে ফিরে চল",
+"Selected files too large to generate zip file." => "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলগà§à¦²à§‹ à¦à¦¤à¦‡ বৃহৎ যে জিপ ফাইল তৈরী করা সমà§à¦­à¦¬ নয়।",
+"Application is not enabled" => "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•েসনটি সকà§à¦°à¦¿à§Ÿ নয়",
+"Authentication error" => "অনà§à¦®à§‹à¦¦à¦¨ ঘটিত সমসà§à¦¯à¦¾",
+"Token expired. Please reload page." => "টোকেন মেয়াদোতà§à¦¤à§€à¦°à§à¦£à¥¤ দয়া করে পৃষà§à¦ à¦¾à¦Ÿà¦¿ পূনরায় লোড করà§à¦¨à¥¤",
"Files" => "ফাইল",
"seconds ago" => "সেকেনà§à¦¡ পূরà§à¦¬à§‡",
-"1 minute ago" => "1 মিনিট পূরà§à¦¬à§‡",
+"1 minute ago" => "à§§ মিনিট পূরà§à¦¬à§‡",
+"%d minutes ago" => "%d মিনিট পূরà§à¦¬à§‡",
"1 hour ago" => "1 ঘনà§à¦Ÿà¦¾ পূরà§à¦¬à§‡",
"today" => "আজ",
"yesterday" => "গতকাল",
-"last month" => "গতমাস",
+"%d days ago" => "%d দিন পূরà§à¦¬à§‡",
+"last month" => "গত মাস",
"last year" => "গত বছর",
-"years ago" => "বছর পূরà§à¦¬à§‡"
+"years ago" => "বছর পূরà§à¦¬à§‡",
+"%s is available. Get <a href=\"%s\">more information</a>" => "%s à¦à¦–ন সà§à¦²à¦­à¥¤ <a href=\"%s\">আরও জানà§à¦¨</a>",
+"up to date" => "সরà§à¦¬à¦¶à§‡à¦·",
+"updates check is disabled" => "পরিবরà§à¦§à¦¨ পরীকà§à¦·à¦£ করা বনà§à¦§ রাখা হয়েছে"
);
diff --git a/lib/l10n/ca.php b/lib/l10n/ca.php
index b3321ef82e1..d34220f8f5c 100644
--- a/lib/l10n/ca.php
+++ b/lib/l10n/ca.php
@@ -9,12 +9,15 @@
"Files need to be downloaded one by one." => "Els fitxers s'han de baixar d'un en un.",
"Back to Files" => "Torna a Fitxers",
"Selected files too large to generate zip file." => "Els fitxers seleccionats son massa grans per generar un fitxer zip.",
+"couldn't be determined" => "no s'ha pogut determinar",
"Application is not enabled" => "L'aplicació no està habilitada",
"Authentication error" => "Error d'autenticació",
"Token expired. Please reload page." => "El testimoni ha expirat. Torneu a carregar la pàgina.",
"Files" => "Fitxers",
"Text" => "Text",
"Images" => "Imatges",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.",
+"Please double check the <a href='%s'>installation guides</a>." => "Comproveu les <a href='%s'>guies d'instal·lació</a>.",
"seconds ago" => "segons enrere",
"1 minute ago" => "fa 1 minut",
"%d minutes ago" => "fa %d minuts",
diff --git a/lib/l10n/cs_CZ.php b/lib/l10n/cs_CZ.php
index fa11e886774..f3fd1a24819 100644
--- a/lib/l10n/cs_CZ.php
+++ b/lib/l10n/cs_CZ.php
@@ -9,12 +9,15 @@
"Files need to be downloaded one by one." => "Soubory musí být stahovány jednotlivě.",
"Back to Files" => "Zpět k souborům",
"Selected files too large to generate zip file." => "Vybrané soubory jsou příliš velké pro vytvoření zip souboru.",
+"couldn't be determined" => "nelze zjistit",
"Application is not enabled" => "Aplikace není povolena",
"Authentication error" => "Chyba ověření",
"Token expired. Please reload page." => "Token vypršel. Obnovte prosím stránku.",
"Files" => "Soubory",
"Text" => "Text",
"Images" => "Obrázky",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Váš webový server není správně nastaven pro umožnění synchronizace, protože rozhraní WebDAV je rozbité.",
+"Please double check the <a href='%s'>installation guides</a>." => "Zkonzultujte, prosím, <a href='%s'>průvodce instalací</a>.",
"seconds ago" => "před vteřinami",
"1 minute ago" => "před 1 minutou",
"%d minutes ago" => "před %d minutami",
diff --git a/lib/l10n/da.php b/lib/l10n/da.php
index a0ab1f17014..8f22be5e823 100644
--- a/lib/l10n/da.php
+++ b/lib/l10n/da.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Filer skal downloades en for en.",
"Back to Files" => "Tilbage til Filer",
"Selected files too large to generate zip file." => "De markerede filer er for store til at generere en ZIP-fil.",
+"couldn't be determined" => "kunne ikke fastslås",
"Application is not enabled" => "Programmet er ikke aktiveret",
"Authentication error" => "Adgangsfejl",
"Token expired. Please reload page." => "Adgang er udløbet. Genindlæs siden.",
diff --git a/lib/l10n/de.php b/lib/l10n/de.php
index 4b77bf7210d..c285a07f63a 100644
--- a/lib/l10n/de.php
+++ b/lib/l10n/de.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Die Dateien müssen einzeln heruntergeladen werden.",
"Back to Files" => "Zurück zu \"Dateien\"",
"Selected files too large to generate zip file." => "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen.",
+"couldn't be determined" => "Konnte nicht festgestellt werden",
"Application is not enabled" => "Die Anwendung ist nicht aktiviert",
"Authentication error" => "Authentifizierungs-Fehler",
"Token expired. Please reload page." => "Token abgelaufen. Bitte lade die Seite neu.",
diff --git a/lib/l10n/de_DE.php b/lib/l10n/de_DE.php
index e9f0f34a0e1..625ba2ecf20 100644
--- a/lib/l10n/de_DE.php
+++ b/lib/l10n/de_DE.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Die Dateien müssen einzeln heruntergeladen werden.",
"Back to Files" => "Zurück zu \"Dateien\"",
"Selected files too large to generate zip file." => "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen.",
+"couldn't be determined" => "konnte nicht ermittelt werden",
"Application is not enabled" => "Die Anwendung ist nicht aktiviert",
"Authentication error" => "Authentifizierungs-Fehler",
"Token expired. Please reload page." => "Token abgelaufen. Bitte laden Sie die Seite neu.",
diff --git a/lib/l10n/el.php b/lib/l10n/el.php
index 315b995ecc9..cf0be24b432 100644
--- a/lib/l10n/el.php
+++ b/lib/l10n/el.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Τα αÏχεία Ï€Ïέπει να ληφθοÏν ένα-ένα.",
"Back to Files" => "Πίσω στα ΑÏχεία",
"Selected files too large to generate zip file." => "Τα επιλεγμένα αÏχεία είναι μεγάλα ώστε να δημιουÏγηθεί αÏχείο zip.",
+"couldn't be determined" => "δεν μποÏοÏσε να Ï€ÏοσδιοÏισθεί",
"Application is not enabled" => "Δεν ενεÏγοποιήθηκε η εφαÏμογή",
"Authentication error" => "Σφάλμα πιστοποίησης",
"Token expired. Please reload page." => "Το αναγνωÏιστικό έληξε. ΠαÏακαλώ φοÏτώστε ξανά την σελίδα.",
diff --git a/lib/l10n/es.php b/lib/l10n/es.php
index f843c42dfd3..f3b03b56652 100644
--- a/lib/l10n/es.php
+++ b/lib/l10n/es.php
@@ -9,12 +9,15 @@
"Files need to be downloaded one by one." => "Los archivos deben ser descargados uno por uno.",
"Back to Files" => "Volver a Archivos",
"Selected files too large to generate zip file." => "Los archivos seleccionados son demasiado grandes para generar el archivo zip.",
+"couldn't be determined" => "no pudo ser determinado",
"Application is not enabled" => "La aplicación no está habilitada",
"Authentication error" => "Error de autenticación",
"Token expired. Please reload page." => "Token expirado. Por favor, recarga la página.",
"Files" => "Archivos",
"Text" => "Texto",
"Images" => "Imágenes",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
+"Please double check the <a href='%s'>installation guides</a>." => "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
"seconds ago" => "hace segundos",
"1 minute ago" => "hace 1 minuto",
"%d minutes ago" => "hace %d minutos",
diff --git a/lib/l10n/es_AR.php b/lib/l10n/es_AR.php
index 2bbffd39e9e..c32017a10f8 100644
--- a/lib/l10n/es_AR.php
+++ b/lib/l10n/es_AR.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Los archivos deben ser descargados de a uno.",
"Back to Files" => "Volver a archivos",
"Selected files too large to generate zip file." => "Los archivos seleccionados son demasiado grandes para generar el archivo zip.",
+"couldn't be determined" => "no pudo ser determinado",
"Application is not enabled" => "La aplicación no está habilitada",
"Authentication error" => "Error de autenticación",
"Token expired. Please reload page." => "Token expirado. Por favor, recargá la página.",
diff --git a/lib/l10n/eu.php b/lib/l10n/eu.php
index 5d47ecbda23..1941551b176 100644
--- a/lib/l10n/eu.php
+++ b/lib/l10n/eu.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Fitxategiak banan-banan deskargatu behar dira.",
"Back to Files" => "Itzuli fitxategietara",
"Selected files too large to generate zip file." => "Hautatuko fitxategiak oso handiak dira zip fitxategia sortzeko.",
+"couldn't be determined" => "ezin izan da zehaztu",
"Application is not enabled" => "Aplikazioa ez dago gaituta",
"Authentication error" => "Autentikazio errorea",
"Token expired. Please reload page." => "Tokena iraungitu da. Mesedez birkargatu orria.",
diff --git a/lib/l10n/fa.php b/lib/l10n/fa.php
index ce7c7c6e970..bbb04290a5c 100644
--- a/lib/l10n/fa.php
+++ b/lib/l10n/fa.php
@@ -3,16 +3,28 @@
"Personal" => "شخصی",
"Settings" => "تنظیمات",
"Users" => "کاربران",
+"Apps" => " برنامه ها",
"Admin" => "مدیر",
+"ZIP download is turned off." => "دانلود به صورت ÙØ´Ø±Ø¯Ù‡ غیر ÙØ¹Ø§Ù„ است",
+"Files need to be downloaded one by one." => "ÙØ§ÛŒÙ„ ها باید به صورت یکی یکی دانلود شوند",
+"Back to Files" => "بازگشت به ÙØ§ÛŒÙ„ ها",
+"Selected files too large to generate zip file." => "ÙØ§ÛŒÙ„ های انتخاب شده بزرگتر از آن هستند Ú©Ù‡ بتوان یک ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ تولید کرد",
+"Application is not enabled" => "برنامه ÙØ¹Ø§Ù„ نشده است",
"Authentication error" => "خطا در اعتبار سنجی",
"Files" => "پرونده‌ها",
"Text" => "متن",
+"Images" => "تصاویر",
"seconds ago" => "ثانیه‌ها پیش",
"1 minute ago" => "1 دقیقه پیش",
"%d minutes ago" => "%d دقیقه پیش",
+"1 hour ago" => "1 ساعت پیش",
+"%d hours ago" => "%d ساعت پیش",
"today" => "امروز",
"yesterday" => "دیروز",
+"%d days ago" => "%d روز پیش",
"last month" => "ماه قبل",
+"%d months ago" => "%dماه پیش",
"last year" => "سال قبل",
-"years ago" => "سال‌های قبل"
+"years ago" => "سال‌های قبل",
+"Could not find category \"%s\"" => "دسته بندی %s ÛŒØ§ÙØª نشد"
);
diff --git a/lib/l10n/fi_FI.php b/lib/l10n/fi_FI.php
index 6a5734e978d..fb94dd8404c 100644
--- a/lib/l10n/fi_FI.php
+++ b/lib/l10n/fi_FI.php
@@ -9,12 +9,14 @@
"Files need to be downloaded one by one." => "Tiedostot on ladattava yksittäin.",
"Back to Files" => "Takaisin tiedostoihin",
"Selected files too large to generate zip file." => "Valitut tiedostot ovat liian suurikokoisia mahtuakseen zip-tiedostoon.",
+"couldn't be determined" => "ei voitu määrittää",
"Application is not enabled" => "Sovellusta ei ole otettu käyttöön",
"Authentication error" => "Todennusvirhe",
"Token expired. Please reload page." => "Valtuutus vanheni. Lataa sivu uudelleen.",
"Files" => "Tiedostot",
"Text" => "Teksti",
"Images" => "Kuvat",
+"Please double check the <a href='%s'>installation guides</a>." => "Lue tarkasti <a href='%s'>asennusohjeet</a>.",
"seconds ago" => "sekuntia sitten",
"1 minute ago" => "1 minuutti sitten",
"%d minutes ago" => "%d minuuttia sitten",
diff --git a/lib/l10n/fr.php b/lib/l10n/fr.php
index 218c22c1d53..852fe1ddc4a 100644
--- a/lib/l10n/fr.php
+++ b/lib/l10n/fr.php
@@ -9,12 +9,15 @@
"Files need to be downloaded one by one." => "Les fichiers nécessitent d'être téléchargés un par un.",
"Back to Files" => "Retour aux Fichiers",
"Selected files too large to generate zip file." => "Les fichiers sélectionnés sont trop volumineux pour être compressés.",
+"couldn't be determined" => "impossible à déterminer",
"Application is not enabled" => "L'application n'est pas activée",
"Authentication error" => "Erreur d'authentification",
"Token expired. Please reload page." => "La session a expiré. Veuillez recharger la page.",
"Files" => "Fichiers",
"Text" => "Texte",
"Images" => "Images",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut.",
+"Please double check the <a href='%s'>installation guides</a>." => "Veuillez vous référer au <a href='%s'>guide d'installation</a>.",
"seconds ago" => "à l'instant",
"1 minute ago" => "il y a 1 minute",
"%d minutes ago" => "il y a %d minutes",
diff --git a/lib/l10n/gl.php b/lib/l10n/gl.php
index 1e897959e41..c49e8134af1 100644
--- a/lib/l10n/gl.php
+++ b/lib/l10n/gl.php
@@ -5,17 +5,20 @@
"Users" => "Usuarios",
"Apps" => "Aplicativos",
"Admin" => "Administración",
-"ZIP download is turned off." => "As descargas ZIP están desactivadas",
+"ZIP download is turned off." => "As descargas ZIP están desactivadas.",
"Files need to be downloaded one by one." => "Os ficheiros necesitan seren descargados de un en un.",
"Back to Files" => "Volver aos ficheiros",
"Selected files too large to generate zip file." => "Os ficheiros seleccionados son demasiado grandes como para xerar un ficheiro zip.",
+"couldn't be determined" => "non foi posíbel determinalo",
"Application is not enabled" => "O aplicativo non está activado",
"Authentication error" => "Produciuse un erro na autenticación",
"Token expired. Please reload page." => "Testemuña caducada. Recargue a páxina.",
"Files" => "Ficheiros",
"Text" => "Texto",
"Images" => "Imaxes",
-"seconds ago" => "hai segundos",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web non está aínda configurado adecuadamente para permitir a sincronización de ficheiros xa que semella que a interface WebDAV non está a funcionar.",
+"Please double check the <a href='%s'>installation guides</a>." => "Volva comprobar as <a href='%s'>guías de instalación</a>",
+"seconds ago" => "segundos atrás",
"1 minute ago" => "hai 1 minuto",
"%d minutes ago" => "hai %d minutos",
"1 hour ago" => "Vai 1 hora",
diff --git a/lib/l10n/hu_HU.php b/lib/l10n/hu_HU.php
index 3dcf0646d06..e25de3e1ed6 100644
--- a/lib/l10n/hu_HU.php
+++ b/lib/l10n/hu_HU.php
@@ -5,10 +5,11 @@
"Users" => "Felhasználók",
"Apps" => "Alkalmazások",
"Admin" => "Admin",
-"ZIP download is turned off." => "A ZIP-letöltés nem engedélyezett.",
+"ZIP download is turned off." => "A ZIP-letöltés nincs engedélyezve.",
"Files need to be downloaded one by one." => "A fájlokat egyenként kell letölteni",
"Back to Files" => "Vissza a Fájlokhoz",
-"Selected files too large to generate zip file." => "A kiválasztott fájlok túl nagy a zip tömörítéshez.",
+"Selected files too large to generate zip file." => "A kiválasztott fájlok túl nagyok a zip tömörítéshez.",
+"couldn't be determined" => "nem határozható meg",
"Application is not enabled" => "Az alkalmazás nincs engedélyezve",
"Authentication error" => "Hitelesítési hiba",
"Token expired. Please reload page." => "A token lejárt. Frissítse az oldalt.",
diff --git a/lib/l10n/id.php b/lib/l10n/id.php
index e31b4caf4f5..8f0e38123b6 100644
--- a/lib/l10n/id.php
+++ b/lib/l10n/id.php
@@ -12,17 +12,23 @@
"Application is not enabled" => "aplikasi tidak diaktifkan",
"Authentication error" => "autentikasi bermasalah",
"Token expired. Please reload page." => "token kadaluarsa.mohon perbaharui laman.",
+"Files" => "Berkas",
"Text" => "teks",
+"Images" => "Gambar",
"seconds ago" => "beberapa detik yang lalu",
"1 minute ago" => "1 menit lalu",
"%d minutes ago" => "%d menit lalu",
+"1 hour ago" => "1 jam yang lalu",
+"%d hours ago" => "%d jam yang lalu",
"today" => "hari ini",
"yesterday" => "kemarin",
"%d days ago" => "%d hari lalu",
"last month" => "bulan kemarin",
+"%d months ago" => "%d bulan yang lalu",
"last year" => "tahun kemarin",
"years ago" => "beberapa tahun lalu",
"%s is available. Get <a href=\"%s\">more information</a>" => "%s tersedia. dapatkan <a href=\"%s\"> info lebih lanjut</a>",
"up to date" => "terbaru",
-"updates check is disabled" => "pengecekan pembaharuan sedang non-aktifkan"
+"updates check is disabled" => "pengecekan pembaharuan sedang non-aktifkan",
+"Could not find category \"%s\"" => "Tidak dapat menemukan kategori \"%s\""
);
diff --git a/lib/l10n/it.php b/lib/l10n/it.php
index c0fb0babfb3..d339bd5b1ca 100644
--- a/lib/l10n/it.php
+++ b/lib/l10n/it.php
@@ -9,12 +9,15 @@
"Files need to be downloaded one by one." => "I file devono essere scaricati uno alla volta.",
"Back to Files" => "Torna ai file",
"Selected files too large to generate zip file." => "I file selezionati sono troppo grandi per generare un file zip.",
+"couldn't be determined" => "non può essere determinato",
"Application is not enabled" => "L'applicazione non è abilitata",
"Authentication error" => "Errore di autenticazione",
"Token expired. Please reload page." => "Token scaduto. Ricarica la pagina.",
"Files" => "File",
"Text" => "Testo",
"Images" => "Immagini",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.",
+"Please double check the <a href='%s'>installation guides</a>." => "Leggi attentamente le <a href='%s'>guide d'installazione</a>.",
"seconds ago" => "secondi fa",
"1 minute ago" => "1 minuto fa",
"%d minutes ago" => "%d minuti fa",
diff --git a/lib/l10n/ja_JP.php b/lib/l10n/ja_JP.php
index 854734c9764..11cefe900c2 100644
--- a/lib/l10n/ja_JP.php
+++ b/lib/l10n/ja_JP.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "ファイルã¯1ã¤ãšã¤ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚",
"Back to Files" => "ãƒ•ã‚¡ã‚¤ãƒ«ã«æˆ»ã‚‹",
"Selected files too large to generate zip file." => "é¸æŠžã—ãŸãƒ•ァイルã¯ZIPファイルã®ç”Ÿæˆã«ã¯å¤§ãã™ãŽã¾ã™ã€‚",
+"couldn't be determined" => "測定ã§ãã¾ã›ã‚“ã§ã—ãŸ",
"Application is not enabled" => "アプリケーションã¯ç„¡åйã§ã™",
"Authentication error" => "èªè¨¼ã‚¨ãƒ©ãƒ¼",
"Token expired. Please reload page." => "トークンãŒç„¡åйã«ãªã‚Šã¾ã—ãŸã€‚ページをå†èª­è¾¼ã—ã¦ãã ã•ã„。",
diff --git a/lib/l10n/ko.php b/lib/l10n/ko.php
index c4716f9f8bd..859657f46b4 100644
--- a/lib/l10n/ko.php
+++ b/lib/l10n/ko.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "파ì¼ì„ 개별ì ìœ¼ë¡œ 다운로드해야 합니다.",
"Back to Files" => "파ì¼ë¡œ ëŒì•„가기",
"Selected files too large to generate zip file." => "ì„ íƒí•œ 파ì¼ë“¤ì€ ZIP 파ì¼ì„ ìƒì„±í•˜ê¸°ì— 너무 í½ë‹ˆë‹¤.",
+"couldn't be determined" => "ê²°ì •í•  수 ì—†ìŒ",
"Application is not enabled" => "ì•±ì´ í™œì„±í™”ë˜ì§€ 않았습니다",
"Authentication error" => "ì¸ì¦ 오류",
"Token expired. Please reload page." => "토í°ì´ 만료ë˜ì—ˆìŠµë‹ˆë‹¤. 페ì´ì§€ë¥¼ 새로 고치십시오.",
diff --git a/lib/l10n/lb.php b/lib/l10n/lb.php
index baee630e897..06e8b2ca094 100644
--- a/lib/l10n/lb.php
+++ b/lib/l10n/lb.php
@@ -1,6 +1,12 @@
<?php $TRANSLATIONS = array(
+"Help" => "Hëllef",
"Personal" => "Perséinlech",
"Settings" => "Astellungen",
"Authentication error" => "Authentifikatioun's Fehler",
-"Text" => "SMS"
+"Files" => "Dateien",
+"Text" => "SMS",
+"1 hour ago" => "vrun 1 Stonn",
+"last month" => "Läschte Mount",
+"last year" => "Läscht Joer",
+"years ago" => "Joren hier"
);
diff --git a/lib/l10n/lv.php b/lib/l10n/lv.php
index 3330d0e6b70..cc70f760a22 100644
--- a/lib/l10n/lv.php
+++ b/lib/l10n/lv.php
@@ -3,6 +3,35 @@
"Personal" => "Personīgi",
"Settings" => "Iestatījumi",
"Users" => "LietotÄji",
-"Authentication error" => "IelogoÅ¡anÄs kļūme",
-"Files" => "Faili"
+"Apps" => "Lietotnes",
+"Admin" => "Administratori",
+"ZIP download is turned off." => "ZIP lejupielÄdēšana ir izslÄ“gta.",
+"Files need to be downloaded one by one." => "Datnes var lejupielÄdÄ“t tikai katru atsevišķi.",
+"Back to Files" => "Atpakaļ pie datnēm",
+"Selected files too large to generate zip file." => "IzvÄ“lÄ“tÄs datnes ir pÄrÄk lielas, lai izveidotu zip datni.",
+"couldn't be determined" => "nevarēja noteikt",
+"Application is not enabled" => "Lietotne nav aktivēta",
+"Authentication error" => "AutentifikÄcijas kļūda",
+"Token expired. Please reload page." => "Pilnvarai ir beidzies termiņš. LÅ«dzu, pÄrlÄdÄ“jiet lapu.",
+"Files" => "Datnes",
+"Text" => "Teksts",
+"Images" => "Attēli",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "JÅ«su serveris vÄ“l nav pareizi iestatÄ«ts, lai ļautu sinhronizÄ“t datnes, jo izskatÄs, ka WebDAV saskarne ir salauzta.",
+"Please double check the <a href='%s'>installation guides</a>." => "LÅ«dzu, vÄ“lreiz pÄrbaudiet <a href='%s'>instalēšanas palÄ«dzÄ«bu</a>.",
+"seconds ago" => "sekundes atpakaļ",
+"1 minute ago" => "pirms 1 minūtes",
+"%d minutes ago" => "pirms %d minūtēm",
+"1 hour ago" => "pirms 1 stundas",
+"%d hours ago" => "pirms %d stundÄm",
+"today" => "šodien",
+"yesterday" => "vakar",
+"%d days ago" => "pirms %d dienÄm",
+"last month" => "pagÄjuÅ¡ajÄ mÄ“nesÄ«",
+"%d months ago" => "pirms %d mēnešiem",
+"last year" => "gÄjuÅ¡ajÄ gadÄ",
+"years ago" => "gadus atpakaļ",
+"%s is available. Get <a href=\"%s\">more information</a>" => "%s ir pieejams. IegÅ«t <a href=\"%s\">vairÄk informÄcijas</a>",
+"up to date" => "ir aktuÄls",
+"updates check is disabled" => "atjauninÄjumu pÄrbaude ir deaktivÄ“ta",
+"Could not find category \"%s\"" => "NevarÄ“ja atrast kategoriju “%sâ€"
);
diff --git a/lib/l10n/ms_MY.php b/lib/l10n/ms_MY.php
index 86c7e51b486..5afee1cb5a8 100644
--- a/lib/l10n/ms_MY.php
+++ b/lib/l10n/ms_MY.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Help" => "Bantuan",
"Personal" => "Peribadi",
"Settings" => "Tetapan",
"Users" => "Pengguna",
diff --git a/lib/l10n/nl.php b/lib/l10n/nl.php
index 087cf23a627..7ce134e3621 100644
--- a/lib/l10n/nl.php
+++ b/lib/l10n/nl.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Bestanden moeten één voor één worden gedownload.",
"Back to Files" => "Terug naar bestanden",
"Selected files too large to generate zip file." => "De geselecteerde bestanden zijn te groot om een zip bestand te maken.",
+"couldn't be determined" => "kon niet worden vastgesteld",
"Application is not enabled" => "De applicatie is niet actief",
"Authentication error" => "Authenticatie fout",
"Token expired. Please reload page." => "Token verlopen. Herlaad de pagina.",
diff --git a/lib/l10n/pl.php b/lib/l10n/pl.php
index 6f84a328ed9..6ec35445bc2 100644
--- a/lib/l10n/pl.php
+++ b/lib/l10n/pl.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Pliki muszą zostać pobrane pojedynczo.",
"Back to Files" => "Wróć do plików",
"Selected files too large to generate zip file." => "Wybrane pliki są zbyt duże, aby wygenerować plik zip.",
+"couldn't be determined" => "nie może zostać znaleziony",
"Application is not enabled" => "Aplikacja nie jest włączona",
"Authentication error" => "Błąd uwierzytelniania",
"Token expired. Please reload page." => "Token wygasł. Proszę ponownie załadować stronę.",
diff --git a/lib/l10n/pt_PT.php b/lib/l10n/pt_PT.php
index 84867c4c37c..67b8078ddfa 100644
--- a/lib/l10n/pt_PT.php
+++ b/lib/l10n/pt_PT.php
@@ -9,12 +9,15 @@
"Files need to be downloaded one by one." => "Os ficheiros precisam de ser descarregados um por um.",
"Back to Files" => "Voltar a Ficheiros",
"Selected files too large to generate zip file." => "Os ficheiros seleccionados são grandes demais para gerar um ficheiro zip.",
+"couldn't be determined" => "Não foi possível determinar",
"Application is not enabled" => "A aplicação não está activada",
"Authentication error" => "Erro na autenticação",
"Token expired. Please reload page." => "O token expirou. Por favor recarregue a página.",
"Files" => "Ficheiros",
"Text" => "Texto",
"Images" => "Imagens",
+"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.",
+"Please double check the <a href='%s'>installation guides</a>." => "Por favor verifique <a href='%s'>installation guides</a>.",
"seconds ago" => "há alguns segundos",
"1 minute ago" => "há 1 minuto",
"%d minutes ago" => "há %d minutos",
diff --git a/lib/l10n/ro.php b/lib/l10n/ro.php
index d3ce066c8c1..3f8e59cdac2 100644
--- a/lib/l10n/ro.php
+++ b/lib/l10n/ro.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Fișierele trebuie descărcate unul câte unul.",
"Back to Files" => "Înapoi la fișiere",
"Selected files too large to generate zip file." => "Fișierele selectate sunt prea mari pentru a genera un fișier zip.",
+"couldn't be determined" => "nu poate fi determinat",
"Application is not enabled" => "Aplicația nu este activată",
"Authentication error" => "Eroare la autentificare",
"Token expired. Please reload page." => "Token expirat. Te rugăm să reîncarci pagina.",
diff --git a/lib/l10n/ru.php b/lib/l10n/ru.php
index 3ed55f8e9dc..5ef2cca3be3 100644
--- a/lib/l10n/ru.php
+++ b/lib/l10n/ru.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Файлы должны быть загружены по одному.",
"Back to Files" => "Ðазад к файлам",
"Selected files too large to generate zip file." => "Выбранные файлы Ñлишком велики, чтобы Ñоздать zip файл.",
+"couldn't be determined" => "Ðевозможно уÑтановить",
"Application is not enabled" => "Приложение не разрешено",
"Authentication error" => "Ошибка аутентификации",
"Token expired. Please reload page." => "Токен проÑрочен. Перезагрузите Ñтраницу.",
diff --git a/lib/l10n/ru_RU.php b/lib/l10n/ru_RU.php
index ba7d39f9eb0..de770563662 100644
--- a/lib/l10n/ru_RU.php
+++ b/lib/l10n/ru_RU.php
@@ -9,12 +9,15 @@
"Files need to be downloaded one by one." => "Файлы должны быть загружены один за другим.",
"Back to Files" => "Обратно к файлам",
"Selected files too large to generate zip file." => "Выбранные файлы Ñлишком велики Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ zip-архива.",
+"couldn't be determined" => "не может быть определено",
"Application is not enabled" => "Приложение не запущено",
"Authentication error" => "Ошибка аутентификации",
"Token expired. Please reload page." => "Маркер иÑтек. ПожалуйÑта, перезагрузите Ñтраницу.",
"Files" => "Файлы",
"Text" => "ТекÑÑ‚",
"Images" => "ИзображениÑ",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш веб Ñервер ещё не доÑтаточно точно наÑтроен Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти Ñинхронизации, Ñ‚.к. похоже, что Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ WebDAV Ñломан.",
+"Please double check the <a href='%s'>installation guides</a>." => "ПожалуйÑта проверте дважды <a href='%s'>гиды по уÑтановке</a>.",
"seconds ago" => "Ñекунд назад",
"1 minute ago" => "1 минуту назад",
"%d minutes ago" => "%d минут назад",
diff --git a/lib/l10n/sk_SK.php b/lib/l10n/sk_SK.php
index 98a5b5ca677..16df7f2e199 100644
--- a/lib/l10n/sk_SK.php
+++ b/lib/l10n/sk_SK.php
@@ -2,19 +2,22 @@
"Help" => "Pomoc",
"Personal" => "Osobné",
"Settings" => "Nastavenia",
-"Users" => "Užívatelia",
+"Users" => "Používatelia",
"Apps" => "Aplikácie",
-"Admin" => "Správca",
+"Admin" => "Administrátor",
"ZIP download is turned off." => "Sťahovanie súborov ZIP je vypnuté.",
"Files need to be downloaded one by one." => "Súbory musia byť nahrávané jeden za druhým.",
"Back to Files" => "Späť na súbory",
-"Selected files too large to generate zip file." => "Zvolené súbory sú príliž veľké na vygenerovanie zip súboru.",
+"Selected files too large to generate zip file." => "Zvolené súbory sú príliš veľké na vygenerovanie zip súboru.",
+"couldn't be determined" => "nedá sa zistiť",
"Application is not enabled" => "Aplikácia nie je zapnutá",
"Authentication error" => "Chyba autentifikácie",
"Token expired. Please reload page." => "Token vypršal. Obnovte, prosím, stránku.",
"Files" => "Súbory",
"Text" => "Text",
"Images" => "Obrázky",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené.",
+"Please double check the <a href='%s'>installation guides</a>." => "Prosím skontrolujte <a href='%s'>inÅ¡talaÄnú príruÄku</a>.",
"seconds ago" => "pred sekundami",
"1 minute ago" => "pred 1 minútou",
"%d minutes ago" => "pred %d minútami",
@@ -27,7 +30,7 @@
"%d months ago" => "Pred %d mesiacmi.",
"last year" => "minulý rok",
"years ago" => "pred rokmi",
-"%s is available. Get <a href=\"%s\">more information</a>" => "%s je dostupné. Získať <a href=\"%s\">viac informácií</a>",
+"%s is available. Get <a href=\"%s\">more information</a>" => "%s je dostupné. Získať <a href=\"%s\">pre viac informácií</a>",
"up to date" => "aktuálny",
"updates check is disabled" => "sledovanie aktualizácií je vypnuté",
"Could not find category \"%s\"" => "Nemožno nájsť danú kategóriu \"%s\""
diff --git a/lib/l10n/sr.php b/lib/l10n/sr.php
index 2ae7400ba79..1161b0a44b7 100644
--- a/lib/l10n/sr.php
+++ b/lib/l10n/sr.php
@@ -1,14 +1,15 @@
<?php $TRANSLATIONS = array(
"Help" => "Помоћ",
"Personal" => "Лично",
-"Settings" => "Подешавања",
+"Settings" => "ПоÑтавке",
"Users" => "КориÑници",
"Apps" => "Ðпликације",
-"Admin" => "ÐдминиÑтрација",
+"Admin" => "ÐдминиÑтратор",
"ZIP download is turned off." => "Преузимање ZIP-а је иÑкључено.",
"Files need to be downloaded one by one." => "Датотеке морате преузимати једну по једну.",
"Back to Files" => "Ðазад на датотеке",
"Selected files too large to generate zip file." => "Изабране датотеке Ñу превелике да биÑте направили ZIP датотеку.",
+"couldn't be determined" => "није одређено",
"Application is not enabled" => "Ðпликација није омогућена",
"Authentication error" => "Грешка при провери идентитета",
"Token expired. Please reload page." => "Жетон је иÑтекао. Поново учитајте Ñтраницу.",
@@ -28,7 +29,7 @@
"last year" => "прошле године",
"years ago" => "година раније",
"%s is available. Get <a href=\"%s\">more information</a>" => "%s је доÑтупна. Погледајте <a href=\"%s\">више информација</a>.",
-"up to date" => "је ажурна.",
-"updates check is disabled" => "провера ажурирања је онемогућена.",
+"up to date" => "је ажурна",
+"updates check is disabled" => "провера ажурирања је онемогућена",
"Could not find category \"%s\"" => "Ðе могу да пронађем категорију „%s“."
);
diff --git a/lib/l10n/sv.php b/lib/l10n/sv.php
index 5799e2dd1a8..63ca60e89cd 100644
--- a/lib/l10n/sv.php
+++ b/lib/l10n/sv.php
@@ -9,12 +9,15 @@
"Files need to be downloaded one by one." => "Filer laddas ner en åt gången.",
"Back to Files" => "Tillbaka till Filer",
"Selected files too large to generate zip file." => "Valda filer är för stora för att skapa zip-fil.",
+"couldn't be determined" => "kunde inte bestämmas",
"Application is not enabled" => "Applikationen är inte aktiverad",
"Authentication error" => "Fel vid autentisering",
"Token expired. Please reload page." => "Ogiltig token. Ladda om sidan.",
"Files" => "Filer",
"Text" => "Text",
"Images" => "Bilder",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera.",
+"Please double check the <a href='%s'>installation guides</a>." => "Var god kontrollera <a href='%s'>installationsguiden</a>.",
"seconds ago" => "sekunder sedan",
"1 minute ago" => "1 minut sedan",
"%d minutes ago" => "%d minuter sedan",
diff --git a/lib/l10n/th_TH.php b/lib/l10n/th_TH.php
index 75fa02f84b0..0da607a0589 100644
--- a/lib/l10n/th_TH.php
+++ b/lib/l10n/th_TH.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "ไฟล์สามารถดาวน์โหลดได้ทีละครั้งเท่านั้น",
"Back to Files" => "à¸à¸¥à¸±à¸šà¹„ปที่ไฟล์",
"Selected files too large to generate zip file." => "ไฟล์ที่เลือà¸à¸¡à¸µà¸‚นาดใหà¸à¹ˆà¹€à¸à¸´à¸™à¸à¸§à¹ˆà¸²à¸—ี่จะสร้างเป็นไฟล์ zip",
+"couldn't be determined" => "ไม่สามารถà¸à¸³à¸«à¸™à¸”ได้",
"Application is not enabled" => "à¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นดังà¸à¸¥à¹ˆà¸²à¸§à¸¢à¸±à¸‡à¹„ม่ได้เปิดใช้งาน",
"Authentication error" => "เà¸à¸´à¸”ข้อผิดพลาดในสิทธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน",
"Token expired. Please reload page." => "รหัสยืนยันความถูà¸à¸•้องหมดอายุà¹à¸¥à¹‰à¸§ à¸à¸£à¸¸à¸“าโหลดหน้าเว็บใหม่อีà¸à¸„รั้ง",
diff --git a/lib/l10n/tr.php b/lib/l10n/tr.php
index 9b7f1815fa3..e55caa15972 100644
--- a/lib/l10n/tr.php
+++ b/lib/l10n/tr.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Dosyaların birer birer indirilmesi gerekmektedir.",
"Back to Files" => "Dosyalara dön",
"Selected files too large to generate zip file." => "Seçilen dosyalar bir zip dosyası oluşturmak için fazla büyüktür.",
+"couldn't be determined" => "tespit edilemedi",
"Application is not enabled" => "Uygulama etkinleÅŸtirilmedi",
"Authentication error" => "Kimlik doğrulama hatası",
"Token expired. Please reload page." => "Jetonun süresi geçti. Lütfen sayfayı yenileyin.",
diff --git a/lib/l10n/uk.php b/lib/l10n/uk.php
index f5d52f8682d..053644ddede 100644
--- a/lib/l10n/uk.php
+++ b/lib/l10n/uk.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Файли повинні бути завантаженні поÑлідовно.",
"Back to Files" => "ПовернутиÑÑ Ð´Ð¾ файлів",
"Selected files too large to generate zip file." => "Вибрані фали завеликі Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ zip файлу.",
+"couldn't be determined" => "не може бути визначено",
"Application is not enabled" => "Додаток не увімкнений",
"Authentication error" => "Помилка автентифікації",
"Token expired. Please reload page." => "Строк дії токена ÑкінчивÑÑ. Будь лаÑка, перезавантажте Ñторінку.",
diff --git a/lib/l10n/vi.php b/lib/l10n/vi.php
index 8b7242ae611..ea9660093ae 100644
--- a/lib/l10n/vi.php
+++ b/lib/l10n/vi.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "Tập tin cần phải được tải vá» từng ngưá»i má»™t.",
"Back to Files" => "Trở lại tập tin",
"Selected files too large to generate zip file." => "Tập tin được chá»n quá lá»›n để tạo tập tin ZIP.",
+"couldn't be determined" => "không thể phát hiện được",
"Application is not enabled" => "Ứng dụng không được BẬT",
"Authentication error" => "Lỗi xác thực",
"Token expired. Please reload page." => "Mã Token đã hết hạn. Hãy tải lại trang.",
diff --git a/lib/l10n/zh_TW.php b/lib/l10n/zh_TW.php
index 4dbf89c2e0e..91b0329e246 100644
--- a/lib/l10n/zh_TW.php
+++ b/lib/l10n/zh_TW.php
@@ -9,26 +9,29 @@
"Files need to be downloaded one by one." => "檔案需è¦é€ä¸€ä¸‹è¼‰",
"Back to Files" => "回到檔案列表",
"Selected files too large to generate zip file." => "鏿“‡çš„æª”案太大以致於無法產生壓縮檔",
+"couldn't be determined" => "無法判斷",
"Application is not enabled" => "æ‡‰ç”¨ç¨‹å¼æœªå•Ÿç”¨",
"Authentication error" => "èªè­‰éŒ¯èª¤",
-"Token expired. Please reload page." => "Token éŽæœŸ. è«‹é‡æ–°æ•´ç†é é¢",
+"Token expired. Please reload page." => "Token éŽæœŸï¼Œè«‹é‡æ–°æ•´ç†é é¢ã€‚",
"Files" => "檔案",
"Text" => "文字",
"Images" => "圖片",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "您的網é ä¼ºæœå™¨å°šæœªè¢«æ­£ç¢ºè¨­å®šä¾†é€²è¡Œæª”æ¡ˆåŒæ­¥ï¼Œå› ç‚ºæ‚¨çš„ WebDAV 界é¢ä¼¼ä¹Žç„¡æ³•使用。",
+"Please double check the <a href='%s'>installation guides</a>." => "è«‹åƒè€ƒ<a href='%s'>å®‰è£æŒ‡å—</a>。",
"seconds ago" => "幾秒å‰",
"1 minute ago" => "1 分é˜å‰",
"%d minutes ago" => "%d 分é˜å‰",
-"1 hour ago" => "1å°æ™‚之å‰",
-"%d hours ago" => "%då°æ™‚之å‰",
+"1 hour ago" => "1 å°æ™‚之å‰",
+"%d hours ago" => "%d å°æ™‚之å‰",
"today" => "今天",
"yesterday" => "昨天",
"%d days ago" => "%d 天å‰",
"last month" => "上個月",
-"%d months ago" => "%d個月之å‰",
+"%d months ago" => "%d 個月之å‰",
"last year" => "去年",
"years ago" => "幾年å‰",
-"%s is available. Get <a href=\"%s\">more information</a>" => "%s 已經å¯ç”¨. å–å¾— <a href=\"%s\">更多資訊</a>",
+"%s is available. Get <a href=\"%s\">more information</a>" => "%s 已經å¯ç”¨ã€‚å–å¾— <a href=\"%s\">更多資訊</a>",
"up to date" => "最新的",
"updates check is disabled" => "檢查更新已åœç”¨",
-"Could not find category \"%s\"" => "找ä¸åˆ°åˆ†é¡ž-\"%s\""
+"Could not find category \"%s\"" => "找ä¸åˆ°åˆ†é¡žï¼š\"%s\""
);
diff --git a/lib/log.php b/lib/log.php
index e9cededa5c0..e869282e88c 100644
--- a/lib/log.php
+++ b/lib/log.php
@@ -39,7 +39,7 @@ class OC_Log {
$log_class::write($app, $message, $level);
}
}
-
+
//Fatal errors handler
public static function onShutdown() {
$error = error_get_last();
@@ -50,7 +50,7 @@ class OC_Log {
return true;
}
}
-
+
// Uncaught exception handler
public static function onException($exception) {
self::write('PHP', $exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(), self::FATAL);
diff --git a/lib/mail.php b/lib/mail.php
index 4683a1b4eee..1bb202ac977 100644
--- a/lib/mail.php
+++ b/lib/mail.php
@@ -38,8 +38,12 @@ class OC_Mail {
$SMTPHOST = OC_Config::getValue( 'mail_smtphost', '127.0.0.1' );
$SMTPPORT = OC_Config::getValue( 'mail_smtpport', 25 );
$SMTPAUTH = OC_Config::getValue( 'mail_smtpauth', false );
+ $SMTPAUTHTYPE = OC_Config::getValue( 'mail_smtpauthtype', 'LOGIN' );
$SMTPUSERNAME = OC_Config::getValue( 'mail_smtpname', '' );
$SMTPPASSWORD = OC_Config::getValue( 'mail_smtppassword', '' );
+ $SMTPDEBUG = OC_Config::getValue( 'mail_smtpdebug', false );
+ $SMTPTIMEOUT = OC_Config::getValue( 'mail_smtptimeout', 10 );
+ $SMTPSECURE = OC_Config::getValue( 'mail_smtpsecure', '' );
$mailo = new PHPMailer(true);
@@ -57,12 +61,16 @@ class OC_Mail {
$mailo->Host = $SMTPHOST;
$mailo->Port = $SMTPPORT;
$mailo->SMTPAuth = $SMTPAUTH;
+ $mailo->SMTPDebug = $SMTPDEBUG;
+ $mailo->SMTPSecure = $SMTPSECURE;
+ $mailo->AuthType = $SMTPAUTHTYPE;
$mailo->Username = $SMTPUSERNAME;
$mailo->Password = $SMTPPASSWORD;
+ $mailo->Timeout = $SMTPTIMEOUT;
- $mailo->From =$fromaddress;
+ $mailo->From = $fromaddress;
$mailo->FromName = $fromname;;
- $mailo->Sender =$fromaddress;
+ $mailo->Sender = $fromaddress;
$a=explode(' ', $toaddress);
try {
foreach($a as $ad) {
diff --git a/lib/migrate.php b/lib/migrate.php
index 5ff8e338a44..87bdd016fe4 100644
--- a/lib/migrate.php
+++ b/lib/migrate.php
@@ -219,7 +219,7 @@ class OC_Migrate{
// We need to be an admin if we are not importing our own data
if(($type == 'user' && self::$uid != $currentuser) || $type != 'user' ) {
- if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )) {
+ if( !OC_User::isAdminUser($currentuser)) {
// Naughty.
OC_Log::write( 'migration', 'Import not permitted.', OC_Log::ERROR );
return json_encode( array( 'success' => false ) );
@@ -655,7 +655,7 @@ class OC_Migrate{
$query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" );
$result = $query->execute( array( $uid, $hash));
if( !$result ) {
- OC_Log::write('migration', 'Failed to create the new user "'.$uid."");
+ OC_Log::write('migration', 'Failed to create the new user "'.$uid."", OC_Log::ERROR);
}
return $result ? true : false;
diff --git a/lib/migration/content.php b/lib/migration/content.php
index 00df62f0c7f..e81c8f217ff 100644
--- a/lib/migration/content.php
+++ b/lib/migration/content.php
@@ -66,7 +66,7 @@ class OC_Migration_Content{
// Die if we have an error (error means: bad query, not 0 results!)
if( PEAR::isError( $query ) ) {
- $entry = 'DB Error: "'.$result->getMessage().'"<br />';
+ $entry = 'DB Error: "'.$query->getMessage().'"<br />';
$entry .= 'Offending command was: '.$query.'<br />';
OC_Log::write( 'migration', $entry, OC_Log::FATAL );
return false;
diff --git a/lib/mimetypes.list.php b/lib/mimetypes.list.php
index 77b97917583..86ce9c6c237 100644
--- a/lib/mimetypes.list.php
+++ b/lib/mimetypes.list.php
@@ -95,4 +95,8 @@ return array(
'cdr' => 'application/coreldraw',
'impress' => 'text/impress',
'ai' => 'application/illustrator',
+ 'epub' => 'application/epub+zip',
+ 'mobi' => 'application/x-mobipocket-ebook',
+ 'exe' => 'application',
+ 'msi' => 'application'
);
diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php
index 21095ec91e9..820d24a8e0c 100644
--- a/lib/ocs/cloud.php
+++ b/lib/ocs/cloud.php
@@ -24,7 +24,7 @@
class OC_OCS_Cloud {
- public static function getSystemWebApps($parameters) {
+ public static function getSystemWebApps() {
OC_Util::checkLoggedIn();
$apps = OC_App::getEnabledApps();
$values = array();
@@ -37,19 +37,19 @@ class OC_OCS_Cloud {
}
return new OC_OCS_Result($values);
}
-
+
public static function getUserQuota($parameters) {
$user = OC_User::getUser();
- if(OC_Group::inGroup($user, 'admin') or ($user==$parameters['user'])) {
+ if(OC_User::isAdminUser($user) or ($user==$parameters['user'])) {
if(OC_User::userExists($parameters['user'])) {
// calculate the disc space
$userDir = '/'.$parameters['user'].'/files';
- OC_Filesystem::init($useDir);
- $rootInfo = OC_FileCache::get('');
- $sharedInfo = OC_FileCache::get('/Shared');
+ \OC\Files\Filesystem::init($parameters['user'], $userDir);
+ $rootInfo = \OC\Files\Filesystem::getFileInfo('');
+ $sharedInfo = \OC\Files\Filesystem::getFileInfo('/Shared');
$used = $rootInfo['size'] - $sharedInfo['size'];
- $free = OC_Filesystem::free_space();
+ $free = \OC\Files\Filesystem::free_space();
$total = $free + $used;
if($total===0) $total = 1; // prevent division by zero
$relative = round(($used/$total)*10000)/100;
@@ -68,7 +68,7 @@ class OC_OCS_Cloud {
return new OC_OCS_Result(null, 300);
}
}
-
+
public static function getUserPublickey($parameters) {
if(OC_User::userExists($parameters['user'])) {
@@ -79,10 +79,10 @@ class OC_OCS_Cloud {
return new OC_OCS_Result(null, 300);
}
}
-
+
public static function getUserPrivatekey($parameters) {
$user = OC_User::getUser();
- if(OC_Group::inGroup($user, 'admin') or ($user==$parameters['user'])) {
+ if(OC_User::isAdminUser($user) or ($user==$parameters['user'])) {
if(OC_User::userExists($user)) {
// calculate the disc space
diff --git a/lib/ocs/config.php b/lib/ocs/config.php
index 03c54aa2314..f19121f4b2b 100644
--- a/lib/ocs/config.php
+++ b/lib/ocs/config.php
@@ -23,7 +23,7 @@
*/
class OC_OCS_Config {
-
+
public static function apiConfig($parameters) {
$xml['version'] = '1.7';
$xml['website'] = 'ownCloud';
@@ -32,5 +32,5 @@ class OC_OCS_Config {
$xml['ssl'] = 'false';
return new OC_OCS_Result($xml);
}
-
+
}
diff --git a/lib/ocs/person.php b/lib/ocs/person.php
index 169cc8211db..1c8210d0825 100644
--- a/lib/ocs/person.php
+++ b/lib/ocs/person.php
@@ -38,5 +38,5 @@ class OC_OCS_Person {
return new OC_OCS_Result(null, 101);
}
}
-
+
}
diff --git a/lib/ocs/privatedata.php b/lib/ocs/privatedata.php
index e01ed5e8b07..311b24269dd 100644
--- a/lib/ocs/privatedata.php
+++ b/lib/ocs/privatedata.php
@@ -39,7 +39,7 @@ class OC_OCS_Privatedata {
return new OC_OCS_Result($xml);
//TODO: replace 'privatedata' with 'attribute' once a new libattice has been released that works with it
}
-
+
public static function set($parameters) {
OC_Util::checkLoggedIn();
$user = OC_User::getUser();
@@ -50,7 +50,7 @@ class OC_OCS_Privatedata {
return new OC_OCS_Result(null, 100);
}
}
-
+
public static function delete($parameters) {
OC_Util::checkLoggedIn();
$user = OC_User::getUser();
diff --git a/lib/ocs/result.php b/lib/ocs/result.php
index b08d911f785..65b2067fc3f 100644
--- a/lib/ocs/result.php
+++ b/lib/ocs/result.php
@@ -21,9 +21,9 @@
*/
class OC_OCS_Result{
-
+
private $data, $message, $statusCode, $items, $perPage;
-
+
/**
* create the OCS_Result object
* @param $data mixed the data to return
@@ -33,7 +33,7 @@ class OC_OCS_Result{
$this->statusCode = $code;
$this->message = $message;
}
-
+
/**
* optionally set the total number of items available
* @param $items int
@@ -41,7 +41,7 @@ class OC_OCS_Result{
public function setTotalItems(int $items) {
$this->items = $items;
}
-
+
/**
* optionally set the the number of items per page
* @param $items int
@@ -49,7 +49,7 @@ class OC_OCS_Result{
public function setItemsPerPage(int $items) {
$this->perPage = $items;
}
-
+
/**
* returns the data associated with the api result
* @return array
@@ -70,6 +70,6 @@ class OC_OCS_Result{
// Return the result data.
return $return;
}
-
-
+
+
} \ No newline at end of file
diff --git a/lib/ocsclient.php b/lib/ocsclient.php
index 24081425f1e..30163c1e403 100644
--- a/lib/ocsclient.php
+++ b/lib/ocsclient.php
@@ -39,11 +39,11 @@ class OC_OCSClient{
return($url);
}
- /**
- * @brief Get the url of the OCS KB server.
- * @returns string of the KB server
- * This function returns the url of the OCS knowledge base server. It´s possible to set it in the config file or it will fallback to the default
- */
+ /**
+ * @brief Get the url of the OCS KB server.
+ * @returns string of the KB server
+ * This function returns the url of the OCS knowledge base server. It´s possible to set it in the config file or it will fallback to the default
+ */
private static function getKBURL() {
$url = OC_Config::getValue('knowledgebaseurl', 'http://api.apps.owncloud.com/v1');
return($url);
@@ -59,7 +59,7 @@ class OC_OCSClient{
return($data);
}
- /**
+ /**
* @brief Get all the categories from the OCS server
* @returns array with category ids
* @note returns NULL if config value appstoreenabled is set to false
@@ -123,6 +123,8 @@ class OC_OCSClient{
$app=array();
$app['id']=(string)$tmp[$i]->id;
$app['name']=(string)$tmp[$i]->name;
+ $app['label']=(string)$tmp[$i]->label;
+ $app['version']=(string)$tmp[$i]->version;
$app['type']=(string)$tmp[$i]->typeid;
$app['typename']=(string)$tmp[$i]->typename;
$app['personid']=(string)$tmp[$i]->personid;
@@ -162,7 +164,9 @@ class OC_OCSClient{
$app=array();
$app['id']=$tmp->id;
$app['name']=$tmp->name;
+ $app['version']=$tmp->version;
$app['type']=$tmp->typeid;
+ $app['label']=$tmp->label;
$app['typename']=$tmp->typename;
$app['personid']=$tmp->personid;
$app['detailpage']=$tmp->detailpage;
@@ -242,7 +246,7 @@ class OC_OCSClient{
}
$kbe['totalitems'] = $data->meta->totalitems;
}
- return $kbe;
+ return $kbe;
}
diff --git a/lib/public/api.php b/lib/public/api.php
index a85daa1935c..95d333f2165 100644
--- a/lib/public/api.php
+++ b/lib/public/api.php
@@ -26,7 +26,7 @@ namespace OCP;
* This class provides functions to manage apps in ownCloud
*/
class API {
-
+
/**
* registers an api call
* @param string $method the http method
@@ -40,5 +40,5 @@ class API {
public static function register($method, $url, $action, $app, $authLevel = OC_API::USER_AUTH, $defaults = array(), $requirements = array()){
\OC_API::register($method, $url, $action, $app, $authLevel, $defaults, $requirements);
}
-
+
}
diff --git a/lib/public/app.php b/lib/public/app.php
index 809a656f17f..a1ecf524cc8 100644
--- a/lib/public/app.php
+++ b/lib/public/app.php
@@ -89,7 +89,7 @@ class App {
* @param $page string page to be included
*/
public static function registerPersonal( $app, $page ) {
- return \OC_App::registerPersonal( $app, $page );
+ \OC_App::registerPersonal( $app, $page );
}
/**
@@ -98,7 +98,7 @@ class App {
* @param $page string page to be included
*/
public static function registerAdmin( $app, $page ) {
- return \OC_App::registerAdmin( $app, $page );
+ \OC_App::registerAdmin( $app, $page );
}
/**
@@ -125,10 +125,9 @@ class App {
/**
* @brief Check if the app is enabled, redirects to home if not
* @param $app app
- * @returns true/false
*/
public static function checkAppEnabled( $app ) {
- return \OC_Util::checkAppEnabled( $app );
+ \OC_Util::checkAppEnabled( $app );
}
/**
diff --git a/lib/public/constants.php b/lib/public/constants.php
index bc979c9031f..1495c620dc9 100644
--- a/lib/public/constants.php
+++ b/lib/public/constants.php
@@ -35,4 +35,3 @@ const PERMISSION_UPDATE = 2;
const PERMISSION_DELETE = 8;
const PERMISSION_SHARE = 16;
const PERMISSION_ALL = 31;
-
diff --git a/lib/public/db.php b/lib/public/db.php
index 5d4aadd22ae..932e79d9ef1 100644
--- a/lib/public/db.php
+++ b/lib/public/db.php
@@ -49,9 +49,9 @@ class DB {
* @brief Insert a row if a matching row doesn't exists.
* @param $table string The table name (will replace *PREFIX*) to perform the replace on.
* @param $input array
- *
+ *
* The input array if in the form:
- *
+ *
* array ( 'id' => array ( 'value' => 6,
* 'key' => true
* ),
@@ -65,7 +65,7 @@ class DB {
public static function insertIfNotExist($table, $input) {
return(\OC_DB::insertIfNotExist($table, $input));
}
-
+
/**
* @brief gets last value of autoincrement
* @param $table string The optional table name (will replace *PREFIX*) and add sequence suffix
diff --git a/lib/public/files.php b/lib/public/files.php
index 90889c59ad8..f6b3e0ee38a 100644
--- a/lib/public/files.php
+++ b/lib/public/files.php
@@ -38,9 +38,10 @@ class Files {
* @brief Recusive deletion of folders
* @param string $dir path to the folder
*
+ * @return bool
*/
static function rmdirr( $dir ) {
- \OC_Helper::rmdirr( $dir );
+ return \OC_Helper::rmdirr( $dir );
}
/**
@@ -98,7 +99,7 @@ class Files {
/**
* @param string appid
* @param $app app
- * @return OC_FilesystemView
+ * @return \OC\Files\View
*/
public static function getStorage( $app ) {
return \OC_App::getStorage( $app );
diff --git a/lib/public/response.php b/lib/public/response.php
index bfb84eda5d1..de0c3f25347 100644
--- a/lib/public/response.php
+++ b/lib/public/response.php
@@ -42,7 +42,7 @@ class Response {
* null cache indefinitly
*/
static public function enableCaching( $cache_time = null ) {
- return(\OC_Response::enableCaching( $cache_time ));
+ \OC_Response::enableCaching( $cache_time );
}
/**
@@ -51,7 +51,7 @@ class Response {
* @param string $lastModified time when the reponse was last modified
*/
static public function setLastModifiedHeader( $lastModified ) {
- return(\OC_Response::setLastModifiedHeader( $lastModified ));
+ \OC_Response::setLastModifiedHeader( $lastModified );
}
/**
@@ -59,7 +59,7 @@ class Response {
* @see enableCaching with cache_time = 0
*/
static public function disableCaching() {
- return(\OC_Response::disableCaching());
+ \OC_Response::disableCaching();
}
/**
@@ -68,7 +68,7 @@ class Response {
* @param string $etag token to use for modification check
*/
static public function setETagHeader( $etag ) {
- return(\OC_Response::setETagHeader( $etag ));
+ \OC_Response::setETagHeader( $etag );
}
/**
@@ -76,7 +76,7 @@ class Response {
* @param string $filepath of file to send
*/
static public function sendFile( $filepath ) {
- return(\OC_Response::sendFile( $filepath ));
+ \OC_Response::sendFile( $filepath );
}
/**
@@ -86,7 +86,7 @@ class Response {
* DateTime object when to expire response
*/
static public function setExpiresHeader( $expires ) {
- return(\OC_Response::setExpiresHeader( $expires ));
+ \OC_Response::setExpiresHeader( $expires );
}
/**
@@ -94,6 +94,6 @@ class Response {
* @param string $location to redirect to
*/
static public function redirect( $location ) {
- return(\OC_Response::redirect( $location ));
+ \OC_Response::redirect( $location );
}
}
diff --git a/lib/public/share.php b/lib/public/share.php
index d736871d244..af2a538e252 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -248,14 +248,14 @@ class Share {
//delete the old share
self::delete($checkExists['id']);
}
-
+
// Generate hash of password - same method as user passwords
if (isset($shareWith)) {
$forcePortable = (CRYPT_BLOWFISH != 1);
$hasher = new \PasswordHash(8, $forcePortable);
$shareWith = $hasher->HashPassword($shareWith.\OC_Config::getValue('passwordsalt', ''));
}
-
+
// Generate token
if (isset($oldToken)) {
$token = $oldToken;
@@ -300,34 +300,36 @@ class Share {
throw new \Exception($message);
}
// If the item is a folder, scan through the folder looking for equivalent item types
- if ($itemType == 'folder') {
- $parentFolder = self::put('folder', $itemSource, $shareType, $shareWith, $uidOwner, $permissions, true);
- if ($parentFolder && $files = \OC_Files::getDirectoryContent($itemSource)) {
- for ($i = 0; $i < count($files); $i++) {
- $name = substr($files[$i]['name'], strpos($files[$i]['name'], $itemSource) - strlen($itemSource));
- if ($files[$i]['mimetype'] == 'httpd/unix-directory' && $children = \OC_Files::getDirectoryContent($name, '/')) {
- // Continue scanning into child folders
- array_push($files, $children);
- } else {
- // Check file extension for an equivalent item type to convert to
- $extension = strtolower(substr($itemSource, strrpos($itemSource, '.') + 1));
- foreach (self::$backends as $type => $backend) {
- if (isset($backend->dependsOn) && $backend->dependsOn == 'file' && isset($backend->supportedFileExtensions) && in_array($extension, $backend->supportedFileExtensions)) {
- $itemType = $type;
- break;
- }
- }
- // Pass on to put() to check if this item should be converted, the item won't be inserted into the database unless it can be converted
- self::put($itemType, $name, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder);
- }
- }
- return true;
- }
- return false;
- } else {
+// if ($itemType == 'folder') {
+// $parentFolder = self::put('folder', $itemSource, $shareType, $shareWith, $uidOwner, $permissions, true);
+// if ($parentFolder && $files = \OC\Files\Filesystem::getDirectoryContent($itemSource)) {
+// for ($i = 0; $i < count($files); $i++) {
+// $name = substr($files[$i]['name'], strpos($files[$i]['name'], $itemSource) - strlen($itemSource));
+// if ($files[$i]['mimetype'] == 'httpd/unix-directory'
+// && $children = \OC\Files\Filesystem::getDirectoryContent($name, '/')
+// ) {
+// // Continue scanning into child folders
+// array_push($files, $children);
+// } else {
+// // Check file extension for an equivalent item type to convert to
+// $extension = strtolower(substr($itemSource, strrpos($itemSource, '.') + 1));
+// foreach (self::$backends as $type => $backend) {
+// if (isset($backend->dependsOn) && $backend->dependsOn == 'file' && isset($backend->supportedFileExtensions) && in_array($extension, $backend->supportedFileExtensions)) {
+// $itemType = $type;
+// break;
+// }
+// }
+// // Pass on to put() to check if this item should be converted, the item won't be inserted into the database unless it can be converted
+// self::put($itemType, $name, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder);
+// }
+// }
+// return true;
+// }
+// return false;
+// } else {
// Put the item into the database
return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions);
- }
+// }
}
/**
@@ -340,6 +342,13 @@ class Share {
*/
public static function unshare($itemType, $itemSource, $shareType, $shareWith) {
if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1)) {
+ // Pass all the vars we have for now, they may be useful
+ \OC_Hook::emit('OCP\Share', 'pre_unshare', array(
+ 'itemType' => $itemType,
+ 'itemSource' => $itemSource,
+ 'shareType' => $shareType,
+ 'shareWith' => $shareWith,
+ ));
self::delete($item['id']);
return true;
}
@@ -354,6 +363,12 @@ class Share {
*/
public static function unshareAll($itemType, $itemSource) {
if ($shares = self::getItemShared($itemType, $itemSource)) {
+ // Pass all the vars we have for now, they may be useful
+ \OC_Hook::emit('OCP\Share', 'pre_unshareAll', array(
+ 'itemType' => $itemType,
+ 'itemSource' => $itemSource,
+ 'shares' => $shares
+ ));
foreach ($shares as $share) {
self::delete($share['id']);
}
@@ -514,7 +529,8 @@ class Share {
$collectionTypes[] = $type;
}
}
- if (!self::getBackend($itemType) instanceof Share_Backend_Collection) {
+ // TODO Add option for collections to be collection of themselves, only 'folder' does it now...
+ if (!self::getBackend($itemType) instanceof Share_Backend_Collection || $itemType != 'folder') {
unset($collectionTypes[0]);
}
// Return array if collections were found or the item type is a collection itself - collections can be inside collections
@@ -551,8 +567,8 @@ class Share {
$backend = self::getBackend($itemType);
// Get filesystem root to add it to the file target and remove from the file source, match file_source with the file cache
if ($itemType == 'file' || $itemType == 'folder') {
- $root = \OC_Filesystem::getRoot();
- $where = 'INNER JOIN `*PREFIX*fscache` ON `file_source` = `*PREFIX*fscache`.`id`';
+ $root = \OC\Files\Filesystem::getRoot();
+ $where = 'INNER JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid`';
if (!isset($item)) {
$where .= ' WHERE `file_target` IS NOT NULL';
}
@@ -569,7 +585,7 @@ class Share {
$itemTypes = $collectionTypes;
}
$placeholders = join(',', array_fill(0, count($itemTypes), '?'));
- $where .= ' WHERE `item_type` IN ('.$placeholders.'))';
+ $where = ' WHERE `item_type` IN ('.$placeholders.'))';
$queryArgs = $itemTypes;
} else {
$where = ' WHERE `item_type` = ?';
@@ -638,7 +654,7 @@ class Share {
} else {
if ($itemType == 'file' || $itemType == 'folder') {
$where .= ' `file_target` = ?';
- $item = \OC_Filesystem::normalizePath($item);
+ $item = \OC\Files\Filesystem::normalizePath($item);
} else {
$where .= ' `item_target` = ?';
}
@@ -681,8 +697,14 @@ class Share {
}
} else {
if ($fileDependent) {
- if (($itemType == 'file' || $itemType == 'folder') && $format == \OC_Share_Backend_File::FORMAT_FILE_APP || $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT) {
- $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `uid_owner`, `share_type`, `share_with`, `file_source`, `path`, `file_target`, `permissions`, `expiration`, `name`, `ctime`, `mtime`, `mimetype`, `size`, `encrypted`, `versioned`, `writable`';
+ if (($itemType == 'file' || $itemType == 'folder')
+ && $format == \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS
+ || $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT
+ ) {
+ $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `uid_owner`, '
+ .'`share_type`, `share_with`, `file_source`, `path`, `file_target`, '
+ .'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
+ .'`name`, `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`';
} else {
$select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`, `token`';
}
@@ -699,6 +721,7 @@ class Share {
}
$items = array();
$targets = array();
+ $switchedItems = array();
while ($row = $result->fetchRow()) {
// Filter out duplicate group shares for users with unique targets
if ($row['share_type'] == self::$shareTypeGroupUserUnique && isset($items[$row['parent']])) {
@@ -723,6 +746,7 @@ class Share {
// Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing
if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE && (int)$row['permissions'] & PERMISSION_SHARE) {
$items[$row['id']] = $items[$id];
+ $switchedItems[$id] = $row['id'];
unset($items[$id]);
$id = $row['id'];
}
@@ -739,7 +763,8 @@ class Share {
if (isset($row['parent'])) {
$row['path'] = '/Shared/'.basename($row['path']);
} else {
- $row['path'] = substr($row['path'], $root);
+ // Strip 'files' from path
+ $row['path'] = substr($row['path'], 5);
}
}
if (isset($row['expiration'])) {
@@ -749,13 +774,22 @@ class Share {
continue;
}
}
+
+ // Add display names to result
+ if ( isset($row['share_with']) && $row['share_with'] != '') {
+ $row['share_with_displayname'] = \OCP\User::getDisplayName($row['share_with']);
+ }
+ if ( isset($row['uid_owner']) && $row['uid_owner'] != '') {
+ $row['displayname_owner'] = \OCP\User::getDisplayName($row['uid_owner']);
+ }
+
$items[$row['id']] = $row;
}
if (!empty($items)) {
$collectionItems = array();
foreach ($items as &$row) {
// Return only the item instead of a 2-dimensional array
- if ($limit == 1 && $row['item_type'] == $itemType && $row[$column] == $item) {
+ if ($limit == 1 && $row[$column] == $item && ($row['item_type'] == $itemType || $itemType == 'file')) {
if ($format == self::FORMAT_NONE) {
return $row;
} else {
@@ -788,9 +822,10 @@ class Share {
if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') {
$childItem['file_source'] = $child['source'];
} else {
- $childItem['file_source'] = \OC_FileCache::getId($child['file_path']);
+ $meta = \OC\Files\Filesystem::getFileInfo($child['file_path']);
+ $childItem['file_source'] = $meta['fileid'];
}
- $childItem['file_target'] = \OC_Filesystem::normalizePath($child['file_path']);
+ $childItem['file_target'] = \OC\Files\Filesystem::normalizePath($child['file_path']);
}
if (isset($item)) {
if ($childItem[$column] == $item) {
@@ -815,12 +850,19 @@ class Share {
}
}
// Remove collection item
- unset($items[$row['id']]);
+ $toRemove = $row['id'];
+ if (array_key_exists($toRemove, $switchedItems)) {
+ $toRemove = $switchedItems[$toRemove];
+ }
+ unset($items[$toRemove]);
}
}
if (!empty($collectionItems)) {
$items = array_merge($items, $collectionItems);
}
+ if (empty($items) && $limit == 1) {
+ return false;
+ }
if ($format == self::FORMAT_NONE) {
return $items;
} else if ($format == self::FORMAT_STATUSES) {
@@ -901,7 +943,8 @@ class Share {
if ($itemType == 'file' || $itemType == 'folder') {
$fileSource = $itemSource;
} else {
- $fileSource = \OC_FileCache::getId($filePath);
+ $meta = \OC\Files\Filesystem::getFileInfo($filePath);
+ $fileSource = $meta['fileid'];
}
if ($fileSource == -1) {
$message = 'Sharing '.$itemSource.' failed, because the file could not be found in the file cache';
@@ -1085,7 +1128,8 @@ class Share {
}
if ($item['uid_owner'] == $uidOwner) {
if ($itemType == 'file' || $itemType == 'folder') {
- if ($item['file_source'] == \OC_FileCache::getId($itemSource)) {
+ $meta = \OC\Files\Filesystem::getFileInfo($itemSource);
+ if ($item['file_source'] == $meta['fileid']) {
return $target;
}
} else if ($item['item_source'] == $itemSource) {
diff --git a/lib/public/user.php b/lib/public/user.php
index 9e50115ab70..de52055a4c5 100644
--- a/lib/public/user.php
+++ b/lib/public/user.php
@@ -51,7 +51,25 @@ class User {
public static function getUsers($search = '', $limit = null, $offset = null) {
return \OC_USER::getUsers();
}
-
+
+ /**
+ * @brief get the user display name of the user currently logged in.
+ * @return string display name
+ */
+ public static function getDisplayName($user=null) {
+ return \OC_USER::getDisplayName($user);
+ }
+
+ /**
+ * @brief Get a list of all display names
+ * @returns array with all display names (value) and the correspondig uids (key)
+ *
+ * Get a list of all display names and user ids.
+ */
+ public static function getDisplayNames($search = '', $limit = null, $offset = null) {
+ return \OC_USER::getDisplayNames($search, $limit, $offset);
+ }
+
/**
* @brief Check if the user is logged in
* @returns true/false
@@ -65,7 +83,7 @@ class User {
/**
* @brief check if a user exists
* @param string $uid the username
- * @param string $excludingBackend (default none)
+ * @param string $excludingBackend (default none)
* @return boolean
*/
public static function userExists( $uid, $excludingBackend = null ) {
@@ -73,12 +91,10 @@ class User {
}
/**
* @brief Loggs the user out including all the session data
- * @returns true
- *
* Logout, destroys session
*/
public static function logout() {
- return \OC_USER::logout();
+ \OC_USER::logout();
}
/**
diff --git a/lib/public/util.php b/lib/public/util.php
index df09ea81ae1..5f6ede4460e 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -59,9 +59,9 @@ class Util {
* @param string $fromname
* @param bool $html
*/
- public static function sendMail( $toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname, $html=0, $altbody='', $ccaddress='', $ccname='', $bcc='') {
+ public static function sendMail( $toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname, $html = 0, $altbody = '', $ccaddress = '', $ccname = '', $bcc = '') {
// call the internal mail class
- \OC_MAIL::send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname, $html = 0, $altbody = '', $ccaddress = '', $ccname = '', $bcc = '');
+ \OC_MAIL::send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname, $html, $altbody, $ccaddress, $ccname, $bcc);
}
/**
@@ -148,6 +148,20 @@ class Util {
}
/**
+ * @brief Creates an url using a defined route
+ * @param $route
+ * @param array $parameters
+ * @return
+ * @internal param array $args with param=>value, will be appended to the returned url
+ * @returns the url
+ *
+ * Returns a url to the given app and file.
+ */
+ public static function linkToRoute( $route, $parameters = array() ) {
+ return \OC_Helper::linkToRoute($route, $parameters);
+ }
+
+ /**
* @brief Creates an url
* @param string $app app
* @param string $file file
@@ -203,7 +217,7 @@ class Util {
$host_name = self::getServerHostName();
// handle localhost installations
if ($host_name === 'localhost') {
- $host_name = "example.com";
+ $host_name = "example.com";
}
return $user_part.'@'.$host_name;
}
@@ -219,6 +233,28 @@ class Util {
}
/**
+ * @brief Returns the request uri
+ * @returns the request uri
+ *
+ * Returns the request uri, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function getRequestUri() {
+ return(\OC_Request::requestUri());
+ }
+
+ /**
+ * @brief Returns the script name
+ * @returns the script name
+ *
+ * Returns the script name, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function getScriptName() {
+ return(\OC_Request::scriptName());
+ }
+
+ /**
* @brief Creates path to an image
* @param string $app app
* @param string $image image name
@@ -298,7 +334,7 @@ class Util {
* Todo: Write howto
*/
public static function callCheck() {
- return(\OC_Util::callCheck());
+ \OC_Util::callCheck();
}
/**
@@ -367,4 +403,14 @@ class Util {
public static function recursiveArraySearch($haystack, $needle, $index = null) {
return(\OC_Helper::recursiveArraySearch($haystack, $needle, $index));
}
+
+ /**
+ * @brief calculates the maximum upload size respecting system settings, free space and user quota
+ *
+ * @param $dir the current folder where the user currently operates
+ * @return number of bytes representing
+ */
+ public static function maxUploadFilesize($dir) {
+ return \OC_Helper::maxUploadFilesize($dir);
+ }
}
diff --git a/lib/request.php b/lib/request.php
index 99a77e1b59e..3c668b02c5f 100755
--- a/lib/request.php
+++ b/lib/request.php
@@ -8,6 +8,15 @@
class OC_Request {
/**
+ * @brief Check overwrite condition
+ * @returns true/false
+ */
+ private static function isOverwriteCondition() {
+ $regex = '/' . OC_Config::getValue('overwritecondaddr', '') . '/';
+ return $regex === '//' or preg_match($regex, $_SERVER['REMOTE_ADDR']) === 1;
+ }
+
+ /**
* @brief Returns the server host
* @returns the server host
*
@@ -18,8 +27,8 @@ class OC_Request {
if(OC::$CLI) {
return 'localhost';
}
- if(OC_Config::getValue('overwritehost', '')<>'') {
- return OC_Config::getValue('overwritehost');
+ if(OC_Config::getValue('overwritehost', '')<>'' and self::isOverwriteCondition()) {
+ return OC_Config::getValue('overwritehost');
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
if (strpos($_SERVER['HTTP_X_FORWARDED_HOST'], ",") !== false) {
@@ -43,8 +52,8 @@ class OC_Request {
* Returns the server protocol. It respects reverse proxy servers and load balancers
*/
public static function serverProtocol() {
- if(OC_Config::getValue('overwriteprotocol', '')<>'') {
- return OC_Config::getValue('overwriteprotocol');
+ if(OC_Config::getValue('overwriteprotocol', '')<>'' and self::isOverwriteCondition()) {
+ return OC_Config::getValue('overwriteprotocol');
}
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
$proto = strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']);
@@ -59,6 +68,38 @@ class OC_Request {
}
/**
+ * @brief Returns the request uri
+ * @returns the request uri
+ *
+ * Returns the request uri, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function requestUri() {
+ $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
+ if (OC_Config::getValue('overwritewebroot', '') <> '' and self::isOverwriteCondition()) {
+ $uri = self::scriptName() . substr($uri, strlen($_SERVER['SCRIPT_NAME']));
+ }
+ return $uri;
+ }
+
+ /**
+ * @brief Returns the script name
+ * @returns the script name
+ *
+ * Returns the script name, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function scriptName() {
+ $name = $_SERVER['SCRIPT_NAME'];
+ if (OC_Config::getValue('overwritewebroot', '') <> '' and self::isOverwriteCondition()) {
+ $serverroot = str_replace("\\", '/', substr(__DIR__, 0, -4));
+ $suburi = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen($serverroot)));
+ $name = OC_Config::getValue('overwritewebroot', '') . $suburi;
+ }
+ return $name;
+ }
+
+ /**
* @brief get Path info from request
* @returns string Path info or false when not found
*/
@@ -108,4 +149,16 @@ class OC_Request {
return 'gzip';
return false;
}
+
+ /**
+ * @brief Check if the requester sent along an mtime
+ * @returns false or an mtime
+ */
+ static public function hasModificationTime () {
+ if (isset($_SERVER['HTTP_X_OC_MTIME'])) {
+ return $_SERVER['HTTP_X_OC_MTIME'];
+ } else {
+ return false;
+ }
+ }
}
diff --git a/lib/router.php b/lib/router.php
index 27e14c38abf..dbaca9e0d5d 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -23,7 +23,11 @@ class OC_Router {
public function __construct() {
$baseUrl = OC_Helper::linkTo('', 'index.php');
- $method = $_SERVER['REQUEST_METHOD'];
+ if ( !OC::$CLI) {
+ $method = $_SERVER['REQUEST_METHOD'];
+ }else{
+ $method = 'GET';
+ }
$host = OC_Request::serverHost();
$schema = OC_Request::serverProtocol();
$this->context = new RequestContext($baseUrl, $method, $host, $schema);
@@ -49,6 +53,7 @@ class OC_Router {
$files = $this->getRoutingFiles();
$files[] = 'settings/routes.php';
$files[] = 'core/routes.php';
+ $files[] = 'ocs/routes.php';
$this->cache_key = OC_Cache::generateCacheKeyFromFiles($files);
}
return $this->cache_key;
@@ -58,23 +63,6 @@ class OC_Router {
* loads the api routes
*/
public function loadRoutes() {
-
- // TODO cache
- $this->root = $this->getCollection('root');
- foreach(OC_APP::getEnabledApps() as $app){
- $file = OC_App::getAppPath($app).'/appinfo/routes.php';
- if(file_exists($file)){
- $this->useCollection($app);
- require_once($file);
- $collection = $this->getCollection($app);
- $this->root->addCollection($collection, '/apps/'.$app);
- }
- }
- // include ocs routes
- require_once(OC::$SERVERROOT.'/ocs/routes.php');
- $collection = $this->getCollection('ocs');
- $this->root->addCollection($collection, '/ocs');
-
foreach($this->getRoutingFiles() as $app => $file) {
$this->useCollection($app);
require_once $file;
@@ -85,6 +73,10 @@ class OC_Router {
require_once 'settings/routes.php';
require_once 'core/routes.php';
+ // include ocs routes
+ require_once 'ocs/routes.php';
+ $collection = $this->getCollection('ocs');
+ $this->root->addCollection($collection, '/ocs');
}
protected function getCollection($name) {
diff --git a/lib/search.php b/lib/search.php
index 3c3378ad13c..e5a65f7157d 100644
--- a/lib/search.php
+++ b/lib/search.php
@@ -57,6 +57,22 @@ class OC_Search{
}
return $results;
}
+
+ /**
+ * remove an existing search provider
+ * @param string $provider class name of a OC_Search_Provider
+ */
+ public static function removeProvider($provider) {
+ self::$registeredProviders = array_filter(
+ self::$registeredProviders,
+ function ($element) use ($provider) {
+ return ($element['class'] != $provider);
+ }
+ );
+ // force regeneration of providers on next search
+ self::$providers=array();
+ }
+
/**
* create instances of all the registered search providers
diff --git a/lib/search/provider/file.php b/lib/search/provider/file.php
index ea536ef77de..4d88c2a87f1 100644
--- a/lib/search/provider/file.php
+++ b/lib/search/provider/file.php
@@ -2,7 +2,7 @@
class OC_Search_Provider_File extends OC_Search_Provider{
function search($query) {
- $files=OC_FileCache::search($query, true);
+ $files=\OC\Files\Filesystem::search($query, true);
$results=array();
$l=OC_L10N::get('lib');
foreach($files as $fileData) {
diff --git a/lib/setup.php b/lib/setup.php
index fdd10be6824..cfaf7288663 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -1,40 +1,65 @@
<?php
+class DatabaseSetupException extends Exception
+{
+ private $hint;
+
+ public function __construct($message, $hint, $code = 0, Exception $previous = null) {
+ $this->hint = $hint;
+ parent::__construct($message, $code, $previous);
+ }
+
+ public function __toString() {
+ return __CLASS__ . ": [{$this->code}]: {$this->message} ({$this->hint})\n";
+ }
+
+ public function getHint() {
+ return $this->hint;
+ }
+}
+
class OC_Setup {
+
+ public static function getTrans(){
+ return OC_L10N::get('lib');
+ }
+
public static function install($options) {
+ $l = self::getTrans();
+
$error = array();
$dbtype = $options['dbtype'];
if(empty($options['adminlogin'])) {
- $error[] = 'Set an admin username.';
+ $error[] = $l->t('Set an admin username.');
}
if(empty($options['adminpass'])) {
- $error[] = 'Set an admin password.';
+ $error[] = $l->t('Set an admin password.');
}
if(empty($options['directory'])) {
- $error[] = 'Specify a data folder.';
+ $error[] = $l->t('Specify a data folder.');
}
if($dbtype=='mysql' or $dbtype == 'pgsql' or $dbtype == 'oci') { //mysql and postgresql needs more config options
if($dbtype=='mysql')
$dbprettyname = 'MySQL';
else if($dbtype=='pgsql')
- $dbprettyname = 'PostgreSQL';
+ $dbprettyname = 'PostgreSQL';
else
- $dbprettyname = 'Oracle';
+ $dbprettyname = 'Oracle';
if(empty($options['dbuser'])) {
- $error[] = "$dbprettyname enter the database username.";
+ $error[] = $l->t("%s enter the database username.", array($dbprettyname));
}
if(empty($options['dbname'])) {
- $error[] = "$dbprettyname enter the database name.";
+ $error[] = $l->t("%s enter the database name.", array($dbprettyname));
}
if(substr_count($options['dbname'], '.') >= 1) {
- $error[] = "$dbprettyname you may not use dots in the database name";
+ $error[] = $l->t("%s you may not use dots in the database name", array($dbprettyname));
}
if($dbtype != 'oci' && empty($options['dbhost'])) {
- $error[] = "$dbprettyname set the database host.";
+ $error[] = $l->t("%s set the database host.", array($dbprettyname));
}
}
@@ -69,10 +94,16 @@ class OC_Setup {
try {
self::setupMySQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username);
+ } catch (DatabaseSetupException $e) {
+ $error[] = array(
+ 'error' => $e->getMessage(),
+ 'hint' => $e->getHint()
+ );
+ return($error);
} catch (Exception $e) {
$error[] = array(
- 'error' => 'MySQL username and/or password not valid',
- 'hint' => 'You need to enter either an existing account or the administrator.'
+ 'error' => $e->getMessage(),
+ 'hint' => ''
);
return($error);
}
@@ -92,8 +123,8 @@ class OC_Setup {
self::setupPostgreSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username);
} catch (Exception $e) {
$error[] = array(
- 'error' => 'PostgreSQL username and/or password not valid',
- 'hint' => 'You need to enter either an existing account or the administrator.'
+ 'error' => $l->t('PostgreSQL username and/or password not valid'),
+ 'hint' => $l->t('You need to enter either an existing account or the administrator.')
);
return $error;
}
@@ -115,8 +146,8 @@ class OC_Setup {
self::setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username);
} catch (Exception $e) {
$error[] = array(
- 'error' => 'Oracle username and/or password not valid',
- 'hint' => 'You need to enter either an existing account or the administrator.'
+ 'error' => $l->t('Oracle username and/or password not valid'),
+ 'hint' => $l->t('You need to enter either an existing account or the administrator.')
);
return $error;
}
@@ -141,7 +172,9 @@ class OC_Setup {
if(count($error) == 0) {
OC_Appconfig::setValue('core', 'installedat', microtime(true));
OC_Appconfig::setValue('core', 'lastupdatedat', microtime(true));
-
+ OC_AppConfig::setValue('core', 'remote_core.css', '/core/minimizer.php');
+ OC_AppConfig::setValue('core', 'remote_core.js', '/core/minimizer.php');
+
OC_Group::createGroup('admin');
OC_Group::addToGroup($username, 'admin');
OC_User::login($username, $password);
@@ -153,7 +186,7 @@ class OC_Setup {
if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
self::createHtaccess();
}
-
+
//and we are done
OC_Config::setValue('installed', true);
}
@@ -164,9 +197,11 @@ class OC_Setup {
private static function setupMySQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username) {
//check if the database user has admin right
+ $l = self::getTrans();
$connection = @mysql_connect($dbhost, $dbuser, $dbpass);
if(!$connection) {
- throw new Exception('MySQL username and/or password not valid');
+ throw new DatabaseSetupException($l->t('MySQL username and/or password not valid'),
+ $l->t('You need to enter either an existing account or the administrator.'));
}
$oldUser=OC_Config::getValue('dbuser', false);
@@ -213,11 +248,12 @@ class OC_Setup {
private static function createMySQLDatabase($name, $user, $connection) {
//we cant use OC_BD functions here because we need to connect as the administrative user.
+ $l = self::getTrans();
$query = "CREATE DATABASE IF NOT EXISTS `$name`";
$result = mysql_query($query, $connection);
if(!$result) {
- $entry='DB Error: "'.mysql_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(mysql_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
$query="GRANT ALL PRIVILEGES ON `$name` . * TO '$user'";
@@ -227,22 +263,32 @@ class OC_Setup {
private static function createDBUser($name, $password, $connection) {
// we need to create 2 accounts, one for global use and one for local user. if we don't specify the local one,
// the anonymous user would take precedence when there is one.
+ $l = self::getTrans();
$query = "CREATE USER '$name'@'localhost' IDENTIFIED BY '$password'";
$result = mysql_query($query, $connection);
+ if (!$result) {
+ throw new DatabaseSetupException($l->t("MySQL user '%s'@'localhost' exists already.",
+ array($name)), $l->t("Drop this user from MySQL", array($name)));
+ }
$query = "CREATE USER '$name'@'%' IDENTIFIED BY '$password'";
$result = mysql_query($query, $connection);
+ if (!$result) {
+ throw new DatabaseSetupException($l->t("MySQL user '%s'@'%%' already exists", array($name)),
+ $l->t("Drop this user from MySQL."));
+ }
}
private static function setupPostgreSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username) {
$e_host = addslashes($dbhost);
$e_user = addslashes($dbuser);
$e_password = addslashes($dbpass);
+ $l = self::getTrans();
//check if the database user has admin rights
$connection_string = "host='$e_host' dbname=postgres user='$e_user' password='$e_password'";
$connection = @pg_connect($connection_string);
if(!$connection) {
- throw new Exception('PostgreSQL username and/or password not valid');
+ throw new Exception($l->t('PostgreSQL username and/or password not valid'));
}
$e_user = pg_escape_string($dbuser);
//check for roles creation rights in postgresql
@@ -287,7 +333,7 @@ class OC_Setup {
$connection_string = "host='$e_host' dbname='$e_dbname' user='$e_user' password='$e_password'";
$connection = @pg_connect($connection_string);
if(!$connection) {
- throw new Exception('PostgreSQL username and/or password not valid');
+ throw new Exception($l->t('PostgreSQL username and/or password not valid'));
}
$query = "select count(*) FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1";
$result = pg_query($connection, $query);
@@ -300,14 +346,16 @@ class OC_Setup {
}
private static function pg_createDatabase($name, $user, $connection) {
+
//we cant use OC_BD functions here because we need to connect as the administrative user.
+ $l = self::getTrans();
$e_name = pg_escape_string($name);
$e_user = pg_escape_string($user);
$query = "select datname from pg_database where datname = '$e_name'";
$result = pg_query($connection, $query);
if(!$result) {
- $entry='DB Error: "'.pg_last_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
if(! pg_fetch_row($result)) {
@@ -315,8 +363,8 @@ class OC_Setup {
$query = "CREATE DATABASE \"$e_name\" OWNER \"$e_user\"";
$result = pg_query($connection, $query);
if(!$result) {
- $entry='DB Error: "'.pg_last_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
else {
@@ -327,13 +375,14 @@ class OC_Setup {
}
private static function pg_createDBUser($name, $password, $connection) {
+ $l = self::getTrans();
$e_name = pg_escape_string($name);
$e_password = pg_escape_string($password);
$query = "select * from pg_roles where rolname='$e_name';";
$result = pg_query($connection, $query);
if(!$result) {
- $entry='DB Error: "'.pg_last_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
@@ -342,8 +391,8 @@ class OC_Setup {
$query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_password';";
$result = pg_query($connection, $query);
if(!$result) {
- $entry='DB Error: "'.pg_last_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
}
@@ -351,14 +400,15 @@ class OC_Setup {
$query = "ALTER ROLE \"$e_name\" WITH PASSWORD '$e_password';";
$result = pg_query($connection, $query);
if(!$result) {
- $entry='DB Error: "'.pg_last_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
}
}
private static function setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username) {
+ $l = self::getTrans();
$e_host = addslashes($dbhost);
$e_dbname = addslashes($dbname);
//check if the database user has admin right
@@ -370,15 +420,15 @@ class OC_Setup {
$connection = @oci_connect($dbuser, $dbpass, $easy_connect_string);
if(!$connection) {
$e = oci_error();
- throw new Exception('Oracle username and/or password not valid');
+ throw new Exception($l->t('Oracle username and/or password not valid'));
}
//check for roles creation rights in oracle
$query="SELECT count(*) FROM user_role_privs, role_sys_privs WHERE user_role_privs.granted_role = role_sys_privs.role AND privilege = 'CREATE ROLE'";
$stmt = oci_parse($connection, $query);
if (!$stmt) {
- $entry='DB Error: "'.oci_last_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
$result = oci_execute($stmt);
@@ -436,15 +486,15 @@ class OC_Setup {
}
$connection = @oci_connect($dbuser, $dbpass, $easy_connect_string);
if(!$connection) {
- throw new Exception('Oracle username and/or password not valid');
+ throw new Exception($l->t('Oracle username and/or password not valid'));
}
$query = "SELECT count(*) FROM user_tables WHERE table_name = :un";
$stmt = oci_parse($connection, $query);
$un = $dbtableprefix.'users';
oci_bind_by_name($stmt, ':un', $un);
if (!$stmt) {
- $entry='DB Error: "'.oci_last_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
$result = oci_execute($stmt);
@@ -465,19 +515,19 @@ class OC_Setup {
* @param resource $connection
*/
private static function oci_createDBUser($name, $password, $tablespace, $connection) {
-
+ $l = self::getTrans();
$query = "SELECT * FROM all_users WHERE USERNAME = :un";
$stmt = oci_parse($connection, $query);
if (!$stmt) {
- $entry='DB Error: "'.oci_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
oci_bind_by_name($stmt, ':un', $name);
$result = oci_execute($stmt);
if(!$result) {
- $entry='DB Error: "'.oci_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
@@ -487,31 +537,32 @@ class OC_Setup {
$query = 'CREATE USER '.$name.' IDENTIFIED BY "'.$password.'" DEFAULT TABLESPACE '.$tablespace; //TODO set default tablespace
$stmt = oci_parse($connection, $query);
if (!$stmt) {
- $entry='DB Error: "'.oci_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
//oci_bind_by_name($stmt, ':un', $name);
$result = oci_execute($stmt);
if(!$result) {
- $entry='DB Error: "'.oci_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.', name:'.$name.', password:'.$password.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s", name: %s, password: %s',
+ array($query, $name, $password)) . '<br />';
echo($entry);
}
} else { // change password of the existing role
$query = "ALTER USER :un IDENTIFIED BY :pw";
$stmt = oci_parse($connection, $query);
if (!$stmt) {
- $entry='DB Error: "'.oci_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
oci_bind_by_name($stmt, ':un', $name);
oci_bind_by_name($stmt, ':pw', $password);
$result = oci_execute($stmt);
if(!$result) {
- $entry='DB Error: "'.oci_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
}
@@ -519,14 +570,15 @@ class OC_Setup {
$query = 'GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER, UNLIMITED TABLESPACE TO '.$name;
$stmt = oci_parse($connection, $query);
if (!$stmt) {
- $entry='DB Error: "'.oci_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
echo($entry);
}
$result = oci_execute($stmt);
if(!$result) {
- $entry='DB Error: "'.oci_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.', name:'.$name.', password:'.$password.'<br />';
+ $entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
+ $entry .= $l->t('Offending command was: "%s", name: %s, password: %s',
+ array($query, $name, $password)) . '<br />';
echo($entry);
}
}
@@ -578,4 +630,24 @@ class OC_Setup {
file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/.htaccess', $content);
file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/index.html', '');
}
+
+ /**
+ * @brief Post installation checks
+ */
+ public static function postSetupCheck($params) {
+ // setup was successful -> webdav testing now
+ $l = self::getTrans();
+ if (OC_Util::isWebDAVWorking()) {
+ header("Location: ".OC::$WEBROOT.'/');
+ } else {
+
+ $error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.');
+ $hint = $l->t('Please double check the <a href=\'%s\'>installation guides</a>.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html');
+
+ $tmpl = new OC_Template('', 'error', 'guest');
+ $tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false);
+ $tmpl->printPage();
+ exit();
+ }
+ }
}
diff --git a/lib/subadmin.php b/lib/subadmin.php
index 9e83e6da430..8cda7240ac9 100644
--- a/lib/subadmin.php
+++ b/lib/subadmin.php
@@ -122,6 +122,11 @@ class OC_SubAdmin{
* @return bool
*/
public static function isSubAdmin($uid) {
+ // Check if the user is already an admin
+ if(OC_Group::inGroup($uid, 'admin' )) {
+ return true;
+ }
+
$stmt = OC_DB::prepare('SELECT COUNT(*) AS `count` FROM `*PREFIX*group_admin` WHERE `uid` = ?');
$result = $stmt->execute(array($uid));
$result = $result->fetchRow();
@@ -141,7 +146,7 @@ class OC_SubAdmin{
if(!self::isSubAdmin($subadmin)) {
return false;
}
- if(OC_Group::inGroup($user, 'admin')) {
+ if(OC_User::isAdminUser($user)) {
return false;
}
$accessiblegroups = self::getSubAdminsGroups($subadmin);
diff --git a/lib/template.php b/lib/template.php
index 04667d73a2c..fb9f7ad62d9 100644
--- a/lib/template.php
+++ b/lib/template.php
@@ -85,15 +85,25 @@ function human_file_size( $bytes ) {
}
function simple_file_size($bytes) {
- $mbytes = round($bytes/(1024*1024), 1);
- if($bytes == 0) { return '0'; }
- else if($mbytes < 0.1) { return '&lt; 0.1'; }
- else if($mbytes > 1000) { return '&gt; 1000'; }
- else { return number_format($mbytes, 1); }
+ if ($bytes < 0) {
+ return '?';
+ }
+ $mbytes = round($bytes / (1024 * 1024), 1);
+ if ($bytes == 0) {
+ return '0';
+ }
+ if ($mbytes < 0.1) {
+ return '&lt; 0.1';
+ }
+ if ($mbytes > 1000) {
+ return '&gt; 1000';
+ } else {
+ return number_format($mbytes, 1);
+ }
}
function relative_modified_date($timestamp) {
- $l=OC_L10N::get('lib');
+ $l=OC_L10N::get('lib');
$timediff = time() - $timestamp;
$diffminutes = round($timediff/60);
$diffhours = round($diffminutes/60);
@@ -176,9 +186,15 @@ class OC_Template{
$this->l10n = OC_L10N::get($parts[0]);
// Some headers to enhance security
- header('X-Frame-Options: Sameorigin');
- header('X-XSS-Protection: 1; mode=block');
- header('X-Content-Type-Options: nosniff');
+ header('X-Frame-Options: Sameorigin'); // Disallow iFraming from other domains
+ header('X-XSS-Protection: 1; mode=block'); // Enforce browser based XSS filters
+ header('X-Content-Type-Options: nosniff'); // Disable sniffing the content type for IE
+
+ // Content Security Policy
+ // If you change the standard policy, please also change it in config.sample.php
+ $policy = OC_Config::getValue('custom_csp_policy', 'default-src \'self\'; script-src \'self\' \'unsafe-eval\'; style-src \'self\' \'unsafe-inline\'; frame-src *; img-src *; font-src \'self\' data:');
+ header('Content-Security-Policy:'.$policy); // Standard
+ header('X-WebKit-CSP:'.$policy); // Older webkit browsers
$this->findTemplate($name);
}
diff --git a/lib/templatelayout.php b/lib/templatelayout.php
index 4173e008ba7..345f540af04 100644
--- a/lib/templatelayout.php
+++ b/lib/templatelayout.php
@@ -19,6 +19,7 @@ class OC_TemplateLayout extends OC_Template {
}
// Add navigation entry
+ $this->assign( 'application', '', false );
$navigation = OC_App::getNavigation();
$this->assign( 'navigation', $navigation, false);
$this->assign( 'settingsnavigation', OC_App::getSettingsNavigation(), false);
@@ -28,26 +29,19 @@ class OC_TemplateLayout extends OC_Template {
break;
}
}
+ $user_displayname = OC_User::getDisplayName();
+ $this->assign( 'user_displayname', $user_displayname );
} else if ($renderas == 'guest') {
parent::__construct('core', 'layout.guest');
} else {
parent::__construct('core', 'layout.base');
}
-
- $apps_paths = array();
- foreach(OC_App::getEnabledApps() as $app) {
- $apps_paths[$app] = OC_App::getAppWebPath($app);
- }
- $this->assign( 'apps_paths', str_replace('\\/', '/', json_encode($apps_paths)), false ); // Ugly unescape slashes waiting for better solution
-
- if (OC_Config::getValue('installed', false) && !OC_AppConfig::getValue('core', 'remote_core.css', false)) {
- OC_AppConfig::setValue('core', 'remote_core.css', '/core/minimizer.php');
- OC_AppConfig::setValue('core', 'remote_core.js', '/core/minimizer.php');
- }
-
// Add the js files
$jsfiles = self::findJavascriptFiles(OC_Util::$scripts);
$this->assign('jsfiles', array(), false);
+ if (OC_Config::getValue('installed', false)) {
+ $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config'));
+ }
if (!empty(OC_Util::$core_scripts)) {
$this->append( 'jsfiles', OC_Helper::linkToRemoteBase('core.js', false));
}
diff --git a/lib/user.php b/lib/user.php
index 80f88ca7052..f58b6673f7f 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -251,6 +251,7 @@ class OC_User {
if($uid && $enabled) {
session_regenerate_id(true);
self::setUserId($uid);
+ self::setDisplayName($uid);
OC_Hook::emit( "OC_User", "post_login", array( "uid" => $uid, 'password'=>$password ));
return true;
}
@@ -260,17 +261,55 @@ class OC_User {
/**
* @brief Sets user id for session and triggers emit
- * @returns true
- *
*/
public static function setUserId($uid) {
$_SESSION['user_id'] = $uid;
- return true;
+ }
+
+ /**
+ * @brief Sets user display name for session
+ */
+ public static function setDisplayName($uid, $displayName = null) {
+ $result = false;
+ if ($displayName ) {
+ foreach(self::$_usedBackends as $backend) {
+ if($backend->implementsActions(OC_USER_BACKEND_SET_DISPLAYNAME)) {
+ if($backend->userExists($uid)) {
+ $result |= $backend->setDisplayName($uid, $displayName);
+ }
+ }
+ }
+ } else {
+ $displayName = self::determineDisplayName($uid);
+ $result = true;
+ }
+ if (OC_User::getUser() === $uid) {
+ $_SESSION['display_name'] = $displayName;
+ }
+ return $result;
+ }
+
+
+ /**
+ * @brief get display name
+ * @param $uid The username
+ * @returns string display name or uid if no display name is defined
+ *
+ */
+ private static function determineDisplayName( $uid ) {
+ foreach(self::$_usedBackends as $backend) {
+ if($backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
+ $result=$backend->getDisplayName( $uid );
+ if($result) {
+ return $result;
+ }
+ }
+ }
+ return $uid;
}
/**
* @brief Logs the current user out and kills all the session data
- * @returns true
*
* Logout, destroys session
*/
@@ -279,7 +318,6 @@ class OC_User {
session_unset();
session_destroy();
OC_User::unsetMagicInCookie();
- return true;
}
/**
@@ -300,6 +338,19 @@ class OC_User {
}
/**
+ * @brief Check if the user is an admin user
+ * @param $uid uid of the admin
+ * @returns bool
+ */
+ public static function isAdminUser($uid) {
+ if(OC_Group::inGroup($uid, 'admin' )) {
+ return true;
+ }
+ return false;
+ }
+
+
+ /**
* @brief get the user id of the user currently logged in.
* @return string uid or false
*/
@@ -313,6 +364,21 @@ class OC_User {
}
/**
+ * @brief get the display name of the user currently logged in.
+ * @return string uid or false
+ */
+ public static function getDisplayName($user=null) {
+ if ( $user ) {
+ return self::determineDisplayName($user);
+ } else if( isset($_SESSION['display_name']) AND $_SESSION['display_name'] ) {
+ return $_SESSION['display_name'];
+ }
+ else{
+ return false;
+ }
+ }
+
+ /**
* @brief Autogenerate a password
* @returns string
*
@@ -354,6 +420,44 @@ class OC_User {
}
/**
+ * @brief Check whether user can change his password
+ * @param $uid The username
+ * @returns true/false
+ *
+ * Check whether a specified user can change his password
+ */
+ public static function canUserChangePassword($uid) {
+ foreach(self::$_usedBackends as $backend) {
+ if($backend->implementsActions(OC_USER_BACKEND_SET_PASSWORD)) {
+ if($backend->userExists($uid)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief Check whether user can change his display name
+ * @param $uid The username
+ * @returns true/false
+ *
+ * Check whether a specified user can change his display name
+ */
+ public static function canUserChangeDisplayName($uid) {
+ if (OC_Config::getValue('allow_user_to_change_display_name', true)) {
+ foreach(self::$_usedBackends as $backend) {
+ if($backend->implementsActions(OC_USER_BACKEND_SET_DISPLAYNAME)) {
+ if($backend->userExists($uid)) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
* @brief Check if the password is correct
* @param $uid The username
* @param $password The password
@@ -375,15 +479,15 @@ class OC_User {
/**
* @brief Check if the password is correct
- * @param $uid The username
- * @param $password The password
+ * @param string $uid The username
+ * @param string $password The password
* @returns string
*
* returns the path to the users home directory
*/
public static function getHome($uid) {
foreach(self::$_usedBackends as $backend) {
- if($backend->implementsActions(OC_USER_BACKEND_GET_HOME)) {
+ if($backend->implementsActions(OC_USER_BACKEND_GET_HOME) && $backend->userExists($uid)) {
$result=$backend->getHome($uid);
if($result) {
return $result;
@@ -412,6 +516,24 @@ class OC_User {
}
/**
+ * @brief Get a list of all users display name
+ * @returns associative array with all display names (value) and corresponding uids (key)
+ *
+ * Get a list of all display names and user ids.
+ */
+ public static function getDisplayNames($search = '', $limit = null, $offset = null) {
+ $displayNames = array();
+ foreach (self::$_usedBackends as $backend) {
+ $backendDisplayNames = $backend->getDisplayNames($search, $limit, $offset);
+ if (is_array($backendDisplayNames)) {
+ $displayNames = array_merge($displayNames, $backendDisplayNames);
+ }
+ }
+ ksort($displayNames);
+ return $displayNames;
+ }
+
+ /**
* @brief check if a user exists
* @param string $uid the username
* @param string $excludingBackend (default none)
diff --git a/lib/user/backend.php b/lib/user/backend.php
index 2a95db93690..56fa3195978 100644
--- a/lib/user/backend.php
+++ b/lib/user/backend.php
@@ -35,6 +35,8 @@ define('OC_USER_BACKEND_CREATE_USER', 0x000001);
define('OC_USER_BACKEND_SET_PASSWORD', 0x000010);
define('OC_USER_BACKEND_CHECK_PASSWORD', 0x000100);
define('OC_USER_BACKEND_GET_HOME', 0x001000);
+define('OC_USER_BACKEND_GET_DISPLAYNAME', 0x010000);
+define('OC_USER_BACKEND_SET_DISPLAYNAME', 0x010000);
/**
@@ -50,6 +52,8 @@ abstract class OC_User_Backend implements OC_User_Interface {
OC_USER_BACKEND_SET_PASSWORD => 'setPassword',
OC_USER_BACKEND_CHECK_PASSWORD => 'checkPassword',
OC_USER_BACKEND_GET_HOME => 'getHome',
+ OC_USER_BACKEND_GET_DISPLAYNAME => 'getDisplayName',
+ OC_USER_BACKEND_SET_DISPLAYNAME => 'setDisplayName',
);
/**
@@ -120,4 +124,28 @@ abstract class OC_User_Backend implements OC_User_Interface {
public function getHome($uid) {
return false;
}
+
+ /**
+ * @brief get display name of the user
+ * @param $uid user ID of the user
+ * @return display name
+ */
+ public function getDisplayName($uid) {
+ return $uid;
+ }
+
+ /**
+ * @brief Get a list of all display names
+ * @returns array with all displayNames (value) and the correspondig uids (key)
+ *
+ * Get a list of all display names and user ids.
+ */
+ public function getDisplayNames($search = '', $limit = null, $offset = null) {
+ $displayNames = array();
+ $users = $this->getUsers($search, $limit, $offset);
+ foreach ( $users as $user) {
+ $displayNames[$user] = $user;
+ }
+ return $displayNames;
+ }
}
diff --git a/lib/user/database.php b/lib/user/database.php
index f33e338e2e4..8dfd9534a96 100644
--- a/lib/user/database.php
+++ b/lib/user/database.php
@@ -110,7 +110,72 @@ class OC_User_Database extends OC_User_Backend {
return false;
}
}
+
+ /**
+ * @brief Set display name
+ * @param $uid The username
+ * @param $displayName The new display name
+ * @returns true/false
+ *
+ * Change the display name of a user
+ */
+ public function setDisplayName( $uid, $displayName ) {
+ if( $this->userExists($uid) ) {
+ $query = OC_DB::prepare( 'UPDATE `*PREFIX*users` SET `displayname` = ? WHERE `uid` = ?' );
+ $query->execute( array( $displayName, $uid ));
+ return true;
+ }else{
+ return false;
+ }
+ }
+ /**
+ * @brief get display name of the user
+ * @param $uid user ID of the user
+ * @return display name
+ */
+ public function getDisplayName($uid) {
+ if( $this->userExists($uid) ) {
+ $query = OC_DB::prepare( 'SELECT displayname FROM `*PREFIX*users` WHERE `uid` = ?' );
+ $result = $query->execute( array( $uid ))->fetchAll();
+ $displayName = trim($result[0]['displayname'], ' ');
+ if ( !empty($displayName) ) {
+ return $displayName;
+ } else {
+ return $uid;
+ }
+ }
+ }
+
+ /**
+ * @brief Get a list of all display names
+ * @returns array with all displayNames (value) and the correspondig uids (key)
+ *
+ * Get a list of all display names and user ids.
+ */
+ public function getDisplayNames($search = '', $limit = null, $offset = null) {
+ $displayNames = array();
+ $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset);
+ $result = $query->execute(array($search.'%'));
+ $users = array();
+ while ($row = $result->fetchRow()) {
+ $displayNames[$row['uid']] = $row['displayname'];
+ }
+
+ // let's see if we can also find some users who don't have a display name yet
+ $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset);
+ $result = $query->execute(array($search.'%'));
+ while ($row = $result->fetchRow()) {
+ $displayName = trim($row['displayname'], ' ');
+ if ( empty($displayName) ) {
+ $displayNames[$row['uid']] = $row['uid'];
+ }
+ }
+
+
+ return $displayNames;
+ }
+
/**
* @brief Check if the password is correct
* @param $uid The username
diff --git a/lib/user/interface.php b/lib/user/interface.php
index 3d9f4691f24..b4667633b50 100644
--- a/lib/user/interface.php
+++ b/lib/user/interface.php
@@ -57,4 +57,19 @@ interface OC_User_Interface {
*/
public function userExists($uid);
+ /**
+ * @brief get display name of the user
+ * @param $uid user ID of the user
+ * @return display name
+ */
+ public function getDisplayName($uid);
+
+ /**
+ * @brief Get a list of all display names
+ * @returns array with all displayNames (value) and the correspondig uids (key)
+ *
+ * Get a list of all display names and user ids.
+ */
+ public function getDisplayNames($search = '', $limit = null, $offset = null);
+
} \ No newline at end of file
diff --git a/lib/util.php b/lib/util.php
index 7b1de094ead..81ad2df3ac6 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -39,7 +39,7 @@ class OC_Util {
$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
//first set up the local "root" storage
if(!self::$rootMounted) {
- OC_Filesystem::mount('OC_Filestorage_Local', array('datadir'=>$CONFIG_DATADIRECTORY), '/');
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Local', array('datadir'=>$CONFIG_DATADIRECTORY), '/');
self::$rootMounted=true;
}
@@ -51,51 +51,30 @@ class OC_Util {
mkdir( $userdirectory, 0755, true );
}
//jail the user into his "home" directory
- OC_Filesystem::mount('OC_Filestorage_Local', array('datadir' => $user_root), $user);
- OC_Filesystem::init($user_dir, $user);
+ \OC\Files\Filesystem::init($user, $user_dir);
+
$quotaProxy=new OC_FileProxy_Quota();
$fileOperationProxy = new OC_FileProxy_FileOperations();
OC_FileProxy::register($quotaProxy);
OC_FileProxy::register($fileOperationProxy);
- // Load personal mount config
- self::loadUserMountPoints($user);
+
OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $user_dir));
}
+ return true;
}
public static function tearDownFS() {
- OC_Filesystem::tearDown();
+ \OC\Files\Filesystem::tearDown();
self::$fsSetup=false;
}
- public static function loadUserMountPoints($user) {
- $user_dir = '/'.$user.'/files';
- $user_root = OC_User::getHome($user);
- $userdirectory = $user_root . '/files';
- if (is_file($user_root.'/mount.php')) {
- $mountConfig = include $user_root.'/mount.php';
- if (isset($mountConfig['user'][$user])) {
- foreach ($mountConfig['user'][$user] as $mountPoint => $options) {
- OC_Filesystem::mount($options['class'], $options['options'], $mountPoint);
- }
- }
-
- $mtime=filemtime($user_root.'/mount.php');
- $previousMTime=OC_Preferences::getValue($user, 'files', 'mountconfigmtime', 0);
- if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated
- OC_FileCache::triggerUpdate($user);
- OC_Preferences::setValue($user, 'files', 'mountconfigmtime', $mtime);
- }
- }
- }
-
/**
* get the current installed version of ownCloud
* @return array
*/
public static function getVersion() {
// hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user
- return array(4, 91, 02);
+ return array(4, 91, 10);
}
/**
@@ -157,14 +136,14 @@ class OC_Util {
* @param string $text the text content for the element
*/
public static function addHeader( $tag, $attributes, $text='') {
- self::$headers[]=array('tag'=>$tag,'attributes'=>$attributes, 'text'=>$text);
+ self::$headers[] = array('tag'=>$tag, 'attributes'=>$attributes, 'text'=>$text);
}
/**
* formats a timestamp in the "right" way
*
* @param int timestamp $timestamp
- * @param bool dateOnly option to ommit time from the result
+ * @param bool dateOnly option to omit time from the result
*/
public static function formatDate( $timestamp, $dateOnly=false) {
if(isset($_SESSION['timezone'])) {//adjust to clients timezone if we know it
@@ -207,45 +186,20 @@ class OC_Util {
in owncloud or disabling the appstore in the config file.");
}
}
-
$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
- //check for correct file permissions
- if(!stristr(PHP_OS, 'WIN')) {
- $permissionsModHint="Please change the permissions to 0770 so that the directory cannot be listed by other users.";
- $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY)), -3);
- if(substr($prems, -1)!='0') {
- OC_Helper::chmodr($CONFIG_DATADIRECTORY, 0770);
- clearstatcache();
- $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY)), -3);
- if(substr($prems, 2, 1)!='0') {
- $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') is readable for other users<br/>', 'hint'=>$permissionsModHint);
- }
- }
- if( OC_Config::getValue( "enablebackup", false )) {
- $CONFIG_BACKUPDIRECTORY = OC_Config::getValue( "backupdirectory", OC::$SERVERROOT."/backup" );
- $prems=substr(decoct(@fileperms($CONFIG_BACKUPDIRECTORY)), -3);
- if(substr($prems, -1)!='0') {
- OC_Helper::chmodr($CONFIG_BACKUPDIRECTORY, 0770);
- clearstatcache();
- $prems=substr(decoct(@fileperms($CONFIG_BACKUPDIRECTORY)), -3);
- if(substr($prems, 2, 1)!='0') {
- $errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable for other users<br/>', 'hint'=>$permissionsModHint);
- }
- }
- }
- }else{
- //TODO: permissions checks for windows hosts
- }
// Create root dir.
if(!is_dir($CONFIG_DATADIRECTORY)) {
$success=@mkdir($CONFIG_DATADIRECTORY);
- if(!$success) {
+ if ($success) {
+ $errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
+ } else {
$errors[]=array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY.")", 'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '".OC::$SERVERROOT."' (in a terminal, use the command 'chown -R www-data:www-data /path/to/your/owncloud/install/data' ");
}
} else if(!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) {
$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') not writable by ownCloud<br/>', 'hint'=>$permissionsHint);
+ } else {
+ $errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
}
-
// check if all required php modules are present
if(!class_exists('ZipArchive')) {
$errors[]=array('error'=>'PHP module zip not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
@@ -289,6 +243,17 @@ class OC_Util {
$web_server_restart= false;
}
+ $handler = ini_get("session.save_handler");
+ if($handler == "files") {
+ $tmpDir = session_save_path();
+ if($tmpDir != ""){
+ if(!@is_writable($tmpDir)){
+ $errors[]=array('error' => 'The temporary folder used by PHP to save the session data is either incorrect or not writable! Please check : '.session_save_path().'<br/>',
+ 'hint'=>'Please ask your server administrator to grant write access or define another temporary folder.');
+ }
+ }
+ }
+
if($web_server_restart) {
$errors[]=array('error'=>'PHP modules have been installed, but they are still listed as missing?<br/>', 'hint'=>'Please ask your server administrator to restart the web server.');
}
@@ -296,6 +261,29 @@ class OC_Util {
return $errors;
}
+ /**
+ * Check for correct file permissions of data directory
+ * @return array arrays with error messages and hints
+ */
+ public static function checkDataDirectoryPermissions($dataDirectory) {
+ $errors = array();
+ if (stristr(PHP_OS, 'WIN')) {
+ //TODO: permissions checks for windows hosts
+ } else {
+ $permissionsModHint = 'Please change the permissions to 0770 so that the directory cannot be listed by other users.';
+ $prems = substr(decoct(@fileperms($dataDirectory)), -3);
+ if (substr($prems, -1) != '0') {
+ OC_Helper::chmodr($dataDirectory, 0770);
+ clearstatcache();
+ $prems = substr(decoct(@fileperms($dataDirectory)), -3);
+ if (substr($prems, 2, 1) != '0') {
+ $errors[] = array('error' => 'Data directory ('.$dataDirectory.') is readable for other users<br/>', 'hint' => $permissionsModHint);
+ }
+ }
+ }
+ return $errors;
+ }
+
public static function displayLoginPage($errors = array()) {
$parameters = array();
foreach( $errors as $key => $value ) {
@@ -312,6 +300,8 @@ class OC_Util {
$redirect_url = OC_Util::sanitizeHTML($_REQUEST['redirect_url']);
$parameters['redirect_url'] = urlencode($redirect_url);
}
+
+ $parameters['alt_login'] = OC_App::getAlternativeLogIns();
OC_Template::printGuestPage("", "login", $parameters);
}
@@ -333,7 +323,7 @@ class OC_Util {
public static function checkLoggedIn() {
// Check if we are a user
if( !OC_User::isLoggedIn()) {
- header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => $_SERVER["REQUEST_URI"])));
+ header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => OC_Request::requestUri())));
exit();
}
}
@@ -342,10 +332,7 @@ class OC_Util {
* Check if the user is a admin, redirects to home if not
*/
public static function checkAdminUser() {
- // Check if we are a user
- self::checkLoggedIn();
- self::verifyUser();
- if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )) {
+ if( !OC_User::isAdminUser(OC_User::getUser())) {
header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php' ));
exit();
}
@@ -356,12 +343,6 @@ class OC_Util {
* @return array $groups where the current user is subadmin
*/
public static function checkSubAdminUser() {
- // Check if we are a user
- self::checkLoggedIn();
- self::verifyUser();
- if(OC_Group::inGroup(OC_User::getUser(), 'admin')) {
- return true;
- }
if(!OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php' ));
exit();
@@ -370,40 +351,6 @@ class OC_Util {
}
/**
- * Check if the user verified the login with his password in the last 15 minutes
- * If not, the user will be shown a password verification page
- */
- public static function verifyUser() {
- if(OC_Config::getValue('enhancedauth', false) === true) {
- // Check password to set session
- if(isset($_POST['password'])) {
- if (OC_User::login(OC_User::getUser(), $_POST["password"] ) === true) {
- $_SESSION['verifiedLogin']=time() + OC_Config::getValue('enhancedauthtime', 15 * 60);
- }
- }
-
- // Check if the user verified his password
- if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) {
- OC_Template::printGuestPage("", "verify", array('username' => OC_User::getUser()));
- exit();
- }
- }
- }
-
- /**
- * Check if the user verified the login with his password
- * @return bool
- */
- public static function isUserVerified() {
- if(OC_Config::getValue('enhancedauth', false) === true) {
- if(!isset($_SESSION['verifiedLogin']) OR $_SESSION['verifiedLogin'] < time()) {
- return false;
- }
- }
- return true;
- }
-
- /**
* Redirect to the user default page
*/
public static function redirectToDefaultPage() {
@@ -441,6 +388,17 @@ class OC_Util {
}
/**
+ * @brief Static lifespan (in seconds) when a request token expires.
+ * @see OC_Util::callRegister()
+ * @see OC_Util::isCallRegistered()
+ * @description
+ * Also required for the client side to compute the piont in time when to
+ * request a fresh token. The client will do so when nearly 97% of the
+ * timespan coded here has expired.
+ */
+ public static $callLifespan = 3600; // 3600 secs = 1 hour
+
+ /**
* @brief Register an get/post call. Important to prevent CSRF attacks.
* @todo Write howto: CSRF protection guide
* @return $token Generated token.
@@ -448,6 +406,8 @@ class OC_Util {
* Creates a 'request token' (random) and stores it inside the session.
* Ever subsequent (ajax) request must use such a valid token to succeed,
* otherwise the request will be denied as a protection against CSRF.
+ * The tokens expire after a fixed lifespan.
+ * @see OC_Util::$callLifespan
* @see OC_Util::isCallRegistered()
*/
public static function callRegister() {
@@ -466,6 +426,7 @@ class OC_Util {
/**
* @brief Check an ajax get/post call if the request token is valid.
* @return boolean False if request token is not set or is invalid.
+ * @see OC_Util::$callLifespan
* @see OC_Util::callRegister()
*/
public static function isCallRegistered() {
@@ -510,8 +471,11 @@ class OC_Util {
* @return array with sanitized strings or a single sanitized string, depends on the input parameter.
*/
public static function sanitizeHTML( &$value ) {
- if (is_array($value) || is_object($value)) array_walk_recursive($value, 'OC_Util::sanitizeHTML');
- else $value = htmlentities($value, ENT_QUOTES, 'UTF-8'); //Specify encoding for PHP<5.4
+ if (is_array($value) || is_object($value)) {
+ array_walk_recursive($value, 'OC_Util::sanitizeHTML');
+ } else {
+ $value = htmlentities($value, ENT_QUOTES, 'UTF-8'); //Specify encoding for PHP<5.4
+ }
return $value;
}
@@ -552,17 +516,63 @@ class OC_Util {
}
}
+ /**
+ * we test if webDAV is working properly
+ *
+ * The basic assumption is that if the server returns 401/Not Authenticated for an unauthenticated PROPFIND
+ * the web server it self is setup properly.
+ *
+ * Why not an authenticated PROFIND and other verbs?
+ * - We don't have the password available
+ * - We have no idea about other auth methods implemented (e.g. OAuth with Bearer header)
+ *
+ */
+ public static function isWebDAVWorking() {
+ if (!function_exists('curl_init')) {
+ return;
+ }
+
+ $settings = array(
+ 'baseUri' => OC_Helper::linkToRemote('webdav'),
+ );
+
+ $client = new \Sabre_DAV_Client($settings);
+
+ $return = true;
+ try {
+ // test PROPFIND
+ $client->propfind('', array('{DAV:}resourcetype'));
+ } catch(\Sabre_DAV_Exception_NotAuthenticated $e) {
+ $return = true;
+ } catch(\Exception $e) {
+ $return = false;
+ }
+
+ return $return;
+ }
/**
* Check if the setlocal call doesn't work. This can happen if the right local packages are not available on the server.
*/
public static function issetlocaleworking() {
- $result=setlocale(LC_ALL, 'en_US.UTF-8');
- if($result==false) {
- return(false);
- }else{
- return(true);
+ // setlocale test is pointless on Windows
+ if (OC_Util::runningOnWindows() ) {
+ return true;
}
+
+ $result = setlocale(LC_ALL, 'en_US.UTF-8', 'en_US.UTF8');
+ if($result == false) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Check if the PHP module fileinfo is loaded.
+ * @return bool
+ */
+ public static function fileInfoLoaded() {
+ return function_exists('finfo_open');
}
/**
@@ -677,6 +687,9 @@ class OC_Util {
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_URL, $url);
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
+ curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
+
curl_setopt($curl, CURLOPT_USERAGENT, "ownCloud Server Crawler");
if(OC_Config::getValue('proxy','')<>'') {
curl_setopt($curl, CURLOPT_PROXY, OC_Config::getValue('proxy'));
@@ -715,4 +728,11 @@ class OC_Util {
return $data;
}
+ /**
+ * @return bool - well are we running on windows or not
+ */
+ public static function runningOnWindows() {
+ return (substr(PHP_OS, 0, 3) === "WIN");
+ }
+
}
diff --git a/lib/vcategories.php b/lib/vcategories.php
index 406a4eb1074..1700870f91f 100644
--- a/lib/vcategories.php
+++ b/lib/vcategories.php
@@ -763,4 +763,3 @@ class OC_VCategories {
return array_search(strtolower($needle), array_map('strtolower', $haystack));
}
}
-
diff --git a/ocs/providers.php b/ocs/providers.php
index 0c7cbaeff08..bf94b85dcfb 100644
--- a/ocs/providers.php
+++ b/ocs/providers.php
@@ -23,7 +23,7 @@
require_once '../lib/base.php';
-$url=OCP\Util::getServerProtocol().'://'.substr(OCP\Util::getServerHost().$_SERVER['REQUEST_URI'], 0, -17).'ocs/v1.php/';
+$url=OCP\Util::getServerProtocol().'://'.substr(OCP\Util::getServerHost().OCP\Util::getRequestUri(), 0, -17).'ocs/v1.php/';
echo('
<providers>
diff --git a/ocs/routes.php b/ocs/routes.php
index d77b96fc145..d6ee589df6f 100644
--- a/ocs/routes.php
+++ b/ocs/routes.php
@@ -17,4 +17,4 @@ OC_API::register('get', '/privatedata/getattribute/{app}', array('OC_OCS_Private
OC_API::register('get', '/privatedata/getattribute/{app}/{key}', array('OC_OCS_Privatedata', 'get'), 'ocs', OC_API::USER_AUTH);
OC_API::register('post', '/privatedata/setattribute/{app}/{key}', array('OC_OCS_Privatedata', 'set'), 'ocs', OC_API::USER_AUTH);
OC_API::register('post', '/privatedata/deleteattribute/{app}/{key}', array('OC_OCS_Privatedata', 'delete'), 'ocs', OC_API::USER_AUTH);
-?>
+
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 00000000000..1f53798bb4f
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
diff --git a/settings/admin.php b/settings/admin.php
index 04905391138..c7848803095 100755
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -31,8 +31,20 @@ $tmpl->assign('entriesremain', $entriesremain);
$tmpl->assign('htaccessworking', $htaccessworking);
$tmpl->assign('internetconnectionworking', OC_Util::isinternetconnectionworking());
$tmpl->assign('islocaleworking', OC_Util::issetlocaleworking());
+$tmpl->assign('isWebDavWorking', OC_Util::isWebDAVWorking());
+$tmpl->assign('has_fileinfo', OC_Util::fileInfoLoaded());
$tmpl->assign('backgroundjobs_mode', OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax'));
$tmpl->assign('shareAPIEnabled', OC_Appconfig::getValue('core', 'shareapi_enabled', 'yes'));
+
+// Check if connected using HTTPS
+if (OC_Request::serverProtocol() == 'https') {
+ $connectedHTTPS = true;
+} else {
+ $connectedHTTPS = false;
+}
+$tmpl->assign('isConnectedViaHTTPS', $connectedHTTPS);
+$tmpl->assign('enforceHTTPSEnabled', OC_Config::getValue( "forcessl", false));
+
$tmpl->assign('allowLinks', OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes'));
$tmpl->assign('allowResharing', OC_Appconfig::getValue('core', 'shareapi_allow_resharing', 'yes'));
$tmpl->assign('sharePolicy', OC_Appconfig::getValue('core', 'shareapi_share_policy', 'global'));
diff --git a/settings/ajax/apps/ocs.php b/settings/ajax/apps/ocs.php
index 1ffba26ad1d..9c5adfcfef9 100644
--- a/settings/ajax/apps/ocs.php
+++ b/settings/ajax/apps/ocs.php
@@ -23,9 +23,9 @@ if(is_null($enabledApps)) {
$apps=array();
// apps from external repo via OCS
-$catagoryNames=OC_OCSClient::getCategories();
-if(is_array($catagoryNames)) {
- $categories=array_keys($catagoryNames);
+$categoryNames=OC_OCSClient::getCategories();
+if(is_array($categoryNames)) {
+ $categories=array_keys($categoryNames);
$page=0;
$filter='approved';
$externalApps=OC_OCSClient::getApplications($categories, $page, $filter);
@@ -44,6 +44,11 @@ if(is_array($catagoryNames)) {
} else {
$pre=$app['preview'];
}
+ if($app['label']=='recommended') {
+ $label='3rd Party';
+ } else {
+ $label='Recommended';
+ }
$apps[]=array(
'name'=>$app['name'],
'id'=>$app['id'],
@@ -53,7 +58,8 @@ if(is_array($catagoryNames)) {
'license'=>$app['license'],
'preview'=>$pre,
'internal'=>false,
- 'internallabel'=>'3rd Party App',
+ 'internallabel'=>$label,
+ 'update'=>false,
);
}
}
diff --git a/settings/ajax/changedisplayname.php b/settings/ajax/changedisplayname.php
new file mode 100644
index 00000000000..69462330765
--- /dev/null
+++ b/settings/ajax/changedisplayname.php
@@ -0,0 +1,33 @@
+<?php
+// Check if we are a user
+
+OCP\JSON::callCheck();
+OC_JSON::checkLoggedIn();
+
+$username = isset($_POST["username"]) ? $_POST["username"] : OC_User::getUser();
+$displayName = $_POST["displayName"];
+
+$userstatus = null;
+if(OC_User::isAdminUser(OC_User::getUser())) {
+ $userstatus = 'admin';
+}
+if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) {
+ $userstatus = 'subadmin';
+}
+
+if ($username == OC_User::getUser() && OC_User::canUserChangeDisplayName($username)) {
+ $userstatus = 'changeOwnDisplayName';
+}
+
+if(is_null($userstatus)) {
+ OC_JSON::error( array( "data" => array( "message" => $l->t("Authentication error") )));
+ exit();
+}
+
+// Return Success story
+if( OC_User::setDisplayName( $username, $displayName )) {
+ OC_JSON::success(array("data" => array( "username" => $username, 'displayName' => $displayName )));
+}
+else{
+ OC_JSON::error(array("data" => array( "message" => $l->t("Unable to change display name"), displayName => OC_User::getDisplayName($username) )));
+} \ No newline at end of file
diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php
index b2db2611518..ceb4bbeecb0 100644
--- a/settings/ajax/changepassword.php
+++ b/settings/ajax/changepassword.php
@@ -4,25 +4,22 @@
OCP\JSON::callCheck();
OC_JSON::checkLoggedIn();
+// Manually load apps to ensure hooks work correctly (workaround for issue 1503)
+OC_APP::loadApps();
+
$username = isset($_POST["username"]) ? $_POST["username"] : OC_User::getUser();
$password = $_POST["password"];
$oldPassword=isset($_POST["oldpassword"])?$_POST["oldpassword"]:'';
$userstatus = null;
-if(OC_Group::inGroup(OC_User::getUser(), 'admin')) {
+if(OC_User::isAdminUser(OC_User::getUser())) {
$userstatus = 'admin';
}
if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) {
$userstatus = 'subadmin';
}
-if(OC_User::getUser() === $username) {
- if (OC_User::checkPassword($username, $oldPassword)) {
- $userstatus = 'user';
- } else {
- if (!OC_Util::isUserVerified()) {
- $userstatus = null;
- }
- }
+if(OC_User::getUser() === $username && OC_User::checkPassword($username, $oldPassword)) {
+ $userstatus = 'user';
}
if(is_null($userstatus)) {
@@ -30,10 +27,6 @@ if(is_null($userstatus)) {
exit();
}
-if($userstatus === 'admin' || $userstatus === 'subadmin') {
- OC_JSON::verifyUser();
-}
-
// Return Success story
if( OC_User::setPassword( $username, $password )) {
OC_JSON::success(array("data" => array( "username" => $username )));
diff --git a/settings/ajax/createuser.php b/settings/ajax/createuser.php
index addae78517a..09ef25d92fa 100644
--- a/settings/ajax/createuser.php
+++ b/settings/ajax/createuser.php
@@ -3,9 +3,7 @@
OCP\JSON::callCheck();
OC_JSON::checkSubAdminUser();
-$isadmin = OC_Group::inGroup(OC_User::getUser(), 'admin')?true:false;
-
-if($isadmin) {
+if(OC_User::isAdminUser(OC_User::getUser())) {
$groups = array();
if( isset( $_POST["groups"] )) {
$groups = $_POST["groups"];
diff --git a/settings/ajax/disableapp.php b/settings/ajax/disableapp.php
index a39b06b9c7d..466a719157d 100644
--- a/settings/ajax/disableapp.php
+++ b/settings/ajax/disableapp.php
@@ -1,8 +1,7 @@
<?php
OC_JSON::checkAdminUser();
OCP\JSON::callCheck();
-OC_JSON::setContentTypeHeader();
-OC_App::disable($_POST['appid']);
+OC_App::disable(OC_App::cleanAppId($_POST['appid']));
OC_JSON::success();
diff --git a/settings/ajax/enableapp.php b/settings/ajax/enableapp.php
index f4d5c53adef..ab84aee5166 100644
--- a/settings/ajax/enableapp.php
+++ b/settings/ajax/enableapp.php
@@ -2,9 +2,8 @@
OC_JSON::checkAdminUser();
OCP\JSON::callCheck();
-OC_JSON::setContentTypeHeader();
-$appid = OC_App::enable($_POST['appid']);
+$appid = OC_App::enable(OC_App::cleanAppId($_POST['appid']));
if($appid !== false) {
OC_JSON::success(array('data' => array('appid' => $appid)));
} else {
diff --git a/settings/ajax/navigationdetect.php b/settings/ajax/navigationdetect.php
index 93acb50dc20..7f961eb9bc5 100644
--- a/settings/ajax/navigationdetect.php
+++ b/settings/ajax/navigationdetect.php
@@ -4,11 +4,9 @@ OC_Util::checkAdminUser();
OCP\JSON::callCheck();
$app = $_GET['app'];
+$app = OC_App::cleanAppId($app);
-//load the one app and see what it adds to the navigation
-OC_App::loadApp($app);
-
-$navigation = OC_App::getNavigation();
+$navigation = OC_App::getAppNavigationEntries($app);
$navIds = array();
foreach ($navigation as $nav) {
diff --git a/settings/ajax/openid.php b/settings/ajax/openid.php
deleted file mode 100644
index 23c43c3c48e..00000000000
--- a/settings/ajax/openid.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-$l=OC_L10N::get('settings');
-
-OC_JSON::checkLoggedIn();
-OCP\JSON::callCheck();
-OC_JSON::checkAppEnabled('user_openid');
-
-// Get data
-if( isset( $_POST['identity'] ) ) {
- $identity=$_POST['identity'];
- OC_Preferences::setValue(OC_User::getUser(), 'user_openid', 'identity', $identity);
- OC_JSON::success(array("data" => array( "message" => $l->t("OpenID Changed") )));
-}else{
- OC_JSON::error(array("data" => array( "message" => $l->t("Invalid request") )));
-}
diff --git a/settings/ajax/removeuser.php b/settings/ajax/removeuser.php
index 9ffb32a0b23..bf3a34f1472 100644
--- a/settings/ajax/removeuser.php
+++ b/settings/ajax/removeuser.php
@@ -10,7 +10,7 @@ if(OC_User::getUser() === $username) {
exit;
}
-if(!OC_Group::inGroup(OC_User::getUser(), 'admin') && !OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) {
+if(!OC_User::isAdminUser(OC_User::getUser()) && !OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) {
$l = OC_L10N::get('core');
OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit();
diff --git a/settings/ajax/setquota.php b/settings/ajax/setquota.php
index 845f8ea408c..356466c0c00 100644
--- a/settings/ajax/setquota.php
+++ b/settings/ajax/setquota.php
@@ -10,7 +10,7 @@ OCP\JSON::callCheck();
$username = isset($_POST["username"])?$_POST["username"]:'';
-if(($username == '' && !OC_Group::inGroup(OC_User::getUser(), 'admin')) || (!OC_Group::inGroup(OC_User::getUser(), 'admin') && !OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username))) {
+if(($username == '' && !OC_User::isAdminUser(OC_User::getUser()))|| (!OC_User::isAdminUser(OC_User::getUser()) && !OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username))) {
$l = OC_L10N::get('core');
OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit();
diff --git a/settings/ajax/setsecurity.php b/settings/ajax/setsecurity.php
new file mode 100644
index 00000000000..16a85aade81
--- /dev/null
+++ b/settings/ajax/setsecurity.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Copyright (c) 2013, Lukas Reschke <lukas@statuscode.ch>
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+
+OC_Util::checkAdminUser();
+OCP\JSON::callCheck();
+
+OC_Config::setValue( 'forcessl', filter_var($_POST['enforceHTTPS'], FILTER_VALIDATE_BOOLEAN));
+
+echo 'true'; \ No newline at end of file
diff --git a/settings/ajax/togglegroups.php b/settings/ajax/togglegroups.php
index 83d455550ae..9bba9c5269d 100644
--- a/settings/ajax/togglegroups.php
+++ b/settings/ajax/togglegroups.php
@@ -7,13 +7,13 @@ $success = true;
$username = $_POST["username"];
$group = $_POST["group"];
-if($username == OC_User::getUser() && $group == "admin" && OC_Group::inGroup($username, 'admin')) {
+if($username == OC_User::getUser() && $group == "admin" && OC_User::isAdminUser($username)) {
$l = OC_L10N::get('core');
OC_JSON::error(array( 'data' => array( 'message' => $l->t('Admins can\'t remove themself from the admin group'))));
exit();
}
-if(!OC_Group::inGroup(OC_User::getUser(), 'admin') && (!OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username) || !OC_SubAdmin::isGroupAccessible(OC_User::getUser(), $group))) {
+if(!OC_User::isAdminUser(OC_User::getUser()) && (!OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username) || !OC_SubAdmin::isGroupAccessible(OC_User::getUser(), $group))) {
$l = OC_L10N::get('core');
OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit();
@@ -31,8 +31,8 @@ $action = "add";
// Toggle group
if( OC_Group::inGroup( $username, $group )) {
$action = "remove";
- $error = $l->t("Unable to remove user from group %s", $group);
- $success = OC_Group::removeFromGroup( $username, $group );
+ $error = $l->t("Unable to remove user from group %s", $group);
+ $success = OC_Group::removeFromGroup( $username, $group );
$usersInGroup=OC_Group::usersInGroup($group);
if(count($usersInGroup)==0) {
OC_Group::deleteGroup($group);
diff --git a/settings/ajax/updateapp.php b/settings/ajax/updateapp.php
new file mode 100644
index 00000000000..300e8642515
--- /dev/null
+++ b/settings/ajax/updateapp.php
@@ -0,0 +1,15 @@
+<?php
+
+OC_JSON::checkAdminUser();
+OCP\JSON::callCheck();
+
+$appid = $_POST['appid'];
+$appid = OC_App::cleanAppId($appid);
+
+$result = OC_Installer::updateApp($appid);
+if($result !== false) {
+ OC_JSON::success(array('data' => array('appid' => $appid)));
+} else {
+ $l = OC_L10N::get('settings');
+ OC_JSON::error(array("data" => array( "message" => $l->t("Couldn't update app.") )));
+} \ No newline at end of file
diff --git a/settings/ajax/userlist.php b/settings/ajax/userlist.php
index eaeade60a39..9bbff80ea0c 100644
--- a/settings/ajax/userlist.php
+++ b/settings/ajax/userlist.php
@@ -28,7 +28,7 @@ if (isset($_GET['offset'])) {
$offset = 0;
}
$users = array();
-if (OC_Group::inGroup(OC_User::getUser(), 'admin')) {
+if (OC_User::isAdminUser(OC_User::getUser())) {
$batch = OC_User::getUsers('', 10, $offset);
foreach ($batch as $user) {
$users[] = array(
diff --git a/settings/apps.php b/settings/apps.php
index 99a3094399d..b9ed2cac93a 100644
--- a/settings/apps.php
+++ b/settings/apps.php
@@ -26,111 +26,25 @@ OC_App::loadApps();
// Load the files we need
OC_Util::addStyle( "settings", "settings" );
-OC_Util::addScript( "settings", "apps" );
OC_App::setActiveNavigationEntry( "core_apps" );
-$installedApps = OC_App::getAllApps();
-
-//TODO which apps do we want to blacklist and how do we integrate blacklisting with the multi apps folder feature?
-
-$blacklist = array('files');//we dont want to show configuration for these
-
-$appList = array();
-
-foreach ( $installedApps as $app ) {
-
- if ( array_search( $app, $blacklist ) === false ) {
-
- $info=OC_App::getAppInfo($app);
-
- if (!isset($info['name'])) {
-
- OC_Log::write('core', 'App id "'.$app.'" has no name in appinfo', OC_Log::ERROR);
-
- continue;
-
- }
-
- if ( OC_Appconfig::getValue( $app, 'enabled', 'no') == 'yes' ) {
-
- $active = true;
-
- } else {
-
- $active = false;
-
- }
-
- $info['active'] = $active;
-
- if(isset($info['shipped']) and ($info['shipped']=='true')) {
-
- $info['internal']=true;
-
- $info['internallabel']='Internal App';
-
- }else{
-
- $info['internal']=false;
-
- $info['internallabel']='3rd Party App';
-
- }
-
- $info['preview'] = OC_Helper::imagePath('settings', 'trans.png');
-
- $info['version'] = OC_App::getAppVersion($app);
-
- $appList[] = $info;
-
- }
-}
-
-$remoteApps = OC_App::getAppstoreApps();
-
-if ( $remoteApps ) {
-
- // Remove duplicates
- foreach ( $appList as $app ) {
-
- foreach ( $remoteApps AS $key => $remote ) {
-
- if (
- $app['name'] == $remote['name']
- // To set duplicate detection to use OCS ID instead of string name,
- // enable this code, remove the line of code above,
- // and add <ocs_id>[ID]</ocs_id> to info.xml of each 3rd party app:
- // OR $app['ocs_id'] == $remote['ocs_id']
- ) {
-
- unset( $remoteApps[$key]);
-
- }
-
- }
-
- }
-
- $combinedApps = array_merge( $appList, $remoteApps );
-
-} else {
-
- $combinedApps = $appList;
-
-}
-
function app_sort( $a, $b ) {
if ($a['active'] != $b['active']) {
-
+
return $b['active'] - $a['active'];
-
+
+ }
+
+ if ($a['internal'] != $b['internal']) {
+ return $b['internal'] - $a['internal'];
}
-
+
return strcmp($a['name'], $b['name']);
-
+
}
+$combinedApps = OC_App::listAllApps();
usort( $combinedApps, 'app_sort' );
$tmpl = new OC_Template( "settings", "apps", "user" );
@@ -142,3 +56,4 @@ $appid = (isset($_GET['appid'])?strip_tags($_GET['appid']):'');
$tmpl->assign('appid', $appid);
$tmpl->printPage();
+
diff --git a/settings/css/settings.css b/settings/css/settings.css
index 4d0f6efd2c8..d18a2657c87 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -5,9 +5,19 @@
select#languageinput, select#timezone { width:15em; }
input#openid, input#webdav { width:20em; }
+
/* PERSONAL */
+
+/* Sync clients */
+.clientsbox { margin:12px; text-align:center; }
+.clientsbox h1 { font-size:40px; font-weight:bold; margin:50px 0 20px; }
+.clientsbox h2 { font-size:20px; font-weight:bold; margin:35px 0 10px; }
+.clientsbox center { margin-top:10px; }
+
#passworderror { display:none; }
#passwordchanged { display:none; }
+#displaynameerror { display:none; }
+#displaynamechanged { display:none; }
input#identity { width:20em; }
#email { width: 17em; }
@@ -22,21 +32,20 @@ form { display:inline; }
table:not(.nostyle) th { height:2em; color:#999; }
table:not(.nostyle) th, table:not(.nostyle) td { border-bottom:1px solid #ddd; padding:0 .5em; padding-left:.8em; text-align:left; font-weight:normal; }
td.name, td.password { padding-left:.8em; }
-td.password>img, td.remove>a, td.quota>img { visibility:hidden; }
-td.password, td.quota { width:12em; cursor:pointer; }
-td.password>span, td.quota>span { margin-right: 1.2em; color: #C7C7C7; }
+td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; }
+td.password, td.quota, td.displayName { width:12em; cursor:pointer; }
+td.password>span, td.quota>span, rd.displayName>span { margin-right: 1.2em; color: #C7C7C7; }
td.remove { width:1em; padding-right:1em; }
-tr:hover>td.password>span { margin:0; cursor:pointer; }
-tr:hover>td.remove>a, tr:hover>td.password>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; }
+tr:hover>td.password>span, tr:hover>td.displayName>span { margin:0; cursor:pointer; }
+tr:hover>td.remove>a, tr:hover>td.password>img,tr:hover>td.displayName>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; }
tr:hover>td.remove>a { float:right; }
li.selected { background-color:#ddd; }
-#content>table:not(.nostyle) { margin-top:3em; }
table:not(.nostyle) { width:100%; }
#rightcontent { padding-left: 1em; }
div.quota { float:right; display:block; position:absolute; right:25em; top:0; }
div.quota-select-wrapper { position: relative; }
-select.quota { position:absolute; left:0; top:0; width:10em; }
+select.quota { position:absolute; left:0; top:0.5em; width:10em; }
select.quota-user { position:relative; left:0; top:0; width:10em; }
input.quota-other { display:none; position:absolute; left:0.1em; top:0.1em; width:7em; border:none; box-shadow:none; }
div.quota>span { position:absolute; right:0; white-space:nowrap; top:.7em; color:#888; text-shadow:0 1px 0 #fff; }
@@ -50,10 +59,13 @@ li { color:#888; }
li.active { color:#000; }
small.externalapp { color:#FFF; background-color:#BBB; font-weight:bold; font-size: 0.6em; margin: 0; padding: 0.1em 0.2em; border-radius: 4px;}
small.externalapp.list { float: right; }
+small.recommendedapp { color:#FFF; background-color:#888; font-weight:bold; font-size: 0.6em; margin: 0; padding: 0.1em 0.2em; border-radius: 4px;}
+small.recommendedapp.list { float: right; }
span.version { margin-left:1em; margin-right:1em; color:#555; }
.app { position: relative; display: inline-block; padding: 0.2em 0 0.2em 0 !important; text-overflow: hidden; overflow: hidden; white-space: nowrap; /*transition: .2s max-width linear; -o-transition: .2s max-width linear; -moz-transition: .2s max-width linear; -webkit-transition: .2s max-width linear; -ms-transition: .2s max-width linear;*/ }
-.app.externalapp { max-width: 12.5em; z-index: 100; }
+.app.externalapp { max-width: 12.5em; }
+.app.recommendedapp { max-width: 12.5em; }
/* Transition to complete width! */
.app:hover, .app:active { max-width: inherit; }
@@ -71,3 +83,4 @@ table.shareAPI td { padding-bottom: 0.8em; }
/* HELP */
.pressed {background-color:#DDD;}
+
diff --git a/settings/help.php b/settings/help.php
index cd3d615425c..a5ac11ec9a3 100644
--- a/settings/help.php
+++ b/settings/help.php
@@ -27,7 +27,7 @@ $url1=OC_Helper::linkToRoute( "settings_help" ).'?mode=user';
$url2=OC_Helper::linkToRoute( "settings_help" ).'?mode=admin';
$tmpl = new OC_Template( "settings", "help", "user" );
-$tmpl->assign( "admin", OC_Group::inGroup(OC_User::getUser(), 'admin') );
+$tmpl->assign( "admin", OC_User::isAdminUser(OC_User::getUser()));
$tmpl->assign( "url", $url );
$tmpl->assign( "url1", $url1 );
$tmpl->assign( "url2", $url2 );
diff --git a/settings/img/admin.png b/settings/img/admin.png
index 13d653f92a8..d883f0b61a3 100644
--- a/settings/img/admin.png
+++ b/settings/img/admin.png
Binary files differ
diff --git a/settings/img/admin.svg b/settings/img/admin.svg
index b3c4a32451d..1ea226231b3 100644
--- a/settings/img/admin.svg
+++ b/settings/img/admin.svg
@@ -14,9 +14,9 @@
width="16"
height="16"
id="svg11300"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="apps.svg"
- inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/apps.png"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="admin.svg"
+ inkscape:export-filename="admin.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
@@ -41,16 +41,16 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
- inkscape:window-height="776"
+ inkscape:window-height="745"
id="namedview24"
showgrid="true"
showguides="true"
inkscape:guide-bbox="true"
- inkscape:zoom="32.000001"
- inkscape:cx="8.0537858"
- inkscape:cy="6.4773881"
+ inkscape:zoom="16.000001"
+ inkscape:cx="0.93200388"
+ inkscape:cy="4.680543"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g4146">
<inkscape:grid
@@ -2005,36 +2005,6 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3587-6-5-86-0"
- id="linearGradient4907"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,5.5842706)"
- x1="11"
- y1="6"
- x2="11"
- y2="17" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-86-0"
- id="linearGradient4911"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,9.58427)"
- x1="11"
- y1="6"
- x2="11"
- y2="17" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-86-0"
- id="linearGradient4915"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.4651163,0,0,0.3370786,4.3953488,1.5842703)"
- x1="11"
- y1="6"
- x2="11"
- y2="17" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-86-0"
id="linearGradient4919"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2727273,0,0,0.375,9.636365,1.5)"
@@ -2074,16 +2044,6 @@
xlink:href="#linearGradient3587-6-5-86-0-6"
inkscape:collect="always" />
<linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3587-6-5-86-0"
- id="linearGradient5057"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.2727273,0,0,0.375,9.636365,1.5)"
- x1="1.3333321"
- y1="6.6666665"
- x2="1.3333321"
- y2="33.333332" />
- <linearGradient
id="linearGradient3587-6-5-86-0-9">
<stop
id="stop3589-9-2-65-9-6"
@@ -2155,60 +2115,14 @@
style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
<g
id="g4146">
- <g
- transform="translate(0,1)"
- id="g5059-3"
- style="fill:#ffffff;fill-opacity:1;opacity:0.6">
- <path
- inkscape:connector-curvature="0"
- id="path2407-9-6"
- d="m 6,4 0,1 8,0 0,-1 -8,0 z m 0,4 0,1 8,0 0,-1 -8,0 z m 0,4 0,1 8,0 0,-1 -8,0 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.69999999999999996;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99999994000000003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <rect
- style="opacity:0.69999999999999996;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect3728-0-5"
- y="3"
- x="2"
- height="3"
- width="3" />
- <path
- inkscape:connector-curvature="0"
- id="rect2434-2"
- d="m 2,11 0,3 3,0 0,-3 -3,0 z m 1,1 1,0 0,1 -1,0 0,-1 z"
- style="opacity:0.69999999999999996;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- style="opacity:0.69999999999999996;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect2440-8"
- y="7"
- x="2"
- height="3"
- width="3" />
- </g>
- <g
- id="g5059">
- <path
- inkscape:connector-curvature="0"
- id="path2407-9"
- d="m 6,4 0,1 8,0 0,-1 -8,0 z m 0,4 0,1 8,0 0,-1 -8,0 z m 0,4 0,1 8,0 0,-1 -8,0 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:url(#linearGradient5057);fill-opacity:1;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <rect
- style="opacity:0.7;fill:url(#linearGradient4915);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect3728-0"
- y="3"
- x="2"
- height="3"
- width="3" />
- <path
- id="rect2434"
- d="M 2 11 L 2 14 L 5 14 L 5 11 L 2 11 z M 3 12 L 4 12 L 4 13 L 3 13 L 3 12 z "
- style="opacity:0.69999999999999996;fill:url(#linearGradient4911);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- style="opacity:0.7;fill:url(#linearGradient4907);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect2440"
- y="7"
- x="2"
- height="3"
- width="3" />
- </g>
+ <path
+ id="path7671"
+ d="M 2,2 2,5 5,5 5,2 2,2 z M 6,3 6,4 14,4 14,3 6,3 z M 2,6 2,9 5,9 5,6 2,6 z m 4,1 0,1 8,0 0,-1 -8,0 z m -4,3 0,3 3,0 0,-3 -3,0 z m 1,1 1,0 0,1 -1,0 0,-1 z m 3,0 0,1 8,0 0,-1 -8,0 z"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994000000003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99999994000000003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="M 2 3 L 2 6 L 5 6 L 5 3 L 2 3 z M 6 4 L 6 5 L 14 5 L 14 4 L 6 4 z M 2 7 L 2 10 L 5 10 L 5 7 L 2 7 z M 6 8 L 6 9 L 14 9 L 14 8 L 6 8 z M 2 11 L 2 14 L 5 14 L 5 11 L 2 11 z M 3 12 L 4 12 L 4 13 L 3 13 L 3 12 z M 6 12 L 6 13 L 14 13 L 14 12 L 6 12 z "
+ id="path2407-9" />
</g>
</svg>
diff --git a/settings/img/apps.png b/settings/img/apps.png
index e9845d012be..de5ccbd2c5f 100644
--- a/settings/img/apps.png
+++ b/settings/img/apps.png
Binary files differ
diff --git a/settings/img/apps.svg b/settings/img/apps.svg
index cda246bc4a8..d3415921209 100644
--- a/settings/img/apps.svg
+++ b/settings/img/apps.svg
@@ -14,9 +14,9 @@
width="16"
height="16"
id="svg11300"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="file.svg"
- inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/file.png"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="apps.svg"
+ inkscape:export-filename="apps.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
@@ -41,16 +41,16 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
- inkscape:window-height="776"
+ inkscape:window-height="745"
id="namedview24"
showgrid="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="16.000001"
- inkscape:cx="-1.1375545"
+ inkscape:cx="-11.700054"
inkscape:cy="5.0070539"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g4146">
<inkscape:grid
@@ -2100,65 +2100,14 @@
style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
<g
id="g4146">
- <g
- id="g4811"
- transform="translate(0,1)">
- <g
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:none"
- id="g5023-6">
- <path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- d="m 10,3 0,0.5 0,3 0,0.5 0.5,0 3,0 0.5,0 0,-0.5 0,-3 0,-0.5 -0.5,0 -3,0 z"
- id="rect3187-0"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccc" />
- <path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- d="M 2,3 2,3.5 2,6.5 2,7 2.5,7 5.5,7 6,7 6,6.5 6,3.5 6,3 5.5,3 2.5,3 z"
- id="rect3201-0"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccc" />
- <path
- inkscape:connector-curvature="0"
- id="rect3205-6"
- transform="translate(0,1)"
- d="m 10,9 0,0.5 0,3 0,0.5 0.5,0 3,0 0.5,0 0,-0.5 0,-3 0,-0.5 -0.5,0 -3,0 -0.5,0 z m 1,1 2,0 0,2 -2,0 0,-2 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- d="m 2,10 0,0.5 0,3 0,0.5 0.5,0 3,0 0.5,0 0,-0.5 0,-3 0,-0.5 -0.5,0 -3,0 z"
- id="rect3209-4"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccc" />
- </g>
- <g
- transform="translate(0,-1)"
- id="g5023">
- <path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:url(#linearGradient4823);fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- d="m 10,3 0,0.5 0,3 0,0.5 0.5,0 3,0 0.5,0 0,-0.5 0,-3 0,-0.5 -0.5,0 -3,0 z"
- id="rect3187"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccc" />
- <path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:url(#linearGradient4825);fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- d="M 2,3 2,3.5 2,6.5 2,7 2.5,7 5.5,7 6,7 6,6.5 6,3.5 6,3 5.5,3 2.5,3 z"
- id="rect3201"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccc" />
- <path
- inkscape:connector-curvature="0"
- id="rect3205"
- transform="translate(0,1)"
- d="m 10,9 0,0.5 0,3 0,0.5 0.5,0 3,0 0.5,0 0,-0.5 0,-3 0,-0.5 -0.5,0 -3,0 -0.5,0 z m 1,1 2,0 0,2 -2,0 0,-2 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:url(#linearGradient4827);fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:url(#linearGradient4829);fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- d="m 2,10 0,0.5 0,3 0,0.5 0.5,0 3,0 0.5,0 0,-0.5 0,-3 0,-0.5 -0.5,0 -3,0 z"
- id="rect3209"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccc" />
- </g>
- </g>
+ <path
+ id="path7131"
+ d="M 2,2 2,2.5 2,5.5 2,6 2.5,6 5.5,6 6,6 6,5.5 6,2.5 6,2 5.5,2 2.5,2 2,2 z m 8,0 0,0.5 0,3 0,0.5 0.5,0 3,0 0.5,0 0,-0.5 0,-3 0,-0.5 -0.5,0 -3,0 -0.5,0 z m -8,7 0,0.5 0,3 0,0.5 0.5,0 3,0 L 6,13 6,12.5 6,9.5 6,9 5.5,9 2.5,9 2,9 z m 8,0 0,0.5 0,3 0,0.5 0.5,0 3,0 0.5,0 0,-0.5 0,-3 0,-0.5 -0.5,0 -3,0 -0.5,0 z m 1,1 2,0 0,2 -2,0 0,-2 z"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="M 2 3 L 2 3.5 L 2 6.5 L 2 7 L 2.5 7 L 5.5 7 L 6 7 L 6 6.5 L 6 3.5 L 6 3 L 5.5 3 L 2.5 3 L 2 3 z M 10 3 L 10 3.5 L 10 6.5 L 10 7 L 10.5 7 L 13.5 7 L 14 7 L 14 6.5 L 14 3.5 L 14 3 L 13.5 3 L 10.5 3 L 10 3 z M 2 10 L 2 10.5 L 2 13.5 L 2 14 L 2.5 14 L 5.5 14 L 6 14 L 6 13.5 L 6 10.5 L 6 10 L 5.5 10 L 2.5 10 L 2 10 z M 10 10 L 10 10.5 L 10 13.5 L 10 14 L 10.5 14 L 13.5 14 L 14 14 L 14 13.5 L 14 10.5 L 14 10 L 13.5 10 L 10.5 10 L 10 10 z M 11 11 L 13 11 L 13 13 L 11 13 L 11 11 z "
+ id="rect3187" />
</g>
</svg>
diff --git a/settings/img/help.png b/settings/img/help.png
index 37ccb356830..c0200096735 100644
--- a/settings/img/help.png
+++ b/settings/img/help.png
Binary files differ
diff --git a/settings/img/help.svg b/settings/img/help.svg
index 1e07aed8527..55b68e6baf2 100644
--- a/settings/img/help.svg
+++ b/settings/img/help.svg
@@ -14,9 +14,9 @@
width="16"
height="16"
id="svg11300"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="users.svg"
- inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/users.png"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="help.svg"
+ inkscape:export-filename="help.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
@@ -41,16 +41,16 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
- inkscape:window-height="776"
+ inkscape:window-height="745"
id="namedview24"
showgrid="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="22.627418"
- inkscape:cx="14.025105"
+ inkscape:cx="6.55629"
inkscape:cy="9.2202448"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g4146">
<inkscape:grid
@@ -1712,16 +1712,6 @@
style="stop-color:#363636;stop-opacity:1"
offset="1" />
</linearGradient>
- <linearGradient
- y2="28.776533"
- x2="0.44923753"
- y1="13.895414"
- x1="0.86849999"
- gradientTransform="matrix(1.0344828,0,0,1.0344828,8.0707628,-14.513825)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3456"
- xlink:href="#linearGradient3587-6-5-4"
- inkscape:collect="always" />
</defs>
<g
transform="matrix(0.78786264,0,0,0.78786264,-3.1483699,0.44173984)"
@@ -1740,19 +1730,15 @@
style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
<g
id="g4146">
- <g
- id="g4314"
- transform="matrix(1.0000288,0,0,1,-0.14973031,7.5119235e-7)">
- <path
- d="M 5.149582,8.4745445 C 5.3049331,8.8555559 5.4749951,9.1626038 5.7940692,8.7203676 6.2006678,8.4518873 7.5528003,7.2925123 7.4556978,8.3783304 7.0875579,10.395217 6.6215241,12.395026 6.2845924,14.416813 5.892954,15.532242 6.9195772,16.485144 7.9224991,15.729405 9.0003636,15.226276 9.9139828,14.440939 10.850418,13.716521 10.706075,13.39458 10.599944,12.928009 10.253582,13.370754 9.7853152,13.60987 8.7844663,14.688222 8.5572925,13.841548 8.8726653,11.661003 9.5328233,9.5467073 9.9227187,7.3804227 10.320459,6.3755023 9.5582449,5.1570833 8.5229975,6.0170334 7.266481,6.6343485 6.2334577,7.6013759 5.149582,8.4745445 z M 9.6088759,1.0026758 C 8.3013694,0.98534052 7.7033019,3.148247 8.9661979,3.6822119 9.9886006,4.0601787 11.042606,2.968368 10.755649,1.9317924 10.657925,1.3899396 10.158361,0.96201137 9.6088769,1.0026758 l -1e-6,0 z"
- id="path3536-8"
- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:none;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L Bold"
- inkscape:connector-curvature="0" />
- <path
- d="M 5.149582,7.4745451 C 5.3049334,7.8555565 5.4749951,8.1626045 5.7940689,7.7203682 6.2006672,7.4518879 7.5527994,6.292513 7.4556976,7.378331 7.0875583,9.3952173 6.6215238,11.395026 6.2845927,13.416813 5.8929541,14.532242 6.9195769,15.485145 7.9224987,14.729405 9.0003636,14.226276 9.9139826,13.440939 10.850418,12.716521 10.706076,12.394581 10.599945,11.928009 10.253583,12.370754 9.7853157,12.60987 8.784467,13.688222 8.5572925,12.841549 8.872666,10.661003 9.5328233,8.5467079 9.9227188,6.3804233 10.32046,5.3755029 9.5582457,4.1570839 8.5229973,5.017034 7.2664804,5.6343492 6.2334583,6.6013765 5.149582,7.4745451 z M 9.6088764,0.00267653 C 8.3013697,-0.01465929 7.7033021,2.1482476 8.9661977,2.6822125 9.9886009,3.0601794 11.042605,1.9683686 10.755649,0.93179313 10.657922,0.38994033 10.158361,-0.03798791 9.6088774,0.00267653 l -1e-6,0 z"
- id="path3536"
- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:0.7;fill:url(#linearGradient3456);fill-opacity:1;stroke:none;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L Bold"
- inkscape:connector-curvature="0" />
- </g>
+ <path
+ d="M 5,7.4745455 C 5.1553559,7.8555569 5.3254225,8.1626049 5.6445055,7.7203686 6.0511155,7.4518883 7.4032866,6.2925134 7.306182,7.3783314 6.9380321,9.3952173 6.4719842,11.395026 6.1350434,13.416813 5.7433935,14.532242 6.7700459,15.485145 7.7729966,14.729405 8.8508925,14.226276 9.7645378,13.440939 10.701,12.716521 10.556654,12.394581 10.45052,11.928009 10.104148,12.370754 9.6358672,12.60987 8.6349897,13.688222 8.4078086,12.841549 8.7231912,10.661003 9.3833675,8.5467083 9.7732743,6.3804237 10.171027,5.3755033 9.4087907,4.1570843 8.3735125,5.0170344 7.1169594,5.6343496 6.0839075,6.6013769 5,7.4745455 z M 9.4594228,0.00267693 C 8.1518785,-0.01465888 7.5537936,2.148248 8.8167256,2.6822129 9.8391583,3.0601798 10.893193,1.968369 10.606228,0.93179353 10.508499,0.38994073 10.008923,-0.0379875 9.4594238,0.00267693 l -10e-7,0 z"
+ id="path6558"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L Bold"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L Bold"
+ id="path3536"
+ d="M 5,8.4745452 C 5.1553559,8.8555566 5.3254225,9.1626046 5.6445055,8.7203683 6.0511155,8.451888 7.4032866,7.2925131 7.306182,8.3783311 6.9380321,10.395217 6.4719842,12.395026 6.1350434,14.416813 5.7433935,15.532242 6.7700459,16.485145 7.7729966,15.729405 8.8508925,15.226276 9.7645378,14.440939 10.701,13.716521 10.556654,13.394581 10.45052,12.928009 10.104148,13.370754 9.6358672,13.60987 8.6349897,14.688222 8.4078086,13.841549 8.7231912,11.661003 9.3833675,9.546708 9.7732743,7.3804234 10.171027,6.375503 9.4087907,5.157084 8.3735125,6.0170341 7.1169594,6.6343493 6.0839075,7.6013766 5,8.4745452 z M 9.4594228,1.0026766 C 8.1518785,0.98534079 7.5537936,3.1482477 8.8167256,3.6822126 9.8391583,4.0601795 10.893193,2.9683687 10.606228,1.9317932 10.508499,1.3899404 10.008923,0.96201217 9.4594238,1.0026766 l -10e-7,0 z" />
</g>
</svg>
diff --git a/settings/img/personal.png b/settings/img/personal.png
index 8edc5a16cd6..c80fed1b62b 100644
--- a/settings/img/personal.png
+++ b/settings/img/personal.png
Binary files differ
diff --git a/settings/img/personal.svg b/settings/img/personal.svg
index 61318619993..2f3a77d07a2 100644
--- a/settings/img/personal.svg
+++ b/settings/img/personal.svg
@@ -14,9 +14,9 @@
width="16"
height="16"
id="svg11300"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="image.svg"
- inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/image.png"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="personal.svg"
+ inkscape:export-filename="personal.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
@@ -41,16 +41,16 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
- inkscape:window-height="776"
+ inkscape:window-height="745"
id="namedview24"
showgrid="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="22.627418"
- inkscape:cx="14.025105"
+ inkscape:cx="6.55629"
inkscape:cy="9.2202448"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g4146">
<inkscape:grid
@@ -1698,27 +1698,17 @@
style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
<g
id="g4146">
- <g
- id="g4131"
- transform="translate(2,40)">
- <g
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
- id="g3743-9"
- transform="matrix(0.99998873,0,0,0.99998873,-3.9960435,-40.001608)">
- <path
- sodipodi:nodetypes="sccccsscscsscccccccsccscscsscccss"
- inkscape:connector-curvature="0"
- d="M 8,1 C 6.3769202,1 5,2.1869577 5,3.71875 5.011517,4.2029062 5.05482,4.7999354 5.34375,6.0625 l 0,0.03125 L 5.375,6.125 C 5.467756,6.3906733 5.6027279,6.5426488 5.78125,6.75 5.9597721,6.9573512 6.1726069,7.2014001 6.375,7.40625 6.398811,7.43035 6.414077,7.445288 6.4375,7.46875 6.47764,7.6434131 6.52626,7.8313866 6.5625,8 6.65892,8.4486073 6.64903,8.7662912 6.625,8.875 5.9275445,9.1198852 5.0598384,9.4115215 4.28125,9.75 3.8441326,9.9400296 3.4485889,10.109721 3.125,10.3125 c -0.3235889,0.202779 -0.6454015,0.355982 -0.75,0.8125 -0.0013,0.02081 -0.0013,0.04169 0,0.0625 -0.1022115,0.938479 -0.2568187,2.318515 -0.375,3.25 -0.025515,0.196074 0.077832,0.402768 0.25,0.5 C 3.6636791,15.701111 5.8352555,16.008445 8,16 c 2.164744,-0.0084 4.319026,-0.333835 5.6875,-1.0625 0.172168,-0.09723 0.275515,-0.303926 0.25,-0.5 -0.03773,-0.291166 -0.08408,-0.947729 -0.125,-1.59375 -0.04092,-0.646021 -0.07644,-1.281501 -0.125,-1.65625 -0.01694,-0.09289 -0.06085,-0.180708 -0.125,-0.25 C 13.127785,10.418403 12.478302,10.101073 11.71875,9.78125 11.025324,9.4892706 10.212392,9.1860601 9.40625,8.84375 9.36113,8.7432405 9.316313,8.4508168 9.40625,8 9.4304,7.8789473 9.4682151,7.7492945 9.5,7.625 9.575755,7.5401485 9.6348046,7.4708101 9.71875,7.375 9.897787,7.1706581 10.090163,6.9562971 10.25,6.75 10.409837,6.5437029 10.540606,6.3667247 10.625,6.125 L 10.65625,6.09375 C 10.98289,4.7754556 10.983061,4.2253548 11,3.75 L 11,3.71875 C 11,2.1869583 9.623082,1 8,1 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.6;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00012147;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- transform="translate(1.9999393,0.00161961)"
- id="path2880-7" />
- </g>
- <path
- sodipodi:nodetypes="sccccsscscsscccccccsccscscsscccss"
- inkscape:connector-curvature="0"
- d="m 6.0037806,-40.000016 c -1.6230605,0 -2.9999647,1.186944 -2.9999647,2.718719 0.011519,0.48415 0.054822,1.081172 0.3437465,2.343722 l 0,0.03125 0.031247,0.03125 c 0.092751,0.265671 0.2277248,0.417644 0.406245,0.624993 0.1785202,0.207349 0.3913525,0.451395 0.5937433,0.656242 0.023812,0.0241 0.039074,0.03903 0.062494,0.06251 0.040137,0.174662 0.088761,0.362633 0.1249979,0.531244 0.096423,0.448603 0.086533,0.766283 0.062505,0.874989 -0.6974467,0.244883 -1.565143,0.536516 -2.343722,0.874989 -0.4371126,0.190028 -0.832652,0.359718 -1.1562374,0.562494 -0.32358434,0.202777 -0.64539391,0.355978 -0.7499904,0.812491 -0.001341,0.02081 -0.001341,0.04169 0,0.06251 -0.10220809,0.938467 -0.25681652,2.318487 -0.37499572,3.249962 -0.02551335,0.196072 0.07782913,0.402763 0.24999681,0.499994 1.41366241,0.763602 3.58521361,1.070932 5.74993271,1.062488 2.1647181,-0.0084 4.3189754,-0.333832 5.6874324,-1.062488 0.172166,-0.09723 0.275513,-0.303922 0.249997,-0.499994 -0.03773,-0.291163 -0.08408,-0.947718 -0.124999,-1.593732 -0.04092,-0.646014 -0.07644,-1.281486 -0.124994,-1.656231 -0.01694,-0.09289 -0.06086,-0.180706 -0.125,-0.249997 -0.43471,-0.51909 -1.084186,-0.836417 -1.8437284,-1.156236 -0.6934176,-0.291975 -1.5063396,-0.595182 -2.3124717,-0.937489 -0.045118,-0.100507 -0.089936,-0.392929 0,-0.84374 0.024152,-0.121051 0.061968,-0.250702 0.093752,-0.374996 0.075756,-0.08485 0.1348031,-0.154188 0.2187476,-0.249997 0.1790349,-0.20434 0.371408,-0.418698 0.5312428,-0.624992 0.1598359,-0.206295 0.2906037,-0.383272 0.3749958,-0.624994 l 0.031247,-0.03125 c 0.3266369,-1.318279 0.3268071,-1.868373 0.3437465,-2.343723 l 0,-0.03125 c 0,-1.531774 -1.3769011,-2.718718 -2.9999647,-2.718718 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:url(#linearGradient3417);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00012147;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- id="path2880-5-3" />
- </g>
+ <path
+ sodipodi:nodetypes="sccccsscscsscccccccsccscscsscccss"
+ inkscape:connector-curvature="0"
+ d="M 8.0037806,-1.6024174e-5 C 6.3807201,-1.6024174e-5 5.0038159,1.186928 5.0038159,2.718703 c 0.011519,0.48415 0.054822,1.081172 0.3437465,2.343722 l 0,0.03125 0.031247,0.03125 c 0.092751,0.265671 0.2277248,0.417644 0.406245,0.624993 0.1785202,0.207349 0.3913525,0.451395 0.5937433,0.656242 0.023812,0.0241 0.039074,0.03903 0.062494,0.06251 0.040137,0.174662 0.088761,0.362633 0.1249979,0.531244 0.096423,0.448603 0.086533,0.766283 0.062505,0.874989 C 5.9313479,8.119786 5.0636516,8.411419 4.2850726,8.749892 3.84796,8.93992 3.4524206,9.10961 3.1288352,9.312386 2.8052509,9.515163 2.4834413,9.668364 2.3788448,10.124877 c -0.00134,0.02081 -0.00134,0.04169 0,0.06251 -0.1022081,0.938467 -0.2568165,2.318487 -0.3749957,3.249962 -0.025513,0.196072 0.077829,0.402763 0.2499968,0.499994 1.4136624,0.763602 3.5852136,1.070932 5.7499327,1.062488 2.1647184,-0.0084 4.3189754,-0.333832 5.6874324,-1.062488 0.172166,-0.09723 0.275513,-0.303922 0.249997,-0.499994 -0.03773,-0.291163 -0.08408,-0.947718 -0.124999,-1.593732 -0.04092,-0.646014 -0.07644,-1.281486 -0.124994,-1.656231 -0.01694,-0.09289 -0.06086,-0.180706 -0.125,-0.249997 -0.43471,-0.51909 -1.084186,-0.836417 -1.843728,-1.156236 -0.693418,-0.291975 -1.50634,-0.595182 -2.3124721,-0.937489 -0.045118,-0.100507 -0.089936,-0.392929 0,-0.84374 C 9.4341669,6.878873 9.4719829,6.749222 9.5037669,6.624928 9.5795229,6.540078 9.63857,6.47074 9.7225145,6.374931 9.9015494,6.170591 10.093923,5.956233 10.253757,5.749939 10.413593,5.543644 10.544361,5.366667 10.628753,5.124945 L 10.66,5.093695 c 0.326637,-1.318279 0.326807,-1.868373 0.343747,-2.343723 l 0,-0.03125 C 11.003747,1.186948 9.6268455,3.9858261e-6 8.0037819,3.9858261e-6 z"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00012147000000007;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ id="path6033" />
+ <path
+ id="path2880-5-3"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00012147000000007;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="m 8.0037806,0.99998399 c -1.6230605,0 -2.9999647,1.18694401 -2.9999647,2.71871901 0.011519,0.48415 0.054822,1.081172 0.3437465,2.343722 l 0,0.03125 0.031247,0.03125 c 0.092751,0.265671 0.2277248,0.417644 0.406245,0.624993 0.1785202,0.207349 0.3913525,0.451395 0.5937433,0.656242 0.023812,0.0241 0.039074,0.03903 0.062494,0.06251 0.040137,0.174662 0.088761,0.362633 0.1249979,0.531244 0.096423,0.448603 0.086533,0.766283 0.062505,0.874989 C 5.9313479,9.119786 5.0636516,9.411419 4.2850726,9.749892 3.84796,9.93992 3.4524206,10.10961 3.1288352,10.312386 c -0.3235843,0.202777 -0.6453939,0.355978 -0.7499904,0.812491 -0.00134,0.02081 -0.00134,0.04169 0,0.06251 -0.1022081,0.938467 -0.2568165,2.318487 -0.3749957,3.249962 -0.025513,0.196072 0.077829,0.402763 0.2499968,0.499994 1.4136624,0.763602 3.5852136,1.070932 5.7499327,1.062488 2.1647184,-0.0084 4.3189754,-0.333832 5.6874324,-1.062488 0.172166,-0.09723 0.275513,-0.303922 0.249997,-0.499994 -0.03773,-0.291163 -0.08408,-0.947718 -0.124999,-1.593732 -0.04092,-0.646014 -0.07644,-1.281486 -0.124994,-1.656231 -0.01694,-0.09289 -0.06086,-0.180706 -0.125,-0.249997 -0.43471,-0.51909 -1.084186,-0.836417 -1.843728,-1.156236 -0.693418,-0.291975 -1.50634,-0.595182 -2.3124721,-0.937489 -0.045118,-0.100507 -0.089936,-0.392929 0,-0.84374 C 9.4341669,7.878873 9.4719829,7.749222 9.5037669,7.624928 9.5795229,7.540078 9.63857,7.47074 9.7225145,7.374931 9.9015494,7.170591 10.093923,6.956233 10.253757,6.749939 10.413593,6.543644 10.544361,6.366667 10.628753,6.124945 L 10.66,6.093695 c 0.326637,-1.318279 0.326807,-1.868373 0.343747,-2.343723 l 0,-0.03125 c 0,-1.531774 -1.3769015,-2.718718 -2.9999651,-2.718718 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sccccsscscsscccccccsccscscsscccss" />
</g>
</svg>
diff --git a/settings/img/users.png b/settings/img/users.png
index 79ad3d667e1..a811af47c1c 100644
--- a/settings/img/users.png
+++ b/settings/img/users.png
Binary files differ
diff --git a/settings/img/users.svg b/settings/img/users.svg
index 1c8c8955693..5ef31b763bb 100644
--- a/settings/img/users.svg
+++ b/settings/img/users.svg
@@ -14,9 +14,9 @@
width="16"
height="16"
id="svg11300"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="personal.svg"
- inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/personal.png"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="users.svg"
+ inkscape:export-filename="users.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
@@ -41,16 +41,16 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
- inkscape:window-height="776"
+ inkscape:window-height="745"
id="namedview24"
showgrid="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="22.627418"
- inkscape:cx="14.025105"
+ inkscape:cx="6.55629"
inkscape:cy="9.2202448"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g4146">
<inkscape:grid
@@ -1691,16 +1691,6 @@
style="stop-color:#363636;stop-opacity:1"
offset="1" />
</linearGradient>
- <linearGradient
- y2="20.074369"
- x2="14.152531"
- y1="-1.4095211"
- x1="14.501121"
- gradientTransform="matrix(0.6858824,0,0,0.68591053,-5.3691237,-18.974705)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3437"
- xlink:href="#linearGradient3587-6-5-19"
- inkscape:collect="always" />
</defs>
<g
transform="matrix(0.78786264,0,0,0.78786264,-3.1483699,0.44173984)"
@@ -1719,25 +1709,15 @@
style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
<g
id="g4146">
- <g
- id="g4309"
- transform="translate(4.0000002,19.999999)">
- <g
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
- id="g3743-9-4-9"
- transform="matrix(0.68591077,0,0,0.68591077,-6.7409611,-17.975799)">
- <path
- d="M 8,1 C 6.3769202,1 5,2.1869577 5,3.71875 5.011517,4.2029062 5.05482,4.7999354 5.34375,6.0625 l 0,0.03125 L 5.375,6.125 C 5.467756,6.3906733 5.6027279,6.5426488 5.78125,6.75 5.9597721,6.9573512 6.1726069,7.2014001 6.375,7.40625 6.398811,7.43035 6.414077,7.445288 6.4375,7.46875 6.47764,7.6434131 6.52626,7.8313866 6.5625,8 6.65892,8.4486073 6.64903,8.7662912 6.625,8.875 5.9275445,9.1198852 5.0598384,9.4115215 4.28125,9.75 3.8441326,9.9400296 3.4485889,10.109721 3.125,10.3125 c -0.3235889,0.202779 -0.6454015,0.355982 -0.75,0.8125 -0.0013,0.02081 -0.0013,0.04169 0,0.0625 -0.1022115,0.938479 -0.2568187,2.318515 -0.375,3.25 -0.025515,0.196074 0.077832,0.402768 0.25,0.5 C 3.6636791,15.701111 5.8352555,16.008445 8,16 c 2.164744,-0.0084 4.319026,-0.333835 5.6875,-1.0625 0.172168,-0.09723 0.275515,-0.303926 0.25,-0.5 -0.03773,-0.291166 -0.08408,-0.947729 -0.125,-1.59375 -0.04092,-0.646021 -0.07644,-1.281501 -0.125,-1.65625 -0.01694,-0.09289 -0.06085,-0.180708 -0.125,-0.25 C 13.127785,10.418403 12.478302,10.101073 11.71875,9.78125 11.025324,9.4892706 10.212392,9.1860601 9.40625,8.84375 9.36113,8.7432405 9.316313,8.4508168 9.40625,8 9.4304,7.8789473 9.4682151,7.7492945 9.5,7.625 9.575755,7.5401485 9.6348046,7.4708101 9.71875,7.375 9.897787,7.1706581 10.090163,6.9562971 10.25,6.75 10.409837,6.5437029 10.540606,6.3667247 10.625,6.125 L 10.65625,6.09375 C 10.98289,4.7754556 10.983061,4.2253548 11,3.75 L 11,3.71875 C 11,2.1869583 9.623082,1 8,1 z m 8.580821,-2.4948177 c -2.366287,0 -4.373697,1.73046459 -4.373697,3.9636633 0.01679,0.7058509 0.07992,1.5762593 0.501153,3.4169511 l 0,0.045559 0.04556,0.045559 c 0.135229,0.3873249 0.332004,0.6088898 0.592271,0.911187 0.260268,0.3022971 0.570559,0.6580958 0.865628,0.9567463 0.03471,0.035135 0.05697,0.056914 0.09112,0.091119 0.05852,0.2546412 0.129403,0.5286876 0.182237,0.7745089 0.140571,0.6540242 0.126152,1.1171753 0.09112,1.2756618 -1.01682,0.3570183 -2.281848,0.7821943 -3.416951,1.2756623 -0.637273,0.277044 -1.2139362,0.524437 -1.6856962,0.820068 -0.47176,0.295631 -0.9409303,0.518986 -1.0934244,1.184543 -0.0019,0.03034 -0.0019,0.06078 0,0.09112 -0.149014,1.368208 -0.3744158,3.380161 -0.5467122,4.738172 -0.037198,0.285856 0.1134712,0.587195 0.3644748,0.72895 2.061002,1.113268 5.226941,1.56133 8.38292,1.549018 3.155979,-0.01225 6.296704,-0.486698 8.291802,-1.549018 0.251003,-0.141752 0.401673,-0.443094 0.364474,-0.72895 -0.05501,-0.424491 -0.12258,-1.381693 -0.182237,-2.323527 -0.05966,-0.941833 -0.111442,-1.868299 -0.182237,-2.414645 -0.0247,-0.135424 -0.08871,-0.263454 -0.182238,-0.364475 -0.63377,-0.756791 -1.580651,-1.219426 -2.688001,-1.685696 -1.010946,-0.425676 -2.196118,-0.867727 -3.371392,-1.3667807 -0.06578,-0.1465327 -0.131119,-0.5728569 0,-1.2301024 0.03521,-0.1764826 0.09034,-0.3655033 0.136678,-0.5467122 0.110443,-0.1237049 0.196531,-0.2247933 0.318915,-0.3644747 0.261018,-0.2979099 0.541483,-0.6104266 0.774509,-0.911187 0.233026,-0.3007604 0.423674,-0.5587767 0.546712,-0.911187 l 0.04556,-0.045559 c 0.476208,-1.9219403 0.476457,-2.7239318 0.501153,-3.4169512 l 0,-0.045559 c 0,-2.23319784 -2.007408,-3.9636633 -4.373698,-3.9636633 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.6;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00012147;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- transform="translate(1.9999393,0.00161961)"
- id="path2880-7-3-9"
- inkscape:connector-curvature="0" />
- </g>
- <path
- d="m 0.1179355,-18.288795 c -1.1132415,0 -2.0576469,0.814147 -2.0576469,1.86482 0.0079,0.332088 0.037602,0.741596 0.2357724,1.607602 l 0,0.02144 0.021432,0.02143 c 0.063617,0.182229 0.1561942,0.28647 0.2786394,0.428695 0.1224453,0.142224 0.268425,0.30962 0.4072429,0.450128 0.016332,0.01653 0.0268,0.02677 0.042864,0.04288 0.02753,0.119804 0.060881,0.248737 0.085735,0.36439 0.066135,0.307705 0.059353,0.525608 0.042871,0.600171 -0.4783719,0.16797 -1.0735165,0.368006 -1.6075363,0.600171 -0.2998113,0.130344 -0.5711079,0.246737 -0.7930521,0.385825 -0.2219433,0.139089 -0.4426695,0.244172 -0.5144111,0.557303 -9.199e-4,0.01427 -9.199e-4,0.0286 0,0.04288 -0.070103,0.643711 -0.176148,1.5902928 -0.257206,2.2292088 -0.017499,0.134489 0.053382,0.276262 0.1714704,0.342955 0.9696174,0.523769 2.4590634,0.734572 3.9438235,0.72878 1.4847593,-0.0058 2.9623436,-0.228982 3.9009551,-0.72878 0.118087,-0.06669 0.1889717,-0.208466 0.1714705,-0.342955 -0.025879,-0.199714 -0.05767,-0.650058 -0.085735,-1.0931708 -0.028067,-0.443113 -0.05243,-0.878995 -0.085733,-1.136039 -0.01162,-0.06372 -0.041743,-0.12395 -0.085737,-0.171478 -0.2981634,-0.356053 -0.7436327,-0.573714 -1.2645956,-0.793083 -0.4756083,-0.200271 -1.0331837,-0.408247 -1.5861019,-0.643041 -0.030946,-0.06894 -0.061686,-0.269518 0,-0.578737 0.016565,-0.08303 0.042503,-0.171961 0.064303,-0.257217 0.05196,-0.0582 0.09246,-0.10576 0.1500368,-0.171477 0.1227983,-0.140161 0.2547452,-0.287193 0.3643743,-0.428694 0.1096299,-0.141502 0.1993223,-0.262893 0.257206,-0.428695 l 0.021432,-0.02144 c 0.2240371,-0.904232 0.2241538,-1.281552 0.2357725,-1.607603 l 0,-0.02143 c 0,-1.050672 -0.9444033,-1.864819 -2.057647,-1.864819 z m 5.8858451,-1.711221 c -1.6230605,0 -2.9999647,1.186944 -2.9999647,2.718719 0.011519,0.48415 0.054822,1.081172 0.3437465,2.343722 l 0,0.03125 0.031247,0.03125 c 0.092751,0.265671 0.2277248,0.417644 0.406245,0.624993 0.1785202,0.207349 0.3913525,0.451395 0.5937433,0.656242 0.023812,0.0241 0.039074,0.03903 0.062494,0.06251 0.040137,0.174662 0.088761,0.362633 0.1249979,0.531244 0.096423,0.448603 0.086533,0.766283 0.062505,0.874989 -0.6974467,0.244883 -1.565143,0.536516 -2.343722,0.874989 -0.4371126,0.190028 -0.832652,0.359718 -1.1562374,0.562494 -0.32358434,0.202777 -0.64539391,0.355978 -0.7499904,0.812491 -0.001341,0.02081 -0.001341,0.04169 0,0.06251 -0.10220809,0.938467 -0.25681652,2.318487 -0.37499572,3.249962 -0.02551335,0.196072 0.07782913,0.402763 0.24999681,0.499994 1.41366241,0.763602 3.58521361,1.070932 5.74993271,1.062488 2.1647181,-0.0084 4.3189754,-0.333832 5.6874324,-1.062488 0.172166,-0.09723 0.275513,-0.303922 0.249997,-0.499994 -0.03773,-0.291163 -0.08408,-0.947718 -0.124999,-1.593732 -0.04092,-0.646014 -0.07644,-1.281486 -0.124994,-1.656231 -0.01694,-0.09289 -0.06086,-0.180706 -0.125,-0.249997 -0.43471,-0.51909 -1.084186,-0.836417 -1.8437284,-1.156236 -0.6934176,-0.291975 -1.5063396,-0.595182 -2.3124717,-0.937489 -0.045118,-0.100507 -0.089936,-0.392929 0,-0.84374 0.024152,-0.121051 0.061968,-0.250702 0.093752,-0.374996 0.075756,-0.08485 0.1348031,-0.154188 0.2187476,-0.249997 0.1790349,-0.20434 0.371408,-0.418698 0.5312428,-0.624992 0.1598359,-0.206295 0.2906037,-0.383272 0.3749958,-0.624994 l 0.031247,-0.03125 c 0.3266369,-1.318279 0.3268071,-1.868373 0.3437465,-2.343723 l 0,-0.03125 c 0,-1.531774 -1.3769011,-2.718718 -2.9999647,-2.718718 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.7;color:#000000;fill:url(#linearGradient3437);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00012147;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- id="path2880-5-3-9-2"
- inkscape:connector-curvature="0" />
- </g>
+ <path
+ d="m 4.1179357,1.711205 c -1.1132415,0 -2.0576469,0.814147 -2.0576469,1.86482 0.0079,0.332088 0.037602,0.741596 0.2357724,1.607602 l 0,0.02144 0.021432,0.02143 c 0.063617,0.182229 0.1561942,0.28647 0.2786394,0.428695 0.1224453,0.142224 0.268425,0.30962 0.4072429,0.450128 0.016332,0.01653 0.0268,0.02677 0.042864,0.04288 0.02753,0.119804 0.060881,0.248737 0.085735,0.36439 0.066135,0.307705 0.059353,0.525608 0.042871,0.600171 C 2.6964736,7.280731 2.101329,7.480767 1.5673092,7.712932 1.2674979,7.843276 0.9962013,7.959669 0.7742571,8.098757 0.5523138,8.237846 0.3315876,8.342929 0.259846,8.65606 c -9.199e-4,0.01427 -9.199e-4,0.0286 0,0.04288 -0.070103,0.643711 -0.176148,1.590293 -0.257206,2.229209 -0.017499,0.134489 0.053382,0.276262 0.1714704,0.342955 0.9696174,0.523769 2.4590634,0.734572 3.9438235,0.72878 1.4847593,-0.0058 2.9623436,-0.228982 3.9009551,-0.72878 0.118087,-0.06669 0.1889717,-0.208466 0.1714705,-0.342955 C 8.1644805,10.728435 8.1326895,10.278091 8.1046245,9.834978 8.0765575,9.391865 8.0521945,8.955983 8.0188915,8.698939 8.0072715,8.635219 7.9771485,8.574989 7.9331545,8.527461 7.6349911,8.171408 7.1895218,7.953747 6.6685589,7.734378 6.1929506,7.534107 5.6353752,7.326131 5.082457,7.091337 5.051511,7.022397 5.020771,6.821819 5.082457,6.5126 5.099022,6.42957 5.12496,6.340639 5.14676,6.255383 5.19872,6.197183 5.23922,6.149623 5.2967968,6.083906 5.4195951,5.943745 5.551542,5.796713 5.6611711,5.655212 5.770801,5.51371 5.8604934,5.392319 5.9183771,5.226517 l 0.021432,-0.02144 C 6.1638462,4.300845 6.1639629,3.923525 6.1755816,3.597474 l 0,-0.02143 c 0,-1.050672 -0.9444033,-1.864819 -2.057647,-1.864819 z M 10.003781,-1.6024174e-5 C 8.3807203,-1.6024174e-5 7.0038161,1.186928 7.0038161,2.718703 c 0.011519,0.48415 0.054822,1.081172 0.3437465,2.343722 l 0,0.03125 0.031247,0.03125 c 0.092751,0.265671 0.2277248,0.417644 0.406245,0.624993 0.1785202,0.207349 0.3913525,0.451395 0.5937433,0.656242 0.023812,0.0241 0.039074,0.03903 0.062494,0.06251 0.040137,0.174662 0.088761,0.362633 0.1249979,0.531244 0.096423,0.448603 0.086533,0.766283 0.062505,0.874989 C 7.9313481,8.119786 7.0636518,8.411419 6.2850728,8.749892 5.8479602,8.93992 5.4524208,9.10961 5.1288354,9.312386 4.8052511,9.515163 4.4834415,9.668364 4.378845,10.124877 c -0.00134,0.02081 -0.00134,0.04169 0,0.06251 -0.1022081,0.938467 -0.2568165,2.318487 -0.3749957,3.249962 -0.025513,0.196072 0.077829,0.402763 0.2499968,0.499994 1.4136624,0.763602 3.5852136,1.070932 5.7499329,1.062488 2.164718,-0.0084 4.318975,-0.333832 5.687432,-1.062488 0.172166,-0.09723 0.275513,-0.303922 0.249997,-0.499994 -0.03773,-0.291163 -0.08408,-0.947718 -0.124999,-1.593732 -0.04092,-0.646014 -0.07644,-1.281486 -0.124994,-1.656231 -0.01694,-0.09289 -0.06086,-0.180706 -0.125,-0.249997 -0.43471,-0.51909 -1.084186,-0.836417 -1.843728,-1.156236 -0.693418,-0.291975 -1.50634,-0.595182 -2.312472,-0.937489 -0.04512,-0.100507 -0.08994,-0.392929 0,-0.84374 0.02415,-0.121051 0.06197,-0.250702 0.09375,-0.374996 0.07576,-0.08485 0.134803,-0.154188 0.218748,-0.249997 0.179035,-0.20434 0.371408,-0.418698 0.531242,-0.624992 0.159836,-0.206295 0.290604,-0.383272 0.374996,-0.624994 L 12.66,5.093695 c 0.326637,-1.318279 0.326807,-1.868373 0.343747,-2.343723 l 0,-0.03125 C 13.003747,1.186948 11.626846,3.9858261e-6 10.003782,3.9858261e-6 z"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00012147000000007;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ id="path5493"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path2880-5-3-9-2"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00012147000000007;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="m 4.1179357,2.711205 c -1.1132415,0 -2.0576469,0.814147 -2.0576469,1.86482 0.0079,0.332088 0.037602,0.741596 0.2357724,1.607602 l 0,0.02144 0.021432,0.02143 c 0.063617,0.182229 0.1561942,0.28647 0.2786394,0.428695 0.1224453,0.142224 0.268425,0.30962 0.4072429,0.450128 0.016332,0.01653 0.0268,0.02677 0.042864,0.04288 0.02753,0.119804 0.060881,0.248737 0.085735,0.36439 0.066135,0.307705 0.059353,0.525608 0.042871,0.600171 C 2.6964736,8.280731 2.101329,8.480767 1.5673092,8.712932 1.2674979,8.843276 0.9962013,8.959669 0.7742571,9.098757 0.5523138,9.237846 0.3315876,9.342929 0.259846,9.65606 c -9.199e-4,0.01427 -9.199e-4,0.0286 0,0.04288 -0.070103,0.643711 -0.176148,1.590293 -0.257206,2.229209 -0.017499,0.134489 0.053382,0.276262 0.1714704,0.342955 0.9696174,0.523769 2.4590634,0.734572 3.9438235,0.72878 1.4847593,-0.0058 2.9623436,-0.228982 3.9009551,-0.72878 0.118087,-0.06669 0.1889717,-0.208466 0.1714705,-0.342955 -0.025879,-0.199714 -0.05767,-0.650058 -0.085735,-1.093171 C 8.0765575,10.391865 8.0521945,9.955983 8.0188915,9.698939 8.0072715,9.635219 7.9771485,9.574989 7.9331545,9.527461 7.6349911,9.171408 7.1895218,8.953747 6.6685589,8.734378 6.1929506,8.534107 5.6353752,8.326131 5.082457,8.091337 5.051511,8.022397 5.020771,7.821819 5.082457,7.5126 5.099022,7.42957 5.12496,7.340639 5.14676,7.255383 5.19872,7.197183 5.23922,7.149623 5.2967968,7.083906 5.4195951,6.943745 5.551542,6.796713 5.6611711,6.655212 5.770801,6.51371 5.8604934,6.392319 5.9183771,6.226517 l 0.021432,-0.02144 C 6.1638462,5.300845 6.1639629,4.923525 6.1755816,4.597474 l 0,-0.02143 c 0,-1.050672 -0.9444033,-1.864819 -2.057647,-1.864819 z M 10.003781,0.99998399 c -1.6230607,0 -2.9999649,1.18694401 -2.9999649,2.71871901 0.011519,0.48415 0.054822,1.081172 0.3437465,2.343722 l 0,0.03125 0.031247,0.03125 c 0.092751,0.265671 0.2277248,0.417644 0.406245,0.624993 0.1785202,0.207349 0.3913525,0.451395 0.5937433,0.656242 0.023812,0.0241 0.039074,0.03903 0.062494,0.06251 0.040137,0.174662 0.088761,0.362633 0.1249979,0.531244 0.096423,0.448603 0.086533,0.766283 0.062505,0.874989 -0.6974467,0.244883 -1.565143,0.536516 -2.343722,0.874989 -0.4371126,0.190028 -0.832652,0.359718 -1.1562374,0.562494 -0.3235843,0.202777 -0.6453939,0.355978 -0.7499904,0.812491 -0.00134,0.02081 -0.00134,0.04169 0,0.06251 -0.1022081,0.938467 -0.2568165,2.318487 -0.3749957,3.249962 -0.025513,0.196072 0.077829,0.402763 0.2499968,0.499994 1.4136624,0.763602 3.5852136,1.070932 5.7499329,1.062488 2.164718,-0.0084 4.318975,-0.333832 5.687432,-1.062488 0.172166,-0.09723 0.275513,-0.303922 0.249997,-0.499994 -0.03773,-0.291163 -0.08408,-0.947718 -0.124999,-1.593732 -0.04092,-0.646014 -0.07644,-1.281486 -0.124994,-1.656231 -0.01694,-0.09289 -0.06086,-0.180706 -0.125,-0.249997 -0.43471,-0.51909 -1.084186,-0.836417 -1.843728,-1.156236 -0.693418,-0.291975 -1.50634,-0.595182 -2.312472,-0.937489 -0.04512,-0.100507 -0.08994,-0.392929 0,-0.84374 0.02415,-0.121051 0.06197,-0.250702 0.09375,-0.374996 0.07576,-0.08485 0.134803,-0.154188 0.218748,-0.249997 0.179035,-0.20434 0.371408,-0.418698 0.531242,-0.624992 0.159836,-0.206295 0.290604,-0.383272 0.374996,-0.624994 L 12.66,6.093695 c 0.326637,-1.318279 0.326807,-1.868373 0.343747,-2.343723 l 0,-0.03125 c 0,-1.531774 -1.376901,-2.718718 -2.999965,-2.718718 z" />
</g>
</svg>
diff --git a/settings/js/admin.js b/settings/js/admin.js
index 95b7a503c27..ab218377fb3 100644
--- a/settings/js/admin.js
+++ b/settings/js/admin.js
@@ -30,4 +30,8 @@ $(document).ready(function(){
}
OC.AppConfig.setValue('core', $(this).attr('name'), value);
});
+
+ $('#security').change(function(){
+ $.post(OC.filePath('settings','ajax','setsecurity.php'), { enforceHTTPS: $('#enforceHTTPSEnabled').val() },function(){} );
+ });
});
diff --git a/settings/js/apps-custom.php b/settings/js/apps-custom.php
new file mode 100644
index 00000000000..d827dfc7058
--- /dev/null
+++ b/settings/js/apps-custom.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright (c) 2013 Lukas Reschke <lukas@statuscode.ch>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// Check if admin user
+OC_Util::checkAdminUser();
+
+// Set the content type to JSON
+header('Content-type: application/json');
+
+// Disallow caching
+header("Cache-Control: no-cache, must-revalidate");
+header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
+
+$combinedApps = OC_App::listAllApps();
+
+foreach($combinedApps as $app) {
+ echo("appData_".$app['id']."=".json_encode($app));
+ echo("\n");
+}
+
+echo ("var appid =".json_encode($_GET['appid']).";"); \ No newline at end of file
diff --git a/settings/js/apps.js b/settings/js/apps.js
index c4c36b4bb12..3bc3488e490 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -24,6 +24,14 @@ OC.Settings.Apps = OC.Settings.Apps || {
page.find('span.author').text(app.author);
page.find('span.licence').text(app.licence);
+ if (app.update != false) {
+ page.find('input.update').show();
+ page.find('input.update').data('appid', app.id);
+ page.find('input.update').attr('value',t('settings', 'Update to {appversion}', {appversion:app.update}));
+ } else {
+ page.find('input.update').hide();
+ }
+
page.find('input.enable').show();
page.find('input.enable').val((app.active) ? t('settings', 'Disable') : t('settings', 'Enable'));
page.find('input.enable').data('appid', app.id);
@@ -44,6 +52,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
appData = appitem.data('app');
appData.active = !active;
appitem.data('app', appData);
+ element.val(t('settings','Please wait....'));
if(active) {
$.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appid},function(result) {
if(!result || result.status!='success') {
@@ -70,6 +79,20 @@ OC.Settings.Apps = OC.Settings.Apps || {
$('#leftcontent li[data-id="'+appid+'"]').addClass('active');
}
},
+ updateApp:function(appid, element) {
+ console.log('updateApp:', appid, element);
+ element.val(t('settings','Updating....'));
+ $.post(OC.filePath('settings','ajax','updateapp.php'),{appid:appid},function(result) {
+ if(!result || result.status!='success') {
+ OC.dialogs.alert(t('settings','Error while updating app'),t('settings','Error'));
+ }
+ else {
+ element.val(t('settings','Updated'));
+ element.hide();
+ }
+ },'json');
+ },
+
insertApp:function(appdata) {
var applist = $('#leftcontent li');
var app =
@@ -111,10 +134,10 @@ OC.Settings.Apps = OC.Settings.Apps || {
if(container.children('li[data-id="'+entry.id+'"]').length === 0){
var li=$('<li></li>');
li.attr('data-id', entry.id);
- var a=$('<a></a>');
- a.attr('style', 'background-image: url('+entry.icon+')');
+ var img= $('<img></img>').attr({ src: entry.icon, class:'icon'});
+ var a=$('<a></a>').attr('href', entry.href);
a.text(entry.name);
- a.attr('href', entry.href);
+ a.prepend(img);
li.append(a);
container.append(li);
}
@@ -154,6 +177,13 @@ $(document).ready(function(){
OC.Settings.Apps.enableApp(appid, active, element);
}
});
+ $('#rightcontent input.update').click(function(){
+ var element = $(this);
+ var appid=$(this).data('appid');
+ if(appid) {
+ OC.Settings.Apps.updateApp(appid, element);
+ }
+ });
if(appid) {
var item = $('#leftcontent li[data-id="'+appid+'"]');
diff --git a/settings/js/isadmin.php b/settings/js/isadmin.php
new file mode 100644
index 00000000000..8b31f8a7cf9
--- /dev/null
+++ b/settings/js/isadmin.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Copyright (c) 2013 Lukas Reschke <lukas@statuscode.ch>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// Set the content type to Javascript
+header("Content-type: text/javascript");
+
+// Disallow caching
+header("Cache-Control: no-cache, must-revalidate");
+header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
+
+if (OC_User::isAdminUser(OC_User::getUser())) {
+ echo("var isadmin = true;");
+} else {
+ echo("var isadmin = false;");
+} \ No newline at end of file
diff --git a/settings/js/personal.js b/settings/js/personal.js
index a866e321ad6..d9455b3786b 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -31,6 +31,33 @@ $(document).ready(function(){
}
});
+
+ $("#displaynamebutton").click( function(){
+ if ($('#displayName').val() != '' ) {
+ // Serialize the data
+ var post = $( "#displaynameform" ).serialize();
+ $('#displaynamechanged').hide();
+ $('#displaynemerror').hide();
+ // Ajax foo
+ $.post( 'ajax/changedisplayname.php', post, function(data){
+ if( data.status == "success" ){
+ $('#displaynamechanged').show();
+ }
+ else{
+ $('#newdisplayname').val(data.data.displayName)
+ $('#displaynameerror').html( data.data.message );
+ $('#displaynameerror').show();
+ }
+ });
+ return false;
+ } else {
+ $('#displayName').val($('#oldDisplayName').val());
+ $('#displaynamechanged').hide();
+ $('#displaynameerror').show();
+ return false;
+ }
+
+ });
$('#lostpassword #email').blur(function(event){
if ($(this).val() == this.defaultValue){
diff --git a/settings/js/users.js b/settings/js/users.js
index b0e30feb80c..094cddda294 100644
--- a/settings/js/users.js
+++ b/settings/js/users.js
@@ -26,9 +26,8 @@ var UserList = {
UserList.deleteCanceled = false;
// Provide user with option to undo
- $('#notification').html(t('users', 'deleted') + ' ' + uid + '<span class="undo">' + t('users', 'undo') + '</span>');
$('#notification').data('deleteuser', true);
- $('#notification').fadeIn();
+ OC.Notification.showHtml(t('users', 'deleted') + ' ' + uid + '<span class="undo">' + t('users', 'undo') + '</span>');
},
/**
@@ -53,7 +52,7 @@ var UserList = {
success:function (result) {
if (result.status == 'success') {
// Remove undo option, & remove user from table
- $('#notification').fadeOut();
+ OC.Notification.hide();
$('tr').filterAttr('data-uid', UserList.deleteUid).remove();
UserList.deleteCanceled = true;
if (ready) {
@@ -70,7 +69,9 @@ var UserList = {
add:function (username, groups, subadmin, quota, sort) {
var tr = $('tbody tr').first().clone();
tr.attr('data-uid', username);
+ tr.attr('data-displayName', username);
tr.find('td.name').text(username);
+ tr.find('td.displayName').text(username);
var groupsSelect = $('<select multiple="multiple" class="groupsselect" data-placehoder="Groups" title="' + t('settings', 'Groups') + '"></select>').attr('data-username', username).attr('data-user-groups', groups);
tr.find('td.groups').empty();
if (tr.find('td.subadmins').length > 0) {
@@ -177,9 +178,9 @@ var UserList = {
} else {
checkHandeler = false;
}
- var addGroup = function (group) {
+ var addGroup = function (select, group) {
$('select[multiple]').each(function (index, element) {
- if ($(element).find('option[value="' + group + '"]').length == 0) {
+ if ($(element).find('option[value="' + group + '"]').length === 0 && select.data('msid') !== $(element).data('msid')) {
$(element).append('<option value="' + group + '">' + group + '</option>');
}
})
@@ -193,10 +194,11 @@ var UserList = {
element.multiSelect({
createCallback:addGroup,
createText:label,
+ selectedFirst:true,
checked:checked,
oncheck:checkHandeler,
onuncheck:checkHandeler,
- minWidth:100,
+ minWidth:100
});
}
if ($(element).attr('class') == 'subadminsselect') {
@@ -231,16 +233,18 @@ var UserList = {
checked:checked,
oncheck:checkHandeler,
onuncheck:checkHandeler,
- minWidth:100,
+ minWidth:100
});
}
}
-}
+};
$(document).ready(function () {
$('tbody tr:last').bind('inview', function (event, isInView, visiblePartX, visiblePartY) {
- UserList.update();
+ OC.Router.registerLoadedCallback(function(){
+ UserList.update();
+ });
});
function setQuota(uid, quota, ready) {
@@ -255,12 +259,11 @@ $(document).ready(function () {
);
}
-
$('select[multiple]').each(function (index, element) {
UserList.applyMultiplySelect($(element));
});
- $('td.remove>a').live('click', function (event) {
+ $('table').on('click', 'td.remove>a', function (event) {
var row = $(this).parent().parent();
var uid = $(row).attr('data-uid');
$(row).hide();
@@ -268,7 +271,7 @@ $(document).ready(function () {
UserList.do_delete(uid);
});
- $('td.password>img').live('click', function (event) {
+ $('table').on('click', 'td.password>img', function (event) {
event.stopPropagation();
var img = $(this);
var uid = img.parent().parent().attr('data-uid');
@@ -296,11 +299,45 @@ $(document).ready(function () {
img.css('display', '');
});
});
- $('td.password').live('click', function (event) {
+ $('table').on('click', 'td.password', function (event) {
+ $(this).children('img').click();
+ });
+
+ $('table').on('click', 'td.displayName>img', function (event) {
+ event.stopPropagation();
+ var img = $(this);
+ var uid = img.parent().parent().attr('data-uid');
+ var displayName = img.parent().parent().attr('data-displayName');
+ var input = $('<input type="text" value="'+displayName+'">');
+ img.css('display', 'none');
+ img.parent().children('span').replaceWith(input);
+ input.focus();
+ input.keypress(function (event) {
+ if (event.keyCode == 13) {
+ if ($(this).val().length > 0) {
+ $.post(
+ OC.filePath('settings', 'ajax', 'changedisplayname.php'),
+ {username:uid, displayName:$(this).val()},
+ function (result) {
+ }
+ );
+ input.blur();
+ } else {
+ input.blur();
+ }
+ }
+ });
+ input.blur(function () {
+ $(this).replaceWith($(this).val());
+ img.css('display', '');
+ });
+ });
+ $('table').on('click', 'td.displayName', function (event) {
$(this).children('img').click();
});
+
- $('select.quota, select.quota-user').live('change', function () {
+ $('select.quota, select.quota-user').on('change', function () {
var select = $(this);
var uid = $(this).parent().parent().parent().attr('data-uid');
var quota = $(this).val();
@@ -319,7 +356,7 @@ $(document).ready(function () {
$(select).data('previous', $(select).val());
})
- $('input.quota-other').live('change', function () {
+ $('input.quota-other').on('change', function () {
var uid = $(this).parent().parent().parent().attr('data-uid');
var quota = $(this).val();
var select = $(this).prev();
@@ -355,7 +392,7 @@ $(document).ready(function () {
}
});
- $('input.quota-other').live('blur', function () {
+ $('input.quota-other').on('blur', function () {
$(this).change();
})
@@ -388,7 +425,7 @@ $(document).ready(function () {
{
username:username,
password:password,
- groups:groups,
+ groups:groups
},
function (result) {
if (result.status != 'success') {
@@ -401,13 +438,13 @@ $(document).ready(function () {
);
});
// Handle undo notifications
- $('#notification').hide();
- $('#notification .undo').live('click', function () {
+ OC.Notification.hide();
+ $('#notification').on('click', '.undo', function () {
if ($('#notification').data('deleteuser')) {
$('tbody tr').filterAttr('data-uid', UserList.deleteUid).show();
UserList.deleteCanceled = true;
}
- $('#notification').fadeOut();
+ OC.Notification.hide();
});
UserList.useUndo = ('onbeforeunload' in window)
$(window).bind('beforeunload', function () {
diff --git a/settings/l10n/af_ZA.php b/settings/l10n/af_ZA.php
new file mode 100644
index 00000000000..f32b79b80f4
--- /dev/null
+++ b/settings/l10n/af_ZA.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Wagwoord",
+"New password" => "Nuwe wagwoord"
+);
diff --git a/settings/l10n/ar.php b/settings/l10n/ar.php
index d16e6ad10ea..509e7918f50 100644
--- a/settings/l10n/ar.php
+++ b/settings/l10n/ar.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "ÙØ´Ù„ تحميل القائمة من الآب ستور",
+"Authentication error" => "لم يتم التأكد من الشخصية بنجاح",
"Group already exists" => "المجموعة موجودة مسبقاً",
"Unable to add group" => "ÙØ´Ù„ Ø¥Ø¶Ø§ÙØ© المجموعة",
"Could not enable app. " => "ÙØ´Ù„ عملية ØªÙØ¹ÙŠÙ„ التطبيق",
"Email saved" => "تم Ø­ÙØ¸ البريد الإلكتروني",
"Invalid email" => "البريد الإلكتروني غير صالح",
-"OpenID Changed" => "تم تغيير ال OpenID",
-"Invalid request" => "طلبك غير Ù…Ùهوم",
"Unable to delete group" => "ÙØ´Ù„ إزالة المجموعة",
-"Authentication error" => "لم يتم التأكد من الشخصية بنجاح",
"Unable to delete user" => "ÙØ´Ù„ إزالة المستخدم",
"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",
"Disable" => "إيقاÙ",
"Enable" => "ØªÙØ¹ÙŠÙ„",
+"Error" => "خطأ",
"Saving..." => "Ø­ÙØ¸",
"__language_name__" => "__language_name__",
"Add your App" => "أض٠تطبيقاتك",
@@ -23,6 +23,7 @@
"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>",
+"Update" => "حدث",
"User Documentation" => "كتاب توثيق المستخدم",
"Administrator Documentation" => "كتاب توثيق المدير",
"Online Documentation" => "توثيق Ù…ØªÙˆÙØ± على الشبكة",
@@ -30,16 +31,11 @@
"Bugtracker" => "تعقب علة",
"Commercial Support" => "دعم تجاري",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "تم إستهلاك <strong>%s</strong> من Ø§Ù„Ù…ØªÙˆÙØ± <strong>%s</strong>",
-"Clients" => "الزبائن",
-"Download Desktop Clients" => "تحميل عملاء سطح المكتب",
-"Download Android Client" => "تحميل عميل آندرويد",
-"Download iOS Client" => "تحميل عميل آي أو أس",
"Password" => "كلمات السر",
"Your password was changed" => "لقد تم تغيير كلمة السر",
"Unable to change your password" => "لم يتم تعديل كلمة السر بنجاح",
"Current password" => "كلمات السر الحالية",
"New password" => "كلمات سر جديدة",
-"show" => "أظهر",
"Change password" => "عدل كلمة السر",
"Email" => "العنوان البريدي",
"Your email address" => "عنوانك البريدي",
@@ -50,7 +46,6 @@
"Use this address to connect to your ownCloud in your file manager" => "إستخدم هذا العنوان للإتصال بـ ownCloud ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª",
"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>.",
-"Name" => "الاسم",
"Groups" => "مجموعات",
"Create" => "انشئ",
"Other" => "شيء آخر",
diff --git a/settings/l10n/bg_BG.php b/settings/l10n/bg_BG.php
index 853e12812ed..6849f1f4c3a 100644
--- a/settings/l10n/bg_BG.php
+++ b/settings/l10n/bg_BG.php
@@ -1,9 +1,24 @@
<?php $TRANSLATIONS = array(
"Authentication error" => "Възникна проблем Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñта",
+"Language changed" => "Езикът е променен",
+"Invalid request" => "Ðевалидна заÑвка",
"Enable" => "Включено",
+"Error" => "Грешка",
+"__language_name__" => "__language_name__",
+"Add your App" => "Добавете Ваше приложение",
+"Select an App" => "Изберете приложение",
+"Update" => "ОбновÑване",
"Password" => "Парола",
+"Unable to change your password" => "ПромÑната на паролата не беше извършена",
+"Current password" => "Текуща парола",
+"New password" => "Ðова парола",
+"Change password" => "ПромÑна на паролата",
"Email" => "E-mail",
-"Name" => "Име",
+"Your email address" => "Ð’Ð°ÑˆÐ¸Ñ email адреÑ",
+"Language" => "Език",
+"Help translate" => "Помогнете Ñ Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð°",
"Groups" => "Групи",
+"Create" => "Създаване",
+"Other" => "Други",
"Delete" => "Изтриване"
);
diff --git a/settings/l10n/bn_BD.php b/settings/l10n/bn_BD.php
index 0b7983c6c1c..00bd3d0b0dd 100644
--- a/settings/l10n/bn_BD.php
+++ b/settings/l10n/bn_BD.php
@@ -1,46 +1,58 @@
<?php $TRANSLATIONS = array(
-"Unable to load list from App Store" => "অà§à¦¯à¦¾à¦ªà¦¸à§à¦Ÿà§‹à¦° থেকে তালিকা লোড করা সমà§à¦­à¦¬ হলো না",
-"Group already exists" => "গোষà§à¦ à§€à¦Ÿà¦¿ বিদà§à¦¯à¦®à¦¾à¦¨",
-"Unable to add group" => "গোষà§à¦ à§€ যোগ করতে পারা গেল না",
-"Could not enable app. " => "অà§à¦¯à¦¾à¦ª সকà§à¦°à¦¿à§Ÿ করা সমà§à¦­à¦¬ হলো না",
-"Email saved" => "ই-মেইল সংরকà§à¦·à¦£ করা হয়েছে",
+"Unable to load list from App Store" => "অà§à¦¯à¦¾à¦ªà¦¸à§à¦Ÿà§‹à¦° থেকে তালিকা লোড করতে সকà§à¦·à¦® নয়",
+"Authentication error" => "অনà§à¦®à§‹à¦¦à¦¨ ঘটিত সমসà§à¦¯à¦¾",
+"Group already exists" => "গোষà§à¦ à§€à¦Ÿà¦¿ পূরà§à¦¬ থেকেই বিদà§à¦¯à¦®à¦¾à¦¨",
+"Unable to add group" => "গোষà§à¦ à§€ যোগ করা সমà§à¦­à¦¬ হলো না",
+"Could not enable app. " => "অà§à¦¯à¦ªà¦Ÿà¦¿ সকà§à¦°à¦¿à§Ÿ করতে সকà§à¦·à¦® নয়।",
+"Email saved" => "ই-মেইল সংরকà§à¦·à¦¨ করা হয়েছে",
"Invalid email" => "ই-মেইলটি সঠিক নয়",
-"OpenID Changed" => "OpenID পরিবরà§à¦¤à¦¨ করা হয়েছে",
-"Invalid request" => "অননà§à¦®à§‹à¦¦à¦¿à¦¤ অনà§à¦°à§‹à¦§",
-"Unable to delete group" => "গোষà§à¦ à§€ মà§à¦›à§‡ ফেলা সমà§à¦­à¦¬ হলো না",
-"Authentication error" => "নিশà§à¦šà¦¿à¦¤à¦•রণে সমসà§à¦¯à¦¾ দেখা দিয়েছে",
-"Unable to delete user" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারি মà§à¦›à§‡ ফেলা সমà§à¦­à¦¬ হলো না",
+"Unable to delete group" => "গোষà§à¦ à§€ মà§à¦›à§‡ ফেলা সমà§à¦­à¦¬ হলো না ",
+"Unable to delete user" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী মà§à¦›à§‡ ফেলা সমà§à¦­à¦¬ হলো না ",
"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 গোষà§à¦ à§€ থেকে বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারীকে অপসারণ করা সমà§à¦­à¦¬ হলো না",
"Disable" => "নিষà§à¦•à§à¦°à¦¿à§Ÿ",
-"Enable" => "সকà§à¦°à¦¿à§Ÿ",
-"Saving..." => "সংরকà§à¦·à¦£ করা হচà§à¦›à§‡....",
-"__language_name__" => "_ভাষার_নাম_",
+"Enable" => "সকà§à¦°à¦¿à§Ÿ ",
+"Error" => "সমসà§à¦¯à¦¾",
+"Saving..." => "সংরকà§à¦·à¦£ করা হচà§à¦›à§‡..",
+"__language_name__" => "__language_name__",
"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>",
+"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>",
+"Update" => "পরিবরà§à¦§à¦¨",
+"User Documentation" => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•ারী সহায়িকা",
+"Administrator Documentation" => "পà§à¦°à¦¶à¦¾à¦¸à¦• সহায়িকা",
+"Online Documentation" => "অনলাইন সহায়িকা",
"Forum" => "ফোরাম",
"Bugtracker" => "বাগটà§à¦°à§à¦¯à¦¾à¦•ার",
"Commercial Support" => "বাণিজà§à¦¯à¦¿à¦• সাপোরà§à¦Ÿ",
-"Clients" => "কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ",
-"Download Desktop Clients" => "ডেসà§à¦•টপ কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ ডাউনলোড করà§à¦¨",
+"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "আপনি বà§à¦¯à¦¬à¦¹à¦¾à¦° করছেন <strong>%s</strong>, সà§à¦²à¦­ <strong>%s</strong> à¦à¦° মধà§à¦¯à§‡à¥¤",
"Password" => "কূটশবà§à¦¦",
-"Your password was changed" => "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পরিবরà§à¦¤à¦¨ করা হয়েছে",
-"Unable to change your password" => "কূটশবà§à¦¦ পরিবরà§à¦¤à¦¨ করা সমà§à¦­à¦¬ হলো না",
+"Your password was changed" => "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পরিবরà§à¦¤à¦¨ করা হয়েছে ",
+"Unable to change your password" => "আপনার কূটশবà§à¦¦à¦Ÿà¦¿ পরিবরà§à¦¤à¦¨ করতে সকà§à¦·à¦® নয়",
"Current password" => "বরà§à¦¤à¦®à¦¾à¦¨ কূটশবà§à¦¦",
"New password" => "নতà§à¦¨ কূটশবà§à¦¦",
-"show" => "পà§à¦°à¦¦à¦°à§à¦¶à¦¨",
-"Change password" => "কূটশবà§à¦¦ পরিবরà§à¦¤à¦¨ কর",
-"Email" => "ই-মেইল",
+"Change password" => "কূটশবà§à¦¦ পরিবরà§à¦¤à¦¨ করà§à¦¨",
+"Email" => "ই-মেইল ",
"Your email address" => "আপনার ই-মেইল ঠিকানা",
+"Fill in an email address to enable password recovery" => "কূটশবà§à¦¦ পূনরূদà§à¦§à¦¾à¦° সকà§à¦°à¦¿à§Ÿ করার জনà§à¦¯ ই-মেইল ঠিকানাটি পূরণ করà§à¦¨",
"Language" => "ভাষা",
-"Help translate" => "অনà§à¦¬à¦¾à¦¦ করতে সাহাযà§à¦¯ করà§à¦¨",
-"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\">উৎস কোড</a> <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr>à¦à¦° অধীনে লাইেসনà§à¦¸à¦•ৃত</a>.",
-"Name" => "নাম",
-"Groups" => "গোষà§à¦ à§€",
-"Create" => "তৈরি কর",
+"Help translate" => "অনà§à¦¬à¦¾à¦¦ করতে সহায়তা করà§à¦¨",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "আপনার ownCloud ঠসংযà§à¦•à§à¦¤ হতে à¦à¦‡ ঠিকানাটি আপনার ফাইল বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾à¦ªà¦•ে বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨",
+"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> à¦à¦° অধীনে লাইসেনà§à¦¸à¦•ৃত।",
+"Groups" => "গোষà§à¦ à§€à¦¸à¦®à§‚হ",
+"Create" => "তৈরী কর",
+"Default Storage" => "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ সংরকà§à¦·à¦£à¦¾à¦—ার",
+"Unlimited" => "অসীম",
"Other" => "অনà§à¦¯à¦¾à¦¨à§à¦¯",
-"Group Admin" => "গোষà§à¦ à§€ পà§à¦°à¦¶à¦¾à¦¸à¦¨",
+"Group Admin" => "গোষà§à¦ à§€ পà§à¦°à¦¶à¦¾à¦¸à¦•",
+"Storage" => "সংরকà§à¦·à¦£à¦¾à¦—ার",
+"Default" => "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤",
"Delete" => "মà§à¦›à§‡ ফেল"
);
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index cde7fd1cbf1..df1dd93ca6f 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "No s'ha pogut carregar la llista des de l'App Store",
+"Authentication error" => "Error d'autenticació",
+"Unable to change display name" => "No s'ha pogut canviar el nom a mostrar",
"Group already exists" => "El grup ja existeix",
"Unable to add group" => "No es pot afegir el grup",
"Could not enable app. " => "No s'ha pogut activar l'apliació",
"Email saved" => "S'ha desat el correu electrònic",
"Invalid email" => "El correu electrònic no és vàlid",
-"OpenID Changed" => "OpenID ha canviat",
-"Invalid request" => "Sol.licitud no vàlida",
"Unable to delete group" => "No es pot eliminar el grup",
-"Authentication error" => "Error d'autenticació",
"Unable to delete user" => "No es pot eliminar l'usuari",
"Language changed" => "S'ha canviat l'idioma",
+"Invalid request" => "Sol.licitud no vàlida",
"Admins can't remove themself from the admin group" => "Els administradors no es poden eliminar del grup admin",
"Unable to add user to group %s" => "No es pot afegir l'usuari al grup %s",
"Unable to remove user from group %s" => "No es pot eliminar l'usuari del grup %s",
+"Couldn't update app." => "No s'ha pogut actualitzar l'aplicació.",
+"Update to {appversion}" => "Actualitza a {appversion}",
"Disable" => "Desactiva",
"Enable" => "Activa",
+"Please wait...." => "Espereu...",
+"Updating...." => "Actualitzant...",
+"Error while updating app" => "Error en actualitzar l'aplicació",
+"Error" => "Error",
+"Updated" => "Actualitzada",
"Saving..." => "S'està desant...",
"__language_name__" => "Català",
"Add your App" => "Afegiu la vostra aplicació",
@@ -23,6 +30,7 @@
"Select an App" => "Seleccioneu una aplicació",
"See application page at apps.owncloud.com" => "Mireu la pàgina d'aplicacions a apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-propietat de <span class=\"author\"></span>",
+"Update" => "Actualitza",
"User Documentation" => "Documentació d'usuari",
"Administrator Documentation" => "Documentació d'administrador",
"Online Documentation" => "Documentació en línia",
@@ -30,17 +38,16 @@
"Bugtracker" => "Seguiment d'errors",
"Commercial Support" => "Suport comercial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Heu utilitzat <strong>%s</strong> d'un total disponible de <strong>%s</strong>",
-"Clients" => "Clients",
-"Download Desktop Clients" => "Baixa clients d'escriptori",
-"Download Android Client" => " Baixa el client per Android",
-"Download iOS Client" => "Baixa el client per iOS",
"Password" => "Contrasenya",
"Your password was changed" => "La seva contrasenya s'ha canviat",
"Unable to change your password" => "No s'ha pogut canviar la contrasenya",
"Current password" => "Contrasenya actual",
"New password" => "Contrasenya nova",
-"show" => "mostra",
"Change password" => "Canvia la contrasenya",
+"Display Name" => "Nom a mostrar",
+"Your display name was changed" => "El vostre nom a mostrar ha canviat",
+"Unable to change your display name" => "No s'ha pogut canviar el vostre nom a mostrar",
+"Change display name" => "Canvia el nom a mostrar",
"Email" => "Correu electrònic",
"Your email address" => "Correu electrònic",
"Fill in an email address to enable password recovery" => "Ompliu el correu electrònic per activar la recuperació de contrasenya",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Useu aquesta adreça per connectar amb ownCloud des del gestor de fitxers",
"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>.",
-"Name" => "Nom",
+"Login Name" => "Nom d'accés",
"Groups" => "Grups",
"Create" => "Crea",
"Default Storage" => "Emmagatzemament per defecte",
@@ -58,6 +65,8 @@
"Other" => "Un altre",
"Group Admin" => "Grup Admin",
"Storage" => "Emmagatzemament",
+"change display name" => "canvia el nom a mostrar",
+"set new password" => "estableix nova contrasenya",
"Default" => "Per defecte",
"Delete" => "Suprimeix"
);
diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php
index d86376d5672..de1917e5ab8 100644
--- a/settings/l10n/cs_CZ.php
+++ b/settings/l10n/cs_CZ.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Nelze naÄíst seznam z App Store",
+"Authentication error" => "Chyba ověření",
+"Unable to change display name" => "Nelze změnit zobrazované jméno",
"Group already exists" => "Skupina již existuje",
"Unable to add group" => "Nelze přidat skupinu",
"Could not enable app. " => "Nelze povolit aplikaci.",
"Email saved" => "E-mail uložen",
"Invalid email" => "Neplatný e-mail",
-"OpenID Changed" => "OpenID změněno",
-"Invalid request" => "Neplatný požadavek",
"Unable to delete group" => "Nelze smazat skupinu",
-"Authentication error" => "Chyba ověření",
"Unable to delete user" => "Nelze smazat uživatele",
"Language changed" => "Jazyk byl změněn",
+"Invalid request" => "Neplatný požadavek",
"Admins can't remove themself from the admin group" => "Správci se nemohou odebrat sami ze skupiny správců",
"Unable to add user to group %s" => "Nelze přidat uživatele do skupiny %s",
"Unable to remove user from group %s" => "Nelze odstranit uživatele ze skupiny %s",
+"Couldn't update app." => "Nelze aktualizovat aplikaci.",
+"Update to {appversion}" => "Aktualizovat na {appversion}",
"Disable" => "Zakázat",
"Enable" => "Povolit",
+"Please wait...." => "Čekejte prosím...",
+"Updating...." => "Aktualizuji...",
+"Error while updating app" => "Chyba při aktualizaci aplikace",
+"Error" => "Chyba",
+"Updated" => "Aktualizováno",
"Saving..." => "Ukládám...",
"__language_name__" => "ÄŒesky",
"Add your App" => "Přidat Vaší aplikaci",
@@ -23,6 +30,7 @@
"Select an App" => "Vyberte aplikaci",
"See application page at apps.owncloud.com" => "Více na stránce s aplikacemi na apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencováno <span class=\"author\"></span>",
+"Update" => "Aktualizovat",
"User Documentation" => "Uživatelská dokumentace",
"Administrator Documentation" => "Dokumentace správce",
"Online Documentation" => "Online dokumentace",
@@ -30,17 +38,16 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Placená podpora",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Používáte <strong>%s</strong> z <strong>%s</strong> dostupných",
-"Clients" => "Klienti",
-"Download Desktop Clients" => "Stáhnout klienty pro poÄítaÄ",
-"Download Android Client" => "Stáhnout klienta pro android",
-"Download iOS Client" => "Stáhnout klienta pro iOS",
"Password" => "Heslo",
"Your password was changed" => "Vaše heslo bylo změněno",
"Unable to change your password" => "Vaše heslo nelze změnit",
"Current password" => "SouÄasné heslo",
"New password" => "Nové heslo",
-"show" => "zobrazit",
"Change password" => "Změnit heslo",
+"Display Name" => "Zobrazované jméno",
+"Your display name was changed" => "Vaše zobrazované jméno bylo změněno",
+"Unable to change your display name" => "Nelze změnit vaše zobrazované jméno",
+"Change display name" => "Změnit zobrazované jméno",
"Email" => "E-mail",
"Your email address" => "Vaše e-mailová adresa",
"Fill in an email address to enable password recovery" => "Pro povolení změny hesla vyplňte adresu e-mailu",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Použijte tuto adresu pro připojení k vašemu ownCloud skrze správce souborů",
"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>.",
-"Name" => "Jméno",
+"Login Name" => "Přihlašovací jméno",
"Groups" => "Skupiny",
"Create" => "Vytvořit",
"Default Storage" => "Výchozí úložiště",
@@ -58,6 +65,8 @@
"Other" => "Jiná",
"Group Admin" => "Správa skupiny",
"Storage" => "Úložiště",
+"change display name" => "změnit zobrazované jméno",
+"set new password" => "nastavit nové heslo",
"Default" => "Výchozí",
"Delete" => "Smazat"
);
diff --git a/settings/l10n/da.php b/settings/l10n/da.php
index 7800bcfb6c4..0353eb2fba3 100644
--- a/settings/l10n/da.php
+++ b/settings/l10n/da.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Kunne ikke indlæse listen fra App Store",
+"Authentication error" => "Adgangsfejl",
"Group already exists" => "Gruppen findes allerede",
"Unable to add group" => "Gruppen kan ikke oprettes",
"Could not enable app. " => "Applikationen kunne ikke aktiveres.",
"Email saved" => "Email adresse gemt",
"Invalid email" => "Ugyldig email adresse",
-"OpenID Changed" => "OpenID ændret",
-"Invalid request" => "Ugyldig forespørgsel",
"Unable to delete group" => "Gruppen kan ikke slettes",
-"Authentication error" => "Adgangsfejl",
"Unable to delete user" => "Bruger kan ikke slettes",
"Language changed" => "Sprog ændret",
+"Invalid request" => "Ugyldig forespørgsel",
"Admins can't remove themself from the admin group" => "Administratorer kan ikke fjerne dem selv fra admin gruppen",
"Unable to add user to group %s" => "Brugeren kan ikke tilføjes til gruppen %s",
"Unable to remove user from group %s" => "Brugeren kan ikke fjernes fra gruppen %s",
"Disable" => "Deaktiver",
"Enable" => "Aktiver",
+"Error" => "Fejl",
"Saving..." => "Gemmer...",
"__language_name__" => "Dansk",
"Add your App" => "Tilføj din App",
@@ -23,6 +23,7 @@
"Select an App" => "Vælg en App",
"See application page at apps.owncloud.com" => "Se applikationens side på apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenseret af <span class=\"author\"></span>",
+"Update" => "Opdater",
"User Documentation" => "Brugerdokumentation",
"Administrator Documentation" => "Administrator Dokumentation",
"Online Documentation" => "Online dokumentation",
@@ -30,16 +31,11 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Kommerciel support",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Du har brugt <strong>%s</strong> af den tilgængelige <strong>%s</strong>",
-"Clients" => "Klienter",
-"Download Desktop Clients" => "Hent Desktop Klienter",
-"Download Android Client" => "Hent Android Klient",
-"Download iOS Client" => "Hent iOS Klient",
"Password" => "Kodeord",
"Your password was changed" => "Din adgangskode blev ændret",
"Unable to change your password" => "Ude af stand til at ændre dit kodeord",
"Current password" => "Nuværende adgangskode",
"New password" => "Ny adgangskode",
-"show" => "vis",
"Change password" => "Skift kodeord",
"Email" => "Email",
"Your email address" => "Din emailadresse",
@@ -50,7 +46,6 @@
"Use this address to connect to your ownCloud in your file manager" => "Brug denne adresse til at oprette forbindelse til din ownCloud i din filstyring",
"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>.",
-"Name" => "Navn",
"Groups" => "Grupper",
"Create" => "Ny",
"Default Storage" => "Standard opbevaring",
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index 6434d23a5ba..4e12e8e27a7 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -1,21 +1,22 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Die Liste der Anwendungen im Store konnte nicht geladen werden.",
+"Authentication error" => "Fehler bei der Anmeldung",
"Group already exists" => "Gruppe existiert bereits",
"Unable to add group" => "Gruppe konnte nicht angelegt werden",
"Could not enable app. " => "App konnte nicht aktiviert werden.",
"Email saved" => "E-Mail Adresse gespeichert",
"Invalid email" => "Ungültige E-Mail Adresse",
-"OpenID Changed" => "OpenID geändert",
-"Invalid request" => "Ungültige Anfrage",
"Unable to delete group" => "Gruppe konnte nicht gelöscht werden",
-"Authentication error" => "Fehler bei der Anmeldung",
"Unable to delete user" => "Benutzer konnte nicht gelöscht werden",
"Language changed" => "Sprache geändert",
+"Invalid request" => "Ungültige Anfrage",
"Admins can't remove themself from the admin group" => "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
"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",
"Disable" => "Deaktivieren",
"Enable" => "Aktivieren",
+"Error while updating app" => "Fehler beim Aktualisieren der App",
+"Error" => "Fehler",
"Saving..." => "Speichern...",
"__language_name__" => "Deutsch (Persönlich)",
"Add your App" => "Füge Deine Anwendung hinzu",
@@ -23,6 +24,7 @@
"Select an App" => "Wähle eine Anwendung aus",
"See application page at apps.owncloud.com" => "Weitere Anwendungen findest Du auf apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lizenziert von <span class=\"author\"></span>",
+"Update" => "Update durchführen",
"User Documentation" => "Dokumentation für Benutzer",
"Administrator Documentation" => "Dokumentation für Administratoren",
"Online Documentation" => "Online-Dokumentation",
@@ -30,17 +32,13 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Kommerzieller Support",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Du verwendest <strong>%s</strong> der verfügbaren <strong>%s<strong>",
-"Clients" => "Kunden",
-"Download Desktop Clients" => "Desktop-Client herunterladen",
-"Download Android Client" => "Android-Client herunterladen",
-"Download iOS Client" => "iOS-Client herunterladen",
"Password" => "Passwort",
"Your password was changed" => "Dein Passwort wurde geändert.",
"Unable to change your password" => "Passwort konnte nicht geändert werden",
"Current password" => "Aktuelles Passwort",
"New password" => "Neues Passwort",
-"show" => "zeigen",
"Change password" => "Passwort ändern",
+"Display Name" => "Anzeigename",
"Email" => "E-Mail",
"Your email address" => "Deine E-Mail-Adresse",
"Fill in an email address to enable password recovery" => "Trage eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren.",
@@ -50,7 +48,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Verwende diese Adresse, um Deinen Dateimanager mit Deiner ownCloud zu verbinden",
"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.",
-"Name" => "Name",
+"Login Name" => "Loginname",
"Groups" => "Gruppen",
"Create" => "Anlegen",
"Default Storage" => "Standard-Speicher",
@@ -58,6 +56,8 @@
"Other" => "Andere",
"Group Admin" => "Gruppenadministrator",
"Storage" => "Speicher",
+"change display name" => "Anzeigenamen ändern",
+"set new password" => "Neues Passwort setzen",
"Default" => "Standard",
"Delete" => "Löschen"
);
diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php
index 10914350d74..1e17251a0d1 100644
--- a/settings/l10n/de_DE.php
+++ b/settings/l10n/de_DE.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Die Liste der Anwendungen im Store konnte nicht geladen werden.",
+"Authentication error" => "Fehler bei der Anmeldung",
+"Unable to change display name" => "Das Ändern des Anzeigenamens ist nicht möglich",
"Group already exists" => "Die Gruppe existiert bereits",
"Unable to add group" => "Die Gruppe konnte nicht angelegt werden",
"Could not enable app. " => "Die Anwendung konnte nicht aktiviert werden.",
"Email saved" => "E-Mail-Adresse gespeichert",
"Invalid email" => "Ungültige E-Mail-Adresse",
-"OpenID Changed" => "OpenID geändert",
-"Invalid request" => "Ungültige Anfrage",
"Unable to delete group" => "Die Gruppe konnte nicht gelöscht werden",
-"Authentication error" => "Fehler bei der Anmeldung",
"Unable to delete user" => "Der Benutzer konnte nicht gelöscht werden",
"Language changed" => "Sprache geändert",
+"Invalid request" => "Ungültige Anfrage",
"Admins can't remove themself from the admin group" => "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
"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 geupdated werden.",
+"Update to {appversion}" => "Update zu {appversion}",
"Disable" => "Deaktivieren",
"Enable" => "Aktivieren",
+"Please wait...." => "Bitte warten....",
+"Updating...." => "Update...",
+"Error while updating app" => "Es ist ein Fehler während des Updates aufgetreten",
+"Error" => "Fehler",
+"Updated" => "Geupdated",
"Saving..." => "Speichern...",
"__language_name__" => "Deutsch (Förmlich: Sie)",
"Add your App" => "Fügen Sie Ihre Anwendung hinzu",
@@ -23,6 +30,7 @@
"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>",
+"Update" => "Update durchführen",
"User Documentation" => "Dokumentation für Benutzer",
"Administrator Documentation" => "Dokumentation für Administratoren",
"Online Documentation" => "Online-Dokumentation",
@@ -30,17 +38,16 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Kommerzieller Support",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
-"Clients" => "Kunden",
-"Download Desktop Clients" => "Desktop-Client herunterladen",
-"Download Android Client" => "Android-Client herunterladen",
-"Download iOS Client" => "iOS-Client herunterladen",
"Password" => "Passwort",
"Your password was changed" => "Ihr Passwort wurde geändert.",
"Unable to change your password" => "Das Passwort konnte nicht geändert werden",
"Current password" => "Aktuelles Passwort",
"New password" => "Neues Passwort",
-"show" => "zeigen",
"Change password" => "Passwort ändern",
+"Display Name" => "Anzeigename",
+"Your display name was changed" => "Dein Anzeigename wurde geändert",
+"Unable to change your display name" => "Das Ändern deines Anzeigenamens ist nicht möglich",
+"Change display name" => "Anzeigenamen ändern",
"Email" => "E-Mail",
"Your email address" => "Ihre E-Mail-Adresse",
"Fill in an email address to enable password recovery" => "Bitte tragen Sie eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren.",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Verwenden Sie diese Adresse, um Ihren Dateimanager mit Ihrer ownCloud zu verbinden",
"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.",
-"Name" => "Name",
+"Login Name" => "Loginname",
"Groups" => "Gruppen",
"Create" => "Anlegen",
"Default Storage" => "Standard-Speicher",
@@ -58,6 +65,8 @@
"Other" => "Andere",
"Group Admin" => "Gruppenadministrator",
"Storage" => "Speicher",
+"change display name" => "Anzeigenamen ändern",
+"set new password" => "Neues Passwort setzen",
"Default" => "Standard",
"Delete" => "Löschen"
);
diff --git a/settings/l10n/el.php b/settings/l10n/el.php
index 1ecd2e269ff..a33deda7f3a 100644
--- a/settings/l10n/el.php
+++ b/settings/l10n/el.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Σφάλμα στην φόÏτωση της λίστας από το App Store",
+"Authentication error" => "Σφάλμα πιστοποίησης",
"Group already exists" => "Η ομάδα υπάÏχει ήδη",
"Unable to add group" => "Αδυναμία Ï€Ïοσθήκης ομάδας",
"Could not enable app. " => "Αδυναμία ενεÏγοποίησης εφαÏμογής ",
"Email saved" => "Το email αποθηκεÏτηκε ",
"Invalid email" => "Μη έγκυÏο email",
-"OpenID Changed" => "Το OpenID άλλαξε",
-"Invalid request" => "Μη έγκυÏο αίτημα",
"Unable to delete group" => "Αδυναμία διαγÏαφής ομάδας",
-"Authentication error" => "Σφάλμα πιστοποίησης",
"Unable to delete user" => "Αδυναμία διαγÏαφής χÏήστη",
"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",
"Disable" => "ΑπενεÏγοποίηση",
"Enable" => "ΕνεÏγοποίηση",
+"Error" => "Σφάλμα",
"Saving..." => "Αποθήκευση...",
"__language_name__" => "__όνομα_γλώσσας__",
"Add your App" => "ΠÏόσθεστε τη Δικιά σας ΕφαÏμογή",
@@ -23,6 +23,7 @@
"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>",
+"Update" => "ΕνημέÏωση",
"User Documentation" => "ΤεκμηÏίωση ΧÏήστη",
"Administrator Documentation" => "ΤεκμηÏίωση ΔιαχειÏιστή",
"Online Documentation" => "ΤεκμηÏίωση στο Διαδίκτυο",
@@ -30,16 +31,11 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "ΕμποÏική ΥποστήÏιξη",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "ΧÏησιμοποιήσατε <strong>%s</strong> από διαθέσιμα <strong>%s</strong>",
-"Clients" => "Πελάτες",
-"Download Desktop Clients" => "Λήψη ΠÏογÏαμμάτων για ΣταθεÏοÏÏ‚ Υπολογιστές",
-"Download Android Client" => "Λήψη ΠÏογÏάμματος Android",
-"Download iOS Client" => "Λήψη ΠÏογÏάμματος iOS",
"Password" => "Συνθηματικό",
"Your password was changed" => "Το συνθηματικό σας έχει αλλάξει",
"Unable to change your password" => "Δεν ήταν δυνατή η αλλαγή του ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης",
"Current password" => "ΤÏέχων συνθηματικό",
"New password" => "Îέο συνθηματικό",
-"show" => "εμφάνιση",
"Change password" => "Αλλαγή συνθηματικοÏ",
"Email" => "Email",
"Your email address" => "Η διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου σας",
@@ -50,10 +46,13 @@
"Use this address to connect to your ownCloud in your file manager" => "ΧÏήση αυτής της διεÏθυνσης για σÏνδεση στο ownCloud με τον διαχειÏιστή αÏχείων σας",
"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>.",
-"Name" => "Όνομα",
"Groups" => "Ομάδες",
"Create" => "ΔημιουÏγία",
+"Default Storage" => "ΠÏοκαθοÏισμένη Αποθήκευση ",
+"Unlimited" => "ΑπεÏιόÏιστο",
"Other" => "Άλλα",
"Group Admin" => "Ομάδα ΔιαχειÏιστών",
+"Storage" => "Αποθήκευση",
+"Default" => "ΠÏοκαθοÏισμένο",
"Delete" => "ΔιαγÏαφή"
);
diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php
index 4f8d58b1bb7..e43aaa673fe 100644
--- a/settings/l10n/eo.php
+++ b/settings/l10n/eo.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Ne eblis Åargi liston el aplikaĵovendejo",
+"Authentication error" => "AÅ­tentiga eraro",
"Group already exists" => "La grupo jam ekzistas",
"Unable to add group" => "Ne eblis aldoni la grupon",
"Could not enable app. " => "Ne eblis kapabligi la aplikaĵon.",
"Email saved" => "La retpoÅtadreso konserviÄis",
"Invalid email" => "Nevalida retpoÅtadreso",
-"OpenID Changed" => "La agordo de OpenID estas ÅanÄita",
-"Invalid request" => "Nevalida peto",
"Unable to delete group" => "Ne eblis forigi la grupon",
-"Authentication error" => "AÅ­tentiga eraro",
"Unable to delete user" => "Ne eblis forigi la uzanton",
"Language changed" => "La lingvo estas ÅanÄita",
+"Invalid request" => "Nevalida peto",
"Admins can't remove themself from the admin group" => "Administrantoj ne povas forigi sin mem el la administra grupo.",
"Unable to add user to group %s" => "Ne eblis aldoni la uzanton al la grupo %s",
"Unable to remove user from group %s" => "Ne eblis forigi la uzantan el la grupo %s",
"Disable" => "Malkapabligi",
"Enable" => "Kapabligi",
+"Error" => "Eraro",
"Saving..." => "Konservante...",
"__language_name__" => "Esperanto",
"Add your App" => "Aldonu vian aplikaĵon",
@@ -23,25 +23,36 @@
"Select an App" => "Elekti aplikaĵon",
"See application page at apps.owncloud.com" => "Vidu la paÄon pri aplikaĵoj ĉe apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"</span>-permesilhavigita de <span class=\"author\"></span>",
+"Update" => "Äœisdatigi",
+"User Documentation" => "Dokumentaro por uzantoj",
+"Administrator Documentation" => "Dokumentaro por administrantoj",
+"Online Documentation" => "Reta dokumentaro",
+"Forum" => "Forumo",
+"Bugtracker" => "Cimoraportejo",
+"Commercial Support" => "Komerca subteno",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Vi uzas <strong>%s</strong> el la haveblaj <strong>%s</strong>",
-"Clients" => "Klientoj",
"Password" => "Pasvorto",
"Your password was changed" => "Via pasvorto ÅanÄiÄis",
"Unable to change your password" => "Ne eblis ÅanÄi vian pasvorton",
"Current password" => "Nuna pasvorto",
"New password" => "Nova pasvorto",
-"show" => "montri",
"Change password" => "ÅœanÄi la pasvorton",
"Email" => "RetpoÅto",
"Your email address" => "Via retpoÅta adreso",
"Fill in an email address to enable password recovery" => "Enigu retpoÅtadreson por kapabligi pasvortan restaÅ­ron",
"Language" => "Lingvo",
"Help translate" => "Helpu traduki",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "Uzu ĉi tiun adreson por konekti al via ownCloud vian dosieradministrilon",
+"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>.",
-"Name" => "Nomo",
"Groups" => "Grupoj",
"Create" => "Krei",
+"Default Storage" => "DefaÅ­lta konservejo",
+"Unlimited" => "Senlima",
"Other" => "Alia",
"Group Admin" => "Grupadministranto",
+"Storage" => "Konservejo",
+"Default" => "DefaÅ­lta",
"Delete" => "Forigi"
);
diff --git a/settings/l10n/es.php b/settings/l10n/es.php
index bd7d2866601..ff69a367adb 100644
--- a/settings/l10n/es.php
+++ b/settings/l10n/es.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Imposible cargar la lista desde el App Store",
+"Authentication error" => "Error de autenticación",
+"Unable to change display name" => "Incapaz de cambiar el nombre",
"Group already exists" => "El grupo ya existe",
"Unable to add group" => "No se pudo añadir el grupo",
"Could not enable app. " => "No puedo habilitar la app.",
"Email saved" => "Correo guardado",
"Invalid email" => "Correo no válido",
-"OpenID Changed" => "OpenID cambiado",
-"Invalid request" => "Solicitud no válida",
"Unable to delete group" => "No se pudo eliminar el grupo",
-"Authentication error" => "Error de autenticación",
"Unable to delete user" => "No se pudo eliminar el usuario",
"Language changed" => "Idioma cambiado",
+"Invalid request" => "Solicitud no válida",
"Admins can't remove themself from the admin group" => "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
"Unable to add user to group %s" => "Imposible añadir el usuario al grupo %s",
"Unable to remove user from group %s" => "Imposible eliminar al usuario del grupo %s",
+"Couldn't update app." => "No se puedo actualizar la aplicacion.",
+"Update to {appversion}" => "Actualizado a {appversion}",
"Disable" => "Desactivar",
"Enable" => "Activar",
+"Please wait...." => "Espere por favor....",
+"Updating...." => "Actualizando....",
+"Error while updating app" => "Error mientras se actualizaba",
+"Error" => "Error",
+"Updated" => "Actualizado",
"Saving..." => "Guardando...",
"__language_name__" => "Castellano",
"Add your App" => "Añade tu aplicación",
@@ -23,6 +30,7 @@
"Select an App" => "Seleccionar una aplicación",
"See application page at apps.owncloud.com" => "Echa un vistazo a la web de aplicaciones apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>",
+"Update" => "Actualizar",
"User Documentation" => "Documentación del usuario",
"Administrator Documentation" => "Documentación del adminsitrador",
"Online Documentation" => "Documentación en linea",
@@ -30,17 +38,16 @@
"Bugtracker" => "Rastreador de Bugs",
"Commercial Support" => "Soporte Comercial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Ha usado <strong>%s</strong> de <strong>%s</strong> disponibles",
-"Clients" => "Clientes",
-"Download Desktop Clients" => "Descargar clientes de escritorio",
-"Download Android Client" => "Descargar cliente para android",
-"Download iOS Client" => "Descargar cliente para iOS",
"Password" => "Contraseña",
"Your password was changed" => "Su contraseña ha sido cambiada",
"Unable to change your password" => "No se ha podido cambiar tu contraseña",
"Current password" => "Contraseña actual",
"New password" => "Nueva contraseña:",
-"show" => "mostrar",
"Change password" => "Cambiar contraseña",
+"Display Name" => "Nombre a mostrar",
+"Your display name was changed" => "Su nombre fue cambiado",
+"Unable to change your display name" => "Incapaz de cambiar su nombre",
+"Change display name" => "Cambiar nombre",
"Email" => "Correo electrónico",
"Your email address" => "Tu dirección de correo",
"Fill in an email address to enable password recovery" => "Escribe una dirección de correo electrónico para restablecer la contraseña",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Use esta dirección para conectarse a su cuenta de ownCloud en el administrador de archivos",
"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>." => "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>.",
-"Name" => "Nombre",
+"Login Name" => "Nombre de usuario",
"Groups" => "Grupos",
"Create" => "Crear",
"Default Storage" => "Almacenamiento Predeterminado",
@@ -58,6 +65,8 @@
"Other" => "Otro",
"Group Admin" => "Grupo admin",
"Storage" => "Alamacenamiento",
+"change display name" => "Cambiar nombre a mostrar",
+"set new password" => "Configurar nueva contraseña",
"Default" => "Predeterminado",
"Delete" => "Eliminar"
);
diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php
index 03f6c5593d4..4c5daa4e05c 100644
--- a/settings/l10n/es_AR.php
+++ b/settings/l10n/es_AR.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Imposible cargar la lista desde el App Store",
+"Authentication error" => "Error al autenticar",
"Group already exists" => "El grupo ya existe",
"Unable to add group" => "No fue posible añadir el grupo",
"Could not enable app. " => "No se puede habilitar la aplicación.",
"Email saved" => "e-mail guardado",
"Invalid email" => "el e-mail no es válido ",
-"OpenID Changed" => "OpenID cambiado",
-"Invalid request" => "Solicitud no válida",
"Unable to delete group" => "No fue posible eliminar el grupo",
-"Authentication error" => "Error al autenticar",
"Unable to delete user" => "No fue posible eliminar el usuario",
"Language changed" => "Idioma cambiado",
+"Invalid request" => "Solicitud no válida",
"Admins can't remove themself from the admin group" => "Los administradores no se pueden quitar a ellos mismos del grupo administrador. ",
"Unable to add user to group %s" => "No fue posible añadir el usuario al grupo %s",
"Unable to remove user from group %s" => "No es posible eliminar al usuario del grupo %s",
"Disable" => "Desactivar",
"Enable" => "Activar",
+"Error" => "Error",
"Saving..." => "Guardando...",
"__language_name__" => "Castellano (Argentina)",
"Add your App" => "Añadí tu aplicación",
@@ -23,24 +23,21 @@
"Select an App" => "Seleccionar una aplicación",
"See application page at apps.owncloud.com" => "Mirá la web de aplicaciones apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\">",
+"Update" => "Actualizar",
"User Documentation" => "Documentación de Usuario",
"Administrator Documentation" => "Documentación de Administrador",
-"Online Documentation" => "Documentación en linea",
+"Online Documentation" => "Documentación en línea",
"Forum" => "Foro",
"Bugtracker" => "Informar errores",
"Commercial Support" => "Soporte comercial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Usaste <strong>%s</strong> de los <strong>%s</strong> disponibles",
-"Clients" => "Clientes",
-"Download Desktop Clients" => "Descargar clientes de escritorio",
-"Download Android Client" => "Descargar cliente de Android",
-"Download iOS Client" => "Descargar cliente de iOS",
"Password" => "Contraseña",
"Your password was changed" => "Tu contraseña fue cambiada",
"Unable to change your password" => "No fue posible cambiar tu contraseña",
"Current password" => "Contraseña actual",
"New password" => "Nueva contraseña:",
-"show" => "mostrar",
"Change password" => "Cambiar contraseña",
+"Display Name" => "Nombre a mostrar",
"Email" => "Correo electrónico",
"Your email address" => "Tu dirección de e-mail",
"Fill in an email address to enable password recovery" => "Escribí una dirección de correo electrónico para restablecer la contraseña",
@@ -50,7 +47,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Utiliza esta dirección para conectarte con ownCloud en tu Administrador de Archivos",
"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>.",
-"Name" => "Nombre",
+"Login Name" => "Nombre de ",
"Groups" => "Grupos",
"Create" => "Crear",
"Default Storage" => "Almacenamiento Predeterminado",
diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php
index fdf9e35dfe2..3822dc594dc 100644
--- a/settings/l10n/et_EE.php
+++ b/settings/l10n/et_EE.php
@@ -1,20 +1,20 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "App Sotre'i nimekirja laadimine ebaõnnestus",
+"Authentication error" => "Autentimise viga",
"Group already exists" => "Grupp on juba olemas",
"Unable to add group" => "Keela grupi lisamine",
"Could not enable app. " => "Rakenduse sisselülitamine ebaõnnestus.",
"Email saved" => "Kiri on salvestatud",
"Invalid email" => "Vigane e-post",
-"OpenID Changed" => "OpenID on muudetud",
-"Invalid request" => "Vigane päring",
"Unable to delete group" => "Keela grupi kustutamine",
-"Authentication error" => "Autentimise viga",
"Unable to delete user" => "Keela kasutaja kustutamine",
"Language changed" => "Keel on muudetud",
+"Invalid request" => "Vigane päring",
"Unable to add user to group %s" => "Kasutajat ei saa lisada gruppi %s",
"Unable to remove user from group %s" => "Kasutajat ei saa eemaldada grupist %s",
"Disable" => "Lülita välja",
"Enable" => "Lülita sisse",
+"Error" => "Viga",
"Saving..." => "Salvestamine...",
"__language_name__" => "Eesti",
"Add your App" => "Lisa oma rakendus",
@@ -22,20 +22,18 @@
"Select an App" => "Vali programm",
"See application page at apps.owncloud.com" => "Vaata rakenduste lehte aadressil apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-litsenseeritud <span class=\"author\"></span>",
-"Clients" => "Kliendid",
+"Update" => "Uuenda",
"Password" => "Parool",
"Your password was changed" => "Sinu parooli on muudetud",
"Unable to change your password" => "Sa ei saa oma parooli muuta",
"Current password" => "Praegune parool",
"New password" => "Uus parool",
-"show" => "näita",
"Change password" => "Muuda parooli",
"Email" => "E-post",
"Your email address" => "Sinu e-posti aadress",
"Fill in an email address to enable password recovery" => "Parooli taastamise sisse lülitamiseks sisesta e-posti aadress",
"Language" => "Keel",
"Help translate" => "Aita tõlkida",
-"Name" => "Nimi",
"Groups" => "Grupid",
"Create" => "Lisa",
"Other" => "Muu",
diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php
index bcf80da33c1..a3efce7be62 100644
--- a/settings/l10n/eu.php
+++ b/settings/l10n/eu.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Ezin izan da App Dendatik zerrenda kargatu",
+"Authentication error" => "Autentifikazio errorea",
"Group already exists" => "Taldea dagoeneko existitzenda",
"Unable to add group" => "Ezin izan da taldea gehitu",
"Could not enable app. " => "Ezin izan da aplikazioa gaitu.",
"Email saved" => "Eposta gorde da",
"Invalid email" => "Baliogabeko eposta",
-"OpenID Changed" => "OpenID aldatuta",
-"Invalid request" => "Baliogabeko eskaria",
"Unable to delete group" => "Ezin izan da taldea ezabatu",
-"Authentication error" => "Autentifikazio errorea",
"Unable to delete user" => "Ezin izan da erabiltzailea ezabatu",
"Language changed" => "Hizkuntza aldatuta",
+"Invalid request" => "Baliogabeko eskaria",
"Admins can't remove themself from the admin group" => "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
"Unable to add user to group %s" => "Ezin izan da erabiltzailea %s taldera gehitu",
"Unable to remove user from group %s" => "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Disable" => "Ez-gaitu",
"Enable" => "Gaitu",
+"Error" => "Errorea",
"Saving..." => "Gordetzen...",
"__language_name__" => "Euskera",
"Add your App" => "Gehitu zure aplikazioa",
@@ -23,6 +23,7 @@
"Select an App" => "Aukeratu programa bat",
"See application page at apps.owncloud.com" => "Ikusi programen orria apps.owncloud.com en",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lizentziatua <span class=\"author\"></span>",
+"Update" => "Eguneratu",
"User Documentation" => "Erabiltzaile dokumentazioa",
"Administrator Documentation" => "Administradore dokumentazioa",
"Online Documentation" => "Online dokumentazioa",
@@ -30,17 +31,13 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Babes komertziala",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Dagoeneko <strong>%s</strong> erabili duzu eskuragarri duzun <strong>%s</strong>etatik",
-"Clients" => "Bezeroak",
-"Download Desktop Clients" => "Deskargatu mahaigainerako bezeroak",
-"Download Android Client" => "Deskargatu Android bezeroa",
-"Download iOS Client" => "Deskargatu iOS bezeroa",
"Password" => "Pasahitza",
"Your password was changed" => "Zere pasahitza aldatu da",
"Unable to change your password" => "Ezin izan da zure pasahitza aldatu",
"Current password" => "Uneko pasahitza",
"New password" => "Pasahitz berria",
-"show" => "erakutsi",
"Change password" => "Aldatu pasahitza",
+"Display Name" => "Bistaratze Izena",
"Email" => "E-Posta",
"Your email address" => "Zure e-posta",
"Fill in an email address to enable password recovery" => "Idatz ezazu e-posta bat pasahitza berreskuratu ahal izateko",
@@ -50,10 +47,14 @@
"Use this address to connect to your ownCloud in your file manager" => "Erabili helbide hau zure fitxategi kudeatzailean zure ownCloudera konektatzeko",
"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>.",
-"Name" => "Izena",
+"Login Name" => "Sarrera Izena",
"Groups" => "Taldeak",
"Create" => "Sortu",
+"Default Storage" => "Lehenetsitako Biltegiratzea",
+"Unlimited" => "Mugarik gabe",
"Other" => "Besteak",
"Group Admin" => "Talde administradorea",
+"Storage" => "Biltegiratzea",
+"Default" => "Lehenetsia",
"Delete" => "Ezabatu"
);
diff --git a/settings/l10n/fa.php b/settings/l10n/fa.php
index 293a50ff291..5c5d312a879 100644
--- a/settings/l10n/fa.php
+++ b/settings/l10n/fa.php
@@ -1,34 +1,58 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "قادر به بارگذاری لیست از ÙØ±ÙˆØ´Ú¯Ø§Ù‡ اپ نیستم",
+"Authentication error" => "خطا در اعتبار سنجی",
+"Unable to change display name" => "امکان تغییر نام نمایشی شما وجود ندارد",
+"Group already exists" => "این گروه در حال حاضر موجود است",
+"Unable to add group" => "Ø§ÙØ²ÙˆØ¯Ù† گروه امکان پذیر نیست",
"Email saved" => "ایمیل ذخیره شد",
"Invalid email" => "ایمیل غیر قابل قبول",
-"OpenID Changed" => "OpenID تغییر کرد",
-"Invalid request" => "درخواست غیر قابل قبول",
-"Authentication error" => "خطا در اعتبار سنجی",
+"Unable to delete group" => "حذ٠گروه امکان پذیر نیست",
+"Unable to delete user" => "حذ٠کاربر امکان پذیر نیست",
"Language changed" => "زبان تغییر کرد",
+"Invalid request" => "درخواست غیر قابل قبول",
+"Admins can't remove themself from the admin group" => "مدیران نمی توانند خود را از گروه مدیریت حذ٠کنند",
"Disable" => "ØºÛŒØ±ÙØ¹Ø§Ù„",
"Enable" => "ÙØ¹Ø§Ù„",
+"Please wait...." => "Ù„Ø·ÙØ§ صبر کنید ...",
+"Updating...." => "در حال بروز رسانی...",
+"Error" => "خطا",
+"Updated" => "بروز رسانی انجام شد",
"Saving..." => "درحال ذخیره ...",
"__language_name__" => "__language_name__",
"Add your App" => "برنامه خود را Ø¨ÛŒØ§ÙØ²Ø§ÛŒÛŒØ¯",
+"More Apps" => "برنامه های بیشتر",
"Select an App" => "یک برنامه انتخاب کنید",
"See application page at apps.owncloud.com" => "ØµÙØ­Ù‡ این اٌپ را در apps.owncloud.com ببینید",
-"Clients" => "مشتریان",
+"Update" => "به روز رسانی",
+"User Documentation" => "مستندات کاربر",
+"Administrator Documentation" => "مستندات مدیر",
+"Forum" => "انجمن",
+"Commercial Support" => "پشتیبانی تجاری",
"Password" => "گذرواژه",
"Your password was changed" => "رمز عبور شما تغییر ÛŒØ§ÙØª",
"Unable to change your password" => "ناتوان در تغییر گذرواژه",
"Current password" => "گذرواژه کنونی",
"New password" => "گذرواژه جدید",
-"show" => "نمایش",
"Change password" => "تغییر گذر واژه",
+"Display Name" => "نام نمایشی",
+"Your display name was changed" => "نام نمایشی شما تغییر ÛŒØ§ÙØª",
+"Unable to change your display name" => "امکان تغییر نام نمایشی شما وجود ندارد",
+"Change display name" => "تغییر نام نمایشی",
"Email" => "پست الکترونیکی",
"Your email address" => "پست الکترونیکی شما",
"Fill in an email address to enable password recovery" => "پست الکترونیکی را پرکنید تا بازیابی گذرواژه ÙØ¹Ø§Ù„ شود",
"Language" => "زبان",
"Help translate" => "به ترجمه آن کمک کنید",
-"Name" => "نام",
+"Version" => "نسخه",
+"Login Name" => "نام کاربری",
"Groups" => "گروه ها",
"Create" => "ایجاد کردن",
+"Default Storage" => "ذخیره سازی پیش ÙØ±Ø¶",
+"Unlimited" => "نامحدود",
"Other" => "سایر",
+"Storage" => "Ø­Ø§ÙØ¸Ù‡",
+"change display name" => "تغییر نام نمایشی",
+"set new password" => "تنظیم کلمه عبور جدید",
+"Default" => "پیش ÙØ±Ø¶",
"Delete" => "پاک کردن"
);
diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php
index 5700f86036f..a42b50ec952 100644
--- a/settings/l10n/fi_FI.php
+++ b/settings/l10n/fi_FI.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Ei pystytä lataamaan listaa sovellusvarastosta (App Store)",
+"Authentication error" => "Todennusvirhe",
+"Unable to change display name" => "Näyttönimen muuttaminen epäonnistui",
"Group already exists" => "Ryhmä on jo olemassa",
"Unable to add group" => "Ryhmän lisäys epäonnistui",
"Could not enable app. " => "Sovelluksen käyttöönotto epäonnistui.",
"Email saved" => "Sähköposti tallennettu",
"Invalid email" => "Virheellinen sähköposti",
-"OpenID Changed" => "OpenID on vaihdettu",
-"Invalid request" => "Virheellinen pyyntö",
"Unable to delete group" => "Ryhmän poisto epäonnistui",
-"Authentication error" => "Todennusvirhe",
"Unable to delete user" => "Käyttäjän poisto epäonnistui",
"Language changed" => "Kieli on vaihdettu",
+"Invalid request" => "Virheellinen pyyntö",
"Admins can't remove themself from the admin group" => "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
"Unable to add user to group %s" => "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
"Unable to remove user from group %s" => "Käyttäjän poistaminen ryhmästä %s ei onnistu",
+"Couldn't update app." => "Sovelluksen päivitys epäonnistui.",
+"Update to {appversion}" => "Päivitä versioon {appversion}",
"Disable" => "Poista käytöstä",
"Enable" => "Käytä",
+"Please wait...." => "Odota hetki...",
+"Updating...." => "Päivitetään...",
+"Error while updating app" => "Virhe sovellusta päivittäessä",
+"Error" => "Virhe",
+"Updated" => "Päivitetty",
"Saving..." => "Tallennetaan...",
"__language_name__" => "_kielen_nimi_",
"Add your App" => "Lisää sovelluksesi",
@@ -23,6 +30,7 @@
"Select an App" => "Valitse sovellus",
"See application page at apps.owncloud.com" => "Katso sovellussivu osoitteessa apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lisensoija <span class=\"author\"></span>",
+"Update" => "Päivitä",
"User Documentation" => "Käyttäjäohjeistus",
"Administrator Documentation" => "Ylläpito-ohjeistus",
"Online Documentation" => "Verkko-ohjeistus",
@@ -30,17 +38,16 @@
"Bugtracker" => "Ohjelmistovirheiden jäljitys",
"Commercial Support" => "Kaupallinen tuki",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
-"Clients" => "Asiakkaat",
-"Download Desktop Clients" => "Lataa työpöytäsovelluksia",
-"Download Android Client" => "Lataa Android-sovellus",
-"Download iOS Client" => "Lataa iOS-sovellus",
"Password" => "Salasana",
"Your password was changed" => "Salasanasi vaihdettiin",
"Unable to change your password" => "Salasanaasi ei voitu vaihtaa",
"Current password" => "Nykyinen salasana",
"New password" => "Uusi salasana",
-"show" => "näytä",
"Change password" => "Vaihda salasana",
+"Display Name" => "Näyttönimi",
+"Your display name was changed" => "Näyttönimesi muutettiin",
+"Unable to change your display name" => "Näyttönimen muuttaminen epäonnistui",
+"Change display name" => "Muuta näyttönimeä",
"Email" => "Sähköposti",
"Your email address" => "Sähköpostiosoitteesi",
"Fill in an email address to enable password recovery" => "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista palauttaa",
@@ -50,10 +57,14 @@
"Use this address to connect to your ownCloud in your file manager" => "Käytä tätä osoitetta yhdistäessäsi ownCloudiisi tiedostonhallintaa käyttäen",
"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.",
-"Name" => "Nimi",
+"Login Name" => "Kirjautumisnimi",
"Groups" => "Ryhmät",
"Create" => "Luo",
+"Unlimited" => "Rajoittamaton",
"Other" => "Muu",
"Group Admin" => "Ryhmän ylläpitäjä",
+"change display name" => "vaihda näyttönimi",
+"set new password" => "aseta uusi salasana",
+"Default" => "Oletus",
"Delete" => "Poista"
);
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index a8367ef458d..1f1cb3eb1f6 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Impossible de charger la liste depuis l'App Store",
+"Authentication error" => "Erreur d'authentification",
+"Unable to change display name" => "Impossible de modifier le nom d'affichage",
"Group already exists" => "Ce groupe existe déjà",
"Unable to add group" => "Impossible d'ajouter le groupe",
"Could not enable app. " => "Impossible d'activer l'Application",
"Email saved" => "E-mail sauvegardé",
"Invalid email" => "E-mail invalide",
-"OpenID Changed" => "Identifiant OpenID changé",
-"Invalid request" => "Requête invalide",
"Unable to delete group" => "Impossible de supprimer le groupe",
-"Authentication error" => "Erreur d'authentification",
"Unable to delete user" => "Impossible de supprimer l'utilisateur",
"Language changed" => "Langue changée",
+"Invalid request" => "Requête invalide",
"Admins can't remove themself from the admin group" => "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
"Unable to add user to group %s" => "Impossible d'ajouter l'utilisateur au groupe %s",
"Unable to remove user from group %s" => "Impossible de supprimer l'utilisateur du groupe %s",
+"Couldn't update app." => "Impossible de mettre à jour l'application",
+"Update to {appversion}" => "Mettre à jour vers {appversion}",
"Disable" => "Désactiver",
"Enable" => "Activer",
+"Please wait...." => "Veuillez patienter…",
+"Updating...." => "Mise à jour...",
+"Error while updating app" => "Erreur lors de la mise à jour de l'application",
+"Error" => "Erreur",
+"Updated" => "Mise à jour effectuée avec succès",
"Saving..." => "Sauvegarde...",
"__language_name__" => "Français",
"Add your App" => "Ajoutez votre application",
@@ -23,6 +30,7 @@
"Select an App" => "Sélectionner une Application",
"See application page at apps.owncloud.com" => "Voir la page des applications à l'url apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "Distribué sous licence <span class=\"licence\"></span>, par <span class=\"author\"></span>",
+"Update" => "Mettre à jour",
"User Documentation" => "Documentation utilisateur",
"Administrator Documentation" => "Documentation administrateur",
"Online Documentation" => "Documentation en ligne",
@@ -30,17 +38,16 @@
"Bugtracker" => "Suivi de bugs",
"Commercial Support" => "Support commercial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Vous avez utilisé <strong>%s</strong> des <strong>%s<strong> disponibles",
-"Clients" => "Clients",
-"Download Desktop Clients" => "Télécharger des clients de bureau",
-"Download Android Client" => "Télécharger le client Android",
-"Download iOS Client" => "Télécharger le client iOS",
"Password" => "Mot de passe",
"Your password was changed" => "Votre mot de passe a été changé",
"Unable to change your password" => "Impossible de changer votre mot de passe",
"Current password" => "Mot de passe actuel",
"New password" => "Nouveau mot de passe",
-"show" => "Afficher",
"Change password" => "Changer de mot de passe",
+"Display Name" => "Nom affiché",
+"Your display name was changed" => "Votre nom d'affichage a bien été modifié",
+"Unable to change your display name" => "Impossible de modifier votre nom d'affichage",
+"Change display name" => "Changer le nom affiché",
"Email" => "E-mail",
"Your email address" => "Votre adresse e-mail",
"Fill in an email address to enable password recovery" => "Entrez votre adresse e-mail pour permettre la réinitialisation du mot de passe",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Utiliser cette adresse pour vous connecter à ownCloud dans votre gestionnaire de fichiers",
"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>.",
-"Name" => "Nom",
+"Login Name" => "Nom de la connexion",
"Groups" => "Groupes",
"Create" => "Créer",
"Default Storage" => "Support de stockage par défaut",
@@ -58,6 +65,8 @@
"Other" => "Autre",
"Group Admin" => "Groupe Admin",
"Storage" => "Support de stockage",
+"change display name" => "Changer le nom affiché",
+"set new password" => "Changer le mot de passe",
"Default" => "Défaut",
"Delete" => "Supprimer"
);
diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php
index 13088d0d8b2..53aaf8eb3fe 100644
--- a/settings/l10n/gl.php
+++ b/settings/l10n/gl.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Non foi posíbel cargar a lista desde a App Store",
+"Authentication error" => "Produciuse un erro de autenticación",
"Group already exists" => "O grupo xa existe",
"Unable to add group" => "Non é posíbel engadir o grupo",
"Could not enable app. " => "Non é posíbel activar o aplicativo.",
"Email saved" => "Correo gardado",
"Invalid email" => "correo incorrecto",
-"OpenID Changed" => "Cambiou o OpenID",
-"Invalid request" => "Petición incorrecta",
"Unable to delete group" => "Non é posíbel eliminar o grupo.",
-"Authentication error" => "Produciuse un erro de autenticación",
"Unable to delete user" => "Non é posíbel eliminar o usuario",
"Language changed" => "O idioma cambiou",
+"Invalid request" => "Petición incorrecta",
"Admins can't remove themself from the admin group" => "Os administradores non se pode eliminar a si mesmos do grupo admin",
"Unable to add user to group %s" => "Non é posíbel engadir o usuario ao grupo %s",
"Unable to remove user from group %s" => "Non é posíbel eliminar o usuario do grupo %s",
"Disable" => "Desactivar",
"Enable" => "Activar",
+"Error" => "Erro",
"Saving..." => "Gardando...",
"__language_name__" => "Galego",
"Add your App" => "Engada o seu aplicativo",
@@ -23,6 +23,7 @@
"Select an App" => "Escolla un aplicativo",
"See application page at apps.owncloud.com" => "Consulte a páxina do aplicativo en apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por<span class=\"author\"></span>",
+"Update" => "Actualizar",
"User Documentation" => "Documentación do usuario",
"Administrator Documentation" => "Documentación do administrador",
"Online Documentation" => "Documentación na Rede",
@@ -30,16 +31,11 @@
"Bugtracker" => "Seguemento de fallos",
"Commercial Support" => "Asistencia comercial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Te en uso <strong>%s</strong> do total dispoñíbel de <strong>%s</strong>",
-"Clients" => "Clientes",
-"Download Desktop Clients" => "Descargar clientes para escritorio",
-"Download Android Client" => "Descargar clientes para Android",
-"Download iOS Client" => "Descargar clientes ra iOS",
"Password" => "Contrasinal",
"Your password was changed" => "O seu contrasinal foi cambiado",
"Unable to change your password" => "Non é posíbel cambiar o seu contrasinal",
"Current password" => "Contrasinal actual",
"New password" => "Novo contrasinal",
-"show" => "amosar",
"Change password" => "Cambiar o contrasinal",
"Email" => "Correo",
"Your email address" => "O seu enderezo de correo",
@@ -50,7 +46,6 @@
"Use this address to connect to your ownCloud in your file manager" => "Utilice este enderezo para conectarse ao seu ownCloud co administrador de ficheiros",
"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>.",
-"Name" => "Nome",
"Groups" => "Grupos",
"Create" => "Crear",
"Default Storage" => "Almacenamento predeterminado",
diff --git a/settings/l10n/he.php b/settings/l10n/he.php
index 1d7a91ee523..40f82100879 100644
--- a/settings/l10n/he.php
+++ b/settings/l10n/he.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "×œ× × ×™×ª×Ÿ לטעון רשימה מה־App Store",
+"Authentication error" => "שגי×ת הזדהות",
"Group already exists" => "הקבוצה כבר קיימת",
"Unable to add group" => "×œ× × ×™×ª×Ÿ להוסיף קבוצה",
"Could not enable app. " => "×œ× × ×™×ª×Ÿ להפעיל ×ת היישו×",
"Email saved" => "הדו×״ל נשמר",
"Invalid email" => "דו×״ל ×œ× ×—×•×§×™",
-"OpenID Changed" => "OpenID השתנה",
-"Invalid request" => "בקשה ×œ× ×—×•×§×™×ª",
"Unable to delete group" => "×œ× × ×™×ª×Ÿ למחוק ×ת הקבוצה",
-"Authentication error" => "שגי×ת הזדהות",
"Unable to delete user" => "×œ× × ×™×ª×Ÿ למחוק ×ת המשתמש",
"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",
"Disable" => "בטל",
"Enable" => "הפעל",
+"Error" => "שגי××”",
"Saving..." => "שומר..",
"__language_name__" => "עברית",
"Add your App" => "הוספת ×”×™×™×©×•× ×©×œ×š",
@@ -23,22 +23,18 @@
"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>",
+"Update" => "עדכון",
"User Documentation" => "תיעוד משתמש",
"Administrator Documentation" => "תיעוד מנהלי×",
"Online Documentation" => "תיעוד מקוון",
"Forum" => "פורו×",
"Commercial Support" => "תמיכה בתשלו×",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "השתמשת ב־<strong>%s</strong> מתוך <strong>%s</strong> ×”×–×ž×™× ×™× ×œ×š",
-"Clients" => "לקוחות",
-"Download Desktop Clients" => "הורד לתוכנה למחשב",
-"Download Android Client" => "הורד תוכנה ל×נדרו×יד",
-"Download iOS Client" => "הורד תוכנה לiOS",
"Password" => "ססמה",
"Your password was changed" => "הססמה שלך הוחלפה",
"Unable to change your password" => "×œ× × ×™×ª×Ÿ לשנות ×ת הססמה שלך",
"Current password" => "ססמה נוכחית",
"New password" => "ססמה חדשה",
-"show" => "הצגה",
"Change password" => "שינוי ססמה",
"Email" => "דו×״ל",
"Your email address" => "כתובת הדו×״ל שלך",
@@ -48,7 +44,6 @@
"Use this address to connect to your ownCloud in your file manager" => "השתמש בכתובת ×–×ת על מנת להתחבר ×ל ownCloud דרך סייר קבצי×.",
"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>.",
-"Name" => "ש×",
"Groups" => "קבוצות",
"Create" => "יצירה",
"Other" => "×חר",
diff --git a/settings/l10n/hr.php b/settings/l10n/hr.php
index b6f7133f13f..32175bbb74c 100644
--- a/settings/l10n/hr.php
+++ b/settings/l10n/hr.php
@@ -1,31 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Nemogićnost uÄitavanja liste sa Apps Stora",
+"Authentication error" => "Greška kod autorizacije",
"Email saved" => "Email spremljen",
"Invalid email" => "Neispravan email",
-"OpenID Changed" => "OpenID promijenjen",
-"Invalid request" => "Neispravan zahtjev",
-"Authentication error" => "Greška kod autorizacije",
"Language changed" => "Jezik promijenjen",
+"Invalid request" => "Neispravan zahtjev",
"Disable" => "IskljuÄi",
"Enable" => "UkljuÄi",
+"Error" => "Greška",
"Saving..." => "Spremanje...",
"__language_name__" => "__ime_jezika__",
"Add your App" => "Dodajte vašu aplikaciju",
"Select an App" => "Odaberite Aplikaciju",
"See application page at apps.owncloud.com" => "Pogledajte stranicu s aplikacijama na apps.owncloud.com",
-"Clients" => "Klijenti",
"Password" => "Lozinka",
"Unable to change your password" => "Nemoguće promijeniti lozinku",
"Current password" => "Trenutna lozinka",
"New password" => "Nova lozinka",
-"show" => "prikaz",
"Change password" => "Izmjena lozinke",
"Email" => "e-mail adresa",
"Your email address" => "Vaša e-mail adresa",
"Fill in an email address to enable password recovery" => "Ispunite vase e-mail adresa kako bi se omogućilo oporavak lozinke",
"Language" => "Jezik",
"Help translate" => "Pomoć prevesti",
-"Name" => "Ime",
"Groups" => "Grupe",
"Create" => "Izradi",
"Other" => "ostali",
diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php
index 26a52bd616c..ae1a179b58f 100644
--- a/settings/l10n/hu_HU.php
+++ b/settings/l10n/hu_HU.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Nem tölthető le a lista az App Store-ból",
+"Authentication error" => "Azonosítási hiba",
"Group already exists" => "A csoport már létezik",
"Unable to add group" => "A csoport nem hozható létre",
"Could not enable app. " => "A program nem aktiválható.",
"Email saved" => "Email mentve",
"Invalid email" => "Hibás email",
-"OpenID Changed" => "OpenID megváltozott",
-"Invalid request" => "Érvénytelen kérés",
"Unable to delete group" => "A csoport nem törölhető",
-"Authentication error" => "Azonosítási hiba",
"Unable to delete user" => "A felhasználó nem törölhető",
"Language changed" => "A nyelv megváltozott",
+"Invalid request" => "Érvénytelen kérés",
"Admins can't remove themself from the admin group" => "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
"Unable to add user to group %s" => "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
"Unable to remove user from group %s" => "A felhasználó nem távolítható el ebből a csoportból: %s",
"Disable" => "Letiltás",
"Enable" => "Engedélyezés",
+"Error" => "Hiba",
"Saving..." => "Mentés...",
"__language_name__" => "__language_name__",
"Add your App" => "Az alkalmazás hozzáadása",
@@ -23,6 +23,7 @@
"Select an App" => "Válasszon egy alkalmazást",
"See application page at apps.owncloud.com" => "Lásd apps.owncloud.com, alkalmazások oldal",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-a jogtuladonos <span class=\"author\"></span>",
+"Update" => "Frissítés",
"User Documentation" => "Felhasználói leírás",
"Administrator Documentation" => "Üzemeltetői leírás",
"Online Documentation" => "Online leírás",
@@ -30,16 +31,11 @@
"Bugtracker" => "Hibabejelentések",
"Commercial Support" => "Megvásárolható támogatás",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Az Ön tárterület-felhasználása jelenleg: <strong>%s</strong>. Maximálisan ennyi áll rendelkezésére: <strong>%s</strong>",
-"Clients" => "Kliensek",
-"Download Desktop Clients" => "Desktop kliensprogramok letöltése",
-"Download Android Client" => "Android kliens letöltése",
-"Download iOS Client" => "iOS kliens letöltése",
"Password" => "Jelszó",
"Your password was changed" => "A jelszava megváltozott",
"Unable to change your password" => "A jelszó nem változtatható meg",
"Current password" => "A jelenlegi jelszó",
"New password" => "Az új jelszó",
-"show" => "lássam",
"Change password" => "A jelszó megváltoztatása",
"Email" => "Email",
"Your email address" => "Az Ön email címe",
@@ -50,7 +46,6 @@
"Use this address to connect to your ownCloud in your file manager" => "Ennek a címnek a megadásával a WebDAV-protokollon keresztül saját gépének fájlkezelőjével is is elérheti az állományait.",
"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.",
-"Name" => "Név",
"Groups" => "Csoportok",
"Create" => "Létrehozás",
"Default Storage" => "Alapértelmezett tárhely",
diff --git a/settings/l10n/ia.php b/settings/l10n/ia.php
index d5057275d2b..502dbfefabd 100644
--- a/settings/l10n/ia.php
+++ b/settings/l10n/ia.php
@@ -1,22 +1,19 @@
<?php $TRANSLATIONS = array(
-"OpenID Changed" => "OpenID cambiate",
-"Invalid request" => "Requesta invalide",
"Language changed" => "Linguage cambiate",
+"Invalid request" => "Requesta invalide",
"__language_name__" => "Interlingua",
"Add your App" => "Adder tu application",
"Select an App" => "Selectionar un app",
-"Clients" => "Clientes",
+"Update" => "Actualisar",
"Password" => "Contrasigno",
"Unable to change your password" => "Non pote cambiar tu contrasigno",
"Current password" => "Contrasigno currente",
"New password" => "Nove contrasigno",
-"show" => "monstrar",
"Change password" => "Cambiar contrasigno",
"Email" => "E-posta",
"Your email address" => "Tu adresse de e-posta",
"Language" => "Linguage",
"Help translate" => "Adjuta a traducer",
-"Name" => "Nomine",
"Groups" => "Gruppos",
"Create" => "Crear",
"Other" => "Altere",
diff --git a/settings/l10n/id.php b/settings/l10n/id.php
index 575b0a233dd..8b0b280796f 100644
--- a/settings/l10n/id.php
+++ b/settings/l10n/id.php
@@ -1,30 +1,28 @@
<?php $TRANSLATIONS = array(
+"Authentication error" => "autentikasi bermasalah",
"Email saved" => "Email tersimpan",
"Invalid email" => "Email tidak sah",
-"OpenID Changed" => "OpenID telah dirubah",
-"Invalid request" => "Permintaan tidak valid",
-"Authentication error" => "autentikasi bermasalah",
"Language changed" => "Bahasa telah diganti",
+"Invalid request" => "Permintaan tidak valid",
"Disable" => "NonAktifkan",
"Enable" => "Aktifkan",
+"Error" => "kesalahan",
"Saving..." => "Menyimpan...",
"__language_name__" => "__language_name__",
"Add your App" => "Tambahkan App anda",
"Select an App" => "Pilih satu aplikasi",
"See application page at apps.owncloud.com" => "Lihat halaman aplikasi di apps.owncloud.com",
-"Clients" => "Klien",
+"Update" => "Pembaruan",
"Password" => "Password",
"Unable to change your password" => "Tidak dapat merubah password anda",
"Current password" => "Password saat ini",
"New password" => "kata kunci baru",
-"show" => "perlihatkan",
"Change password" => "Rubah password",
"Email" => "Email",
"Your email address" => "Alamat email anda",
"Fill in an email address to enable password recovery" => "Masukkan alamat email untuk mengaktifkan pemulihan password",
"Language" => "Bahasa",
"Help translate" => "Bantu menerjemahkan",
-"Name" => "Nama",
"Groups" => "Group",
"Create" => "Buat",
"Other" => "Lain-lain",
diff --git a/settings/l10n/is.php b/settings/l10n/is.php
index 2056dfc5b72..fffd8124d38 100644
--- a/settings/l10n/is.php
+++ b/settings/l10n/is.php
@@ -1,27 +1,29 @@
<?php $TRANSLATIONS = array(
"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",
"Could not enable app. " => "Gat ekki virkjað forrit",
"Email saved" => "Netfang vistað",
"Invalid email" => "Ógilt netfang",
-"OpenID Changed" => "OpenID breytt",
-"Invalid request" => "Ógild fyrirspurn",
"Unable to delete group" => "Ekki tókst að eyða hóp",
-"Authentication error" => "Villa við auðkenningu",
"Unable to delete user" => "Ekki tókst að eyða notenda",
"Language changed" => "Tungumáli breytt",
+"Invalid request" => "Ógild fyrirspurn",
"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",
"Disable" => "Gera óvirkt",
"Enable" => "Virkja",
+"Error" => "Villa",
"Saving..." => "Er að vista ...",
"__language_name__" => "__nafn_tungumáls__",
"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 forrita síðuna hjá apps.owncloud.com",
+"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>",
+"Update" => "Uppfæra",
"User Documentation" => "Notenda handbók",
"Administrator Documentation" => "Stjórnenda handbók",
"Online Documentation" => "Handbók á netinu",
@@ -29,16 +31,11 @@
"Bugtracker" => "Villubókhald",
"Commercial Support" => "Borgaður stuðningur",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Þú hefur notað <strong>%s</strong> af tiltæku <strong>%s</strong>",
-"Clients" => "Notendahugbúnaður",
-"Download Desktop Clients" => "Hlaða niður notendahugbúnaði",
-"Download Android Client" => "Hlaða niður Andoid hugbúnaði",
-"Download iOS Client" => "Hlaða niður iOS hugbúnaði",
"Password" => "Lykilorð",
"Your password was changed" => "Lykilorði þínu hefur verið breytt",
"Unable to change your password" => "Ekki tókst að breyta lykilorðinu þínu",
"Current password" => "Núverandi lykilorð",
"New password" => "Nýtt lykilorð",
-"show" => "sýna",
"Change password" => "Breyta lykilorði",
"Email" => "Netfang",
"Your email address" => "Netfangið þitt",
@@ -49,13 +46,12 @@
"Use this address to connect to your ownCloud in your file manager" => "Notaðu þessa vefslóð til að tengjast ownCloud svæðinu þínu",
"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>.",
-"Name" => "Nafn",
"Groups" => "Hópar",
"Create" => "Búa til",
"Default Storage" => "Sjálfgefin gagnageymsla",
"Unlimited" => "Ótakmarkað",
"Other" => "Annað",
-"Group Admin" => "Hópa stjóri",
+"Group Admin" => "Hópstjóri",
"Storage" => "gagnapláss",
"Default" => "Sjálfgefið",
"Delete" => "Eyða"
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index 043f1a2db9d..45821cb7b21 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Impossibile caricare l'elenco dall'App Store",
+"Authentication error" => "Errore di autenticazione",
+"Unable to change display name" => "Impossibile cambiare il nome visualizzato",
"Group already exists" => "Il gruppo esiste già",
"Unable to add group" => "Impossibile aggiungere il gruppo",
"Could not enable app. " => "Impossibile abilitare l'applicazione.",
"Email saved" => "Email salvata",
"Invalid email" => "Email non valida",
-"OpenID Changed" => "OpenID modificato",
-"Invalid request" => "Richiesta non valida",
"Unable to delete group" => "Impossibile eliminare il gruppo",
-"Authentication error" => "Errore di autenticazione",
"Unable to delete user" => "Impossibile eliminare l'utente",
"Language changed" => "Lingua modificata",
+"Invalid request" => "Richiesta non valida",
"Admins can't remove themself from the admin group" => "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
"Unable to add user to group %s" => "Impossibile aggiungere l'utente al gruppo %s",
"Unable to remove user from group %s" => "Impossibile rimuovere l'utente dal gruppo %s",
+"Couldn't update app." => "Impossibile aggiornate l'applicazione.",
+"Update to {appversion}" => "Aggiorna a {appversion}",
"Disable" => "Disabilita",
"Enable" => "Abilita",
+"Please wait...." => "Attendere...",
+"Updating...." => "Aggiornamento in corso...",
+"Error while updating app" => "Errore durante l'aggiornamento",
+"Error" => "Errore",
+"Updated" => "Aggiornato",
"Saving..." => "Salvataggio in corso...",
"__language_name__" => "Italiano",
"Add your App" => "Aggiungi la tua applicazione",
@@ -23,6 +30,7 @@
"Select an App" => "Seleziona un'applicazione",
"See application page at apps.owncloud.com" => "Vedere la pagina dell'applicazione su apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenziato da <span class=\"author\"></span>",
+"Update" => "Aggiorna",
"User Documentation" => "Documentazione utente",
"Administrator Documentation" => "Documentazione amministratore",
"Online Documentation" => "Documentazione in linea",
@@ -30,17 +38,17 @@
"Bugtracker" => "Sistema di tracciamento bug",
"Commercial Support" => "Supporto commerciale",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Hai utilizzato <strong>%s</strong> dei <strong>%s</strong> disponibili",
-"Clients" => "Client",
-"Download Desktop Clients" => "Scarica client desktop",
-"Download Android Client" => "Scarica client Android",
-"Download iOS Client" => "Scarica client iOS",
+"Get the apps to sync your files" => "Scarica le applicazioni per sincronizzare i tuoi file",
"Password" => "Password",
"Your password was changed" => "La tua password è cambiata",
"Unable to change your password" => "Modifica password non riuscita",
"Current password" => "Password attuale",
"New password" => "Nuova password",
-"show" => "mostra",
"Change password" => "Modifica password",
+"Display Name" => "Nome visualizzato",
+"Your display name was changed" => "Il tuo nome visualizzato è stato cambiato",
+"Unable to change your display name" => "Impossibile cambiare il tuo nome visualizzato",
+"Change display name" => "Cambia il nome visualizzato",
"Email" => "Email",
"Your email address" => "Il tuo indirizzo email",
"Fill in an email address to enable password recovery" => "Inserisci il tuo indirizzo email per abilitare il recupero della password",
@@ -50,14 +58,16 @@
"Use this address to connect to your ownCloud in your file manager" => "Usa questo indirizzo per connetterti al tuo ownCloud dal tuo gestore file",
"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> è licenziato nei termini della <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Name" => "Nome",
+"Login Name" => "Nome utente",
"Groups" => "Gruppi",
"Create" => "Crea",
"Default Storage" => "Archiviazione predefinita",
"Unlimited" => "Illimitata",
"Other" => "Altro",
-"Group Admin" => "Gruppo di amministrazione",
+"Group Admin" => "Gruppi amministrati",
"Storage" => "Archiviazione",
+"change display name" => "cambia il nome visualizzato",
+"set new password" => "imposta una nuova password",
"Default" => "Predefinito",
"Delete" => "Elimina"
);
diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php
index 4b1efe35f67..04ab6b5e188 100644
--- a/settings/l10n/ja_JP.php
+++ b/settings/l10n/ja_JP.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "アプリストアã‹ã‚‰ãƒªã‚¹ãƒˆã‚’ロードã§ãã¾ã›ã‚“",
+"Authentication error" => "èªè¨¼ã‚¨ãƒ©ãƒ¼",
+"Unable to change display name" => "表示åを変更ã§ãã¾ã›ã‚“",
"Group already exists" => "ã‚°ãƒ«ãƒ¼ãƒ—ã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™",
"Unable to add group" => "グループを追加ã§ãã¾ã›ã‚“",
"Could not enable app. " => "アプリを有効ã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚",
"Email saved" => "メールアドレスをä¿å­˜ã—ã¾ã—ãŸ",
"Invalid email" => "無効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹",
-"OpenID Changed" => "OpenIDãŒå¤‰æ›´ã•れã¾ã—ãŸ",
-"Invalid request" => "無効ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™",
"Unable to delete group" => "グループを削除ã§ãã¾ã›ã‚“",
-"Authentication error" => "èªè¨¼ã‚¨ãƒ©ãƒ¼",
"Unable to delete user" => "ユーザを削除ã§ãã¾ã›ã‚“",
"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." => "アプリを更新出æ¥ã¾ã›ã‚“ã§ã—ãŸã€‚",
+"Update to {appversion}" => "{appversion} ã«æ›´æ–°",
"Disable" => "無効",
"Enable" => "有効",
+"Please wait...." => "ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。",
+"Updating...." => "更新中....",
+"Error while updating app" => "ã‚¢ãƒ—ãƒªã®æ›´æ–°ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿ",
+"Error" => "エラー",
+"Updated" => "更新済ã¿",
"Saving..." => "ä¿å­˜ä¸­...",
"__language_name__" => "Japanese (日本語)",
"Add your App" => "アプリを追加",
@@ -23,6 +30,7 @@
"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>",
+"Update" => "æ›´æ–°",
"User Documentation" => "ユーザドキュメント",
"Administrator Documentation" => "管ç†è€…ドキュメント",
"Online Documentation" => "オンラインドキュメント",
@@ -30,17 +38,16 @@
"Bugtracker" => "ãƒã‚°ãƒˆãƒ©ãƒƒã‚«ãƒ¼",
"Commercial Support" => "コマーシャルサãƒãƒ¼ãƒˆ",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "ç¾åœ¨ã€<strong>%s</strong> / <strong>%s</strong> を利用ã—ã¦ã„ã¾ã™",
-"Clients" => "顧客",
-"Download Desktop Clients" => "デスクトップクライアントをダウンロード",
-"Download Android Client" => "Androidクライアントをダウンロード",
-"Download iOS Client" => "iOSクライアントをダウンロード",
"Password" => "パスワード",
"Your password was changed" => "パスワードを変更ã—ã¾ã—ãŸ",
"Unable to change your password" => "パスワードを変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“",
"Current password" => "ç¾åœ¨ã®ãƒ‘スワード",
"New password" => "æ–°ã—ã„パスワード",
-"show" => "表示",
"Change password" => "パスワードを変更",
+"Display Name" => "表示å",
+"Your display name was changed" => "ã‚ãªãŸã®è¡¨ç¤ºåを変更ã—ã¾ã—ãŸ",
+"Unable to change your display name" => "ã‚ãªãŸã®è¡¨ç¤ºåを変更ã§ãã¾ã›ã‚“",
+"Change display name" => "表示åを変更",
"Email" => "Email",
"Your email address" => "ã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹",
"Fill in an email address to enable password recovery" => "※パスワード回復を有効ã«ã™ã‚‹ã«ã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å…¥åŠ›ãŒå¿…è¦ã§ã™",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "ファイルマãƒãƒ¼ã‚¸ãƒ£ã§ownCloudã«æŽ¥ç¶šã™ã‚‹éš›ã¯ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’利用ã—ã¦ãã ã•ã„",
"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\">ソースコード</a>ライセンスã¯ã€<a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> ライセンスã«ã‚ˆã‚Šæä¾›ã•れã¦ã„ã¾ã™ã€‚",
-"Name" => "åå‰",
+"Login Name" => "ログインå",
"Groups" => "グループ",
"Create" => "作æˆ",
"Default Storage" => "デフォルトストレージ",
@@ -58,6 +65,8 @@
"Other" => "ãã®ä»–",
"Group Admin" => "グループ管ç†è€…",
"Storage" => "ストレージ",
+"change display name" => "表示åを変更",
+"set new password" => "æ–°ã—ã„パスワードを設定",
"Default" => "デフォルト",
"Delete" => "削除"
);
diff --git a/settings/l10n/ka_GE.php b/settings/l10n/ka_GE.php
index a9d994f87c6..5f33972a80e 100644
--- a/settings/l10n/ka_GE.php
+++ b/settings/l10n/ka_GE.php
@@ -1,20 +1,20 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ”ბის სირვერ ჩáƒáƒ›áƒáƒ˜áƒ¢áƒ•ირთრApp Store",
+"Authentication error" => "áƒáƒ•თენტიფიკáƒáƒªáƒ˜áƒ˜áƒ¡ შეცდáƒáƒ›áƒ",
"Group already exists" => "ჯგუფი უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს",
"Unable to add group" => "ჯგუფის დáƒáƒ›áƒáƒ¢áƒ”ბრვერ მáƒáƒ®áƒ”რხდáƒ",
"Could not enable app. " => "ვერ მáƒáƒ®áƒ”რხდრáƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ ჩáƒáƒ áƒ—ვáƒ.",
"Email saved" => "იმეილი შენáƒáƒ®áƒ£áƒšáƒ˜áƒ",
"Invalid email" => "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ იმეილი",
-"OpenID Changed" => "OpenID შეცვლილიáƒ",
-"Invalid request" => "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ მáƒáƒ—ხáƒáƒ•ნáƒ",
"Unable to delete group" => "ჯგუფის წáƒáƒ¨áƒšáƒ ვერ მáƒáƒ®áƒ”რხდáƒ",
-"Authentication error" => "áƒáƒ•თენტიფიკáƒáƒªáƒ˜áƒ˜áƒ¡ შეცდáƒáƒ›áƒ",
"Unable to delete user" => "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის წáƒáƒ¨áƒšáƒ ვერ მáƒáƒ®áƒ”რხდáƒ",
"Language changed" => "ენრშეცვლილიáƒ",
+"Invalid request" => "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ მáƒáƒ—ხáƒáƒ•ნáƒ",
"Unable to add user to group %s" => "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის დáƒáƒ›áƒáƒ¢áƒ”ბრვერ მáƒáƒ®áƒ”ხდრჯგუფში %s",
"Unable to remove user from group %s" => "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის წáƒáƒ¨áƒšáƒ ვერ მáƒáƒ®áƒ”ხდრჯგუფიდáƒáƒœ %s",
"Disable" => "გáƒáƒ›áƒáƒ áƒ—ვáƒ",
"Enable" => "ჩáƒáƒ áƒ—ვáƒ",
+"Error" => "შეცდáƒáƒ›áƒ",
"Saving..." => "შენáƒáƒ®áƒ•áƒ...",
"__language_name__" => "__language_name__",
"Add your App" => "დáƒáƒáƒ›áƒáƒ¢áƒ” შენი áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ",
@@ -22,20 +22,18 @@
"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>",
-"Clients" => "კლიენტები",
+"Update" => "გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ",
"Password" => "პáƒáƒ áƒáƒšáƒ˜",
"Your password was changed" => "თქვენი პáƒáƒ áƒáƒšáƒ˜ შეიცვáƒáƒšáƒ",
"Unable to change your password" => "თქვენი პáƒáƒ áƒáƒšáƒ˜ áƒáƒ  შეიცვáƒáƒšáƒ",
"Current password" => "მიმდინáƒáƒ áƒ” პáƒáƒ áƒáƒšáƒ˜",
"New password" => "áƒáƒ®áƒáƒšáƒ˜ პáƒáƒ áƒáƒšáƒ˜",
-"show" => "გáƒáƒ›áƒáƒáƒ©áƒ˜áƒœáƒ”",
"Change password" => "პáƒáƒ áƒáƒšáƒ˜áƒ¡ შეცვლáƒ",
"Email" => "იმეილი",
"Your email address" => "თქვენი იმეილ მისáƒáƒ›áƒáƒ áƒ—ი",
"Fill in an email address to enable password recovery" => "შეáƒáƒ•სეთ იმეილ მისáƒáƒ›áƒáƒ áƒ—ის ველი პáƒáƒ áƒáƒšáƒ˜áƒ¡ áƒáƒ¦áƒ¡áƒáƒ“გენáƒáƒ“",
"Language" => "ენáƒ",
"Help translate" => "თáƒáƒ áƒ’მნის დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ",
-"Name" => "სáƒáƒ®áƒ”ლი",
"Groups" => "ჯგუფი",
"Create" => "შექმნáƒ",
"Other" => "სხვáƒ",
diff --git a/settings/l10n/ko.php b/settings/l10n/ko.php
index 21724a1782e..0afaef00155 100644
--- a/settings/l10n/ko.php
+++ b/settings/l10n/ko.php
@@ -1,55 +1,53 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "앱 스토어ì—서 목ë¡ì„ 가져올 수 없습니다",
+"Authentication error" => "ì¸ì¦ 오류",
"Group already exists" => "ê·¸ë£¹ì´ ì´ë¯¸ 존재합니다.",
"Unable to add group" => "ê·¸ë£¹ì„ ì¶”ê°€í•  수 없습니다.",
"Could not enable app. " => "ì•±ì„ í™œì„±í™”í•  수 없습니다.",
"Email saved" => "ì´ë©”ì¼ ì €ìž¥ë¨",
"Invalid email" => "ìž˜ëª»ëœ ì´ë©”ì¼ ì£¼ì†Œ",
-"OpenID Changed" => "OpenID 변경ë¨",
-"Invalid request" => "ìž˜ëª»ëœ ìš”ì²­",
"Unable to delete group" => "ê·¸ë£¹ì„ ì‚­ì œí•  수 없습니다.",
-"Authentication error" => "ì¸ì¦ 오류",
"Unable to delete user" => "사용ìžë¥¼ 삭제할 수 없습니다.",
"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ì—서 사용ìžë¥¼ 삭제할 수 없습니다.",
"Disable" => "비활성화",
"Enable" => "활성화",
+"Error" => "오류",
"Saving..." => "저장 중...",
"__language_name__" => "한국어",
"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>",
-"User Documentation" => "유저 문서",
+"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-ë¼ì´ì„ ìФë¨: <span class=\"author\"></span>",
+"Update" => "ì—…ë°ì´íЏ",
+"User Documentation" => "ì‚¬ìš©ìž ë¬¸ì„œ",
"Administrator Documentation" => "ê´€ë¦¬ìž ë¬¸ì„œ",
"Online Documentation" => "온ë¼ì¸ 문서",
"Forum" => "í¬ëŸ¼",
-"Bugtracker" => "버그트래커",
+"Bugtracker" => "버그 트래커",
+"Commercial Support" => "ìƒì—…ìš© ì§€ì›",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "현재 공간 <strong>%s</strong>/<strong>%s</strong>ì„(를) 사용 중입니다",
-"Clients" => "ê³ ê°",
-"Download Desktop Clients" => "ë°ìФí¬íƒ‘ í´ë¼ì´ì–¸íЏ 다운로드",
-"Download Android Client" => "안드로ì´ë“œ í´ë¼ì´ì–¸íЏ 다운로드",
-"Download iOS Client" => "iOS í´ë¼ì´ì–¸íЏ 다운로드",
"Password" => "암호",
"Your password was changed" => "암호가 변경ë˜ì—ˆìŠµë‹ˆë‹¤",
"Unable to change your password" => "암호를 변경할 수 ì—†ìŒ",
"Current password" => "현재 암호",
"New password" => "새 암호",
-"show" => "ë³´ì´ê¸°",
"Change password" => "암호 변경",
+"Display Name" => "표시 ì´ë¦„",
"Email" => "ì´ë©”ì¼",
"Your email address" => "ì´ë©”ì¼ ì£¼ì†Œ",
"Fill in an email address to enable password recovery" => "암호 찾기 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ë©´ ì´ë©”ì¼ ì£¼ì†Œë¥¼ 입력하십시오.",
"Language" => "언어",
"Help translate" => "번역 ë•기",
"WebDAV" => "WebDAV",
-"Use this address to connect to your ownCloud in your file manager" => "íŒŒì¼ ë§¤ë‹ˆì €ì—서 사용ìžì˜ ownCloudì— ì ‘ì†í•˜ê¸° 위해 ì´ ì£¼ì†Œë¥¼ 사용하십시요.",
-"Version" => "버젼",
+"Use this address to connect to your ownCloud in your file manager" => "íŒŒì¼ ê´€ë¦¬ìžì—서 ownCloudì— ì ‘ì†í•˜ë ¤ë©´ ì´ ì£¼ì†Œë¥¼ 사용하십시오.",
+"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>ì— ë”°ë¼ ì‚¬ìš©ì´ í—ˆê°€ë©ë‹ˆë‹¤.",
-"Name" => "ì´ë¦„",
+"Login Name" => "ë¡œê·¸ì¸ ì´ë¦„",
"Groups" => "그룹",
"Create" => "만들기",
"Default Storage" => "기본 저장소",
@@ -57,6 +55,8 @@
"Other" => "기타",
"Group Admin" => "그룹 관리ìž",
"Storage" => "저장소",
+"change display name" => "표시 ì´ë¦„ 변경",
+"set new password" => "새 암호 설정",
"Default" => "기본값",
"Delete" => "삭제"
);
diff --git a/settings/l10n/ku_IQ.php b/settings/l10n/ku_IQ.php
index 6a4996e8252..a7d2daa70ba 100644
--- a/settings/l10n/ku_IQ.php
+++ b/settings/l10n/ku_IQ.php
@@ -1,8 +1,9 @@
<?php $TRANSLATIONS = array(
"Enable" => "چالاککردن",
+"Error" => "هه‌ڵه",
"Saving..." => "پاشکه‌وتده‌کات...",
+"Update" => "نوێکردنه‌وه",
"Password" => "وشەی تێپەربو",
"New password" => "وشەی نهێنی نوێ",
-"Email" => "ئیمه‌یل",
-"Name" => "ناو"
+"Email" => "ئیمه‌یل"
);
diff --git a/settings/l10n/lb.php b/settings/l10n/lb.php
index db09bdc1280..eec89949139 100644
--- a/settings/l10n/lb.php
+++ b/settings/l10n/lb.php
@@ -1,31 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Konnt Lescht net vum App Store lueden",
+"Authentication error" => "Authentifikatioun's Fehler",
"Email saved" => "E-mail gespäichert",
"Invalid email" => "Ongülteg e-mail",
-"OpenID Changed" => "OpenID huet geännert",
-"Invalid request" => "Ongülteg Requête",
-"Authentication error" => "Authentifikatioun's Fehler",
"Language changed" => "Sprooch huet geännert",
+"Invalid request" => "Ongülteg Requête",
"Disable" => "Ofschalten",
"Enable" => "Aschalten",
+"Error" => "Fehler",
"Saving..." => "Speicheren...",
"__language_name__" => "__language_name__",
"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",
-"Clients" => "Clienten",
"Password" => "Passwuert",
"Unable to change your password" => "Konnt däin Passwuert net änneren",
"Current password" => "Momentan 't Passwuert",
"New password" => "Neit Passwuert",
-"show" => "weisen",
"Change password" => "Passwuert änneren",
"Email" => "Email",
"Your email address" => "Deng Email Adress",
"Fill in an email address to enable password recovery" => "Gëff eng Email Adress an fir d'Passwuert recovery ze erlaben",
"Language" => "Sprooch",
"Help translate" => "Hëllef iwwersetzen",
-"Name" => "Numm",
"Groups" => "Gruppen",
"Create" => "Erstellen",
"Other" => "Aner",
diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php
index 0430fface00..d86b4eff9b7 100644
--- a/settings/l10n/lt_LT.php
+++ b/settings/l10n/lt_LT.php
@@ -1,34 +1,32 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Neįmanoma įkelti sąrašo iš Programų Katalogo",
+"Authentication error" => "Autentikacijos klaida",
"Could not enable app. " => "Nepavyksta įjungti aplikacijos.",
"Email saved" => "El. paštas išsaugotas",
"Invalid email" => "Netinkamas el. paštas",
-"OpenID Changed" => "OpenID pakeistas",
-"Invalid request" => "Klaidinga užklausa",
-"Authentication error" => "Autentikacijos klaida",
"Language changed" => "Kalba pakeista",
+"Invalid request" => "Klaidinga užklausa",
"Disable" => "Išjungti",
"Enable" => "Įjungti",
+"Error" => "Klaida",
"Saving..." => "Saugoma..",
"__language_name__" => "Kalba",
"Add your App" => "PridÄ—ti programÄ—lÄ™",
"More Apps" => "Daugiau aplikacijų",
"Select an App" => "Pasirinkite programÄ…",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>- autorius<span class=\"author\"></span>",
-"Clients" => "Klientai",
+"Update" => "Atnaujinti",
"Password" => "Slaptažodis",
"Your password was changed" => "Jūsų slaptažodis buvo pakeistas",
"Unable to change your password" => "Neįmanoma pakeisti slaptažodžio",
"Current password" => "Dabartinis slaptažodis",
"New password" => "Naujas slaptažodis",
-"show" => "rodyti",
"Change password" => "Pakeisti slaptažodį",
"Email" => "El. paštas",
"Your email address" => "Jūsų el. pašto adresas",
"Fill in an email address to enable password recovery" => "Pamiršto slaptažodžio atkūrimui įveskite savo el. pašto adresą",
"Language" => "Kalba",
"Help translate" => "Padėkite išversti",
-"Name" => "Vardas",
"Groups" => "GrupÄ—s",
"Create" => "Sukurti",
"Other" => "Kita",
diff --git a/settings/l10n/lv.php b/settings/l10n/lv.php
index 5ae9be48e4f..4ea926f8b80 100644
--- a/settings/l10n/lv.php
+++ b/settings/l10n/lv.php
@@ -1,45 +1,72 @@
<?php $TRANSLATIONS = array(
-"Unable to load list from App Store" => "Nebija iespÄ“jams lejuplÄdÄ“t sarakstu no aplikÄciju veikala",
+"Unable to load list from App Store" => "Nevar lejupielÄdÄ“t sarakstu no lietotņu veikala",
+"Authentication error" => "AutentifikÄcijas kļūda",
+"Unable to change display name" => "NevarÄ“ja mainÄ«t redzamo vÄrdu",
"Group already exists" => "Grupa jau eksistē",
"Unable to add group" => "Nevar pievienot grupu",
-"Could not enable app. " => "Nevar ieslÄ“gt aplikÄciju.",
-"Email saved" => "Epasts tika saglabÄts",
-"Invalid email" => "Nepareizs epasts",
-"OpenID Changed" => "OpenID nomainīts",
-"Invalid request" => "Nepareizs vaicÄjums",
+"Could not enable app. " => "Nevarēja aktivēt lietotni.",
+"Email saved" => "E-pasts tika saglabÄts",
+"Invalid email" => "Nederīgs epasts",
"Unable to delete group" => "Nevar izdzēst grupu",
-"Authentication error" => "IelogoÅ¡anÄs kļūme",
"Unable to delete user" => "Nevar izdzÄ“st lietotÄju",
"Language changed" => "Valoda tika nomainīta",
+"Invalid request" => "Nederīgs pieprasījums",
+"Admins can't remove themself from the admin group" => "Administratori nevar izņemt paši sevi no administratoru grupas",
"Unable to add user to group %s" => "Nevar pievienot lietotÄju grupai %s",
-"Unable to remove user from group %s" => "Nevar noņemt lietotÄju no grupas %s",
-"Disable" => "Atvienot",
-"Enable" => "Pievienot",
+"Unable to remove user from group %s" => "Nevar izņemt lietotÄju no grupas %s",
+"Couldn't update app." => "NevarÄ“ja atjauninÄt lietotni.",
+"Update to {appversion}" => "AtjauninÄt uz {appversion}",
+"Disable" => "Deaktivēt",
+"Enable" => "Aktivēt",
+"Please wait...." => "Lūdzu, uzgaidiet....",
+"Updating...." => "Atjaunina....",
+"Error while updating app" => "Kļūda, atjauninot lietotni",
+"Error" => "Kļūda",
+"Updated" => "AtjauninÄta",
"Saving..." => "SaglabÄ...",
"__language_name__" => "__valodas_nosaukums__",
-"Add your App" => "Pievieno savu aplikÄciju",
-"More Apps" => "VairÄk aplikÄciju",
-"Select an App" => "IzvÄ“lies aplikÄciju",
-"See application page at apps.owncloud.com" => "Apskatie aplikÄciju lapu - apps.owncloud.com",
+"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>",
+"Update" => "AtjauninÄt",
+"User Documentation" => "LietotÄja dokumentÄcija",
+"Administrator Documentation" => "Administratora dokumentÄcija",
+"Online Documentation" => "TieÅ¡saistes dokumentÄcija",
+"Forum" => "Forums",
+"Bugtracker" => "Kļūdu sekotÄjs",
+"Commercial Support" => "KomerciÄlais atbalsts",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Jūs lietojat <strong>%s</strong> no pieejamajiem <strong>%s</strong>",
"Password" => "Parole",
"Your password was changed" => "Jūru parole tika nomainīta",
-"Unable to change your password" => "Nav iespējams nomainīt jūsu paroli",
+"Unable to change your password" => "Nevar nomainīt jūsu paroli",
"Current password" => "PaÅ¡reizÄ“jÄ parole",
"New password" => "Jauna parole",
-"show" => "parÄdÄ«t",
-"Change password" => "Nomainīt paroli",
-"Email" => "Epasts",
-"Your email address" => "Jūsu epasta adrese",
-"Fill in an email address to enable password recovery" => "Ievadiet epasta adresi, lai vēlak būtu iespēja atgūt paroli, ja būs nepieciešamība",
+"Change password" => "Mainīt paroli",
+"Display Name" => "Redzamais vÄrds",
+"Your display name was changed" => "JÅ«su redzamais vÄrds tika mainÄ«ts",
+"Unable to change your display name" => "NevarÄ“ja mainÄ«t jÅ«su redzamo vÄrdu",
+"Change display name" => "MainÄ«t redzamo vÄrdu",
+"Email" => "E-pasts",
+"Your email address" => "Jūsu e-pasta adrese",
+"Fill in an email address to enable password recovery" => "Ievadiet epasta adresi, lai vÄ“lÄk varÄ“tu atgÅ«t paroli, ja bÅ«s nepiecieÅ¡amÄ«ba",
"Language" => "Valoda",
"Help translate" => "Palīdzi tulkot",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "Izmanto Å¡o adresi, lai, izmantojot datņu pÄrvaldnieku, savienotos ar savu ownCloud",
+"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>.",
-"Name" => "VÄrds",
+"Login Name" => "IerakstīšanÄs vÄrds",
"Groups" => "Grupas",
"Create" => "Izveidot",
+"Default Storage" => "NoklusÄ“juma krÄtuve",
+"Unlimited" => "Neierobežota",
"Other" => "Cits",
"Group Admin" => "Grupas administrators",
-"Delete" => "Izdzēst"
+"Storage" => "KrÄtuve",
+"change display name" => "mainÄ«t redzamo vÄrdu",
+"set new password" => "iestatīt jaunu paroli",
+"Default" => "Noklusējuma",
+"Delete" => "Dzēst"
);
diff --git a/settings/l10n/mk.php b/settings/l10n/mk.php
index 4c5f7bf549b..6307a2a1af1 100644
--- a/settings/l10n/mk.php
+++ b/settings/l10n/mk.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Ðеможам да вчитам лиÑта од App Store",
+"Authentication error" => "Грешка во автентикација",
"Group already exists" => "Групата веќе поÑтои",
"Unable to add group" => "Ðеможе да додадам група",
"Could not enable app. " => "Ðеможе да овозможам апликација.",
"Email saved" => "ЕлектронÑката пошта е Ñнимена",
"Invalid email" => "ÐеиÑправна електронÑка пошта",
-"OpenID Changed" => "OpenID Ñменето",
-"Invalid request" => "неправилно барање",
"Unable to delete group" => "Ðеможе да избришам група",
-"Authentication error" => "Грешка во автентикација",
"Unable to delete user" => "Ðеможам да избришам кориÑник",
"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",
"Disable" => "Оневозможи",
"Enable" => "Овозможи",
+"Error" => "Грешка",
"Saving..." => "Снимам...",
"__language_name__" => "__language_name__",
"Add your App" => "Додадете ја Вашата апликација",
@@ -23,22 +23,18 @@
"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>",
+"Update" => "Ðжурирај",
"User Documentation" => "КориÑничка документација",
"Administrator Documentation" => "ÐдминиÑтраторÑка документација",
"Online Documentation" => "Документација на интернет",
"Forum" => "Форум",
"Commercial Support" => "Комерцијална подршка",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Имате иÑкориÑтено <strong>%s</strong> од доÑтапните <strong>%s</strong>",
-"Clients" => "Клиенти",
-"Download Desktop Clients" => "Преземи клиенти за деÑктоп",
-"Download Android Client" => "Преземи клиент за Ðндроид",
-"Download iOS Client" => "Преземи iOS клиент",
"Password" => "Лозинка",
"Your password was changed" => "Вашата лозинка беше променета.",
"Unable to change your password" => "Вашата лозинка неможе да Ñе Ñмени",
"Current password" => "Моментална лозинка",
"New password" => "Ðова лозинка",
-"show" => "прикажи",
"Change password" => "Смени лозинка",
"Email" => "Е-пошта",
"Your email address" => "Вашата адреÑа за е-пошта",
@@ -49,7 +45,6 @@
"Use this address to connect to your ownCloud in your file manager" => "КориÑтете ја оваа адреÑа да ",
"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>.",
-"Name" => "Име",
"Groups" => "Групи",
"Create" => "Создај",
"Other" => "ОÑтанато",
diff --git a/settings/l10n/ms_MY.php b/settings/l10n/ms_MY.php
index 27eb4c2df9f..c573979d879 100644
--- a/settings/l10n/ms_MY.php
+++ b/settings/l10n/ms_MY.php
@@ -1,30 +1,28 @@
<?php $TRANSLATIONS = array(
+"Authentication error" => "Ralat pengesahan",
"Email saved" => "Emel disimpan",
"Invalid email" => "Emel tidak sah",
-"OpenID Changed" => "OpenID diubah",
-"Invalid request" => "Permintaan tidak sah",
-"Authentication error" => "Ralat pengesahan",
"Language changed" => "Bahasa diubah",
+"Invalid request" => "Permintaan tidak sah",
"Disable" => "Nyahaktif",
"Enable" => "Aktif",
+"Error" => "Ralat",
"Saving..." => "Simpan...",
"__language_name__" => "_nama_bahasa_",
"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",
-"Clients" => "klien",
+"Update" => "Kemaskini",
"Password" => "Kata laluan ",
"Unable to change your password" => "Gagal mengubah kata laluan anda ",
"Current password" => "Kata laluan semasa",
"New password" => "Kata laluan baru",
-"show" => "Papar",
"Change password" => "Ubah kata laluan",
"Email" => "Emel",
"Your email address" => "Alamat emel anda",
"Fill in an email address to enable password recovery" => "Isi alamat emel anda untuk membolehkan pemulihan kata laluan",
"Language" => "Bahasa",
"Help translate" => "Bantu terjemah",
-"Name" => "Nama",
"Groups" => "Kumpulan",
"Create" => "Buat",
"Other" => "Lain",
diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php
index 24a6085b024..96831eb2d61 100644
--- a/settings/l10n/nb_NO.php
+++ b/settings/l10n/nb_NO.php
@@ -1,40 +1,36 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Lasting av liste fra App Store feilet.",
+"Authentication error" => "Autentikasjonsfeil",
"Group already exists" => "Gruppen finnes allerede",
"Unable to add group" => "Kan ikke legge til gruppe",
"Could not enable app. " => "Kan ikke aktivere app.",
"Email saved" => "Epost lagret",
"Invalid email" => "Ugyldig epost",
-"OpenID Changed" => "OpenID endret",
-"Invalid request" => "Ugyldig forespørsel",
"Unable to delete group" => "Kan ikke slette gruppe",
-"Authentication error" => "Autentikasjonsfeil",
"Unable to delete user" => "Kan ikke slette bruker",
"Language changed" => "Språk endret",
+"Invalid request" => "Ugyldig forespørsel",
"Unable to add user to group %s" => "Kan ikke legge bruker til gruppen %s",
"Unable to remove user from group %s" => "Kan ikke slette bruker fra gruppen %s",
"Disable" => "Slå avBehandle ",
"Enable" => "Slå på",
+"Error" => "Feil",
"Saving..." => "Lagrer...",
"__language_name__" => "__language_name__",
"Add your App" => "Legg til din App",
"More Apps" => "Flere Apps",
"Select an App" => "Velg en app",
"See application page at apps.owncloud.com" => "Se applikasjonens side på apps.owncloud.org",
+"Update" => "Oppdater",
"User Documentation" => "Brukerdokumentasjon",
"Administrator Documentation" => "Administratordokumentasjon",
"Commercial Support" => "Kommersiell støtte",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Du har brukt <strong>%s</strong> av tilgjengelig <strong>%s</strong>",
-"Clients" => "Klienter",
-"Download Desktop Clients" => "Last ned skrivebordsklienter",
-"Download Android Client" => "Last ned Android-klient",
-"Download iOS Client" => "Last ned iOS-klient",
"Password" => "Passord",
"Your password was changed" => "Passord har blitt endret",
"Unable to change your password" => "Kunne ikke endre passordet ditt",
"Current password" => "Nåværende passord",
"New password" => "Nytt passord",
-"show" => "vis",
"Change password" => "Endre passord",
"Email" => "E-post",
"Your email address" => "Din e-postadresse",
@@ -43,7 +39,6 @@
"Help translate" => "Bidra til oversettelsen",
"WebDAV" => "WebDAV",
"Version" => "Versjon",
-"Name" => "Navn",
"Groups" => "Grupper",
"Create" => "Opprett",
"Other" => "Annet",
diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php
index ca7e84ce6cb..84b70d9d32e 100644
--- a/settings/l10n/nl.php
+++ b/settings/l10n/nl.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Kan de lijst niet van de App store laden",
+"Authentication error" => "Authenticatie fout",
+"Unable to change display name" => "Kon de weergavenaam niet wijzigen",
"Group already exists" => "Groep bestaat al",
"Unable to add group" => "Niet in staat om groep toe te voegen",
"Could not enable app. " => "Kan de app. niet activeren",
"Email saved" => "E-mail bewaard",
"Invalid email" => "Ongeldige e-mail",
-"OpenID Changed" => "OpenID is aangepast",
-"Invalid request" => "Ongeldig verzoek",
"Unable to delete group" => "Niet in staat om groep te verwijderen",
-"Authentication error" => "Authenticatie fout",
"Unable to delete user" => "Niet in staat om gebruiker te verwijderen",
"Language changed" => "Taal aangepast",
+"Invalid request" => "Ongeldig verzoek",
"Admins can't remove themself from the admin group" => "Admins kunnen zichzelf niet uit de admin groep verwijderen",
"Unable to add user to group %s" => "Niet in staat om gebruiker toe te voegen aan groep %s",
"Unable to remove user from group %s" => "Niet in staat om gebruiker te verwijderen uit groep %s",
+"Couldn't update app." => "Kon de app niet bijwerken.",
+"Update to {appversion}" => "Bijwerken naar {appversion}",
"Disable" => "Uitschakelen",
"Enable" => "Inschakelen",
+"Please wait...." => "Even geduld aub....",
+"Updating...." => "Bijwerken....",
+"Error while updating app" => "Fout bij bijwerken app",
+"Error" => "Fout",
+"Updated" => "Bijgewerkt",
"Saving..." => "Aan het bewaren.....",
"__language_name__" => "Nederlands",
"Add your App" => "App toevoegen",
@@ -23,6 +30,7 @@
"Select an App" => "Selecteer een app",
"See application page at apps.owncloud.com" => "Zie de applicatiepagina op apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-Gelicenseerd door <span class=\"author\"></span>",
+"Update" => "Bijwerken",
"User Documentation" => "Gebruikersdocumentatie",
"Administrator Documentation" => "Beheerdersdocumentatie",
"Online Documentation" => "Online documentatie",
@@ -30,17 +38,16 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Commerciële ondersteuning",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "U heeft <strong>%s</strong> van de <strong>%s</strong> beschikbaren gebruikt",
-"Clients" => "Klanten",
-"Download Desktop Clients" => "Download Desktop Clients",
-"Download Android Client" => "Download Android Client",
-"Download iOS Client" => "Download iOS Client",
"Password" => "Wachtwoord",
"Your password was changed" => "Je wachtwoord is veranderd",
"Unable to change your password" => "Niet in staat om uw wachtwoord te wijzigen",
"Current password" => "Huidig wachtwoord",
"New password" => "Nieuw wachtwoord",
-"show" => "weergeven",
"Change password" => "Wijzig wachtwoord",
+"Display Name" => "Weergavenaam",
+"Your display name was changed" => "Uw weergavenaam is gewijzigd",
+"Unable to change your display name" => "Kon de weergavenaam niet wijzigen",
+"Change display name" => "Wijzig weergavenaam",
"Email" => "E-mailadres",
"Your email address" => "Uw e-mailadres",
"Fill in an email address to enable password recovery" => "Vul een e-mailadres in om wachtwoord reset uit te kunnen voeren",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Gebruik dit adres om te verbinden met uw ownCloud in uw bestandsbeheer",
"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\">bron code</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>.",
-"Name" => "Naam",
+"Login Name" => "Inlognaam",
"Groups" => "Groepen",
"Create" => "Creëer",
"Default Storage" => "Default opslag",
@@ -58,6 +65,8 @@
"Other" => "Andere",
"Group Admin" => "Groep beheerder",
"Storage" => "Opslag",
+"change display name" => "wijzig weergavenaam",
+"set new password" => "Instellen nieuw wachtwoord",
"Default" => "Default",
"Delete" => "verwijderen"
);
diff --git a/settings/l10n/nn_NO.php b/settings/l10n/nn_NO.php
index 9f54fc9ee5f..c3e1c83c990 100644
--- a/settings/l10n/nn_NO.php
+++ b/settings/l10n/nn_NO.php
@@ -1,28 +1,26 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Klarer ikkje å laste inn liste fra App Store",
+"Authentication error" => "Feil i autentisering",
"Email saved" => "E-postadresse lagra",
"Invalid email" => "Ugyldig e-postadresse",
-"OpenID Changed" => "OpenID endra",
-"Invalid request" => "Ugyldig førespurnad",
-"Authentication error" => "Feil i autentisering",
"Language changed" => "Språk endra",
+"Invalid request" => "Ugyldig førespurnad",
"Disable" => "Slå av",
"Enable" => "Slå på",
+"Error" => "Feil",
"__language_name__" => "Nynorsk",
"Select an App" => "Vel ein applikasjon",
-"Clients" => "Klientar",
+"Update" => "Oppdater",
"Password" => "Passord",
"Unable to change your password" => "Klarte ikkje å endra passordet",
"Current password" => "Passord",
"New password" => "Nytt passord",
-"show" => "vis",
"Change password" => "Endra passord",
"Email" => "Epost",
"Your email address" => "Din epost addresse",
"Fill in an email address to enable password recovery" => "Fyll inn din e-post addresse for og kunne motta passord tilbakestilling",
"Language" => "Språk",
"Help translate" => "Hjelp oss å oversett",
-"Name" => "Namn",
"Groups" => "Grupper",
"Create" => "Lag",
"Other" => "Anna",
diff --git a/settings/l10n/oc.php b/settings/l10n/oc.php
index 358b44bbec3..0e09acbd18e 100644
--- a/settings/l10n/oc.php
+++ b/settings/l10n/oc.php
@@ -1,40 +1,37 @@
<?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",
"Could not enable app. " => "Pòt pas activar app. ",
"Email saved" => "Corrièl enregistrat",
"Invalid email" => "Corrièl incorrècte",
-"OpenID Changed" => "OpenID cambiat",
-"Invalid request" => "Demanda invalida",
"Unable to delete group" => "Pas capable d'escafar un grop",
-"Authentication error" => "Error d'autentificacion",
"Unable to delete user" => "Pas capable d'escafar un usancièr",
"Language changed" => "Lengas cambiadas",
+"Invalid request" => "Demanda invalida",
"Unable to add user to group %s" => "Pas capable d'apondre un usancièr al grop %s",
"Unable to remove user from group %s" => "Pas capable de tira un usancièr del grop %s",
"Disable" => "Desactiva",
"Enable" => "Activa",
+"Error" => "Error",
"Saving..." => "Enregistra...",
"__language_name__" => "__language_name__",
"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>",
-"Clients" => "Practica",
"Password" => "Senhal",
"Your password was changed" => "Ton senhal a cambiat",
"Unable to change your password" => "Pas possible de cambiar ton senhal",
"Current password" => "Senhal en cors",
"New password" => "Senhal novèl",
-"show" => "mòstra",
"Change password" => "Cambia lo senhal",
"Email" => "Corrièl",
"Your email address" => "Ton adreiça de corrièl",
"Fill in an email address to enable password recovery" => "Emplena una adreiça de corrièl per permetre lo mandadís del senhal perdut",
"Language" => "Lenga",
"Help translate" => "Ajuda a la revirada",
-"Name" => "Nom",
"Groups" => "Grops",
"Create" => "Crea",
"Other" => "Autres",
diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php
index 87fd9fb3317..2fd921ef0f2 100644
--- a/settings/l10n/pl.php
+++ b/settings/l10n/pl.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Nie mogę załadować listy aplikacji",
+"Authentication error" => "Błąd uwierzytelniania",
"Group already exists" => "Grupa już istnieje",
"Unable to add group" => "Nie można dodać grupy",
"Could not enable app. " => "Nie można włączyć aplikacji.",
"Email saved" => "Email zapisany",
"Invalid email" => "Niepoprawny email",
-"OpenID Changed" => "Zmieniono OpenID",
-"Invalid request" => "Nieprawidłowe żądanie",
"Unable to delete group" => "Nie można usunąć grupy",
-"Authentication error" => "Błąd uwierzytelniania",
"Unable to delete user" => "Nie można usunąć użytkownika",
"Language changed" => "Język zmieniony",
+"Invalid request" => "Nieprawidłowe żądanie",
"Admins can't remove themself from the admin group" => "Administratorzy nie mogą usunąć się sami z grupy administratorów.",
"Unable to add user to group %s" => "Nie można dodać użytkownika do grupy %s",
"Unable to remove user from group %s" => "Nie można usunąć użytkownika z grupy %s",
"Disable" => "Wyłącz",
"Enable" => "Włącz",
+"Error" => "Błąd",
"Saving..." => "Zapisywanie...",
"__language_name__" => "Polski",
"Add your App" => "Dodaj aplikacje",
@@ -23,6 +23,7 @@
"Select an App" => "Zaznacz aplikacje",
"See application page at apps.owncloud.com" => "Zobacz stronÄ™ aplikacji na apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencjonowane przez <span class=\"author\"></span>",
+"Update" => "Zaktualizuj",
"User Documentation" => "Dokumentacja użytkownika",
"Administrator Documentation" => "Dokumentacja Administratora",
"Online Documentation" => "Dokumentacja Online",
@@ -30,16 +31,11 @@
"Bugtracker" => "Zgłaszanie błędów",
"Commercial Support" => "Wsparcie komercyjne",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Korzystasz z <strong>%s</strong> z dostępnych <strong>%s</strong>",
-"Clients" => "Klienci",
-"Download Desktop Clients" => "Pobierz klienta dla Komputera",
-"Download Android Client" => "Pobierz klienta dla Androida",
-"Download iOS Client" => "Pobierz klienta dla iOS",
"Password" => "Hasło",
"Your password was changed" => "Twoje hasło zostało zmienione",
"Unable to change your password" => "Nie można zmienić hasła",
"Current password" => "Bieżące hasło",
"New password" => "Nowe hasło",
-"show" => "Wyświetlanie",
"Change password" => "Zmień hasło",
"Email" => "E-mail",
"Your email address" => "Adres e-mail użytkownika",
@@ -49,8 +45,7 @@
"WebDAV" => "WebDAV",
"Use this address to connect to your ownCloud in your file manager" => "Użyj tego adresu aby podłączyć zasób ownCloud w menedżerze plików",
"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>." => "Stwirzone przez <a href=\"http://ownCloud.org/contact\" target=\"_blank\"> społeczność ownCloud</a>, the <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>.",
-"Name" => "Nazwa",
+"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>, the <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>.",
"Groups" => "Grupy",
"Create" => "Utwórz",
"Default Storage" => "Domyślny magazyn",
diff --git a/settings/l10n/pl_PL.php b/settings/l10n/pl_PL.php
index ab81cb23465..7dcd2fdfae8 100644
--- a/settings/l10n/pl_PL.php
+++ b/settings/l10n/pl_PL.php
@@ -1,3 +1,4 @@
<?php $TRANSLATIONS = array(
+"Update" => "Uaktualnienie",
"Email" => "Email"
);
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index a731d142ce3..01904d97666 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -1,47 +1,59 @@
<?php $TRANSLATIONS = array(
-"Unable to load list from App Store" => "Não foi possivel carregar lista da App Store",
+"Unable to load list from App Store" => "Não foi possível carregar lista da App Store",
+"Authentication error" => "Erro de autenticação",
"Group already exists" => "Grupo já existe",
-"Unable to add group" => "Não foi possivel adicionar grupo",
-"Could not enable app. " => "Não pôde habilitar aplicação",
-"Email saved" => "Email gravado",
-"Invalid email" => "Email inválido",
-"OpenID Changed" => "Mudou OpenID",
+"Unable to add group" => "Não foi possível adicionar grupo",
+"Could not enable app. " => "Não foi possível habilitar aplicativo.",
+"Email saved" => "E-mail guardado",
+"Invalid email" => "E-mail inválido",
+"Unable to delete group" => "Não foi possível remover grupo",
+"Unable to delete user" => "Não foi possível remover usuário",
+"Language changed" => "Idioma alterado",
"Invalid request" => "Pedido inválido",
-"Unable to delete group" => "Não foi possivel remover grupo",
-"Authentication error" => "erro de autenticação",
-"Unable to delete user" => "Não foi possivel remover usuário",
-"Language changed" => "Mudou Idioma",
"Admins can't remove themself from the admin group" => "Admins não podem se remover do grupo admin",
-"Unable to add user to group %s" => "Não foi possivel adicionar usuário ao grupo %s",
-"Unable to remove user from group %s" => "Não foi possivel remover usuário ao grupo %s",
-"Disable" => "Desabilitado",
-"Enable" => "Habilitado",
-"Saving..." => "Gravando...",
-"__language_name__" => "Português",
+"Unable to add user to group %s" => "Não foi possível adicionar usuário ao grupo %s",
+"Unable to remove user from group %s" => "Não foi possível remover usuário do grupo %s",
+"Disable" => "Desabilitar",
+"Enable" => "Habilitar",
+"Error" => "Erro",
+"Saving..." => "Guardando...",
+"__language_name__" => "Português (Brasil)",
"Add your App" => "Adicione seu Aplicativo",
"More Apps" => "Mais Apps",
-"Select an App" => "Selecione uma Aplicação",
+"Select an App" => "Selecione um Aplicativo",
"See application page at apps.owncloud.com" => "Ver página do aplicativo em apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>",
+"Update" => "Atualizar",
+"User Documentation" => "Documentação de Usuário",
+"Administrator Documentation" => "Documentação de Administrador",
+"Online Documentation" => "Documentação Online",
+"Forum" => "Fórum",
+"Commercial Support" => "Suporte Comercial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Você usou <strong>%s</strong> do seu espaço de <strong>%s</strong>",
-"Clients" => "Clientes",
"Password" => "Senha",
"Your password was changed" => "Sua senha foi alterada",
"Unable to change your password" => "Não é possivel alterar a sua senha",
"Current password" => "Senha atual",
"New password" => "Nova senha",
-"show" => "mostrar",
"Change password" => "Alterar senha",
-"Email" => "Email",
-"Your email address" => "Seu endereço de email",
-"Fill in an email address to enable password recovery" => "Preencha um endereço de email para habilitar a recuperação de senha",
+"Display Name" => "Nome de Exibição",
+"Email" => "E-mail",
+"Your email address" => "Seu endereço de e-mail",
+"Fill in an email address to enable password recovery" => "Preencha um endereço de e-mail para habilitar a recuperação de senha",
"Language" => "Idioma",
"Help translate" => "Ajude a traduzir",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "Usar este endereço para conectar-se ao seu ownCloud no seu gerenciador de arquivos",
+"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>.",
-"Name" => "Nome",
+"Login Name" => "Nome de Login",
"Groups" => "Grupos",
"Create" => "Criar",
+"Default Storage" => "Armazenamento Padrão",
+"Unlimited" => "Ilimitado",
"Other" => "Outro",
"Group Admin" => "Grupo Administrativo",
+"Storage" => "Armazenamento",
+"Default" => "Padrão",
"Delete" => "Apagar"
);
diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php
index 32764a9cf36..3dc53eb2add 100644
--- a/settings/l10n/pt_PT.php
+++ b/settings/l10n/pt_PT.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Incapaz de carregar a lista da App Store",
+"Authentication error" => "Erro de autenticação",
+"Unable to change display name" => "Não foi possível alterar o nome",
"Group already exists" => "O grupo já existe",
"Unable to add group" => "Impossível acrescentar o grupo",
"Could not enable app. " => "Não foi possível activar a app.",
"Email saved" => "Email guardado",
"Invalid email" => "Email inválido",
-"OpenID Changed" => "OpenID alterado",
-"Invalid request" => "Pedido inválido",
"Unable to delete group" => "Impossível apagar grupo",
-"Authentication error" => "Erro de autenticação",
"Unable to delete user" => "Impossível apagar utilizador",
"Language changed" => "Idioma alterado",
+"Invalid request" => "Pedido inválido",
"Admins can't remove themself from the admin group" => "Os administradores não se podem remover a eles mesmos do grupo admin.",
"Unable to add user to group %s" => "Impossível acrescentar utilizador ao grupo %s",
"Unable to remove user from group %s" => "Impossível apagar utilizador do grupo %s",
+"Couldn't update app." => "Não foi possível actualizar a aplicação.",
+"Update to {appversion}" => "Actualizar para a versão {appversion}",
"Disable" => "Desactivar",
"Enable" => "Activar",
+"Please wait...." => "Por favor aguarde...",
+"Updating...." => "A Actualizar...",
+"Error while updating app" => "Erro enquanto actualizava a aplicação",
+"Error" => "Erro",
+"Updated" => "Actualizado",
"Saving..." => "A guardar...",
"__language_name__" => "__language_name__",
"Add your App" => "Adicione a sua aplicação",
@@ -23,6 +30,7 @@
"Select an App" => "Selecione uma aplicação",
"See application page at apps.owncloud.com" => "Ver a página da aplicação em apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>",
+"Update" => "Actualizar",
"User Documentation" => "Documentação de Utilizador",
"Administrator Documentation" => "Documentação de administrador.",
"Online Documentation" => "Documentação Online",
@@ -30,17 +38,16 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Suporte Comercial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Usou <strong>%s</strong> do disponivel <strong>%s</strong>",
-"Clients" => "Clientes",
-"Download Desktop Clients" => "Transferir os clientes de sincronização",
-"Download Android Client" => "Transferir o cliente android",
-"Download iOS Client" => "Transferir o cliente iOS",
"Password" => "Palavra-chave",
"Your password was changed" => "A sua palavra-passe foi alterada",
"Unable to change your password" => "Não foi possivel alterar a sua palavra-chave",
"Current password" => "Palavra-chave actual",
"New password" => "Nova palavra-chave",
-"show" => "mostrar",
"Change password" => "Alterar palavra-chave",
+"Display Name" => "Nome público",
+"Your display name was changed" => "O seu nome foi alterado",
+"Unable to change your display name" => "Não foi possível alterar o seu nome",
+"Change display name" => "Alterar nome",
"Email" => "endereço de email",
"Your email address" => "O seu endereço de email",
"Fill in an email address to enable password recovery" => "Preencha com o seu endereço de email para ativar a recuperação da palavra-chave",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Use este endereço no seu gestor de ficheiros para ligar à sua ownCloud",
"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>.",
-"Name" => "Nome",
+"Login Name" => "Nome de utilizador",
"Groups" => "Grupos",
"Create" => "Criar",
"Default Storage" => "Armazenamento Padrão",
@@ -58,6 +65,8 @@
"Other" => "Outro",
"Group Admin" => "Grupo Administrador",
"Storage" => "Armazenamento",
+"change display name" => "modificar nome exibido",
+"set new password" => "definir nova palavra-passe",
"Default" => "Padrão",
"Delete" => "Apagar"
);
diff --git a/settings/l10n/ro.php b/settings/l10n/ro.php
index 4c8b1ac420a..249395f33f2 100644
--- a/settings/l10n/ro.php
+++ b/settings/l10n/ro.php
@@ -1,44 +1,58 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Imposibil de încărcat lista din App Store",
+"Authentication error" => "Eroare de autentificare",
"Group already exists" => "Grupul există deja",
"Unable to add group" => "Nu s-a putut adăuga grupul",
"Could not enable app. " => "Nu s-a putut activa aplicația.",
"Email saved" => "E-mail salvat",
"Invalid email" => "E-mail nevalid",
-"OpenID Changed" => "OpenID schimbat",
-"Invalid request" => "Cerere eronată",
"Unable to delete group" => "Nu s-a putut șterge grupul",
-"Authentication error" => "Eroare de autentificare",
"Unable to delete user" => "Nu s-a putut șterge utilizatorul",
"Language changed" => "Limba a fost schimbată",
+"Invalid request" => "Cerere eronată",
+"Admins can't remove themself from the admin group" => "Administratorii nu se pot șterge singuri din grupul admin",
"Unable to add user to group %s" => "Nu s-a putut adăuga utilizatorul la grupul %s",
"Unable to remove user from group %s" => "Nu s-a putut elimina utilizatorul din grupul %s",
"Disable" => "Dezactivați",
"Enable" => "Activați",
+"Error" => "Eroare",
"Saving..." => "Salvez...",
"__language_name__" => "_language_name_",
"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>",
-"Clients" => "Clienți",
+"Update" => "Actualizare",
+"User Documentation" => "Documentație utilizator",
+"Administrator Documentation" => "Documentație administrator",
+"Online Documentation" => "Documentație online",
+"Forum" => "Forum",
+"Bugtracker" => "Urmărire bug-uri",
+"Commercial Support" => "Suport comercial",
+"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Ați utilizat <strong>%s</strong> din <strong>%s</strong> disponibile",
"Password" => "Parolă",
"Your password was changed" => "Parola a fost modificată",
"Unable to change your password" => "Imposibil de-ați schimbat parola",
"Current password" => "Parola curentă",
"New password" => "Noua parolă",
-"show" => "afișează",
"Change password" => "Schimbă parola",
"Email" => "Email",
"Your email address" => "Adresa ta de email",
"Fill in an email address to enable password recovery" => "Completează o adresă de mail pentru a-ți putea recupera parola",
"Language" => "Limba",
"Help translate" => "Ajută la traducere",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "Folosește această adresă pentru a conecta ownCloud cu managerul de fișiere",
+"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>.",
-"Name" => "Nume",
"Groups" => "Grupuri",
"Create" => "Crează",
+"Default Storage" => "Stocare implicită",
+"Unlimited" => "Nelimitată",
"Other" => "Altele",
"Group Admin" => "Grupul Admin ",
+"Storage" => "Stocare",
+"Default" => "Implicită",
"Delete" => "Șterge"
);
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index 48965f9a684..1d457db7452 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Загрузка из App Store запрещена",
+"Authentication error" => "Ошибка авторизации",
+"Unable to change display name" => "Ðевозможно изменить отображаемое имÑ",
"Group already exists" => "Группа уже ÑущеÑтвует",
"Unable to add group" => "Ðевозможно добавить группу",
"Could not enable app. " => "Ðе удалоÑÑŒ включить приложение.",
"Email saved" => "Email Ñохранен",
"Invalid email" => "Ðеправильный Email",
-"OpenID Changed" => "OpenID изменён",
-"Invalid request" => "Ðеверный запроÑ",
"Unable to delete group" => "Ðевозможно удалить группу",
-"Authentication error" => "Ошибка авторизации",
"Unable to delete user" => "Ðевозможно удалить пользователÑ",
"Language changed" => "Язык изменён",
+"Invalid request" => "Ðеверный запроÑ",
"Admins can't remove themself from the admin group" => "ÐдминиÑтратор не может удалить Ñам ÑÐµÐ±Ñ Ð¸Ð· группы admin",
"Unable to add user to group %s" => "Ðевозможно добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² группу %s",
"Unable to remove user from group %s" => "Ðевозможно удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· группы %s",
+"Couldn't update app." => "Ðевозможно обновить приложение",
+"Update to {appversion}" => "Обновить до {верÑÐ¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ}",
"Disable" => "Выключить",
"Enable" => "Включить",
+"Please wait...." => "Повремени...",
+"Updating...." => "Обновление...",
+"Error while updating app" => "Ошибка в процеÑÑе Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ",
+"Error" => "Ошибка",
+"Updated" => "Обновлено",
"Saving..." => "Сохранение...",
"__language_name__" => "РуÑÑкий ",
"Add your App" => "Добавить приложение",
@@ -23,19 +30,24 @@
"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>",
+"Update" => "Обновить",
+"User Documentation" => "ПользовательÑÐºÐ°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ",
+"Administrator Documentation" => "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора",
+"Online Documentation" => "Online документациÑ",
"Forum" => "Форум",
+"Bugtracker" => "Bugtracker",
+"Commercial Support" => "КоммерчеÑÐºÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Ð’Ñ‹ иÑпользовали <strong>%s</strong> из доÑтупных <strong>%s</strong>",
-"Clients" => "Клиенты",
-"Download Desktop Clients" => "Загрузка приложений Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð°",
-"Download Android Client" => "Загрузка Android-приложениÑ",
-"Download iOS Client" => "Загрузка iOS-приложениÑ",
"Password" => "Пароль",
"Your password was changed" => "Ваш пароль изменён",
"Unable to change your password" => "Ðевозможно Ñменить пароль",
"Current password" => "Текущий пароль",
"New password" => "Ðовый пароль",
-"show" => "показать",
"Change password" => "Сменить пароль",
+"Display Name" => "Отображаемое имÑ",
+"Your display name was changed" => "Ваше отображаемое Ð¸Ð¼Ñ Ð±Ñ‹Ð»Ð¾ изменено",
+"Unable to change your display name" => "Ðевозможно изменить Ваше отображаемое имÑ",
+"Change display name" => "Изменить отображаемое имÑ",
"Email" => "e-mail",
"Your email address" => "Ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты",
"Fill in an email address to enable password recovery" => "Введите Ð°Ð´Ñ€ÐµÑ Ñлектронной почты, чтобы поÑвилаÑÑŒ возможноÑть воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ",
@@ -45,10 +57,16 @@
"Use this address to connect to your ownCloud in your file manager" => "ИÑпользуйте Ñтот URL Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð³Ð¾ менеджера к Вашему хранилищу",
"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>.",
-"Name" => "ИмÑ",
+"Login Name" => "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ",
"Groups" => "Группы",
"Create" => "Создать",
+"Default Storage" => "Хранилище по-умолчанию",
+"Unlimited" => "Ðеограниченно",
"Other" => "Другое",
"Group Admin" => "Группа ÐдминиÑтраторы",
+"Storage" => "Хранилище",
+"change display name" => "изменить отображаемое имÑ",
+"set new password" => "уÑтановить новый пароль",
+"Default" => "По-умолчанию",
"Delete" => "Удалить"
);
diff --git a/settings/l10n/ru_RU.php b/settings/l10n/ru_RU.php
index 38b736a5c18..c5e595226b0 100644
--- a/settings/l10n/ru_RU.php
+++ b/settings/l10n/ru_RU.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Ðевозможно загрузить ÑпиÑок из App Store",
+"Authentication error" => "Ошибка авторизации",
"Group already exists" => "Группа уже ÑущеÑтвует",
"Unable to add group" => "Ðевозможно добавить группу",
"Could not enable app. " => "Ðе удалоÑÑŒ запуÑтить приложение",
"Email saved" => "Email Ñохранен",
"Invalid email" => "Ðеверный email",
-"OpenID Changed" => "OpenID изменен",
-"Invalid request" => "Ðеверный запроÑ",
"Unable to delete group" => "Ðевозможно удалить группу",
-"Authentication error" => "Ошибка авторизации",
"Unable to delete user" => "Ðевозможно удалить пользователÑ",
"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",
"Disable" => "Отключить",
"Enable" => "Включить",
+"Error" => "Ошибка",
"Saving..." => "Сохранение",
"__language_name__" => "__Ñзык_имÑ__",
"Add your App" => "Добавить Ваше приложение",
@@ -23,6 +23,7 @@
"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>",
+"Update" => "Обновить",
"User Documentation" => "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ",
"Administrator Documentation" => "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора",
"Online Documentation" => "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ online",
@@ -30,15 +31,11 @@
"Bugtracker" => "ОтÑлеживание ошибок",
"Commercial Support" => "КоммерчеÑÐºÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Ð’Ñ‹ иÑпользовали <strong>%s</strong> из возможных <strong>%s</strong>",
-"Clients" => "Клиенты",
-"Download Android Client" => "Загрузить клиент под Android ",
-"Download iOS Client" => "Загрузить клиент под iOS ",
"Password" => "Пароль",
"Your password was changed" => "Ваш пароль был изменен",
"Unable to change your password" => "Ðевозможно изменить Ваш пароль",
"Current password" => "Текущий пароль",
"New password" => "Ðовый пароль",
-"show" => "показать",
"Change password" => "Изменить пароль",
"Email" => "Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°",
"Your email address" => "ÐÐ´Ñ€ÐµÑ Ð’Ð°ÑˆÐµÐ¹ Ñлектронной почты",
@@ -49,10 +46,14 @@
"Use this address to connect to your ownCloud in your file manager" => "ИÑпользуйте Ñтот Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº ownCloud в Вашем файловом менеджере",
"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>, 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>.",
-"Name" => "ИмÑ",
"Groups" => "Группы",
"Create" => "Создать",
+"Default Storage" => "Хранилище по умолчанию",
+"Unlimited" => "Ðеограниченный",
"Other" => "Другой",
"Group Admin" => "Группа Admin",
+"Storage" => "Хранилище",
+"set new password" => "назначить новый пароль",
+"Default" => "По умолчанию",
"Delete" => "Удалить"
);
diff --git a/settings/l10n/si_LK.php b/settings/l10n/si_LK.php
index 4f4834921e9..a188b135348 100644
--- a/settings/l10n/si_LK.php
+++ b/settings/l10n/si_LK.php
@@ -1,30 +1,29 @@
<?php $TRANSLATIONS = array(
+"Authentication error" => "සත්â€à¶ºà·à¶´à¶± දà·à·‚යක්",
"Group already exists" => "à¶šà¶«à·Šà¶©à·à¶ºà¶¸ දà·à¶±à¶§à¶¸à¶­à·Š à¶­à·’à¶¶à·š",
"Unable to add group" => "à¶šà·à¶«à¶©à¶ºà¶šà·Š à¶‘à¶šà·Š à¶šà·… නොහà·à¶šà·’ විය",
"Could not enable app. " => "යෙදුම සක්â€à¶»à·“ය à¶šà·… නොහà·à¶šà·’ විය.",
"Email saved" => "වි-à¶­à·à¶´à·‘à¶½ සුරකින ලදී",
"Invalid email" => "අවලංගු වි-à¶­à·à¶´à·‘à¶½",
-"OpenID Changed" => "විවෘත à·„à·à¶³à·”නුම à¶±à·à¶­à·„ොත් OpenID වෙනස්විය.",
-"Invalid request" => "අවලංගු අයදුම",
"Unable to delete group" => "à¶šà¶«à·Šà¶©à·à¶ºà¶¸ මà·à¶šà·“මට නොහà·à¶š",
-"Authentication error" => "සත්â€à¶ºà·à¶´à¶± දà·à·‚යක්",
"Unable to delete user" => "පරිà·à·“ලකය෠මà·à¶šà·“මට නොහà·à¶š",
"Language changed" => "à¶·à·à·‚à·à·€ à·à·€à¶±à·ƒà·Š කිරීම",
+"Invalid request" => "අවලංගු අයදුම",
"Unable to add user to group %s" => "පරිà·à·“ලකය෠%s à¶šà¶«à·Šà¶©à·à¶ºà¶¸à¶§ à¶‘à¶šà¶­à·” à¶šà·… නොහà·à¶š",
"Unable to remove user from group %s" => "පරිà·à·“ලකය෠%s à¶šà¶«à·Šà¶©à·à¶ºà¶¸à·’න් ඉවත් à¶šà·… නොහà·à¶š",
"Disable" => "à¶…à¶šà·Šâ€à¶»à·’ය කරන්න",
"Enable" => "à¶šà·Šâ€à¶»à·’යත්මක කරන්න",
+"Error" => "දà·à·‚යක්",
"Saving..." => "සුරà·à¶šà·™à¶¸à·’න් පවතී...",
"Add your App" => "යෙදුමක් එක් කිරීම",
"More Apps" => "තවත් යෙදුම්",
"Select an App" => "යෙදුමක් තොරන්න",
-"Clients" => "සේවà·à¶½à·à¶·à·“න්",
+"Update" => "යà·à·€à¶­à·Šà¶šà·à¶½ කිරීම",
"Password" => "මුරපදය",
"Your password was changed" => "ඔබගේ මුර පදය වෙනස් කෙරුණි",
"Unable to change your password" => "මුර පදය වෙනස් à¶šà·… නොහà·à¶šà·’ විය",
"Current password" => "වත්මන් මුරපදය",
"New password" => "නව මුරපදය",
-"show" => "à¶´à·Šâ€à¶»à¶¯à¶»à·Šà·à¶±à¶º කිරීම",
"Change password" => "මුරපදය වෙනස් කිරීම",
"Email" => "විද්â€à¶ºà·”à¶­à·Š à¶­à·à¶´à·‘à¶½",
"Your email address" => "ඔබගේ විද්â€à¶ºà·”à¶­à·Š à¶­à·à¶´à·‘à¶½",
@@ -32,7 +31,6 @@
"Language" => "à¶·à·à·‚à·à·€",
"Help translate" => "පරිවර්ථන සහය",
"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> යටතේ.",
-"Name" => "à¶±à·à¶¸à¶º",
"Groups" => "සමූහය",
"Create" => "තනන්න",
"Other" => "වෙනත්",
diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php
index c3cf84f1fe8..bb13f0c9cee 100644
--- a/settings/l10n/sk_SK.php
+++ b/settings/l10n/sk_SK.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Nie je možné nahrať zoznam z App Store",
+"Authentication error" => "Chyba pri autentifikácii",
+"Unable to change display name" => "Nemožno zmeniť zobrazované meno",
"Group already exists" => "Skupina už existuje",
"Unable to add group" => "Nie je možné pridať skupinu",
"Could not enable app. " => "Nie je možné zapnúť aplikáciu.",
"Email saved" => "Email uložený",
"Invalid email" => "Neplatný email",
-"OpenID Changed" => "OpenID zmenené",
-"Invalid request" => "Neplatná požiadavka",
"Unable to delete group" => "Nie je možné odstrániť skupinu",
-"Authentication error" => "Chyba pri autentifikácii",
"Unable to delete user" => "Nie je možné odstrániť používateľa",
"Language changed" => "Jazyk zmenený",
+"Invalid request" => "Neplatná požiadavka",
"Admins can't remove themself from the admin group" => "Administrátori nesmú odstrániť sami seba zo skupiny admin",
-"Unable to add user to group %s" => "Nie je možné pridať užívateľa do skupiny %s",
+"Unable to add user to group %s" => "Nie je možné pridať používateľa do skupiny %s",
"Unable to remove user from group %s" => "Nie je možné odstrániť používateľa zo skupiny %s",
+"Couldn't update app." => "Nemožno aktualizovať aplikáciu.",
+"Update to {appversion}" => "Aktualizovať na {appversion}",
"Disable" => "Zakázať",
"Enable" => "Povoliť",
+"Please wait...." => "Čakajte prosím...",
+"Updating...." => "Aktualizujem...",
+"Error while updating app" => "chyba pri aktualizácii aplikácie",
+"Error" => "Chyba",
+"Updated" => "Aktualizované",
"Saving..." => "Ukladám...",
"__language_name__" => "Slovensky",
"Add your App" => "Pridať vašu aplikáciu",
@@ -23,25 +30,43 @@
"Select an App" => "Vyberte aplikáciu",
"See application page at apps.owncloud.com" => "Pozrite si stránku aplikácií na apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencované <span class=\"author\"></span>",
+"Update" => "Aktualizovať",
+"User Documentation" => "PríruÄka používateľa",
+"Administrator Documentation" => "PríruÄka administrátora",
+"Online Documentation" => "Online príruÄka",
+"Forum" => "Fórum",
+"Bugtracker" => "Bugtracker",
+"Commercial Support" => "KomerÄná podpora",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Použili ste <strong>%s</strong> z <strong>%s</strong> dostupných ",
-"Clients" => "Klienti",
"Password" => "Heslo",
"Your password was changed" => "Heslo bolo zmenené",
"Unable to change your password" => "Nie je možné zmeniť vaše heslo",
"Current password" => "Aktuálne heslo",
"New password" => "Nové heslo",
-"show" => "zobraziť",
"Change password" => "Zmeniť heslo",
+"Display Name" => "Zobrazované meno",
+"Your display name was changed" => "Vaše zobrazované meno bolo zmenené",
+"Unable to change your display name" => "Nemožno zmeniť Vaše zobrazované meno",
+"Change display name" => "Zmeniť zobrazované meno",
"Email" => "Email",
"Your email address" => "Vaša emailová adresa",
"Fill in an email address to enable password recovery" => "Vyplňte emailovú adresu pre aktivovanie obnovy hesla",
"Language" => "Jazyk",
"Help translate" => "Pomôcť s prekladom",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "Použite túto adresu pre pripojenie vášho ownCloud k súborovému správcovi",
+"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>.",
-"Name" => "Meno",
+"Login Name" => "Prihlasovacie meno",
"Groups" => "Skupiny",
"Create" => "Vytvoriť",
+"Default Storage" => "Predvolené úložisko",
+"Unlimited" => "Nelimitované",
"Other" => "Iné",
"Group Admin" => "Správca skupiny",
+"Storage" => "Úložisko",
+"change display name" => "zmeniť zobrazované meno",
+"set new password" => "nastaviť nové heslo",
+"Default" => "Predvolené",
"Delete" => "Odstrániť"
);
diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php
index 88dc1dddba9..b545f455229 100644
--- a/settings/l10n/sl.php
+++ b/settings/l10n/sl.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Ni mogoÄe naložiti seznama iz App Store",
+"Authentication error" => "Napaka overitve",
"Group already exists" => "Skupina že obstaja",
"Unable to add group" => "Ni mogoÄe dodati skupine",
"Could not enable app. " => "Programa ni mogoÄe omogoÄiti.",
"Email saved" => "Elektronski naslov je shranjen",
"Invalid email" => "Neveljaven elektronski naslov",
-"OpenID Changed" => "OpenID je bil spremenjen",
-"Invalid request" => "Neveljavna zahteva",
"Unable to delete group" => "Ni mogoÄe izbrisati skupine",
-"Authentication error" => "Napaka overitve",
"Unable to delete user" => "Ni mogoÄe izbrisati uporabnika",
"Language changed" => "Jezik je bil spremenjen",
+"Invalid request" => "Neveljavna zahteva",
"Admins can't remove themself from the admin group" => "Administratorji sebe ne morejo odstraniti iz skupine admin",
"Unable to add user to group %s" => "Uporabnika ni mogoÄe dodati k skupini %s",
"Unable to remove user from group %s" => "Uporabnika ni mogoÄe odstraniti iz skupine %s",
"Disable" => "OnemogoÄi",
"Enable" => "OmogoÄi",
+"Error" => "Napaka",
"Saving..." => "Poteka shranjevanje ...",
"__language_name__" => "__ime_jezika__",
"Add your App" => "Dodaj program",
@@ -23,6 +23,7 @@
"Select an App" => "Izberite program",
"See application page at apps.owncloud.com" => "ObiÅ¡Äite spletno stran programa na apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-z dovoljenjem s strani <span class=\"author\"></span>",
+"Update" => "Posodobi",
"User Documentation" => "Uporabniška dokumentacija",
"Administrator Documentation" => "Administratorjeva dokumentacija",
"Online Documentation" => "Spletna dokumentacija",
@@ -30,16 +31,11 @@
"Bugtracker" => "Sistem za sledenje napakam",
"Commercial Support" => "Komercialna podpora",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Uporabljate <strong>%s</strong> od razpoložljivih <strong>%s</strong>",
-"Clients" => "Stranka",
-"Download Desktop Clients" => "Prenesi namizne odjemalce",
-"Download Android Client" => "Prenesi Android odjemalec",
-"Download iOS Client" => "Prenesi iOS odjemalec",
"Password" => "Geslo",
"Your password was changed" => "Vaše geslo je spremenjeno",
"Unable to change your password" => "Gesla ni mogoÄe spremeniti.",
"Current password" => "Trenutno geslo",
"New password" => "Novo geslo",
-"show" => "pokaži",
"Change password" => "Spremeni geslo",
"Email" => "Elektronska pošta",
"Your email address" => "Vaš elektronski poštni naslov",
@@ -50,7 +46,6 @@
"Use this address to connect to your ownCloud in your file manager" => "Uporabite ta naslov za povezavo do ownCloud v vašem upravljalniku datotek.",
"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 dovoljenja <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Splošno javno dovoljenje Affero\">AGPL</abbr></a>.",
-"Name" => "Ime",
"Groups" => "Skupine",
"Create" => "Ustvari",
"Default Storage" => "Privzeta shramba",
diff --git a/settings/l10n/sr.php b/settings/l10n/sr.php
index 9fb495a9ebb..f0818435358 100644
--- a/settings/l10n/sr.php
+++ b/settings/l10n/sr.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Грешка приликом учитавања ÑпиÑка из Складишта Програма",
+"Authentication error" => "Грешка при аутентификацији",
"Group already exists" => "Група већ поÑтоји",
"Unable to add group" => "Ðе могу да додам групу",
"Could not enable app. " => "Ðе могу да укључим програм",
"Email saved" => "Е-порука Ñачувана",
"Invalid email" => "ÐеиÑправна е-адреÑа",
-"OpenID Changed" => "OpenID је измењен",
-"Invalid request" => "ÐеиÑправан захтев",
"Unable to delete group" => "Ðе могу да уклоним групу",
-"Authentication error" => "Грешка при аутентификацији",
"Unable to delete user" => "Ðе могу да уклоним кориÑника",
"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",
"Disable" => "ИÑкључи",
"Enable" => "Укључи",
+"Error" => "Грешка",
"Saving..." => "Чување у току...",
"__language_name__" => "__language_name__",
"Add your App" => "Додајте ваш програм",
@@ -23,14 +23,13 @@
"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>",
+"Update" => "Ðжурирај",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "ИÑкориÑтили Ñте <strong>%s</strong> од дозвољених <strong>%s</strong>",
-"Clients" => "Клијенти",
"Password" => "Лозинка",
"Your password was changed" => "Лозинка је промењена",
"Unable to change your password" => "Ðе могу да изменим вашу лозинку",
"Current password" => "Тренутна лозинка",
"New password" => "Ðова лозинка",
-"show" => "прикажи",
"Change password" => "Измени лозинку",
"Email" => "Е-пошта",
"Your email address" => "Ваша адреÑа е-поште",
@@ -38,7 +37,6 @@
"Language" => "Језик",
"Help translate" => " Помозите у превођењу",
"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>.",
-"Name" => "Име",
"Groups" => "Групе",
"Create" => "Ðаправи",
"Other" => "Друго",
diff --git a/settings/l10n/sr@latin.php b/settings/l10n/sr@latin.php
index 9ee84bc255a..190e3e56099 100644
--- a/settings/l10n/sr@latin.php
+++ b/settings/l10n/sr@latin.php
@@ -1,19 +1,15 @@
<?php $TRANSLATIONS = array(
-"OpenID Changed" => "OpenID je izmenjen",
-"Invalid request" => "Neispravan zahtev",
"Authentication error" => "Greška pri autentifikaciji",
"Language changed" => "Jezik je izmenjen",
+"Invalid request" => "Neispravan zahtev",
"Select an App" => "Izaberite program",
-"Clients" => "Klijenti",
"Password" => "Lozinka",
"Unable to change your password" => "Ne mogu da izmenim vašu lozinku",
"Current password" => "Trenutna lozinka",
"New password" => "Nova lozinka",
-"show" => "prikaži",
"Change password" => "Izmeni lozinku",
"Email" => "E-mail",
"Language" => "Jezik",
-"Name" => "Ime",
"Groups" => "Grupe",
"Create" => "Napravi",
"Other" => "Drugo",
diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php
index 681db2099a1..c32b839f058 100644
--- a/settings/l10n/sv.php
+++ b/settings/l10n/sv.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Kan inte ladda listan från App Store",
+"Authentication error" => "Autentiseringsfel",
+"Unable to change display name" => "Kan inte ändra visningsnamn",
"Group already exists" => "Gruppen finns redan",
"Unable to add group" => "Kan inte lägga till grupp",
"Could not enable app. " => "Kunde inte aktivera appen.",
"Email saved" => "E-post sparad",
"Invalid email" => "Ogiltig e-post",
-"OpenID Changed" => "OpenID ändrat",
-"Invalid request" => "Ogiltig begäran",
"Unable to delete group" => "Kan inte radera grupp",
-"Authentication error" => "Autentiseringsfel",
"Unable to delete user" => "Kan inte radera användare",
"Language changed" => "Språk ändrades",
+"Invalid request" => "Ogiltig begäran",
"Admins can't remove themself from the admin group" => "Administratörer kan inte ta bort sig själva från admingruppen",
"Unable to add user to group %s" => "Kan inte lägga till användare i gruppen %s",
"Unable to remove user from group %s" => "Kan inte radera användare från gruppen %s",
+"Couldn't update app." => "Kunde inte uppdatera appen",
+"Update to {appversion}" => "Uppdaterar till {appversion}",
"Disable" => "Deaktivera",
"Enable" => "Aktivera",
+"Please wait...." => "Var god vänta...",
+"Updating...." => "Uppdaterar...",
+"Error while updating app" => "Fel uppstod vid uppdatering av appen",
+"Error" => "Fel",
+"Updated" => "Uppdaterad",
"Saving..." => "Sparar...",
"__language_name__" => "__language_name__",
"Add your App" => "Lägg till din applikation",
@@ -23,6 +30,7 @@
"Select an App" => "Välj en App",
"See application page at apps.owncloud.com" => "Se programsida på apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licensierad av <span class=\"author\"></span>",
+"Update" => "Uppdatera",
"User Documentation" => "Användardokumentation",
"Administrator Documentation" => "Administratördokumentation",
"Online Documentation" => "Onlinedokumentation",
@@ -30,17 +38,16 @@
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Kommersiell support",
"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>",
-"Clients" => "Kunder",
-"Download Desktop Clients" => "Ladda ner skrivbordsklienter",
-"Download Android Client" => "Ladda ner klient för Android",
-"Download iOS Client" => "Ladda ner klient för iOS",
"Password" => "Lösenord",
"Your password was changed" => "Ditt lösenord har ändrats",
"Unable to change your password" => "Kunde inte ändra ditt lösenord",
"Current password" => "Nuvarande lösenord",
"New password" => "Nytt lösenord",
-"show" => "visa",
"Change password" => "Ändra lösenord",
+"Display Name" => "Visat namn",
+"Your display name was changed" => "Ditt visningsnamn har ändrats",
+"Unable to change your display name" => "Kan inte ändra ditt visningsnamn",
+"Change display name" => "Ändra visningsnamn",
"Email" => "E-post",
"Your email address" => "Din e-postadress",
"Fill in an email address to enable password recovery" => "Fyll i en e-postadress för att aktivera återställning av lösenord",
@@ -50,7 +57,7 @@
"Use this address to connect to your ownCloud in your file manager" => "Använd denna adress för att ansluta till ownCloud i din filhanterare",
"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 kommunity</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>.",
-"Name" => "Namn",
+"Login Name" => "Inloggningsnamn",
"Groups" => "Grupper",
"Create" => "Skapa",
"Default Storage" => "Förvald lagring",
@@ -58,6 +65,8 @@
"Other" => "Annat",
"Group Admin" => "Gruppadministratör",
"Storage" => "Lagring",
+"change display name" => "ändra visat namn",
+"set new password" => "ange nytt lösenord",
"Default" => "Förvald",
"Delete" => "Radera"
);
diff --git a/settings/l10n/ta_LK.php b/settings/l10n/ta_LK.php
index 3b3b1f8dddf..8811b349aa7 100644
--- a/settings/l10n/ta_LK.php
+++ b/settings/l10n/ta_LK.php
@@ -1,20 +1,20 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "செயலி சேமிபà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ à®à®±à¯à®±à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯à®³à¯à®³à®¤à¯",
+"Authentication error" => "அதà¯à®¤à®¾à®Ÿà¯à®šà®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à®¿à®²à¯ வழà¯",
"Group already exists" => "கà¯à®´à¯ à®à®±à¯à®•னவே உளà¯à®³à®¤à¯",
"Unable to add group" => "கà¯à®´à¯à®µà¯ˆ சேரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯",
"Could not enable app. " => "செயலியை இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯",
"Email saved" => "மினà¯à®©à®žà¯à®šà®²à¯ சேமிகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
"Invalid email" => "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± மினà¯à®©à®žà¯à®šà®²à¯",
-"OpenID Changed" => "OpenID மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
-"Invalid request" => "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± வேணà¯à®Ÿà¯à®•ோளà¯",
"Unable to delete group" => "கà¯à®´à¯à®µà¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯",
-"Authentication error" => "அதà¯à®¤à®¾à®Ÿà¯à®šà®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à®¿à®²à¯ வழà¯",
"Unable to delete user" => "பயனாளரை நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯",
"Language changed" => "மொழி மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
+"Invalid request" => "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± வேணà¯à®Ÿà¯à®•ோளà¯",
"Unable to add user to group %s" => "கà¯à®´à¯ %s இல௠பயனாளரை சேரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯",
"Unable to remove user from group %s" => "கà¯à®´à¯ %s இலிரà¯à®¨à¯à®¤à¯ பயனாளரை நீகà¯à®•à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯",
"Disable" => "இயலà¯à®®à¯ˆà®ªà¯à®ª",
"Enable" => "செயலறà¯à®±à®¤à®¾à®•à¯à®•à¯à®•",
+"Error" => "வழà¯",
"Saving..." => "இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•",
"__language_name__" => "_மொழி_பெயரà¯_",
"Add your App" => "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ செயலியை சேரà¯à®•à¯à®•",
@@ -22,14 +22,13 @@
"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>",
+"Update" => "இறà¯à®±à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "நீஙà¯à®•ள௠<strong>%s</strong> இலà¯à®³à¯à®³ <strong>%s</strong>பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®¯à¯à®³à¯à®³à¯€à®°à¯à®•ளà¯",
-"Clients" => "வாடிகà¯à®•ையாளரà¯à®•ளà¯",
"Password" => "கடவà¯à®šà¯à®šà¯Šà®²à¯",
"Your password was changed" => "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯ மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯",
"Unable to change your password" => "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ மாறà¯à®±à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯",
"Current password" => "தறà¯à®ªà¯‹à®¤à¯ˆà®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯",
"New password" => "பà¯à®¤à®¿à®¯ கடவà¯à®šà¯à®šà¯Šà®²à¯",
-"show" => "காடà¯à®Ÿà¯",
"Change password" => "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ மாறà¯à®±à¯à®•",
"Email" => "மினà¯à®©à®žà¯à®šà®²à¯",
"Your email address" => "உஙà¯à®•ளà¯à®Ÿà¯ˆà®¯ மினà¯à®©à®žà¯à®šà®²à¯ à®®à¯à®•வரி",
@@ -37,7 +36,6 @@
"Language" => "மொழி",
"Help translate" => "மொழிபெயரà¯à®•à¯à®• உதவி",
"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>.",
-"Name" => "பெயரà¯",
"Groups" => "கà¯à®´à¯à®•à¯à®•ளà¯",
"Create" => "உரà¯à®µà®¾à®•à¯à®•à¯à®•",
"Other" => "மறà¯à®±à®µà¯ˆ",
diff --git a/settings/l10n/th_TH.php b/settings/l10n/th_TH.php
index 558af48df14..071d136d7d2 100644
--- a/settings/l10n/th_TH.php
+++ b/settings/l10n/th_TH.php
@@ -1,20 +1,27 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "ไม่สามารถโหลดรายà¸à¸²à¸£à¸ˆà¸²à¸ App Store ได้",
+"Authentication error" => "เà¸à¸´à¸”ข้อผิดพลาดเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน",
"Group already exists" => "มีà¸à¸¥à¸¸à¹ˆà¸¡à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸­à¸¢à¸¹à¹ˆà¹ƒà¸™à¸£à¸°à¸šà¸šà¸­à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§",
"Unable to add group" => "ไม่สามารถเพิ่มà¸à¸¥à¸¸à¹ˆà¸¡à¹„ด้",
"Could not enable app. " => "ไม่สามารถเปิดใช้งานà¹à¸­à¸›à¹„ด้",
"Email saved" => "อีเมลถูà¸à¸šà¸±à¸™à¸—ึà¸à¹à¸¥à¹‰à¸§",
"Invalid email" => "อีเมลไม่ถูà¸à¸•้อง",
-"OpenID Changed" => "เปลี่ยนชื่อบัà¸à¸Šà¸µ OpenID à¹à¸¥à¹‰à¸§",
-"Invalid request" => "คำร้องขอไม่ถูà¸à¸•้อง",
"Unable to delete group" => "ไม่สามารถลบà¸à¸¥à¸¸à¹ˆà¸¡à¹„ด้",
-"Authentication error" => "เà¸à¸´à¸”ข้อผิดพลาดเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน",
"Unable to delete user" => "ไม่สามารถลบผู้ใช้งานได้",
"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." => "ไม่สามารถอัพเดทà¹à¸­à¸›à¸¯",
+"Update to {appversion}" => "อัพเดทไปเป็นรุ่น {appversion}",
"Disable" => "ปิดใช้งาน",
"Enable" => "เปิดใช้งาน",
+"Please wait...." => "à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่...",
+"Updating...." => "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹€à¸”ทข้อมูล...",
+"Error while updating app" => "เà¸à¸´à¸”ข้อผิดพลาดในระหว่างà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทà¹à¸­à¸›à¸¯",
+"Error" => "ข้อผิดพลาด",
+"Updated" => "อัพเดทà¹à¸¥à¹‰à¸§",
"Saving..." => "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึุà¸à¸‚้อมูล...",
"__language_name__" => "ภาษาไทย",
"Add your App" => "เพิ่มà¹à¸­à¸›à¸‚องคุณ",
@@ -22,25 +29,40 @@
"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>",
+"Update" => "อัพเดท",
+"User Documentation" => "เอà¸à¸ªà¸²à¸£à¸„ู่มือà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™",
+"Administrator Documentation" => "เอà¸à¸ªà¸²à¸£à¸„ู่มือà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸š",
+"Online Documentation" => "เอà¸à¸ªà¸²à¸£à¸„ู่มือà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸­à¸­à¸™à¹„ลน์",
+"Forum" => "à¸à¸£à¸°à¸”านสนทนา",
+"Bugtracker" => "Bugtracker",
+"Commercial Support" => "บริà¸à¸²à¸£à¸¥à¸¹à¸à¸„้าà¹à¸šà¸šà¹€à¸ªà¸µà¸¢à¸„่าใช้จ่าย",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "คุณได้ใช้งานไปà¹à¸¥à¹‰à¸§ <strong>%s</strong> จาà¸à¸ˆà¸³à¸™à¸§à¸™à¸—ี่สามารถใช้ได้ <strong>%s</strong>",
-"Clients" => "ลูà¸à¸„้า",
"Password" => "รหัสผ่าน",
"Your password was changed" => "รหัสผ่านของคุณถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸¥à¹‰à¸§",
"Unable to change your password" => "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้",
"Current password" => "รหัสผ่านปัจจุบัน",
"New password" => "รหัสผ่านใหม่",
-"show" => "à¹à¸ªà¸”ง",
"Change password" => "เปลี่ยนรหัสผ่าน",
+"Display Name" => "ชื่อที่ต้องà¸à¸²à¸£à¹à¸ªà¸”ง",
"Email" => "อีเมล์",
"Your email address" => "ที่อยู่อีเมล์ของคุณ",
"Fill in an email address to enable password recovery" => "à¸à¸£à¸­à¸à¸—ี่อยู่อีเมล์ของคุณเพื่อเปิดให้มีà¸à¸²à¸£à¸à¸¹à¹‰à¸„ืนรหัสผ่านได้",
"Language" => "ภาษา",
"Help translate" => "ช่วยà¸à¸±à¸™à¹à¸›à¸¥",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "ใช้ที่อยู่นี้เพื่อเชื่อมต่อà¸à¸±à¸š ownCloud ในโปรà¹à¸à¸£à¸¡à¸ˆà¸±à¸”à¸à¸²à¸£à¹„ฟล์ของคุณ",
+"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>.",
-"Name" => "ชื่อ",
+"Login Name" => "ชื่อที่ใช้สำหรับเข้าสู่ระบบ",
"Groups" => "à¸à¸¥à¸¸à¹ˆà¸¡",
"Create" => "สร้าง",
+"Default Storage" => "พื้นที่จำà¸à¸±à¸”ข้อมูลเริ่มต้น",
+"Unlimited" => "ไม่จำà¸à¸±à¸”จำนวน",
"Other" => "อื่นๆ",
"Group Admin" => "ผู้ดูà¹à¸¥à¸à¸¥à¸¸à¹ˆà¸¡",
+"Storage" => "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูล",
+"change display name" => "เปลี่ยนชื่อที่ต้องà¸à¸²à¸£à¹ƒà¸«à¹‰à¹à¸ªà¸”ง",
+"set new password" => "ตั้งค่ารหัสผ่านใหม่",
+"Default" => "ค่าเริ่มต้น",
"Delete" => "ลบ"
);
diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php
index 295dbfab584..98a7d41f0ad 100644
--- a/settings/l10n/tr.php
+++ b/settings/l10n/tr.php
@@ -1,41 +1,37 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "App Store'dan liste yüklenemiyor",
+"Authentication error" => "EÅŸleÅŸme hata",
"Group already exists" => "Grup zaten mevcut",
"Unable to add group" => "Gruba eklenemiyor",
"Could not enable app. " => "Uygulama devreye alınamadı",
"Email saved" => "Eposta kaydedildi",
"Invalid email" => "Geçersiz eposta",
-"OpenID Changed" => "OpenID DeÄŸiÅŸtirildi",
-"Invalid request" => "Geçersiz istek",
"Unable to delete group" => "Grup silinemiyor",
-"Authentication error" => "EÅŸleÅŸme hata",
"Unable to delete user" => "Kullanıcı silinemiyor",
"Language changed" => "Dil deÄŸiÅŸtirildi",
+"Invalid request" => "Geçersiz istek",
"Unable to add user to group %s" => "Kullanıcı %s grubuna eklenemiyor",
"Disable" => "Etkin deÄŸil",
"Enable" => "Etkin",
+"Error" => "Hata",
"Saving..." => "Kaydediliyor...",
"__language_name__" => "__dil_adı__",
"Add your App" => "Uygulamanı Ekle",
"More Apps" => "Daha fazla App",
"Select an App" => "Bir uygulama seçin",
"See application page at apps.owncloud.com" => "Uygulamanın sayfasına apps.owncloud.com adresinden bakın ",
+"Update" => "Güncelleme",
"User Documentation" => "Kullanıcı Belgelendirmesi",
"Administrator Documentation" => "Yönetici Belgelendirmesi",
"Online Documentation" => "Çevrimiçi Belgelendirme",
"Forum" => "Forum",
"Bugtracker" => "Hata Takip Sistemi",
"Commercial Support" => "Ticari Destek",
-"Clients" => "Müşteriler",
-"Download Desktop Clients" => "Masaüstü İstemcilerini İndir",
-"Download Android Client" => "Android İstemcisini İndir",
-"Download iOS Client" => "iOS İstemcisini İndir",
"Password" => "Parola",
"Your password was changed" => "Åžifreniz deÄŸiÅŸtirildi",
"Unable to change your password" => "Parolanız değiştirilemiyor",
"Current password" => "Mevcut parola",
"New password" => "Yeni parola",
-"show" => "göster",
"Change password" => "Parola deÄŸiÅŸtir",
"Email" => "Eposta",
"Your email address" => "Eposta adresiniz",
@@ -45,7 +41,6 @@
"WebDAV" => "WebDAV",
"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>." => "Geliştirilen Taraf<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is altında lisanslanmıştır <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Name" => "Ad",
"Groups" => "Gruplar",
"Create" => "OluÅŸtur",
"Other" => "DiÄŸer",
diff --git a/settings/l10n/uk.php b/settings/l10n/uk.php
index d6a9e9fa491..4e8c0aefd08 100644
--- a/settings/l10n/uk.php
+++ b/settings/l10n/uk.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ ÑпиÑок з App Store",
+"Authentication error" => "Помилка автентифікації",
+"Unable to change display name" => "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ зображене ім'Ñ",
"Group already exists" => "Група вже Ñ–Ñнує",
"Unable to add group" => "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ групу",
"Could not enable app. " => "Ðе вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ програму. ",
"Email saved" => "ÐдреÑу збережено",
"Invalid email" => "Ðевірна адреÑа",
-"OpenID Changed" => "OpenID змінено",
-"Invalid request" => "Помилковий запит",
"Unable to delete group" => "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ групу",
-"Authentication error" => "Помилка автентифікації",
"Unable to delete user" => "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувача",
"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." => "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ програму. ",
+"Update to {appversion}" => "Оновити до {appversion}",
"Disable" => "Вимкнути",
"Enable" => "Включити",
+"Please wait...." => "Зачекайте, будь лаÑка...",
+"Updating...." => "ОновлюєтьÑÑ...",
+"Error while updating app" => "Помилка при оновленні програми",
+"Error" => "Помилка",
+"Updated" => "Оновлено",
"Saving..." => "Зберігаю...",
"__language_name__" => "__language_name__",
"Add your App" => "Додати Ñвою програму",
@@ -23,6 +30,7 @@
"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>",
+"Update" => "Оновити",
"User Documentation" => "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ ÐšÐ¾Ñ€Ð¸Ñтувача",
"Administrator Documentation" => "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ ÐдмініÑтратора",
"Online Documentation" => "Он-Лайн ДокументаціÑ",
@@ -30,17 +38,16 @@
"Bugtracker" => "БагТрекер",
"Commercial Support" => "Комерційна підтримка",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Ви викориÑтали <strong>%s</strong> із доÑтупних <strong>%s</strong>",
-"Clients" => "Клієнти",
-"Download Desktop Clients" => "Завантажити клієнт Ð´Ð»Ñ ÐŸÐš",
-"Download Android Client" => "Завантажити клієнт Ð´Ð»Ñ Android",
-"Download iOS Client" => "Завантажити клієнт Ð´Ð»Ñ iOS",
"Password" => "Пароль",
"Your password was changed" => "Ваш пароль змінено",
"Unable to change your password" => "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ваш пароль",
"Current password" => "Поточний пароль",
"New password" => "Ðовий пароль",
-"show" => "показати",
"Change password" => "Змінити пароль",
+"Display Name" => "Показати Ім'Ñ",
+"Your display name was changed" => "Ваше ім'Ñ Ð±ÑƒÐ»Ð¾ змінене",
+"Unable to change your display name" => "Ðеможливо змінити ваше зображене ім'Ñ",
+"Change display name" => "Змінити зображене ім'Ñ",
"Email" => "Ел.пошта",
"Your email address" => "Ваша адреÑа електронної пошти",
"Fill in an email address to enable password recovery" => "Введіть адреÑу електронної пошти Ð´Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ",
@@ -50,10 +57,16 @@
"Use this address to connect to your ownCloud in your file manager" => "ВикориÑтовуйте цю адреÑу Ð´Ð»Ñ Ð¿Ñ–Ð´'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ вашого ownCloud у вашому файловому менеджері",
"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>.",
-"Name" => "Ім'Ñ",
+"Login Name" => "Ім'Ñ Ð›Ð¾Ð³Ñ–Ð½Ñƒ",
"Groups" => "Групи",
"Create" => "Створити",
+"Default Storage" => "Ñховище за замовчуваннÑм",
+"Unlimited" => "Ðеобмежено",
"Other" => "Інше",
"Group Admin" => "ÐдмініÑтратор групи",
+"Storage" => "Сховище",
+"change display name" => "змінити зображене ім'Ñ",
+"set new password" => "вÑтановити новий пароль",
+"Default" => "За замовчуваннÑм",
"Delete" => "Видалити"
);
diff --git a/settings/l10n/vi.php b/settings/l10n/vi.php
index 9651bee1124..2adc87f4576 100644
--- a/settings/l10n/vi.php
+++ b/settings/l10n/vi.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "Không thể tải danh sách ứng dụng từ App Store",
+"Authentication error" => "Lỗi xác thực",
+"Unable to change display name" => "Không thể thay đổi tên hiển thị",
"Group already exists" => "Nhóm đã tồn tại",
"Unable to add group" => "Không thể thêm nhóm",
"Could not enable app. " => "không thể kích hoạt ứng dụng.",
"Email saved" => "Lưu email",
"Invalid email" => "Email không hợp lệ",
-"OpenID Changed" => "Äổi OpenID",
-"Invalid request" => "Yêu cầu không hợp lệ",
"Unable to delete group" => "Không thể xóa nhóm",
-"Authentication error" => "Lỗi xác thực",
"Unable to delete user" => "Không thể xóa ngưá»i dùng",
"Language changed" => "Ngôn ngữ đã được thay đổi",
+"Invalid request" => "Yêu cầu không hợp lệ",
"Admins can't remove themself from the admin group" => "Quản trị viên không thể loại bá» chính há» khá»i nhóm quản lý",
"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",
+"Update to {appversion}" => "Cập nhật lên {appversion}",
"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",
+"Updated" => "Äã cập nhật",
"Saving..." => "Äang tiến hành lưu ...",
"__language_name__" => "__Ngôn ngữ___",
"Add your App" => "Thêm ứng dụng của bạn",
@@ -23,25 +30,43 @@
"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>",
+"Update" => "Cập nhật",
+"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",
+"Bugtracker" => "Hệ ghi nhận lỗi",
+"Commercial Support" => "Hỗ trợ có phí",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Bạn đã sử dụng <strong>%s </ strong> có sẵn <strong> %s </ strong>",
-"Clients" => "Khách hàng",
"Password" => "Mật khẩu",
"Your password was changed" => "Mật khẩu của bạn đã được thay đổi.",
"Unable to change your password" => "Không thể đổi mật khẩu",
"Current password" => "Mật khẩu cũ",
"New password" => "Mật khẩu mới ",
-"show" => "Hiện",
"Change password" => "Äổi mật khẩu",
+"Display Name" => "Tên hiển thị",
+"Your display name was changed" => "Tên hiển thị của bạn đã được thay đổi",
+"Unable to change your display name" => "Không thể thay đổi tên hiển thị của bạn",
+"Change display name" => "Thay đổi tên hiển thị",
"Email" => "Email",
"Your email address" => "Email của bạn",
"Fill in an email address to enable password recovery" => "Nhập địa chỉ email của bạn để khôi phục lại mật khẩu",
"Language" => "Ngôn ngữ",
"Help translate" => "Hỗ trợ dịch thuật",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "Sử dụng địa chỉ này để kết nối ownCloud của bạn trong trình quản lý file của bạn",
+"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>.",
-"Name" => "Tên",
+"Login Name" => "Tên đăng nhập",
"Groups" => "Nhóm",
"Create" => "Tạo",
+"Default Storage" => "Bộ nhớ mặc định",
+"Unlimited" => "Không giới hạn",
"Other" => "Khác",
"Group Admin" => "Nhóm quản trị",
+"Storage" => "Bá»™ nhá»›",
+"change display name" => "Thay đổi tên hiển thị",
+"set new password" => "đặt mật khẩu mới",
+"Default" => "Mặc định",
"Delete" => "Xóa"
);
diff --git a/settings/l10n/zh_CN.GB2312.php b/settings/l10n/zh_CN.GB2312.php
index 6afcc1ecd56..b54a2df5554 100644
--- a/settings/l10n/zh_CN.GB2312.php
+++ b/settings/l10n/zh_CN.GB2312.php
@@ -1,20 +1,20 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "ä¸èƒ½ä»ŽApp Store 中加载列表",
+"Authentication error" => "认è¯é”™è¯¯",
"Group already exists" => "群组已存在",
"Unable to add group" => "未能添加群组",
"Could not enable app. " => "未能å¯ç”¨åº”用",
"Email saved" => "Email ä¿å­˜äº†",
"Invalid email" => "éžæ³•Email",
-"OpenID Changed" => "OpenID 改å˜äº†",
-"Invalid request" => "éžæ³•请求",
"Unable to delete group" => "未能删除群组",
-"Authentication error" => "认è¯é”™è¯¯",
"Unable to delete user" => "未能删除用户",
"Language changed" => "语言改å˜äº†",
+"Invalid request" => "éžæ³•请求",
"Unable to add user to group %s" => "未能添加用户到群组 %s",
"Unable to remove user from group %s" => "未能将用户从群组 %s 移除",
"Disable" => "ç¦ç”¨",
"Enable" => "å¯ç”¨",
+"Error" => "出错",
"Saving..." => "ä¿å­˜ä¸­...",
"__language_name__" => "Chinese",
"Add your App" => "添加你的应用程åº",
@@ -22,13 +22,12 @@
"Select an App" => "选择一个程åº",
"See application page at apps.owncloud.com" => "在owncloud.com上查看应用程åº",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>授æƒåè®® <span class=\"author\"></span>",
-"Clients" => "客户",
+"Update" => "æ›´æ–°",
"Password" => "密ç ",
"Your password was changed" => "您的密ç ä»¥å˜æ›´",
"Unable to change your password" => "ä¸èƒ½æ”¹å˜ä½ çš„密ç ",
"Current password" => "现在的密ç ",
"New password" => "新密ç ",
-"show" => "展示",
"Change password" => "改å˜å¯†ç ",
"Email" => "Email",
"Your email address" => "ä½ çš„email地å€",
@@ -36,7 +35,6 @@
"Language" => "语言",
"Help translate" => "帮助翻译",
"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\">sæºä»£ç </a> 以 <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> 许å¯åè®®å‘布。",
-"Name" => "åå­—",
"Groups" => "组",
"Create" => "新建",
"Other" => "å…¶ä»–çš„",
diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php
index 00e51d211c4..ec2a6b28c92 100644
--- a/settings/l10n/zh_CN.php
+++ b/settings/l10n/zh_CN.php
@@ -1,21 +1,21 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "无法从应用商店载入列表",
+"Authentication error" => "认è¯é”™è¯¯",
"Group already exists" => "已存在该组",
"Unable to add group" => "无法添加组",
"Could not enable app. " => "无法开å¯App",
"Email saved" => "电å­é‚®ä»¶å·²ä¿å­˜",
"Invalid email" => "无效的电å­é‚®ä»¶",
-"OpenID Changed" => "OpenID 已修改",
-"Invalid request" => "éžæ³•请求",
"Unable to delete group" => "无法删除组",
-"Authentication error" => "认è¯é”™è¯¯",
"Unable to delete user" => "无法删除用户",
"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中移除用户",
"Disable" => "ç¦ç”¨",
"Enable" => "å¯ç”¨",
+"Error" => "错误",
"Saving..." => "正在ä¿å­˜",
"__language_name__" => "简体中文",
"Add your App" => "添加应用",
@@ -23,6 +23,7 @@
"Select an App" => "选择一个应用",
"See application page at apps.owncloud.com" => "查看在 app.owncloud.com 的应用程åºé¡µé¢",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-核准: <span class=\"author\"></span>",
+"Update" => "æ›´æ–°",
"User Documentation" => "用户文档",
"Administrator Documentation" => "管ç†å‘˜æ–‡æ¡£",
"Online Documentation" => "在线文档",
@@ -30,16 +31,11 @@
"Bugtracker" => "问题跟踪器",
"Commercial Support" => "商业支æŒ",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "你已使用 <strong>%s</strong>,有效空间 <strong>%s</strong>",
-"Clients" => "客户",
-"Download Desktop Clients" => "下载桌é¢å®¢æˆ·ç«¯",
-"Download Android Client" => "下载 Android 客户端",
-"Download iOS Client" => "下载 iOS 客户端",
"Password" => "密ç ",
"Your password was changed" => "密ç å·²ä¿®æ”¹",
"Unable to change your password" => "无法修改密ç ",
"Current password" => "当å‰å¯†ç ",
"New password" => "新密ç ",
-"show" => "显示",
"Change password" => "修改密ç ",
"Email" => "电å­é‚®ä»¶",
"Your email address" => "您的电å­é‚®ä»¶",
@@ -50,10 +46,13 @@
"Use this address to connect to your ownCloud in your file manager" => "ç”¨è¯¥åœ°å€æ¥è¿žæŽ¥æ–‡ä»¶ç®¡ç†å™¨ä¸­çš„ ownCloud",
"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>许å¯è¯ä¸‹å‘布。",
-"Name" => "åç§°",
"Groups" => "组",
"Create" => "创建",
+"Default Storage" => "默认存储",
+"Unlimited" => "æ— é™",
"Other" => "其它",
"Group Admin" => "组管ç†å‘˜",
+"Storage" => "存储",
+"Default" => "默认",
"Delete" => "删除"
);
diff --git a/settings/l10n/zh_TW.php b/settings/l10n/zh_TW.php
index d25ae4e149c..7188b78ccaf 100644
--- a/settings/l10n/zh_TW.php
+++ b/settings/l10n/zh_TW.php
@@ -1,21 +1,28 @@
<?php $TRANSLATIONS = array(
"Unable to load list from App Store" => "無法從 App Store è®€å–æ¸…å–®",
+"Authentication error" => "èªè­‰éŒ¯èª¤",
+"Unable to change display name" => "無法更改顯示å稱",
"Group already exists" => "群組已存在",
"Unable to add group" => "群組增加失敗",
"Could not enable app. " => "未能啟動此app",
"Email saved" => "Email已儲存",
"Invalid email" => "無效的email",
-"OpenID Changed" => "OpenID 已變更",
-"Invalid request" => "無效請求",
"Unable to delete group" => "群組刪除錯誤",
-"Authentication error" => "èªè­‰éŒ¯èª¤",
"Unable to delete user" => "使用者刪除錯誤",
"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." => "無法更新應用程å¼",
+"Update to {appversion}" => "更新至 {appversion}",
"Disable" => "åœç”¨",
"Enable" => "啟用",
+"Please wait...." => "è«‹ç¨å€™...",
+"Updating...." => "更新中...",
+"Error while updating app" => "更新應用程å¼éŒ¯èª¤",
+"Error" => "錯誤",
+"Updated" => "已更新",
"Saving..." => "儲存中...",
"__language_name__" => "__語言_å稱__",
"Add your App" => "添加你的 App",
@@ -23,25 +30,43 @@
"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>",
+"Update" => "æ›´æ–°",
+"User Documentation" => "用戶說明文件",
+"Administrator Documentation" => "管ç†è€…說明文件",
+"Online Documentation" => "線上說明文件",
+"Forum" => "論壇",
+"Bugtracker" => "Bugtracker",
+"Commercial Support" => "商用支æ´",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "您已經使用了 <strong>%s</strong> ,目å‰å¯ç”¨ç©ºé–“為 <strong>%s</strong>",
-"Clients" => "客戶",
"Password" => "密碼",
"Your password was changed" => "你的密碼已更改",
"Unable to change your password" => "無法變更你的密碼",
"Current password" => "ç›®å‰å¯†ç¢¼",
"New password" => "新密碼",
-"show" => "顯示",
"Change password" => "變更密碼",
+"Display Name" => "顯示å稱",
+"Your display name was changed" => "已更改顯示å稱",
+"Unable to change your display name" => "無法更改您的顯示å稱",
+"Change display name" => "更改顯示å稱",
"Email" => "é›»å­éƒµä»¶",
"Your email address" => "你的電å­éƒµä»¶ä¿¡ç®±",
"Fill in an email address to enable password recovery" => "請填入電å­éƒµä»¶ä¿¡ç®±ä»¥ä¾¿å›žå¾©å¯†ç¢¼",
"Language" => "語言",
"Help translate" => "幫助翻譯",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "在您的檔案管ç†å“¡ä¸­ä½¿ç”¨é€™å€‹åœ°å€ä¾†é€£ç·šåˆ° ownCloud",
+"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>許å¯è­‰ä¸‹ç™¼å¸ƒã€‚",
-"Name" => "å稱",
+"Login Name" => "登入å稱",
"Groups" => "群組",
"Create" => "創造",
+"Default Storage" => "é è¨­å„²å­˜å€",
+"Unlimited" => "ç„¡é™åˆ¶",
"Other" => "å…¶ä»–",
"Group Admin" => "群組 管ç†å“¡",
+"Storage" => "儲存å€",
+"change display name" => "修改顯示å稱",
+"set new password" => "設定新密碼",
+"Default" => "é è¨­",
"Delete" => "刪除"
);
diff --git a/settings/personal.php b/settings/personal.php
index 47dbcc53ebc..c2df8db1ccc 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -15,15 +15,7 @@ OC_Util::addScript( '3rdparty', 'chosen/chosen.jquery.min' );
OC_Util::addStyle( '3rdparty', 'chosen' );
OC_App::setActiveNavigationEntry( 'personal' );
-// calculate the disc space
-$rootInfo=OC_FileCache::get('');
-$sharedInfo=OC_FileCache::get('/Shared');
-$used=$rootInfo['size'];
-if($used<0) $used=0;
-$free=OC_Filesystem::free_space();
-$total=$free+$used;
-if($total==0) $total=1; // prevent division by zero
-$relative=round(($used/$total)*10000)/100;
+$storageInfo=OC_Helper::getStorageInfo();
$email=OC_Preferences::getValue(OC_User::getUser(), 'settings', 'email', '');
@@ -47,14 +39,24 @@ foreach($languageCodes as $lang) {
$languages[]=array('code'=>$lang, 'name'=>$lang);
}
}
+//links to clients
+$clients = array(
+ 'desktop' => OC_Config::getValue('customclient_desktop', 'http://owncloud.org/sync-clients/'),
+ 'android' => OC_Config::getValue('customclient_android', 'https://play.google.com/store/apps/details?id=com.owncloud.android'),
+ 'ios' => OC_Config::getValue('customclient_ios', 'https://itunes.apple.com/us/app/owncloud/id543672169?mt=8')
+);
// Return template
$tmpl = new OC_Template( 'settings', 'personal', 'user');
-$tmpl->assign('usage', OC_Helper::humanFileSize($used));
-$tmpl->assign('total_space', OC_Helper::humanFileSize($total));
-$tmpl->assign('usage_relative', $relative);
+$tmpl->assign('usage', OC_Helper::humanFileSize($storageInfo['used']));
+$tmpl->assign('total_space', OC_Helper::humanFileSize($storageInfo['total']));
+$tmpl->assign('usage_relative', $storageInfo['relative']);
+$tmpl->assign('clients', $clients);
$tmpl->assign('email', $email);
$tmpl->assign('languages', $languages);
+$tmpl->assign('passwordChangeSupported', OC_User::canUserChangePassword(OC_User::getUser()));
+$tmpl->assign('displayNameChangeSupported', OC_User::canUserChangeDisplayName(OC_User::getUser()));
+$tmpl->assign('displayName', OC_User::getDisplayName());
$forms=OC_App::getForms('personal');
$tmpl->assign('forms', array());
diff --git a/settings/routes.php b/settings/routes.php
index 8239fe005db..0a8af0dde2b 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -39,6 +39,8 @@ $this->create('settings_ajax_removegroup', '/settings/ajax/removegroup.php')
->actionInclude('settings/ajax/removegroup.php');
$this->create('settings_ajax_changepassword', '/settings/ajax/changepassword.php')
->actionInclude('settings/ajax/changepassword.php');
+$this->create('settings_ajax_changedisplayname', '/settings/ajax/changedisplayname.php')
+->actionInclude('settings/ajax/changedisplayname.php');
// personel
$this->create('settings_ajax_lostpassword', '/settings/ajax/lostpassword.php')
->actionInclude('settings/ajax/lostpassword.php');
@@ -51,14 +53,18 @@ $this->create('settings_ajax_enableapp', '/settings/ajax/enableapp.php')
->actionInclude('settings/ajax/enableapp.php');
$this->create('settings_ajax_disableapp', '/settings/ajax/disableapp.php')
->actionInclude('settings/ajax/disableapp.php');
+$this->create('settings_ajax_updateapp', '/settings/ajax/updateapp.php')
+ ->actionInclude('settings/ajax/updateapp.php');
$this->create('settings_ajax_navigationdetect', '/settings/ajax/navigationdetect.php')
->actionInclude('settings/ajax/navigationdetect.php');
+$this->create('apps_custom', '/settings/js/apps-custom.js')
+ ->actionInclude('settings/js/apps-custom.php');
// admin
$this->create('settings_ajax_getlog', '/settings/ajax/getlog.php')
->actionInclude('settings/ajax/getlog.php');
$this->create('settings_ajax_setloglevel', '/settings/ajax/setloglevel.php')
->actionInclude('settings/ajax/setloglevel.php');
-
-// apps/user_openid
-$this->create('settings_ajax_openid', '/settings/ajax/openid.php')
- ->actionInclude('settings/ajax/openid.php');
+$this->create('settings_ajax_setsecurity', '/settings/ajax/setsecurity.php')
+ ->actionInclude('settings/ajax/setsecurity.php');
+$this->create('isadmin', '/settings/js/isadmin.js')
+ ->actionInclude('settings/js/isadmin.php');
diff --git a/settings/settings.php b/settings/settings.php
index add94b5b011..1e05452ec4d 100644
--- a/settings/settings.php
+++ b/settings/settings.php
@@ -6,7 +6,6 @@
*/
OC_Util::checkLoggedIn();
-OC_Util::verifyUser();
OC_App::loadApps();
OC_Util::addStyle( 'settings', 'settings' );
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 26335063d4b..17be3396930 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -10,13 +10,42 @@ $levels = array('Debug', 'Info', 'Warning', 'Error', 'Fatal');
// is htaccess working ?
if (!$_['htaccessworking']) {
- ?>
+ ?>
<fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Security Warning');?></strong></legend>
+ <legend><strong><?php echo $l->t('Security Warning');?></strong></legend>
<span class="securitywarning">
- <?php echo $l->t('Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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.'); ?>
- </span>
+ <?php echo $l->t('Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides 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.'); ?>
+ </span>
+
+</fieldset>
+<?php
+}
+
+// is WebDAV working ?
+if (!$_['isWebDavWorking']) {
+ ?>
+<fieldset class="personalblock">
+ <legend><strong><?php echo $l->t('Setup Warning');?></strong></legend>
+
+ <span class="securitywarning">
+ <?php echo $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.'); ?>
+ <?php echo $l->t('Please double check the <a href=\'%s\'>installation guides</a>.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html'); ?>
+ </span>
+
+</fieldset>
+<?php
+}
+
+// if module fileinfo available?
+if (!$_['has_fileinfo']) {
+ ?>
+<fieldset class="personalblock">
+ <legend><strong><?php echo $l->t('Module \'fileinfo\' missing');?></strong></legend>
+
+ <span class="connectionwarning">
+ <?php echo $l->t('The PHP module \'fileinfo\' is missing. We strongly recommend to enable this module to get best results with mime-type detection.'); ?>
+ </span>
</fieldset>
<?php
@@ -24,13 +53,13 @@ if (!$_['htaccessworking']) {
// is locale working ?
if (!$_['islocaleworking']) {
- ?>
+ ?>
<fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Locale not working');?></strong></legend>
+ <legend><strong><?php echo $l->t('Locale not working');?></strong></legend>
- <span class="connectionwarning">
- <?php echo $l->t('This ownCloud server can\'t set system locale to "en_US.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 en_US.UTF-8.'); ?>
- </span>
+ <span class="connectionwarning">
+ <?php echo $l->t('This ownCloud server can\'t set system locale to "en_US.UTF-8"/"en_US.UTF8". 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 en_US.UTF-8/en_US.UTF8.'); ?>
+ </span>
</fieldset>
<?php
@@ -38,13 +67,13 @@ if (!$_['islocaleworking']) {
// is internet connection working ?
if (!$_['internetconnectionworking']) {
- ?>
+ ?>
<fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Internet connection not working');?></strong></legend>
+ <legend><strong><?php echo $l->t('Internet connection not working');?></strong></legend>
- <span class="connectionwarning">
- <?php echo $l->t('This ownCloud 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 of ownCloud.'); ?>
- </span>
+ <span class="connectionwarning">
+ <?php echo $l->t('This ownCloud 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 of ownCloud.'); ?>
+ </span>
</fieldset>
<?php
@@ -52,125 +81,152 @@ if (!$_['internetconnectionworking']) {
?>
<?php foreach ($_['forms'] as $form) {
- echo $form;
+ echo $form;
}
;?>
<fieldset class="personalblock" id="backgroundjobs">
- <legend><strong><?php echo $l->t('Cron');?></strong></legend>
- <table class="nostyle">
- <tr>
- <td>
- <input type="radio" name="mode" value="ajax"
- id="backgroundjobs_ajax" <?php if ($_['backgroundjobs_mode'] == "ajax") {
- echo 'checked="checked"';
- } ?>>
- <label for="backgroundjobs_ajax">AJAX</label><br/>
- <em><?php echo $l->t("Execute one task with each page loaded"); ?></em>
- </td>
- </tr>
- <tr>
- <td>
- <input type="radio" name="mode" value="webcron"
- id="backgroundjobs_webcron" <?php if ($_['backgroundjobs_mode'] == "webcron") {
- echo 'checked="checked"';
- } ?>>
- <label for="backgroundjobs_webcron">Webcron</label><br/>
- <em><?php echo $l->t("cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http."); ?></em>
- </td>
- </tr>
- <tr>
- <td>
- <input type="radio" name="mode" value="cron"
- id="backgroundjobs_cron" <?php if ($_['backgroundjobs_mode'] == "cron") {
- echo 'checked="checked"';
- } ?>>
- <label for="backgroundjobs_cron">Cron</label><br/>
- <em><?php echo $l->t("Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute."); ?></em>
- </td>
- </tr>
- </table>
+ <legend><strong><?php echo $l->t('Cron');?></strong></legend>
+ <table class="nostyle">
+ <tr>
+ <td>
+ <input type="radio" name="mode" value="ajax"
+ id="backgroundjobs_ajax" <?php if ($_['backgroundjobs_mode'] == "ajax") {
+ echo 'checked="checked"';
+ } ?>>
+ <label for="backgroundjobs_ajax">AJAX</label><br/>
+ <em><?php echo $l->t("Execute one task with each page loaded"); ?></em>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="radio" name="mode" value="webcron"
+ id="backgroundjobs_webcron" <?php if ($_['backgroundjobs_mode'] == "webcron") {
+ echo 'checked="checked"';
+ } ?>>
+ <label for="backgroundjobs_webcron">Webcron</label><br/>
+ <em><?php echo $l->t("cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http."); ?></em>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="radio" name="mode" value="cron"
+ id="backgroundjobs_cron" <?php if ($_['backgroundjobs_mode'] == "cron") {
+ echo 'checked="checked"';
+ } ?>>
+ <label for="backgroundjobs_cron">Cron</label><br/>
+ <em><?php echo $l->t("Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute."); ?></em>
+ </td>
+ </tr>
+ </table>
</fieldset>
<fieldset class="personalblock" id="shareAPI">
- <legend><strong><?php echo $l->t('Sharing');?></strong></legend>
- <table class="shareAPI nostyle">
- <tr>
- <td id="enable">
- <input type="checkbox" name="shareapi_enabled" id="shareAPIEnabled"
- value="1" <?php if ($_['shareAPIEnabled'] == 'yes') echo 'checked="checked"'; ?> />
- <label for="shareAPIEnabled"><?php echo $l->t('Enable Share API');?></label><br/>
- <em><?php echo $l->t('Allow apps to use the Share API'); ?></em>
- </td>
- </tr>
- <tr>
- <td <?php if ($_['shareAPIEnabled'] == 'no') echo 'style="display:none"';?>>
- <input type="checkbox" name="shareapi_allow_links" id="allowLinks"
- value="1" <?php if ($_['allowLinks'] == 'yes') echo 'checked="checked"'; ?> />
- <label for="allowLinks"><?php echo $l->t('Allow links');?></label><br/>
- <em><?php echo $l->t('Allow users to share items to the public with links'); ?></em>
- </td>
- </tr>
- <tr>
- <td <?php if ($_['shareAPIEnabled'] == 'no') echo 'style="display:none"';?>>
- <input type="checkbox" name="shareapi_allow_resharing" id="allowResharing"
- value="1" <?php if ($_['allowResharing'] == 'yes') echo 'checked="checked"'; ?> />
- <label for="allowResharing"><?php echo $l->t('Allow resharing');?></label><br/>
- <em><?php echo $l->t('Allow users to share items shared with them again'); ?></em>
- </td>
- </tr>
- <tr>
- <td <?php if ($_['shareAPIEnabled'] == 'no') echo 'style="display:none"';?>>
- <input type="radio" name="shareapi_share_policy" id="sharePolicyGlobal"
- value="global" <?php if ($_['sharePolicy'] == 'global') echo 'checked="checked"'; ?> />
- <label for="sharePolicyGlobal"><?php echo $l->t('Allow users to share with anyone'); ?></label><br/>
- <input type="radio" name="shareapi_share_policy" id="sharePolicyGroupsOnly"
- value="groups_only" <?php if ($_['sharePolicy'] == 'groups_only') echo 'checked="checked"'; ?> />
- <label for="sharePolicyGroupsOnly"><?php echo $l->t('Allow users to only share with users in their groups');?></label><br/>
- </td>
- </tr>
- </table>
+ <legend><strong><?php echo $l->t('Sharing');?></strong></legend>
+ <table class="shareAPI nostyle">
+ <tr>
+ <td id="enable">
+ <input type="checkbox" name="shareapi_enabled" id="shareAPIEnabled"
+ value="1" <?php if ($_['shareAPIEnabled'] == 'yes') echo 'checked="checked"'; ?> />
+ <label for="shareAPIEnabled"><?php echo $l->t('Enable Share API');?></label><br/>
+ <em><?php echo $l->t('Allow apps to use the Share API'); ?></em>
+ </td>
+ </tr>
+ <tr>
+ <td <?php if ($_['shareAPIEnabled'] == 'no') echo 'style="display:none"';?>>
+ <input type="checkbox" name="shareapi_allow_links" id="allowLinks"
+ value="1" <?php if ($_['allowLinks'] == 'yes') echo 'checked="checked"'; ?> />
+ <label for="allowLinks"><?php echo $l->t('Allow links');?></label><br/>
+ <em><?php echo $l->t('Allow users to share items to the public with links'); ?></em>
+ </td>
+ </tr>
+ <tr>
+ <td <?php if ($_['shareAPIEnabled'] == 'no') echo 'style="display:none"';?>>
+ <input type="checkbox" name="shareapi_allow_resharing" id="allowResharing"
+ value="1" <?php if ($_['allowResharing'] == 'yes') echo 'checked="checked"'; ?> />
+ <label for="allowResharing"><?php echo $l->t('Allow resharing');?></label><br/>
+ <em><?php echo $l->t('Allow users to share items shared with them again'); ?></em>
+ </td>
+ </tr>
+ <tr>
+ <td <?php if ($_['shareAPIEnabled'] == 'no') echo 'style="display:none"';?>>
+ <input type="radio" name="shareapi_share_policy" id="sharePolicyGlobal"
+ value="global" <?php if ($_['sharePolicy'] == 'global') echo 'checked="checked"'; ?> />
+ <label for="sharePolicyGlobal"><?php echo $l->t('Allow users to share with anyone'); ?></label><br/>
+ <input type="radio" name="shareapi_share_policy" id="sharePolicyGroupsOnly"
+ value="groups_only" <?php if ($_['sharePolicy'] == 'groups_only') echo 'checked="checked"'; ?> />
+ <label for="sharePolicyGroupsOnly"><?php echo $l->t('Allow users to only share with users in their groups');?></label><br/>
+ </td>
+ </tr>
+ </table>
+</fieldset>
+
+<fieldset class="personalblock" id="security">
+ <legend><strong><?php echo $l->t('Security');?></strong></legend>
+ <table class="nostyle">
+ <tr>
+ <td id="enable">
+ <input type="checkbox" name="forcessl" id="enforceHTTPSEnabled"
+ <?php if ($_['enforceHTTPSEnabled']) {
+ echo 'checked="checked" ';
+ echo 'value="false"';
+ } else {
+ echo 'value="true"';
+ }
+ ?>
+ <?php if (!$_['isConnectedViaHTTPS']) echo 'disabled'; ?> />
+ <label for="forcessl"><?php echo $l->t('Enforce HTTPS');?></label><br/>
+ <em><?php echo $l->t('Enforces the clients to connect to ownCloud via an encrypted connection.'); ?></em>
+ <?php if (!$_['isConnectedViaHTTPS']) {
+ echo "<br/><em>";
+ echo $l->t('Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement.');
+ echo "</em>";
+ }
+ ?>
+ </td>
+ </tr>
+ </table>
</fieldset>
<fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Log');?></strong></legend>
- <?php echo $l->t('Log level');?> <select name='loglevel' id='loglevel'>
- <option value='<?php echo $_['loglevel']?>'><?php echo $levels[$_['loglevel']]?></option>
- <?php for ($i = 0; $i < 5; $i++):
- if ($i != $_['loglevel']):?>
- <option value='<?php echo $i?>'><?php echo $levels[$i]?></option>
- <?php endif;
+ <legend><strong><?php echo $l->t('Log');?></strong></legend>
+ <?php echo $l->t('Log level');?> <select name='loglevel' id='loglevel'>
+ <option value='<?php echo $_['loglevel']?>'><?php echo $levels[$_['loglevel']]?></option>
+ <?php for ($i = 0; $i < 5; $i++):
+ if ($i != $_['loglevel']):?>
+ <option value='<?php echo $i?>'><?php echo $levels[$i]?></option>
+ <?php endif;
endfor;?>
</select>
- <table id='log'>
- <?php foreach ($_['entries'] as $entry): ?>
- <tr>
- <td>
- <?php echo $levels[$entry->level];?>
- </td>
- <td>
- <?php echo $entry->app;?>
- </td>
- <td>
- <?php echo $entry->message;?>
- </td>
- <td>
- <?php echo OC_Util::formatDate($entry->time);?>
- </td>
- </tr>
- <?php endforeach;?>
- </table>
- <?php if ($_['entriesremain']): ?>
- <input id='moreLog' type='button' value='<?php echo $l->t('More');?>...'></input>
- <?php endif; ?>
+ <table id='log'>
+ <?php foreach ($_['entries'] as $entry): ?>
+ <tr>
+ <td>
+ <?php echo $levels[$entry->level];?>
+ </td>
+ <td>
+ <?php echo $entry->app;?>
+ </td>
+ <td>
+ <?php echo $entry->message;?>
+ </td>
+ <td>
+ <?php echo OC_Util::formatDate($entry->time);?>
+ </td>
+ </tr>
+ <?php endforeach;?>
+ </table>
+ <?php if ($_['entriesremain']): ?>
+ <input id='moreLog' type='button' value='<?php echo $l->t('More');?>...'>
+ <?php endif; ?>
</fieldset>
<fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Version');?></strong></legend>
- <strong>ownCloud</strong> <?php echo(OC_Util::getVersionString()); ?> <?php echo(OC_Util::getEditionString()); ?>
- (<?php echo(OC_Updater::ShowUpdatingHint()); ?>)<br/>
- <?php echo $l->t('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>.'); ?>
+ <legend><strong><?php echo $l->t('Version');?></strong></legend>
+ <strong>ownCloud</strong> <?php echo(OC_Util::getVersionString()); ?> <?php echo(OC_Util::getEditionString()); ?>
+ (<?php echo(OC_Updater::ShowUpdatingHint()); ?>)<br/>
+ <?php echo $l->t('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>.'); ?>
</fieldset>
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 179ce9c5405..ed1232ac322 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -3,22 +3,19 @@
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/?>
-<script type='text/javascript'>
- var appid = '<?php echo $_['appid']; ?>';
-</script>
+ <script type="text/javascript" src="<?php echo OC_Helper::linkToRoute('apps_custom');?>?appid=<?php echo $_['appid']; ?>"></script>
+ <script type="text/javascript" src="<?php echo OC_Helper::linkTo('settings/js', 'apps.js');?>"></script>
+
<div id="controls">
- <a class="button" target="_blank" href="http://owncloud.org/dev/apps/getting-started/"><?php echo $l->t('Add your App');?></a>
+ <a class="button" target="_blank" href="http://owncloud.org/dev"><?php echo $l->t('Add your App');?></a>
<a class="button" target="_blank" href="http://apps.owncloud.com"><?php echo $l->t('More Apps');?></a>
</div>
-<ul id="leftcontent" class="applist">
+<ul id="leftcontent" class="applist hascontrols">
<?php foreach($_['apps'] as $app):?>
<li <?php if($app['active']) echo 'class="active"'?> data-id="<?php echo $app['id'] ?>" <?php if ( isset( $app['ocs_id'] ) ) { echo "data-id-ocs=\"{$app['ocs_id']}\""; } ?>
data-type="<?php echo $app['internal'] ? 'internal' : 'external' ?>" data-installed="1">
<a class="app<?php if(!$app['internal']) echo ' externalapp' ?>" href="?appid=<?php echo $app['id'] ?>"><?php echo htmlentities($app['name']) ?></a>
- <script>
- appData_<?php echo $app['id'] ?>=<?php OC_JSON::encodedPrint($app, false) ?>;
- </script>
- <?php if(!$app['internal']) echo '<small class="externalapp list">3rd party</small>' ?>
+ <?php if(!$app['internal']) echo '<small class="'.$app['internalclass'].' list">'.$app['internallabel'].'</small>' ?>
</li>
<?php endforeach;?>
</ul>
@@ -29,7 +26,8 @@
<p class="description"></p>
<img src="" class="preview" />
<p class="appslink hidden"><a href="#" target="_blank"><?php echo $l->t('See application page at apps.owncloud.com');?></a></p>
- <p class="license hidden"><?php echo $l->t('<span class="licence"></span>-licensed by <span class="author"></span>');?></p>
+ <p class="license hidden"><?php echo $l->t('<span class="licence"></span>-licensed by <span class="author"></span>');?></p>
<input class="enable hidden" type="submit" />
+ <input class="update hidden" type="submit" value="<?php echo($l->t('Update')); ?>" />
</div>
</div>
diff --git a/settings/templates/help.php b/settings/templates/help.php
index b697905f7ef..315cbfdb9a2 100644
--- a/settings/templates/help.php
+++ b/settings/templates/help.php
@@ -1,35 +1,15 @@
<div id="controls">
- <?php if($_['admin']) { ?>
+ <?php if($_['admin']) { ?>
<a class="button newquestion <?php echo($_['style1']); ?>" href="<?php echo($_['url1']); ?>"><?php echo $l->t( 'User Documentation' ); ?></a>
- <a class="button newquestion <?php echo($_['style2']); ?>" href="<?php echo($_['url2']); ?>"><?php echo $l->t( 'Administrator Documentation' ); ?></a>
+ <a class="button newquestion <?php echo($_['style2']); ?>" href="<?php echo($_['url2']); ?>"><?php echo $l->t( 'Administrator Documentation' ); ?></a>
<?php } ?>
- <a class="button newquestion" href="http://owncloud.org/support" target="_blank"><?php echo $l->t( 'Online Documentation' ); ?></a>
- <a class="button newquestion" href="http://forum.owncloud.org" target="_blank"><?php echo $l->t( 'Forum' ); ?></a>
- <?php if($_['admin']) { ?>
+ <a class="button newquestion" href="http://owncloud.org/support" target="_blank"><?php echo $l->t( 'Online Documentation' ); ?></a>
+ <a class="button newquestion" href="http://forum.owncloud.org" target="_blank"><?php echo $l->t( 'Forum' ); ?></a>
+ <?php if($_['admin']) { ?>
<a class="button newquestion" href="https://github.com/owncloud/core/issues" target="_blank"><?php echo $l->t( 'Bugtracker' ); ?></a>
<?php } ?>
- <a class="button newquestion" href="http://owncloud.com" target="_blank"><?php echo $l->t( 'Commercial Support' ); ?></a>
+ <a class="button newquestion" href="http://owncloud.com" target="_blank"><?php echo $l->t( 'Commercial Support' ); ?></a>
+</div>
+<div class="help-includes">
+ <iframe src="<?php echo($_['url']); ?>" class="help-iframe">abc</iframe>
</div>
-<br /><br />
-<iframe src="<?php echo($_['url']); ?>" width="100%" id="ifm" ></iframe>
-
-
-<script language="JavaScript">
-<!--
-
-function pageY(elem) {
- return elem.offsetParent ? (elem.offsetTop + pageY(elem.offsetParent)) : elem.offsetTop;
-}
-var buffer = 5; //scroll bar buffer
-function resizeIframe() {
- var height = document.documentElement.clientHeight;
- height -= pageY(document.getElementById('ifm'))+ buffer ;
- height = (height < 0) ? 0 : height;
- document.getElementById('ifm').style.height = height + 'px';
-}
-
-document.getElementById('ifm').onload=resizeIframe;
-window.onresize = resizeIframe;
-
-//-->
-</script>
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 35eb0ef5e9a..6b3e8acbf02 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -8,25 +8,60 @@
<p id="quotatext"><?php echo $l->t('You have used <strong>%s</strong> of the available <strong>%s</strong>', array($_['usage'], $_['total_space']));?></p>
</div></div>
-<fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Clients');?></strong></legend>
- <a class="button" href="http://owncloud.org/sync-clients/" target="_blank"><?php echo $l->t('Download Desktop Clients');?></a>
- <a class="button" href="https://play.google.com/store/apps/details?id=com.owncloud.android" target="_blank"><?php echo $l->t('Download Android Client');?></a>
- <a class="button" href="https://itunes.apple.com/us/app/owncloud/id543672169?mt=8" target="_blank"><?php echo $l->t('Download iOS Client');?></a>
-</fieldset>
+<div class="clientsbox">
+ <h2><?php echo $l->t('Get the apps to sync your files');?></h2>
+ <a href="<?php echo $_['clients']['desktop']; ?>" target="_blank">
+ <img src="<?php echo OCP\Util::imagePath('core', 'desktopapp.png'); ?>" />
+ </a>
+ <a href="<?php echo $_['clients']['android']; ?>" target="_blank">
+ <img src="<?php echo OCP\Util::imagePath('core', 'googleplay.png'); ?>" />
+ </a>
+ <a href="<?php echo $_['clients']['ios']; ?>" target="_blank">
+ <img src="<?php echo OCP\Util::imagePath('core', 'appstore.png'); ?>" />
+ </a>
+ <?php if(OC_APP::isEnabled('firstrunwizard')) {?>
+ <center><a class="button" href="#" id="showWizard"><?php echo $l->t('Show First Run Wizard again');?></a></center>
+ <?php }?>
+</div>
+
+
+
+<?php
+if($_['passwordChangeSupported']) {
+?>
<form id="passwordform">
<fieldset class="personalblock">
<legend><strong><?php echo $l->t('Password');?></strong></legend>
<div id="passwordchanged"><?php echo $l->t('Your password was changed');?></div>
<div id="passworderror"><?php echo $l->t('Unable to change your password');?></div>
<input type="password" id="pass1" name="oldpassword" placeholder="<?php echo $l->t('Current password');?>" />
- <input type="password" id="pass2" name="password" placeholder="<?php echo $l->t('New password');?>" data-typetoggle="#show" />
- <input type="checkbox" id="show" name="show" /><label for="show"> <?php echo $l->t('show');?></label>
+ <input type="password" id="pass2" name="personal-password" placeholder="<?php echo $l->t('New password');?>" data-typetoggle="#personal-show" />
+ <input type="checkbox" id="personal-show" name="show" /><label for="personal-show"></label>
<input id="passwordbutton" type="submit" value="<?php echo $l->t('Change password');?>" />
</fieldset>
</form>
+<?php
+}
+?>
+
+<?php
+if($_['displayNameChangeSupported']) {
+?>
+<form id="displaynameform">
+ <fieldset class="personalblock">
+ <legend><strong><?php echo $l->t('Display Name');?></strong></legend>
+ <div id="displaynamechanged"><?php echo $l->t('Your display name was changed');?></div>
+ <div id="displaynameerror"><?php echo $l->t('Unable to change your display name');?></div>
+ <input type="text" id="displayName" name="displayName" value="<?php echo $_['displayName']?>" />
+ <input type="hidden" id="oldDisplayName" name="oldDisplayName" value="<?php echo $_['displayName']?>" />
+ <input id="displaynamebutton" type="submit" value="<?php echo $l->t('Change display name');?>" />
+ </fieldset>
+</form>
+<?php
+}
+?>
<form id="lostpassword">
<fieldset class="personalblock">
@@ -62,7 +97,7 @@
<fieldset class="personalblock">
<legend><strong><?php echo $l->t('Version');?></strong></legend>
<strong>ownCloud</strong> <?php echo(OC_Util::getVersionString()); ?> <?php echo(OC_Util::getEditionString()); ?> <br />
- <?php echo $l->t('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>.'); ?>
+ <?php echo $l->t('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>.'); ?>
</fieldset>
diff --git a/settings/templates/users.php b/settings/templates/users.php
index e8bf9edf604..b3cab526947 100644
--- a/settings/templates/users.php
+++ b/settings/templates/users.php
@@ -13,12 +13,12 @@ $items = array_flip($_['subadmingroups']);
unset($items['admin']);
$_['subadmingroups'] = array_flip($items);
?>
-<script>
-var isadmin = <?php echo $_['isadmin']?'true':'false'; ?>;
-</script>
+
+<script type="text/javascript" src="<?php echo OC_Helper::linkToRoute('isadmin');?>"></script>
+
<div id="controls">
<form id="newuser" autocomplete="off">
- <input id="newusername" type="text" placeholder="<?php echo $l->t('Name')?>" /> <input
+ <input id="newusername" type="text" placeholder="<?php echo $l->t('Login Name')?>" /> <input
type="password" id="newuserpassword"
placeholder="<?php echo $l->t('Password')?>" /> <select
class="groupsselect"
@@ -36,11 +36,11 @@ var isadmin = <?php echo $_['isadmin']?'true':'false'; ?>;
<div class="quota-select-wrapper">
<?php if((bool) $_['isadmin']): ?>
<select class='quota'>
- <option
- <?php if($_['default_quota']=='none') echo 'selected="selected"';?>
- value='none'>
- <?php echo $l->t('Unlimited');?>
- </option>
+ <option
+ <?php if($_['default_quota']=='none') echo 'selected="selected"';?>
+ value='none'>
+ <?php echo $l->t('Unlimited');?>
+ </option>
<?php foreach($_['quota_preset'] as $preset):?>
<?php if($preset!='default'):?>
<option
@@ -73,12 +73,11 @@ var isadmin = <?php echo $_['isadmin']?'true':'false'; ?>;
</div>
</div>
-<div id='notification'></div>
-
-<table data-groups="<?php echo implode(', ', $allGroups);?>">
+<table class="hascontrols" data-groups="<?php echo implode(', ', $allGroups);?>">
<thead>
<tr>
- <th id='headerName'><?php echo $l->t('Name')?></th>
+ <th id='headerName'><?php echo $l->t('Login Name')?></th>
+ <th id="headerDisplayName"><?php echo $l->t( 'Display Name' ); ?></th>
<th id="headerPassword"><?php echo $l->t( 'Password' ); ?></th>
<th id="headerGroups"><?php echo $l->t( 'Groups' ); ?></th>
<?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
@@ -90,11 +89,16 @@ var isadmin = <?php echo $_['isadmin']?'true':'false'; ?>;
</thead>
<tbody>
<?php foreach($_["users"] as $user): ?>
- <tr data-uid="<?php echo $user["name"] ?>">
+ <tr data-uid="<?php echo $user["name"] ?>"
+ data-displayName="<?php echo $user["displayName"] ?>">
<td class="name"><?php echo $user["name"]; ?></td>
+ <td class="displayName"><span><?php echo $user["displayName"]; ?></span> <img class="svg action"
+ src="<?php echo image_path('core', 'actions/rename.svg')?>"
+ alt="<?php echo $l->t("change display name")?>" title="<?php echo $l->t("change display name")?>"/>
+ </td>
<td class="password"><span>â—â—â—â—â—â—â—</span> <img class="svg action"
src="<?php echo image_path('core', 'actions/rename.svg')?>"
- alt="set new password" title="set new password"/>
+ alt="<?php echo $l->t("set new password")?>" title="<?php echo $l->t("set new password")?>"/>
</td>
<td class="groups"><select
class="groupsselect"
@@ -127,16 +131,16 @@ var isadmin = <?php echo $_['isadmin']?'true':'false'; ?>;
<td class="quota">
<div class="quota-select-wrapper">
<select class='quota-user'>
- <option
- <?php if($user['quota']=='default') echo 'selected="selected"';?>
- value='default'>
- <?php echo $l->t('Default');?>
- </option>
- <option
- <?php if($user['quota']=='none') echo 'selected="selected"';?>
- value='none'>
- <?php echo $l->t('Unlimited');?>
- </option>
+ <option
+ <?php if($user['quota']=='default') echo 'selected="selected"';?>
+ value='default'>
+ <?php echo $l->t('Default');?>
+ </option>
+ <option
+ <?php if($user['quota']=='none') echo 'selected="selected"';?>
+ value='none'>
+ <?php echo $l->t('Unlimited');?>
+ </option>
<?php foreach($_['quota_preset'] as $preset):?>
<option
<?php if($user['quota']==$preset) echo 'selected="selected"';?>
diff --git a/settings/users.php b/settings/users.php
index 07a7620d3c0..ab7a7aed734 100644
--- a/settings/users.php
+++ b/settings/users.php
@@ -18,14 +18,15 @@ OC_App::setActiveNavigationEntry( 'core_users' );
$users = array();
$groups = array();
-$isadmin = OC_Group::inGroup(OC_User::getUser(), 'admin')?true:false;
+$isadmin = OC_User::isAdminUser(OC_User::getUser());
+
if($isadmin) {
$accessiblegroups = OC_Group::getGroups();
- $accessibleusers = OC_User::getUsers('', 30);
+ $accessibleusers = OC_User::getDisplayNames('', 30);
$subadmins = OC_SubAdmin::getAllSubAdmins();
}else{
$accessiblegroups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
- $accessibleusers = OC_Group::usersInGroups($accessiblegroups, '', 30);
+ $accessibleusers = OC_Group::displayNamesInGroups($accessiblegroups, '', 30);
$subadmins = false;
}
@@ -33,7 +34,7 @@ if($isadmin) {
$quotaPreset=OC_Appconfig::getValue('files', 'quota_preset', '1 GB, 5 GB, 10 GB');
$quotaPreset=explode(',', $quotaPreset);
foreach($quotaPreset as &$preset) {
- $preset=trim($preset);
+ $preset=trim($preset);
}
$quotaPreset=array_diff($quotaPreset, array('default', 'none'));
@@ -41,16 +42,22 @@ $defaultQuota=OC_Appconfig::getValue('files', 'default_quota', 'none');
$defaultQuotaIsUserDefined=array_search($defaultQuota, $quotaPreset)===false && array_search($defaultQuota, array('none', 'default'))===false;
// load users and quota
-foreach($accessibleusers as $i) {
- $quota=OC_Preferences::getValue($i, 'files', 'quota', 'default');
- $isQuotaUserDefined=array_search($quota, $quotaPreset)===false && array_search($quota, array('none', 'default'))===false;
+foreach($accessibleusers as $uid => $displayName) {
+ $quota=OC_Preferences::getValue($uid, 'files', 'quota', 'default');
+ $isQuotaUserDefined=array_search($quota, $quotaPreset)===false && array_search($quota, array('none', 'default'))===false;
+ $name = $displayName;
+ if ( $displayName != $uid ) {
+ $name = $name . ' ('.$uid.')';
+ }
+
$users[] = array(
- "name" => $i,
- "groups" => join( ", ", /*array_intersect(*/OC_Group::getUserGroups($i)/*, OC_SubAdmin::getSubAdminsGroups(OC_User::getUser()))*/),
- 'quota'=>$quota,
- 'isQuotaUserDefined'=>$isQuotaUserDefined,
- 'subadmin'=>implode(', ', OC_SubAdmin::getSubAdminsGroups($i)));
+ "name" => $uid,
+ "displayName" => $displayName,
+ "groups" => join( ", ", /*array_intersect(*/OC_Group::getUserGroups($uid)/*, OC_SubAdmin::getSubAdminsGroups(OC_User::getUser()))*/),
+ 'quota'=>$quota,
+ 'isQuotaUserDefined'=>$isQuotaUserDefined,
+ 'subadmin'=>implode(', ', OC_SubAdmin::getSubAdminsGroups($uid)));
}
foreach( $accessiblegroups as $i ) {
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index 115a15883a0..fb667263e45 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -2,30 +2,14 @@
global $RUNTIME_NOAPPS;
$RUNTIME_NOAPPS = true;
+
+define('PHPUNIT_RUN', 1);
+
require_once __DIR__.'/../lib/base.php';
if(!class_exists('PHPUnit_Framework_TestCase')) {
require_once('PHPUnit/Autoload.php');
}
-//SimpleTest compatibility
-abstract class UnitTestCase extends PHPUnit_Framework_TestCase{
- function assertEqual($expected, $actual, $string='') {
- $this->assertEquals($expected, $actual, $string);
- }
-
- function assertNotEqual($expected, $actual, $string='') {
- $this->assertNotEquals($expected, $actual, $string);
- }
-
- static function assertTrue($actual, $string='') {
- parent::assertTrue((bool)$actual, $string);
- }
-
- static function assertFalse($actual, $string='') {
- parent::assertFalse((bool)$actual, $string);
- }
-}
-
OC_Hook::clear();
OC_Log::$enabled = false;
diff --git a/tests/enable_all.php b/tests/enable_all.php
index 16838398f17..44af0115650 100644
--- a/tests/enable_all.php
+++ b/tests/enable_all.php
@@ -10,7 +10,8 @@ require_once __DIR__.'/../lib/base.php';
OC_App::enable('calendar');
OC_App::enable('contacts');
-OC_App::enable('apptemplate_advanced');
+OC_App::enable('apptemplateadvanced');
+OC_App::enable('appframework');
#OC_App::enable('files_archive');
#OC_App::enable('mozilla_sync');
#OC_App::enable('news');
diff --git a/tests/lib/archive.php b/tests/lib/archive.php
index cd2ca6630a5..be5cc897a67 100644
--- a/tests/lib/archive.php
+++ b/tests/lib/archive.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-abstract class Test_Archive extends UnitTestCase {
+abstract class Test_Archive extends PHPUnit_Framework_TestCase {
/**
* @var OC_Archive
*/
@@ -27,7 +27,7 @@ abstract class Test_Archive extends UnitTestCase {
$this->instance=$this->getExisting();
$allFiles=$this->instance->getFiles();
$expected=array('lorem.txt','logo-wide.png','dir/', 'dir/lorem.txt');
- $this->assertEqual(4, count($allFiles), 'only found '.count($allFiles).' out of 4 expected files');
+ $this->assertEquals(4, count($allFiles), 'only found '.count($allFiles).' out of 4 expected files');
foreach($expected as $file) {
$this->assertContains($file, $allFiles, 'cant find '. $file . ' in archive');
$this->assertTrue($this->instance->fileExists($file), 'file '.$file.' does not exist in archive');
@@ -36,14 +36,14 @@ abstract class Test_Archive extends UnitTestCase {
$rootContent=$this->instance->getFolder('');
$expected=array('lorem.txt','logo-wide.png', 'dir/');
- $this->assertEqual(3, count($rootContent));
+ $this->assertEquals(3, count($rootContent));
foreach($expected as $file) {
$this->assertContains($file, $rootContent, 'cant find '. $file . ' in archive');
}
$dirContent=$this->instance->getFolder('dir/');
$expected=array('lorem.txt');
- $this->assertEqual(1, count($dirContent));
+ $this->assertEquals(1, count($dirContent));
foreach($expected as $file) {
$this->assertContains($file, $dirContent, 'cant find '. $file . ' in archive');
}
@@ -53,36 +53,36 @@ abstract class Test_Archive extends UnitTestCase {
$this->instance=$this->getExisting();
$dir=OC::$SERVERROOT.'/tests/data';
$textFile=$dir.'/lorem.txt';
- $this->assertEqual(file_get_contents($textFile), $this->instance->getFile('lorem.txt'));
+ $this->assertEquals(file_get_contents($textFile), $this->instance->getFile('lorem.txt'));
$tmpFile=OCP\Files::tmpFile('.txt');
$this->instance->extractFile('lorem.txt', $tmpFile);
- $this->assertEqual(file_get_contents($textFile), file_get_contents($tmpFile));
+ $this->assertEquals(file_get_contents($textFile), file_get_contents($tmpFile));
}
public function testWrite() {
$dir=OC::$SERVERROOT.'/tests/data';
$textFile=$dir.'/lorem.txt';
$this->instance=$this->getNew();
- $this->assertEqual(0, count($this->instance->getFiles()));
+ $this->assertEquals(0, count($this->instance->getFiles()));
$this->instance->addFile('lorem.txt', $textFile);
- $this->assertEqual(1, count($this->instance->getFiles()));
+ $this->assertEquals(1, count($this->instance->getFiles()));
$this->assertTrue($this->instance->fileExists('lorem.txt'));
$this->assertFalse($this->instance->fileExists('lorem.txt/'));
- $this->assertEqual(file_get_contents($textFile), $this->instance->getFile('lorem.txt'));
+ $this->assertEquals(file_get_contents($textFile), $this->instance->getFile('lorem.txt'));
$this->instance->addFile('lorem.txt', 'foobar');
- $this->assertEqual('foobar', $this->instance->getFile('lorem.txt'));
+ $this->assertEquals('foobar', $this->instance->getFile('lorem.txt'));
}
public function testReadStream() {
$dir=OC::$SERVERROOT.'/tests/data';
$this->instance=$this->getExisting();
$fh=$this->instance->getStream('lorem.txt', 'r');
- $this->assertTrue($fh);
+ $this->assertTrue((bool)$fh);
$content=fread($fh, $this->instance->filesize('lorem.txt'));
fclose($fh);
- $this->assertEqual(file_get_contents($dir.'/lorem.txt'), $content);
+ $this->assertEquals(file_get_contents($dir.'/lorem.txt'), $content);
}
public function testWriteStream() {
$dir=OC::$SERVERROOT.'/tests/data';
@@ -93,7 +93,7 @@ abstract class Test_Archive extends UnitTestCase {
fclose($source);
fclose($fh);
$this->assertTrue($this->instance->fileExists('lorem.txt'));
- $this->assertEqual(file_get_contents($dir.'/lorem.txt'), $this->instance->getFile('lorem.txt'));
+ $this->assertEquals(file_get_contents($dir.'/lorem.txt'), $this->instance->getFile('lorem.txt'));
}
public function testFolder() {
$this->instance=$this->getNew();
@@ -111,10 +111,10 @@ abstract class Test_Archive extends UnitTestCase {
$this->instance=$this->getExisting();
$tmpDir=OCP\Files::tmpFolder();
$this->instance->extract($tmpDir);
- $this->assertEqual(true, file_exists($tmpDir.'lorem.txt'));
- $this->assertEqual(true, file_exists($tmpDir.'dir/lorem.txt'));
- $this->assertEqual(true, file_exists($tmpDir.'logo-wide.png'));
- $this->assertEqual(file_get_contents($dir.'/lorem.txt'), file_get_contents($tmpDir.'lorem.txt'));
+ $this->assertEquals(true, file_exists($tmpDir.'lorem.txt'));
+ $this->assertEquals(true, file_exists($tmpDir.'dir/lorem.txt'));
+ $this->assertEquals(true, file_exists($tmpDir.'logo-wide.png'));
+ $this->assertEquals(file_get_contents($dir.'/lorem.txt'), file_get_contents($tmpDir.'lorem.txt'));
OCP\Files::rmdirr($tmpDir);
}
public function testMoveRemove() {
@@ -126,7 +126,7 @@ abstract class Test_Archive extends UnitTestCase {
$this->instance->rename('lorem.txt', 'target.txt');
$this->assertTrue($this->instance->fileExists('target.txt'));
$this->assertFalse($this->instance->fileExists('lorem.txt'));
- $this->assertEqual(file_get_contents($textFile), $this->instance->getFile('target.txt'));
+ $this->assertEquals(file_get_contents($textFile), $this->instance->getFile('target.txt'));
$this->instance->remove('target.txt');
$this->assertFalse($this->instance->fileExists('target.txt'));
}
diff --git a/tests/lib/cache.php b/tests/lib/cache.php
index 1a1287ff135..3dcf39f7d60 100644
--- a/tests/lib/cache.php
+++ b/tests/lib/cache.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-abstract class Test_Cache extends UnitTestCase {
+abstract class Test_Cache extends PHPUnit_Framework_TestCase {
/**
* @var OC_Cache cache;
*/
@@ -26,19 +26,19 @@ abstract class Test_Cache extends UnitTestCase {
$this->instance->set('value1', $value);
$this->assertTrue($this->instance->hasKey('value1'));
$received=$this->instance->get('value1');
- $this->assertEqual($value, $received, 'Value recieved from cache not equal to the original');
+ $this->assertEquals($value, $received, 'Value recieved from cache not equal to the original');
$value='ipsum lorum';
$this->instance->set('value1', $value);
$received=$this->instance->get('value1');
- $this->assertEqual($value, $received, 'Value not overwritten by second set');
+ $this->assertEquals($value, $received, 'Value not overwritten by second set');
$value2='foobar';
$this->instance->set('value2', $value2);
$received2=$this->instance->get('value2');
$this->assertTrue($this->instance->hasKey('value1'));
$this->assertTrue($this->instance->hasKey('value2'));
- $this->assertEqual($value, $received, 'Value changed while setting other variable');
- $this->assertEqual($value2, $received2, 'Second value not equal to original');
+ $this->assertEquals($value, $received, 'Value changed while setting other variable');
+ $this->assertEquals($value2, $received2, 'Second value not equal to original');
$this->assertFalse($this->instance->hasKey('not_set'));
$this->assertNull($this->instance->get('not_set'), 'Unset value not equal to null');
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index d64627198e0..5dcd3268804 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -38,8 +38,8 @@ class Test_Cache_File extends Test_Cache {
}
//set up temporary storage
- OC_Filesystem::clearMounts();
- OC_Filesystem::mount('OC_Filestorage_Temporary', array(), '/');
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Temporary',array(),'/');
OC_User::clearBackends();
OC_User::useBackend(new OC_User_Dummy());
@@ -51,7 +51,7 @@ class Test_Cache_File extends Test_Cache {
OC_User::setUserId('test');
//set up the users dir
- $rootView=new OC_FilesystemView('');
+ $rootView=new \OC\Files\View('');
$rootView->mkdir('/test');
$this->instance=new OC_Cache_File();
diff --git a/tests/lib/db.php b/tests/lib/db.php
index c2eb38dae83..440f3fb6bfd 100644
--- a/tests/lib/db.php
+++ b/tests/lib/db.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_DB extends UnitTestCase {
+class Test_DB extends PHPUnit_Framework_TestCase {
protected $backupGlobals = FALSE;
protected static $schema_file = 'static://test_db_scheme';
@@ -35,18 +35,18 @@ class Test_DB extends UnitTestCase {
public function testQuotes() {
$query = OC_DB::prepare('SELECT `fullname` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?');
$result = $query->execute(array('uri_1'));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$row = $result->fetchRow();
$this->assertFalse($row);
$query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (?,?)');
$result = $query->execute(array('fullname test', 'uri_1'));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?');
$result = $query->execute(array('uri_1'));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$row = $result->fetchRow();
$this->assertArrayHasKey('fullname', $row);
- $this->assertEqual($row['fullname'], 'fullname test');
+ $this->assertEquals($row['fullname'], 'fullname test');
$row = $result->fetchRow();
$this->assertFalse($row);
}
@@ -54,19 +54,19 @@ class Test_DB extends UnitTestCase {
public function testNOW() {
$query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (NOW(),?)');
$result = $query->execute(array('uri_2'));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?');
$result = $query->execute(array('uri_2'));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
}
public function testUNIX_TIMESTAMP() {
$query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (UNIX_TIMESTAMP(),?)');
$result = $query->execute(array('uri_3'));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?');
$result = $query->execute(array('uri_3'));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
}
public function testinsertIfNotExist() {
@@ -85,13 +85,13 @@ class Test_DB extends UnitTestCase {
'type' => $entry['type'],
'category' => $entry['category'],
));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
}
$query = OC_DB::prepare('SELECT * FROM *PREFIX*'.$this->table3);
$result = $query->execute();
- $this->assertTrue($result);
- $this->assertEqual('4', $result->numRows());
+ $this->assertTrue((bool)$result);
+ $this->assertEquals('4', $result->numRows());
}
public function testinsertIfNotExistDontOverwrite() {
@@ -102,14 +102,14 @@ class Test_DB extends UnitTestCase {
// Normal test to have same known data inserted.
$query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`, `uri`, `carddata`) VALUES (?, ?, ?)');
$result = $query->execute(array($fullname, $uri, $carddata));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$query = OC_DB::prepare('SELECT `fullname`, `uri`, `carddata` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?');
$result = $query->execute(array($uri));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$row = $result->fetchRow();
$this->assertArrayHasKey('carddata', $row);
- $this->assertEqual($carddata, $row['carddata']);
- $this->assertEqual('1', $result->numRows());
+ $this->assertEquals($carddata, $row['carddata']);
+ $this->assertEquals('1', $result->numRows());
// Try to insert a new row
$result = OC_DB::insertIfNotExist('*PREFIX*'.$this->table2,
@@ -117,17 +117,17 @@ class Test_DB extends UnitTestCase {
'fullname' => $fullname,
'uri' => $uri,
));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$query = OC_DB::prepare('SELECT `fullname`, `uri`, `carddata` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?');
$result = $query->execute(array($uri));
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
$row = $result->fetchRow();
$this->assertArrayHasKey('carddata', $row);
// Test that previously inserted data isn't overwritten
- $this->assertEqual($carddata, $row['carddata']);
+ $this->assertEquals($carddata, $row['carddata']);
// And that a new row hasn't been inserted.
- $this->assertEqual('1', $result->numRows());
+ $this->assertEquals('1', $result->numRows());
}
}
diff --git a/tests/lib/dbschema.php b/tests/lib/dbschema.php
index cd408160afb..fb60ce7dbb7 100644
--- a/tests/lib/dbschema.php
+++ b/tests/lib/dbschema.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_DBSchema extends UnitTestCase {
+class Test_DBSchema extends PHPUnit_Framework_TestCase {
protected static $schema_file = 'static://test_db_scheme';
protected static $schema_file2 = 'static://test_db_scheme2';
protected $test_prefix;
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
new file mode 100644
index 00000000000..c466fbb63e7
--- /dev/null
+++ b/tests/lib/files/cache/cache.php
@@ -0,0 +1,215 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+class Cache extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Temporary $storage;
+ */
+ private $storage;
+
+ /**
+ * @var \OC\Files\Cache\Cache $cache
+ */
+ private $cache;
+
+ public function testSimple() {
+ $file1 = 'foo';
+ $file2 = 'foo/bar';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
+ $data2 = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+
+ $this->assertFalse($this->cache->inCache($file1));
+ $this->assertEquals($this->cache->get($file1), null);
+
+ $id1 = $this->cache->put($file1, $data1);
+ $this->assertTrue($this->cache->inCache($file1));
+ $cacheData1 = $this->cache->get($file1);
+ foreach ($data1 as $key => $value) {
+ $this->assertEquals($value, $cacheData1[$key]);
+ }
+ $this->assertEquals($cacheData1['mimepart'], 'foo');
+ $this->assertEquals($cacheData1['fileid'], $id1);
+ $this->assertEquals($id1, $this->cache->getId($file1));
+
+ $this->assertFalse($this->cache->inCache($file2));
+ $id2 = $this->cache->put($file2, $data2);
+ $this->assertTrue($this->cache->inCache($file2));
+ $cacheData2 = $this->cache->get($file2);
+ foreach ($data2 as $key => $value) {
+ $this->assertEquals($value, $cacheData2[$key]);
+ }
+ $this->assertEquals($cacheData1['fileid'], $cacheData2['parent']);
+ $this->assertEquals($cacheData2['fileid'], $id2);
+ $this->assertEquals($id2, $this->cache->getId($file2));
+ $this->assertEquals($id1, $this->cache->getParentId($file2));
+
+ $newSize = 1050;
+ $newId2 = $this->cache->put($file2, array('size' => $newSize));
+ $cacheData2 = $this->cache->get($file2);
+ $this->assertEquals($newId2, $id2);
+ $this->assertEquals($cacheData2['size'], $newSize);
+ $this->assertEquals($cacheData1, $this->cache->get($file1));
+
+ $this->cache->remove($file2);
+ $this->assertFalse($this->cache->inCache($file2));
+ $this->assertEquals($this->cache->get($file2), null);
+ $this->assertTrue($this->cache->inCache($file1));
+
+ $this->assertEquals($cacheData1, $this->cache->get($id1));
+ }
+
+ public function testPartial() {
+ $file1 = 'foo';
+
+ $this->cache->put($file1, array('size' => 10));
+ $this->assertEquals(array('size' => 10), $this->cache->get($file1));
+
+ $this->cache->put($file1, array('mtime' => 15));
+ $this->assertEquals(array('size' => 10, 'mtime' => 15), $this->cache->get($file1));
+
+ $this->cache->put($file1, array('size' => 12));
+ $this->assertEquals(array('size' => 12, 'mtime' => 15), $this->cache->get($file1));
+ }
+
+ public function testFolder() {
+ $file1 = 'folder';
+ $file2 = 'folder/bar';
+ $file3 = 'folder/foo';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
+ $fileData = array();
+ $fileData['bar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+ $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
+
+ $this->cache->put($file1, $data1);
+ $this->cache->put($file2, $fileData['bar']);
+ $this->cache->put($file3, $fileData['foo']);
+
+ $content = $this->cache->getFolderContents($file1);
+ $this->assertEquals(count($content), 2);
+ foreach ($content as $cachedData) {
+ $data = $fileData[$cachedData['name']];
+ foreach ($data as $name => $value) {
+ $this->assertEquals($value, $cachedData[$name]);
+ }
+ }
+
+ $file4 = 'folder/unkownSize';
+ $fileData['unkownSize'] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'foo/file');
+ $this->cache->put($file4, $fileData['unkownSize']);
+
+ $this->assertEquals(-1, $this->cache->calculateFolderSize($file1));
+
+ $fileData['unkownSize'] = array('size' => 5, 'mtime' => 25, 'mimetype' => 'foo/file');
+ $this->cache->put($file4, $fileData['unkownSize']);
+
+ $this->assertEquals(1025, $this->cache->calculateFolderSize($file1));
+
+ $this->cache->remove('folder');
+ $this->assertFalse($this->cache->inCache('folder/foo'));
+ $this->assertFalse($this->cache->inCache('folder/bar'));
+ }
+
+ function testStatus() {
+ $this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->getStatus('foo'));
+ $this->cache->put('foo', array('size' => -1));
+ $this->assertEquals(\OC\Files\Cache\Cache::PARTIAL, $this->cache->getStatus('foo'));
+ $this->cache->put('foo', array('size' => -1, 'mtime' => 20, 'mimetype' => 'foo/file'));
+ $this->assertEquals(\OC\Files\Cache\Cache::SHALLOW, $this->cache->getStatus('foo'));
+ $this->cache->put('foo', array('size' => 10));
+ $this->assertEquals(\OC\Files\Cache\Cache::COMPLETE, $this->cache->getStatus('foo'));
+ }
+
+ function testSearch() {
+ $file1 = 'folder';
+ $file2 = 'folder/foobar';
+ $file3 = 'folder/foo';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
+ $fileData = array();
+ $fileData['foobar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+ $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
+
+ $this->cache->put($file1, $data1);
+ $this->cache->put($file2, $fileData['foobar']);
+ $this->cache->put($file3, $fileData['foo']);
+
+ $this->assertEquals(2, count($this->cache->search('%foo%')));
+ $this->assertEquals(1, count($this->cache->search('foo')));
+ $this->assertEquals(1, count($this->cache->search('%folder%')));
+ $this->assertEquals(1, count($this->cache->search('folder%')));
+ $this->assertEquals(3, count($this->cache->search('%')));
+
+ $this->assertEquals(3, count($this->cache->searchByMime('foo')));
+ $this->assertEquals(2, count($this->cache->searchByMime('foo/file')));
+ }
+
+ function testMove() {
+ $file1 = 'folder';
+ $file2 = 'folder/bar';
+ $file3 = 'folder/foo';
+ $file4 = 'folder/foo/1';
+ $file5 = 'folder/foo/2';
+ $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/bar');
+
+ $this->cache->put($file1, $data);
+ $this->cache->put($file2, $data);
+ $this->cache->put($file3, $data);
+ $this->cache->put($file4, $data);
+ $this->cache->put($file5, $data);
+
+ $this->cache->move('folder/foo', 'folder/foobar');
+
+ $this->assertFalse($this->cache->inCache('folder/foo'));
+ $this->assertFalse($this->cache->inCache('folder/foo/1'));
+ $this->assertFalse($this->cache->inCache('folder/foo/2'));
+
+ $this->assertTrue($this->cache->inCache('folder/bar'));
+ $this->assertTrue($this->cache->inCache('folder/foobar'));
+ $this->assertTrue($this->cache->inCache('folder/foobar/1'));
+ $this->assertTrue($this->cache->inCache('folder/foobar/2'));
+ }
+
+ function testGetIncomplete() {
+ $file1 = 'folder1';
+ $file2 = 'folder2';
+ $file3 = 'folder3';
+ $file4 = 'folder4';
+ $data = array('size' => 10, 'mtime' => 50, 'mimetype' => 'foo/bar');
+
+ $this->cache->put($file1, $data);
+ $data['size'] = -1;
+ $this->cache->put($file2, $data);
+ $this->cache->put($file3, $data);
+ $data['size'] = 12;
+ $this->cache->put($file4, $data);
+
+ $this->assertEquals($file3, $this->cache->getIncomplete());
+ }
+
+ function testNonExisting() {
+ $this->assertFalse($this->cache->get('foo.txt'));
+ $this->assertEquals(array(), $this->cache->getFolderContents('foo'));
+ }
+
+ function testGetById() {
+ $storageId = $this->storage->getId();
+ $data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+ $id = $this->cache->put('foo', $data);
+ $this->assertEquals(array($storageId, 'foo'), \OC\Files\Cache\Cache::getById($id));
+ }
+
+ public function tearDown() {
+ $this->cache->clear();
+ }
+
+ public function setUp() {
+ $this->storage = new \OC\Files\Storage\Temporary(array());
+ $this->cache = new \OC\Files\Cache\Cache($this->storage);
+ }
+}
diff --git a/tests/lib/files/cache/permissions.php b/tests/lib/files/cache/permissions.php
new file mode 100644
index 00000000000..56dbbc4518e
--- /dev/null
+++ b/tests/lib/files/cache/permissions.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+class Permissions extends \PHPUnit_Framework_TestCase {
+ /***
+ * @var \OC\Files\Cache\Permissions $permissionsCache
+ */
+ private $permissionsCache;
+
+ function setUp(){
+ $this->permissionsCache=new \OC\Files\Cache\Permissions('dummy');
+ }
+
+ function testSimple() {
+ $ids = range(1, 10);
+ $user = uniqid();
+
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user));
+ $this->permissionsCache->set(1, $user, 1);
+ $this->assertEquals(1, $this->permissionsCache->get(1, $user));
+ $this->assertEquals(-1, $this->permissionsCache->get(2, $user));
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user . '2'));
+
+ $this->permissionsCache->set(1, $user, 2);
+ $this->assertEquals(2, $this->permissionsCache->get(1, $user));
+
+ $this->permissionsCache->set(2, $user, 1);
+ $this->assertEquals(1, $this->permissionsCache->get(2, $user));
+
+ $this->permissionsCache->remove(1, $user);
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user));
+ $this->permissionsCache->remove(1, $user . '2');
+ $this->assertEquals(1, $this->permissionsCache->get(2, $user));
+
+ $expected = array();
+ foreach ($ids as $id) {
+ $this->permissionsCache->set($id, $user, 10 + $id);
+ $expected[$id] = 10 + $id;
+ }
+ $this->assertEquals($expected, $this->permissionsCache->getMultiple($ids, $user));
+
+ $this->permissionsCache->removeMultiple(array(10, 9), $user);
+ unset($expected[9]);
+ unset($expected[10]);
+ $this->assertEquals($expected, $this->permissionsCache->getMultiple($ids, $user));
+
+ $this->permissionsCache->removeMultiple($ids, $user);
+ }
+}
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
new file mode 100644
index 00000000000..3885c99e6d3
--- /dev/null
+++ b/tests/lib/files/cache/scanner.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+class Scanner extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage;
+
+ /**
+ * @var \OC\Files\Cache\Scanner $scanner
+ */
+ private $scanner;
+
+ /**
+ * @var \OC\Files\Cache\Cache $cache
+ */
+ private $cache;
+
+ function testFile() {
+ $data = "dummy file data\n";
+ $this->storage->file_put_contents('foo.txt', $data);
+ $this->scanner->scanFile('foo.txt');
+
+ $this->assertEquals($this->cache->inCache('foo.txt'), true);
+ $cachedData = $this->cache->get('foo.txt');
+ $this->assertEquals($cachedData['size'], strlen($data));
+ $this->assertEquals($cachedData['mimetype'], 'text/plain');
+ $this->assertNotEquals($cachedData['parent'], -1); //parent folders should be scanned automatically
+
+ $data = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $this->storage->file_put_contents('foo.png', $data);
+ $this->scanner->scanFile('foo.png');
+
+ $this->assertEquals($this->cache->inCache('foo.png'), true);
+ $cachedData = $this->cache->get('foo.png');
+ $this->assertEquals($cachedData['size'], strlen($data));
+ $this->assertEquals($cachedData['mimetype'], 'image/png');
+ }
+
+ private function fillTestFolders() {
+ $textData = "dummy file data\n";
+ $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $this->storage->mkdir('folder');
+ $this->storage->file_put_contents('foo.txt', $textData);
+ $this->storage->file_put_contents('foo.png', $imgData);
+ $this->storage->file_put_contents('folder/bar.txt', $textData);
+ }
+
+ function testFolder() {
+ $this->fillTestFolders();
+
+ $this->scanner->scan('');
+ $this->assertEquals($this->cache->inCache(''), true);
+ $this->assertEquals($this->cache->inCache('foo.txt'), true);
+ $this->assertEquals($this->cache->inCache('foo.png'), true);
+ $this->assertEquals($this->cache->inCache('folder'), true);
+ $this->assertEquals($this->cache->inCache('folder/bar.txt'), true);
+
+ $cachedDataText = $this->cache->get('foo.txt');
+ $cachedDataText2 = $this->cache->get('foo.txt');
+ $cachedDataImage = $this->cache->get('foo.png');
+ $cachedDataFolder = $this->cache->get('');
+ $cachedDataFolder2 = $this->cache->get('folder');
+
+ $this->assertEquals($cachedDataImage['parent'], $cachedDataText['parent']);
+ $this->assertEquals($cachedDataFolder['fileid'], $cachedDataImage['parent']);
+ $this->assertEquals($cachedDataFolder['size'], $cachedDataImage['size'] + $cachedDataText['size'] + $cachedDataText2['size']);
+ $this->assertEquals($cachedDataFolder2['size'], $cachedDataText2['size']);
+ }
+
+ function testShallow() {
+ $this->fillTestFolders();
+
+ $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+ $this->assertEquals($this->cache->inCache(''), true);
+ $this->assertEquals($this->cache->inCache('foo.txt'), true);
+ $this->assertEquals($this->cache->inCache('foo.png'), true);
+ $this->assertEquals($this->cache->inCache('folder'), true);
+ $this->assertEquals($this->cache->inCache('folder/bar.txt'), false);
+
+ $cachedDataFolder = $this->cache->get('');
+ $cachedDataFolder2 = $this->cache->get('folder');
+
+ $this->assertEquals(-1, $cachedDataFolder['size']);
+ $this->assertEquals(-1, $cachedDataFolder2['size']);
+
+ $this->scanner->scan('folder', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+
+ $cachedDataFolder2 = $this->cache->get('folder');
+
+ $this->assertNotEquals($cachedDataFolder2['size'], -1);
+
+ $this->cache->correctFolderSize('folder');
+
+ $cachedDataFolder = $this->cache->get('');
+ $this->assertNotEquals($cachedDataFolder['size'], -1);
+ }
+
+ function testBackgroundScan(){
+ $this->fillTestFolders();
+ $this->storage->mkdir('folder2');
+ $this->storage->file_put_contents('folder2/bar.txt', 'foobar');
+
+ $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+ $this->assertFalse($this->cache->inCache('folder/bar.txt'));
+ $this->assertFalse($this->cache->inCache('folder/2bar.txt'));
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(-1, $cachedData['size']);
+
+ $this->scanner->backgroundScan();
+
+ $this->assertTrue($this->cache->inCache('folder/bar.txt'));
+ $this->assertTrue($this->cache->inCache('folder/bar.txt'));
+
+ $cachedData = $this->cache->get('');
+ $this->assertnotEquals(-1, $cachedData['size']);
+
+ $this->assertFalse($this->cache->getIncomplete());
+ }
+
+ function setUp() {
+ $this->storage = new \OC\Files\Storage\Temporary(array());
+ $this->scanner = new \OC\Files\Cache\Scanner($this->storage);
+ $this->cache = new \OC\Files\Cache\Cache($this->storage);
+ }
+
+ function tearDown() {
+ $ids = $this->cache->getAll();
+ $permissionsCache = $this->storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
+ $this->cache->clear();
+ }
+}
diff --git a/tests/lib/files/cache/updater.php b/tests/lib/files/cache/updater.php
new file mode 100644
index 00000000000..7a79f45a203
--- /dev/null
+++ b/tests/lib/files/cache/updater.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+use \OC\Files\Filesystem as Filesystem;
+
+class Updater extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage;
+
+ /**
+ * @var \OC\Files\Cache\Scanner $scanner
+ */
+ private $scanner;
+
+ /**
+ * @var \OC\Files\Cache\Cache $cache
+ */
+ private $cache;
+
+ private static $user;
+
+ public function setUp() {
+ $this->storage = new \OC\Files\Storage\Temporary(array());
+ $textData = "dummy file data\n";
+ $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $this->storage->mkdir('folder');
+ $this->storage->file_put_contents('foo.txt', $textData);
+ $this->storage->file_put_contents('foo.png', $imgData);
+ $this->storage->file_put_contents('folder/bar.txt', $textData);
+ $this->storage->file_put_contents('folder/bar2.txt', $textData);
+
+ $this->scanner = $this->storage->getScanner();
+ $this->scanner->scan('');
+ $this->cache = $this->storage->getCache();
+
+ if (!self::$user) {
+ if (!\OC\Files\Filesystem::getView()) {
+ self::$user = uniqid();
+ \OC\Files\Filesystem::init(self::$user, '/' . self::$user . '/files');
+ } else {
+ self::$user = \OC_User::getUser();
+ }
+ }
+
+ Filesystem::clearMounts();
+ Filesystem::mount($this->storage, array(), '/' . self::$user . '/files');
+
+ \OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook');
+ \OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook');
+ \OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
+
+ }
+
+ public function tearDown() {
+ if ($this->cache) {
+ $this->cache->clear();
+ }
+ Filesystem::tearDown();
+ }
+
+ public function testWrite() {
+ $textSize = strlen("dummy file data\n");
+ $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
+ $rootCachedData = $this->cache->get('');
+ $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
+
+ $fooCachedData = $this->cache->get('foo.txt');
+ Filesystem::file_put_contents('foo.txt', 'asd');
+ $cachedData = $this->cache->get('foo.txt');
+ $this->assertEquals(3, $cachedData['size']);
+ $this->assertNotEquals($fooCachedData['etag'], $cachedData['etag']);
+ $mtime = $cachedData['mtime'];
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(2 * $textSize + $imageSize + 3, $cachedData['size']);
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $mtime);
+ $rootCachedData = $cachedData;
+
+ $this->assertFalse($this->cache->inCache('bar.txt'));
+ Filesystem::file_put_contents('bar.txt', 'asd');
+ $this->assertTrue($this->cache->inCache('bar.txt'));
+ $cachedData = $this->cache->get('bar.txt');
+ $this->assertEquals(3, $cachedData['size']);
+ $mtime = $cachedData['mtime'];
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(2 * $textSize + $imageSize + 2 * 3, $cachedData['size']);
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $mtime);
+ }
+
+ public function testDelete() {
+ $textSize = strlen("dummy file data\n");
+ $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
+ $rootCachedData = $this->cache->get('');
+ $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
+
+ $this->assertTrue($this->cache->inCache('foo.txt'));
+ Filesystem::unlink('foo.txt', 'asd');
+ $this->assertFalse($this->cache->inCache('foo.txt'));
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(2 * $textSize + $imageSize, $cachedData['size']);
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']);
+ $rootCachedData = $cachedData;
+
+ Filesystem::mkdir('bar_folder');
+ $this->assertTrue($this->cache->inCache('bar_folder'));
+ $cachedData = $this->cache->get('');
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $rootCachedData = $cachedData;
+ Filesystem::rmdir('bar_folder');
+ $this->assertFalse($this->cache->inCache('bar_folder'));
+ $cachedData = $this->cache->get('');
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']);
+ }
+
+ public function testRename() {
+ $textSize = strlen("dummy file data\n");
+ $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
+ $rootCachedData = $this->cache->get('');
+ $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
+
+ $this->assertTrue($this->cache->inCache('foo.txt'));
+ $fooCachedData = $this->cache->get('foo.txt');
+ $this->assertFalse($this->cache->inCache('bar.txt'));
+ Filesystem::rename('foo.txt', 'bar.txt');
+ $this->assertFalse($this->cache->inCache('foo.txt'));
+ $this->assertTrue($this->cache->inCache('bar.txt'));
+ $cachedData = $this->cache->get('bar.txt');
+ $this->assertNotEquals($fooCachedData['etag'], $cachedData['etag']);
+ $mtime = $cachedData['mtime'];
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(3 * $textSize + $imageSize, $cachedData['size']);
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertEquals($mtime, $cachedData['mtime']);
+ }
+}
diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php
new file mode 100644
index 00000000000..e8a1689cab0
--- /dev/null
+++ b/tests/lib/files/cache/watcher.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files\Cache;
+
+class Watcher extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @var \OC\Files\Storage\Storage[] $storages;
+ */
+ private $storages = array();
+
+ public function setUp() {
+ \OC\Files\Filesystem::clearMounts();
+ }
+
+ public function tearDown() {
+ foreach ($this->storages as $storage) {
+ $cache = $storage->getCache();
+ $ids = $cache->getAll();
+ $permissionsCache = $storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
+ $cache->clear();
+ }
+ }
+
+ function testWatcher() {
+ $storage = $this->getTestStorage();
+ $cache = $storage->getCache();
+ $updater = $storage->getWatcher();
+
+ //set the mtime to the past so it can detect an mtime change
+ $cache->put('', array('mtime' => 10));
+
+ $this->assertTrue($cache->inCache('folder/bar.txt'));
+ $this->assertTrue($cache->inCache('folder/bar2.txt'));
+
+ $this->assertFalse($cache->inCache('bar.test'));
+ $storage->file_put_contents('bar.test', 'foo');
+ $updater->checkUpdate('');
+ $this->assertTrue($cache->inCache('bar.test'));
+ $cachedData = $cache->get('bar.test');
+ $this->assertEquals(3, $cachedData['size']);
+
+ $cache->put('bar.test', array('mtime' => 10));
+ $storage->file_put_contents('bar.test', 'test data');
+
+ $updater->checkUpdate('bar.test');
+ $cachedData = $cache->get('bar.test');
+ $this->assertEquals(9, $cachedData['size']);
+
+ $cache->put('folder', array('mtime' => 10));
+
+ $storage->unlink('folder/bar2.txt');
+ $updater->checkUpdate('folder');
+
+ $this->assertTrue($cache->inCache('folder/bar.txt'));
+ $this->assertFalse($cache->inCache('folder/bar2.txt'));
+ }
+
+ public function testFileToFolder() {
+ $storage = $this->getTestStorage();
+ $cache = $storage->getCache();
+ $updater = $storage->getWatcher();
+
+ //set the mtime to the past so it can detect an mtime change
+ $cache->put('', array('mtime' => 10));
+
+ $storage->unlink('foo.txt');
+ $storage->rename('folder', 'foo.txt');
+ $updater->checkUpdate('');
+
+ $entry = $cache->get('foo.txt');
+ $this->assertEquals(-1, $entry['size']);
+ $this->assertEquals('httpd/unix-directory', $entry['mimetype']);
+ $this->assertFalse($cache->inCache('folder'));
+ $this->assertFalse($cache->inCache('folder/bar.txt'));
+
+ $storage = $this->getTestStorage();
+ $cache = $storage->getCache();
+ $updater = $storage->getWatcher();
+
+ //set the mtime to the past so it can detect an mtime change
+ $cache->put('foo.txt', array('mtime' => 10));
+
+ $storage->unlink('foo.txt');
+ $storage->rename('folder', 'foo.txt');
+ $updater->checkUpdate('foo.txt');
+
+ $entry = $cache->get('foo.txt');
+ $this->assertEquals('httpd/unix-directory', $entry['mimetype']);
+ $this->assertTrue($cache->inCache('foo.txt/bar.txt'));
+ }
+
+ /**
+ * @param bool $scan
+ * @return \OC\Files\Storage\Storage
+ */
+ private function getTestStorage($scan = true) {
+ $storage = new \OC\Files\Storage\Temporary(array());
+ $textData = "dummy file data\n";
+ $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $storage->mkdir('folder');
+ $storage->file_put_contents('foo.txt', $textData);
+ $storage->file_put_contents('foo.png', $imgData);
+ $storage->file_put_contents('folder/bar.txt', $textData);
+ $storage->file_put_contents('folder/bar2.txt', $textData);
+
+ if ($scan) {
+ $scanner = $storage->getScanner();
+ $scanner->scan('');
+ }
+ $this->storages[] = $storage;
+ return $storage;
+ }
+}
diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php
new file mode 100644
index 00000000000..6ce45e6178a
--- /dev/null
+++ b/tests/lib/files/filesystem.php
@@ -0,0 +1,110 @@
+<?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/>.
+ *
+ */
+
+namespace Test\Files;
+
+class Filesystem extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var array tmpDirs
+ */
+ private $tmpDirs=array();
+
+ /**
+ * @return array
+ */
+ private function getStorageData() {
+ $dir = \OC_Helper::tmpFolder();
+ $this->tmpDirs[] = $dir;
+ return array('datadir' => $dir);
+ }
+
+ public function tearDown() {
+ foreach ($this->tmpDirs as $dir) {
+ \OC_Helper::rmdirr($dir);
+ }
+ }
+
+ public function setUp() {
+ \OC\Files\Filesystem::clearMounts();
+ }
+
+ public function testMount() {
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Local',self::getStorageData(),'/');
+ $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/'));
+ $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/some/folder'));
+ list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/');
+ $this->assertEquals('',$internalPath);
+ list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/some/folder');
+ $this->assertEquals('some/folder',$internalPath);
+
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Local',self::getStorageData(),'/some');
+ $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/'));
+ $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some/folder'));
+ $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some/'));
+ $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some'));
+ list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/some/folder');
+ $this->assertEquals('folder',$internalPath);
+ }
+
+ public function testNormalize() {
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('/path/'));
+ $this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('/path/', false));
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('path'));
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\path'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo//bar/'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo////bar'));
+ if (class_exists('Normalizer')) {
+ $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88"));
+ }
+ }
+
+ public function testHooks() {
+ if(\OC\Files\Filesystem::getView()){
+ $user = \OC_User::getUser();
+ }else{
+ $user=uniqid();
+ \OC\Files\Filesystem::init($user, '/'.$user.'/files');
+ }
+ \OC_Hook::clear('OC_Filesystem');
+ \OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHook');
+
+ \OC\Files\Filesystem::mount('OC\Files\Storage\Temporary', array(), '/');
+
+ $rootView=new \OC\Files\View('');
+ $rootView->mkdir('/'.$user);
+ $rootView->mkdir('/'.$user.'/files');
+
+// \OC\Files\Filesystem::file_put_contents('/foo', 'foo');
+ \OC\Files\Filesystem::mkdir('/bar');
+// \OC\Files\Filesystem::file_put_contents('/bar//foo', 'foo');
+
+ $tmpFile = \OC_Helper::tmpFile();
+ file_put_contents($tmpFile, 'foo');
+ $fh = fopen($tmpFile, 'r');
+// \OC\Files\Filesystem::file_put_contents('/bar//foo', $fh);
+ }
+
+ public function dummyHook($arguments) {
+ $path = $arguments['path'];
+ $this->assertEquals($path, \OC\Files\Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized
+ }
+}
diff --git a/tests/lib/files/mount.php b/tests/lib/files/mount.php
new file mode 100644
index 00000000000..f223f0f6c53
--- /dev/null
+++ b/tests/lib/files/mount.php
@@ -0,0 +1,41 @@
+<?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.
+ */
+
+namespace Test\Files;
+
+use \OC\Files\Storage\Temporary;
+
+class Mount extends \PHPUnit_Framework_TestCase {
+ public function setup() {
+ \OC_Util::setupFS();
+ \OC\Files\Mount::clear();
+ }
+
+ public function testFind() {
+ $this->assertNull(\OC\Files\Mount::find('/'));
+
+ $rootMount = new \OC\Files\Mount(new Temporary(array()), '/');
+ $this->assertEquals($rootMount, \OC\Files\Mount::find('/'));
+ $this->assertEquals($rootMount, \OC\Files\Mount::find('/foo/bar'));
+
+ $storage = new Temporary(array());
+ $mount = new \OC\Files\Mount($storage, '/foo');
+ $this->assertEquals($rootMount, \OC\Files\Mount::find('/'));
+ $this->assertEquals($mount, \OC\Files\Mount::find('/foo/bar'));
+
+ $this->assertEquals(1, count(\OC\Files\Mount::findIn('/')));
+ new \OC\Files\Mount(new Temporary(array()), '/bar');
+ $this->assertEquals(2, count(\OC\Files\Mount::findIn('/')));
+
+ $id = $mount->getStorageId();
+ $this->assertEquals(array($mount), \OC\Files\Mount::findById($id));
+
+ $mount2 = new \OC\Files\Mount($storage, '/foo/bar');
+ $this->assertEquals(array($mount, $mount2), \OC\Files\Mount::findById($id));
+ }
+}
diff --git a/tests/lib/filestorage/commontest.php b/tests/lib/files/storage/commontest.php
index 89e83589e5d..ce53c884f32 100644
--- a/tests/lib/filestorage/commontest.php
+++ b/tests/lib/files/storage/commontest.php
@@ -20,22 +20,19 @@
*
*/
-class Test_Filestorage_CommonTest extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class CommonTest extends Storage {
/**
* @var string tmpDir
*/
private $tmpDir;
public function setUp() {
- $this->tmpDir=get_temp_dir().'/filestoragecommon';
- if(!file_exists($this->tmpDir)) {
- mkdir($this->tmpDir);
- }
- $this->instance=new OC_Filestorage_CommonTest(array('datadir'=>$this->tmpDir));
+ $this->tmpDir=\OC_Helper::tmpFolder();
+ $this->instance=new \OC\Files\Storage\CommonTest(array('datadir'=>$this->tmpDir));
}
public function tearDown() {
- OC_Helper::rmdirr($this->tmpDir);
+ \OC_Helper::rmdirr($this->tmpDir);
}
}
-
-?> \ No newline at end of file
diff --git a/tests/lib/filestorage/local.php b/tests/lib/files/storage/local.php
index f68fb69b97f..1aad138aa33 100644
--- a/tests/lib/filestorage/local.php
+++ b/tests/lib/files/storage/local.php
@@ -20,19 +20,20 @@
*
*/
-class Test_Filestorage_Local extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class Local extends Storage {
/**
* @var string tmpDir
*/
private $tmpDir;
public function setUp() {
- $this->tmpDir=OC_Helper::tmpFolder();
- $this->instance=new OC_Filestorage_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);
+ \OC_Helper::rmdirr($this->tmpDir);
}
}
-?> \ No newline at end of file
diff --git a/tests/lib/filestorage.php b/tests/lib/files/storage/storage.php
index e82a6f54e3d..c74a16f509f 100644
--- a/tests/lib/filestorage.php
+++ b/tests/lib/files/storage/storage.php
@@ -20,9 +20,11 @@
*
*/
-abstract class Test_FileStorage extends UnitTestCase {
+namespace Test\Files\Storage;
+
+abstract class Storage extends \PHPUnit_Framework_TestCase {
/**
- * @var OC_Filestorage instance
+ * @var \OC\Files\Storage\Storage instance
*/
protected $instance;
@@ -34,9 +36,9 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertTrue($this->instance->isReadable('/'), 'Root folder is not readable');
$this->assertTrue($this->instance->is_dir('/'), 'Root folder is not a directory');
$this->assertFalse($this->instance->is_file('/'), 'Root folder is a file');
- $this->assertEqual('dir', $this->instance->filetype('/'));
+ $this->assertEquals('dir', $this->instance->filetype('/'));
- //without this, any further testing would be useless, not an acutal requirement for filestorage though
+ //without this, any further testing would be useless, not an actual requirement for filestorage though
$this->assertTrue($this->instance->isUpdatable('/'), 'Root folder is not writable');
}
@@ -48,8 +50,8 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertTrue($this->instance->file_exists('/folder'));
$this->assertTrue($this->instance->is_dir('/folder'));
$this->assertFalse($this->instance->is_file('/folder'));
- $this->assertEqual('dir', $this->instance->filetype('/folder'));
- $this->assertEqual(0, $this->instance->filesize('/folder'));
+ $this->assertEquals('dir', $this->instance->filetype('/folder'));
+ $this->assertEquals(0, $this->instance->filesize('/folder'));
$this->assertTrue($this->instance->isReadable('/folder'));
$this->assertTrue($this->instance->isUpdatable('/folder'));
@@ -60,7 +62,7 @@ abstract class Test_FileStorage extends UnitTestCase {
$content[] = $file;
}
}
- $this->assertEqual(array('folder'), $content);
+ $this->assertEquals(array('folder'), $content);
$this->assertFalse($this->instance->mkdir('/folder')); //cant create existing folders
$this->assertTrue($this->instance->rmdir('/folder'));
@@ -76,65 +78,65 @@ abstract class Test_FileStorage extends UnitTestCase {
$content[] = $file;
}
}
- $this->assertEqual(array(), $content);
+ $this->assertEquals(array(), $content);
}
/**
* test the various uses of file_get_contents and file_put_contents
*/
public function testGetPutContents() {
- $sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$sourceText = file_get_contents($sourceFile);
//fill a file with string data
$this->instance->file_put_contents('/lorem.txt', $sourceText);
$this->assertFalse($this->instance->is_dir('/lorem.txt'));
- $this->assertEqual($sourceText, $this->instance->file_get_contents('/lorem.txt'), 'data returned from file_get_contents is not equal to the source data');
+ $this->assertEquals($sourceText, $this->instance->file_get_contents('/lorem.txt'), 'data returned from file_get_contents is not equal to the source data');
//empty the file
$this->instance->file_put_contents('/lorem.txt', '');
- $this->assertEqual('', $this->instance->file_get_contents('/lorem.txt'), 'file not emptied');
+ $this->assertEquals('', $this->instance->file_get_contents('/lorem.txt'), 'file not emptied');
}
/**
* test various known mimetypes
*/
public function testMimeType() {
- $this->assertEqual('httpd/unix-directory', $this->instance->getMimeType('/'));
- $this->assertEqual(false, $this->instance->getMimeType('/non/existing/file'));
+ $this->assertEquals('httpd/unix-directory', $this->instance->getMimeType('/'));
+ $this->assertEquals(false, $this->instance->getMimeType('/non/existing/file'));
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile, 'r'));
- $this->assertEqual('text/plain', $this->instance->getMimeType('/lorem.txt'));
+ $this->assertEquals('text/plain', $this->instance->getMimeType('/lorem.txt'));
- $pngFile = OC::$SERVERROOT . '/tests/data/logo-wide.png';
+ $pngFile = \OC::$SERVERROOT . '/tests/data/logo-wide.png';
$this->instance->file_put_contents('/logo-wide.png', file_get_contents($pngFile, 'r'));
- $this->assertEqual('image/png', $this->instance->getMimeType('/logo-wide.png'));
+ $this->assertEquals('image/png', $this->instance->getMimeType('/logo-wide.png'));
- $svgFile = OC::$SERVERROOT . '/tests/data/logo-wide.svg';
+ $svgFile = \OC::$SERVERROOT . '/tests/data/logo-wide.svg';
$this->instance->file_put_contents('/logo-wide.svg', file_get_contents($svgFile, 'r'));
- $this->assertEqual('image/svg+xml', $this->instance->getMimeType('/logo-wide.svg'));
+ $this->assertEquals('image/svg+xml', $this->instance->getMimeType('/logo-wide.svg'));
}
public function testCopyAndMove() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/source.txt', file_get_contents($textFile));
$this->instance->copy('/source.txt', '/target.txt');
$this->assertTrue($this->instance->file_exists('/target.txt'));
- $this->assertEqual($this->instance->file_get_contents('/source.txt'), $this->instance->file_get_contents('/target.txt'));
+ $this->assertEquals($this->instance->file_get_contents('/source.txt'), $this->instance->file_get_contents('/target.txt'));
$this->instance->rename('/source.txt', '/target2.txt');
$this->assertTrue($this->instance->file_exists('/target2.txt'));
$this->assertFalse($this->instance->file_exists('/source.txt'));
- $this->assertEqual(file_get_contents($textFile), $this->instance->file_get_contents('/target.txt'));
+ $this->assertEquals(file_get_contents($textFile), $this->instance->file_get_contents('/target.txt'));
}
public function testLocal() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
$localFile = $this->instance->getLocalFile('/lorem.txt');
$this->assertTrue(file_exists($localFile));
- $this->assertEqual(file_get_contents($localFile), file_get_contents($textFile));
+ $this->assertEquals(file_get_contents($localFile), file_get_contents($textFile));
$this->instance->mkdir('/folder');
$this->instance->file_put_contents('/folder/lorem.txt', file_get_contents($textFile));
@@ -144,14 +146,23 @@ abstract class Test_FileStorage extends UnitTestCase {
$localFolder = $this->instance->getLocalFolder('/folder');
$this->assertTrue(is_dir($localFolder));
- $this->assertTrue(file_exists($localFolder . '/lorem.txt'));
- $this->assertEqual(file_get_contents($localFolder . '/lorem.txt'), file_get_contents($textFile));
- $this->assertEqual(file_get_contents($localFolder . '/bar.txt'), 'asd');
- $this->assertEqual(file_get_contents($localFolder . '/recursive/file.txt'), 'foo');
+
+ // test below require to use instance->getLocalFile because the physical storage might be different
+ $localFile = $this->instance->getLocalFile('/folder/lorem.txt');
+ $this->assertTrue(file_exists($localFile));
+ $this->assertEquals(file_get_contents($localFile), file_get_contents($textFile));
+
+ $localFile = $this->instance->getLocalFile('/folder/bar.txt');
+ $this->assertTrue(file_exists($localFile));
+ $this->assertEquals(file_get_contents($localFile), 'asd');
+
+ $localFile = $this->instance->getLocalFile('/folder/recursive/file.txt');
+ $this->assertTrue(file_exists($localFile));
+ $this->assertEquals(file_get_contents($localFile), 'foo');
}
public function testStat() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$ctimeStart = time();
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
$this->assertTrue($this->instance->isReadable('/lorem.txt'));
@@ -162,12 +173,12 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertTrue(($ctimeStart - 1) <= $mTime);
$this->assertTrue($mTime <= ($ctimeEnd + 1));
- $this->assertEqual(filesize($textFile), $this->instance->filesize('/lorem.txt'));
+ $this->assertEquals(filesize($textFile), $this->instance->filesize('/lorem.txt'));
$stat = $this->instance->stat('/lorem.txt');
//only size and mtime are requered in the result
- $this->assertEqual($stat['size'], $this->instance->filesize('/lorem.txt'));
- $this->assertEqual($stat['mtime'], $mTime);
+ $this->assertEquals($stat['size'], $this->instance->filesize('/lorem.txt'));
+ $this->assertEquals($stat['mtime'], $mTime);
$mtimeStart = time();
$supportsTouch = $this->instance->touch('/lorem.txt');
@@ -181,7 +192,7 @@ abstract class Test_FileStorage extends UnitTestCase {
if ($this->instance->touch('/lorem.txt', 100) !== false) {
$mTime = $this->instance->filemtime('/lorem.txt');
- $this->assertEqual($mTime, 100);
+ $this->assertEquals($mTime, 100);
}
}
@@ -200,20 +211,20 @@ abstract class Test_FileStorage extends UnitTestCase {
}
public function testSearch() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile, 'r'));
- $pngFile = OC::$SERVERROOT . '/tests/data/logo-wide.png';
+ $pngFile = \OC::$SERVERROOT . '/tests/data/logo-wide.png';
$this->instance->file_put_contents('/logo-wide.png', file_get_contents($pngFile, 'r'));
- $svgFile = OC::$SERVERROOT . '/tests/data/logo-wide.svg';
+ $svgFile = \OC::$SERVERROOT . '/tests/data/logo-wide.svg';
$this->instance->file_put_contents('/logo-wide.svg', file_get_contents($svgFile, 'r'));
$result = $this->instance->search('logo');
- $this->assertEqual(2, count($result));
+ $this->assertEquals(2, count($result));
$this->assertContains('/logo-wide.svg', $result);
$this->assertContains('/logo-wide.png', $result);
}
public function testFOpen() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$fh = @$this->instance->fopen('foo', 'r');
if ($fh) {
@@ -229,6 +240,6 @@ abstract class Test_FileStorage extends UnitTestCase {
$fh = $this->instance->fopen('foo', 'r');
$content = stream_get_contents($fh);
- $this->assertEqual(file_get_contents($textFile), $content);
+ $this->assertEquals(file_get_contents($textFile), $content);
}
}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
new file mode 100644
index 00000000000..a064e44f3ef
--- /dev/null
+++ b/tests/lib/files/view.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * Copyright (c) 2012 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\Files;
+
+class View extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Storage[] $storages;
+ */
+ private $storages = array();
+
+ public function setUp() {
+ \OC\Files\Filesystem::clearMounts();
+ }
+
+ public function tearDown() {
+ foreach ($this->storages as $storage) {
+ $cache = $storage->getCache();
+ $ids = $cache->getAll();
+ $permissionsCache = $storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
+ $cache->clear();
+ }
+ }
+
+ public function testCacheAPI() {
+ $storage1 = $this->getTestStorage();
+ $storage2 = $this->getTestStorage();
+ $storage3 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+ \OC\Files\Filesystem::mount($storage3, array(), '/folder/anotherstorage');
+ $textSize = strlen("dummy file data\n");
+ $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
+ $storageSize = $textSize * 2 + $imageSize;
+
+ $rootView = new \OC\Files\View('');
+
+ $cachedData = $rootView->getFileInfo('/foo.txt');
+ $this->assertEquals($textSize, $cachedData['size']);
+ $this->assertEquals('text/plain', $cachedData['mimetype']);
+ $this->assertNotEquals(-1, $cachedData['permissions']);
+
+ $cachedData = $rootView->getFileInfo('/');
+ $this->assertEquals($storageSize * 3, $cachedData['size']);
+ $this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
+
+ $cachedData = $rootView->getFileInfo('/folder');
+ $this->assertEquals($storageSize + $textSize, $cachedData['size']);
+ $this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
+
+ $folderData = $rootView->getDirectoryContent('/');
+ /**
+ * expected entries:
+ * folder
+ * foo.png
+ * foo.txt
+ * substorage
+ */
+ $this->assertEquals(4, count($folderData));
+ $this->assertEquals('folder', $folderData[0]['name']);
+ $this->assertEquals('foo.png', $folderData[1]['name']);
+ $this->assertEquals('foo.txt', $folderData[2]['name']);
+ $this->assertEquals('substorage', $folderData[3]['name']);
+
+ $this->assertEquals($storageSize + $textSize, $folderData[0]['size']);
+ $this->assertEquals($imageSize, $folderData[1]['size']);
+ $this->assertEquals($textSize, $folderData[2]['size']);
+ $this->assertEquals($storageSize, $folderData[3]['size']);
+
+ $folderData = $rootView->getDirectoryContent('/substorage');
+ /**
+ * expected entries:
+ * folder
+ * foo.png
+ * foo.txt
+ */
+ $this->assertEquals(3, count($folderData));
+ $this->assertEquals('folder', $folderData[0]['name']);
+ $this->assertEquals('foo.png', $folderData[1]['name']);
+ $this->assertEquals('foo.txt', $folderData[2]['name']);
+
+ $folderView = new \OC\Files\View('/folder');
+ $this->assertEquals($rootView->getFileInfo('/folder'), $folderView->getFileInfo('/'));
+
+ $cachedData = $rootView->getFileInfo('/foo.txt');
+ $this->assertFalse($cachedData['encrypted']);
+ $id = $rootView->putFileInfo('/foo.txt', array('encrypted' => true));
+ $cachedData = $rootView->getFileInfo('/foo.txt');
+ $this->assertTrue($cachedData['encrypted']);
+ $this->assertEquals($cachedData['fileid'], $id);
+
+ $this->assertFalse($rootView->getFileInfo('/non/existing'));
+ $this->assertEquals(array(), $rootView->getDirectoryContent('/non/existing'));
+ }
+
+ function testGetPath() {
+ $storage1 = $this->getTestStorage();
+ $storage2 = $this->getTestStorage();
+ $storage3 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+ \OC\Files\Filesystem::mount($storage3, array(), '/folder/anotherstorage');
+
+ $rootView = new \OC\Files\View('');
+
+ $cachedData = $rootView->getFileInfo('/foo.txt');
+ $id1 = $cachedData['fileid'];
+ $this->assertEquals('/foo.txt', $rootView->getPath($id1));
+
+ $cachedData = $rootView->getFileInfo('/substorage/foo.txt');
+ $id2 = $cachedData['fileid'];
+ $this->assertEquals('/substorage/foo.txt', $rootView->getPath($id2));
+
+ $folderView = new \OC\Files\View('/substorage');
+ $this->assertEquals('/foo.txt', $folderView->getPath($id2));
+ $this->assertNull($folderView->getPath($id1));
+ }
+
+ function testMountPointOverwrite() {
+ $storage1 = $this->getTestStorage(false);
+ $storage2 = $this->getTestStorage();
+ $storage1->mkdir('substorage');
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+
+ $rootView = new \OC\Files\View('');
+ $folderContent = $rootView->getDirectoryContent('/');
+ $this->assertEquals(4, count($folderContent));
+ }
+
+ function testCacheIncompleteFolder() {
+ $storage1 = $this->getTestStorage(false);
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ $rootView = new \OC\Files\View('');
+
+ $entries = $rootView->getDirectoryContent('/');
+ $this->assertEquals(3, count($entries));
+
+ // /folder will already be in the cache but not scanned
+ $entries = $rootView->getDirectoryContent('/folder');
+ $this->assertEquals(1, count($entries));
+ }
+
+ public function testAutoScan() {
+ $storage1 = $this->getTestStorage(false);
+ $storage2 = $this->getTestStorage(false);
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+ $textSize = strlen("dummy file data\n");
+
+ $rootView = new \OC\Files\View('');
+
+ $cachedData = $rootView->getFileInfo('/');
+ $this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
+ $this->assertEquals(-1, $cachedData['size']);
+
+ $folderData = $rootView->getDirectoryContent('/substorage/folder');
+ $this->assertEquals('text/plain', $folderData[0]['mimetype']);
+ $this->assertEquals($textSize, $folderData[0]['size']);
+ }
+
+ function testSearch() {
+ $storage1 = $this->getTestStorage();
+ $storage2 = $this->getTestStorage();
+ $storage3 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+ \OC\Files\Filesystem::mount($storage3, array(), '/folder/anotherstorage');
+
+ $rootView = new \OC\Files\View('');
+
+ $results = $rootView->search('foo');
+ $this->assertEquals(6, count($results));
+ $paths = array();
+ foreach ($results as $result) {
+ $this->assertEquals($result['path'], \OC\Files\Filesystem::normalizePath($result['path']));
+ $paths[] = $result['path'];
+ }
+ $this->assertContains('/foo.txt', $paths);
+ $this->assertContains('/foo.png', $paths);
+ $this->assertContains('/substorage/foo.txt', $paths);
+ $this->assertContains('/substorage/foo.png', $paths);
+ $this->assertContains('/folder/anotherstorage/foo.txt', $paths);
+ $this->assertContains('/folder/anotherstorage/foo.png', $paths);
+
+ $folderView = new \OC\Files\View('/folder');
+ $results = $folderView->search('bar');
+ $this->assertEquals(2, count($results));
+ $paths = array();
+ foreach ($results as $result) {
+ $paths[] = $result['path'];
+ }
+ $this->assertContains('/anotherstorage/folder/bar.txt', $paths);
+ $this->assertContains('/bar.txt', $paths);
+
+ $results = $folderView->search('foo');
+ $this->assertEquals(2, count($results));
+ $paths = array();
+ foreach ($results as $result) {
+ $paths[] = $result['path'];
+ }
+ $this->assertContains('/anotherstorage/foo.txt', $paths);
+ $this->assertContains('/anotherstorage/foo.png', $paths);
+
+ $this->assertEquals(6, count($rootView->searchByMime('text')));
+ $this->assertEquals(3, count($folderView->searchByMime('text')));
+ }
+
+ function testWatcher() {
+ $storage1 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+
+ $rootView = new \OC\Files\View('');
+
+ $cachedData = $rootView->getFileInfo('foo.txt');
+ $this->assertEquals(16, $cachedData['size']);
+
+ $rootView->putFileInfo('foo.txt', array('mtime' => 10));
+ $storage1->file_put_contents('foo.txt', 'foo');
+ clearstatcache();
+
+ $cachedData = $rootView->getFileInfo('foo.txt');
+ $this->assertEquals(3, $cachedData['size']);
+ }
+
+ /**
+ * @param bool $scan
+ * @return \OC\Files\Storage\Storage
+ */
+ private function getTestStorage($scan = true) {
+ $storage = new \OC\Files\Storage\Temporary(array());
+ $textData = "dummy file data\n";
+ $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $storage->mkdir('folder');
+ $storage->file_put_contents('foo.txt', $textData);
+ $storage->file_put_contents('foo.png', $imgData);
+ $storage->file_put_contents('folder/bar.txt', $textData);
+
+ if ($scan) {
+ $scanner = $storage->getScanner();
+ $scanner->scan('');
+ }
+ $this->storages[] = $storage;
+ return $storage;
+ }
+}
diff --git a/tests/lib/filesystem.php b/tests/lib/filesystem.php
deleted file mode 100644
index 5cced4946d9..00000000000
--- a/tests/lib/filesystem.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?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/>.
- *
- */
-
-class Test_Filesystem extends UnitTestCase {
- /**
- * @var array tmpDirs
- */
- private $tmpDirs = array();
-
- /**
- * @return array
- */
- private function getStorageData() {
- $dir = OC_Helper::tmpFolder();
- $this->tmpDirs[] = $dir;
- return array('datadir' => $dir);
- }
-
- public function tearDown() {
- foreach ($this->tmpDirs as $dir) {
- OC_Helper::rmdirr($dir);
- }
- }
-
- public function setUp() {
- OC_Filesystem::clearMounts();
- }
-
- public function testMount() {
- OC_Filesystem::mount('OC_Filestorage_Local', self::getStorageData(), '/');
- $this->assertEqual('/', OC_Filesystem::getMountPoint('/'));
- $this->assertEqual('/', OC_Filesystem::getMountPoint('/some/folder'));
- $this->assertEqual('', OC_Filesystem::getInternalPath('/'));
- $this->assertEqual('some/folder', OC_Filesystem::getInternalPath('/some/folder'));
-
- OC_Filesystem::mount('OC_Filestorage_Local', self::getStorageData(), '/some');
- $this->assertEqual('/', OC_Filesystem::getMountPoint('/'));
- $this->assertEqual('/some/', OC_Filesystem::getMountPoint('/some/folder'));
- $this->assertEqual('/some/', OC_Filesystem::getMountPoint('/some/'));
- $this->assertEqual('/', OC_Filesystem::getMountPoint('/some'));
- $this->assertEqual('folder', OC_Filesystem::getInternalPath('/some/folder'));
- }
-
- public function testNormalize() {
- $this->assertEqual('/path', OC_Filesystem::normalizePath('/path/'));
- $this->assertEqual('/path/', OC_Filesystem::normalizePath('/path/', false));
- $this->assertEqual('/path', OC_Filesystem::normalizePath('path'));
- $this->assertEqual('/path', OC_Filesystem::normalizePath('\path'));
- $this->assertEqual('/foo/bar', OC_Filesystem::normalizePath('/foo//bar/'));
- $this->assertEqual('/foo/bar', OC_Filesystem::normalizePath('/foo////bar'));
- if (class_exists('Normalizer')) {
- $this->assertEqual("/foo/bar\xC3\xBC", OC_Filesystem::normalizePath("/foo/baru\xCC\x88"));
- }
- }
-
- public function testBlacklist() {
- OC_Hook::clear('OC_Filesystem');
- OC::registerFilesystemHooks();
-
- $run = true;
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_write,
- array(
- OC_Filesystem::signal_param_path => '/test/.htaccess',
- OC_Filesystem::signal_param_run => &$run
- )
- );
- $this->assertFalse($run);
-
- if (OC_Filesystem::getView()) {
- $user = OC_User::getUser();
- } else {
- $user = uniqid();
- OC_Filesystem::init('/' . $user . '/files');
- }
-
- OC_Filesystem::mount('OC_Filestorage_Temporary', array(), '/');
-
- $rootView = new OC_FilesystemView('');
- $rootView->mkdir('/' . $user);
- $rootView->mkdir('/' . $user . '/files');
-
- $this->assertFalse($rootView->file_put_contents('/.htaccess', 'foo'));
- $this->assertFalse(OC_Filesystem::file_put_contents('/.htaccess', 'foo'));
- $fh = fopen(__FILE__, 'r');
- $this->assertFalse(OC_Filesystem::file_put_contents('/.htaccess', $fh));
- }
-
- public function testHooks() {
- if (OC_Filesystem::getView()) {
- $user = OC_User::getUser();
- } else {
- $user = uniqid();
- OC_Filesystem::init('/' . $user . '/files');
- }
- OC_Hook::clear('OC_Filesystem');
- OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHook');
-
- OC_Filesystem::mount('OC_Filestorage_Temporary', array(), '/');
-
- $rootView = new OC_FilesystemView('');
- $rootView->mkdir('/' . $user);
- $rootView->mkdir('/' . $user . '/files');
-
- OC_Filesystem::file_put_contents('/foo', 'foo');
- OC_Filesystem::mkdir('/bar');
- OC_Filesystem::file_put_contents('/bar//foo', 'foo');
-
- $tmpFile = OC_Helper::tmpFile();
- file_put_contents($tmpFile, 'foo');
- $fh = fopen($tmpFile, 'r');
- OC_Filesystem::file_put_contents('/bar//foo', $fh);
- }
-
- public function dummyHook($arguments) {
- $path = $arguments['path'];
- $this->assertEqual($path, OC_Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized
- }
-}
diff --git a/tests/lib/geo.php b/tests/lib/geo.php
index d4951ee79e7..82e61608687 100644
--- a/tests/lib/geo.php
+++ b/tests/lib/geo.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Geo extends UnitTestCase {
+class Test_Geo extends PHPUnit_Framework_TestCase {
function testTimezone() {
$result = OC_Geo::timezone(3, 3);
$expected = 'Africa/Porto-Novo';
diff --git a/tests/lib/group.php b/tests/lib/group.php
index 28264b0f168..9128bd7ddce 100644
--- a/tests/lib/group.php
+++ b/tests/lib/group.php
@@ -22,7 +22,7 @@
*
*/
-class Test_Group extends UnitTestCase {
+class Test_Group extends PHPUnit_Framework_TestCase {
function setUp() {
OC_Group::clearBackends();
}
@@ -43,24 +43,24 @@ class Test_Group extends UnitTestCase {
$this->assertFalse(OC_Group::inGroup($user1, $group2));
$this->assertFalse(OC_Group::inGroup($user2, $group2));
- $this->assertTrue(OC_Group::addToGroup($user1, $group1));
+ $this->assertTrue((bool)OC_Group::addToGroup($user1, $group1));
$this->assertTrue(OC_Group::inGroup($user1, $group1));
$this->assertFalse(OC_Group::inGroup($user2, $group1));
$this->assertFalse(OC_Group::inGroup($user1, $group2));
$this->assertFalse(OC_Group::inGroup($user2, $group2));
- $this->assertFalse(OC_Group::addToGroup($user1, $group1));
+ $this->assertFalse((bool)OC_Group::addToGroup($user1, $group1));
- $this->assertEqual(array($user1), OC_Group::usersInGroup($group1));
- $this->assertEqual(array(), OC_Group::usersInGroup($group2));
+ $this->assertEquals(array($user1), OC_Group::usersInGroup($group1));
+ $this->assertEquals(array(), OC_Group::usersInGroup($group2));
- $this->assertEqual(array($group1), OC_Group::getUserGroups($user1));
- $this->assertEqual(array(), OC_Group::getUserGroups($user2));
+ $this->assertEquals(array($group1), OC_Group::getUserGroups($user1));
+ $this->assertEquals(array(), OC_Group::getUserGroups($user2));
OC_Group::deleteGroup($group1);
- $this->assertEqual(array(), OC_Group::getUserGroups($user1));
- $this->assertEqual(array(), OC_Group::usersInGroup($group1));
+ $this->assertEquals(array(), OC_Group::getUserGroups($user1));
+ $this->assertEquals(array(), OC_Group::usersInGroup($group1));
$this->assertFalse(OC_Group::inGroup($user1, $group1));
}
@@ -69,7 +69,7 @@ class Test_Group extends UnitTestCase {
OC_Group::useBackend(new OC_Group_Dummy());
$emptyGroup = null;
- $this->assertEqual(false, OC_Group::createGroup($emptyGroup));
+ $this->assertEquals(false, OC_Group::createGroup($emptyGroup));
}
@@ -80,8 +80,8 @@ class Test_Group extends UnitTestCase {
$groupCopy = $group;
- $this->assertEqual(false, OC_Group::createGroup($groupCopy));
- $this->assertEqual(array($group), OC_Group::getGroups());
+ $this->assertEquals(false, OC_Group::createGroup($groupCopy));
+ $this->assertEquals(array($group), OC_Group::getGroups());
}
@@ -90,8 +90,8 @@ class Test_Group extends UnitTestCase {
$adminGroup = 'admin';
OC_Group::createGroup($adminGroup);
- $this->assertEqual(false, OC_Group::deleteGroup($adminGroup));
- $this->assertEqual(array($adminGroup), OC_Group::getGroups());
+ $this->assertEquals(false, OC_Group::deleteGroup($adminGroup));
+ $this->assertEquals(array($adminGroup), OC_Group::getGroups());
}
@@ -100,8 +100,8 @@ class Test_Group extends UnitTestCase {
$groupNonExistent = 'notExistent';
$user = uniqid();
- $this->assertEqual(false, OC_Group::addToGroup($user, $groupNonExistent));
- $this->assertEqual(array(), OC_Group::getGroups());
+ $this->assertEquals(false, OC_Group::addToGroup($user, $groupNonExistent));
+ $this->assertEquals(array(), OC_Group::getGroups());
}
@@ -122,7 +122,7 @@ class Test_Group extends UnitTestCase {
OC_Group::addToGroup($user3, $group1);
OC_Group::addToGroup($user3, $group2);
- $this->assertEqual(array($user1, $user2, $user3),
+ $this->assertEquals(array($user1, $user2, $user3),
OC_Group::usersInGroups(array($group1, $group2, $group3)));
// FIXME: needs more parameter variation
@@ -141,16 +141,16 @@ class Test_Group extends UnitTestCase {
OC_Group::createGroup($group1);
//groups should be added to the first registered backend
- $this->assertEqual(array($group1), $backend1->getGroups());
- $this->assertEqual(array(), $backend2->getGroups());
+ $this->assertEquals(array($group1), $backend1->getGroups());
+ $this->assertEquals(array(), $backend2->getGroups());
- $this->assertEqual(array($group1), OC_Group::getGroups());
+ $this->assertEquals(array($group1), OC_Group::getGroups());
$this->assertTrue(OC_Group::groupExists($group1));
$this->assertFalse(OC_Group::groupExists($group2));
$backend1->createGroup($group2);
- $this->assertEqual(array($group1, $group2), OC_Group::getGroups());
+ $this->assertEquals(array($group1, $group2), OC_Group::getGroups());
$this->assertTrue(OC_Group::groupExists($group1));
$this->assertTrue(OC_Group::groupExists($group2));
@@ -161,22 +161,22 @@ class Test_Group extends UnitTestCase {
$this->assertFalse(OC_Group::inGroup($user2, $group1));
- $this->assertTrue(OC_Group::addToGroup($user1, $group1));
+ $this->assertTrue((bool)OC_Group::addToGroup($user1, $group1));
$this->assertTrue(OC_Group::inGroup($user1, $group1));
$this->assertFalse(OC_Group::inGroup($user2, $group1));
$this->assertFalse($backend2->inGroup($user1, $group1));
- $this->assertFalse(OC_Group::addToGroup($user1, $group1));
+ $this->assertFalse((bool)OC_Group::addToGroup($user1, $group1));
- $this->assertEqual(array($user1), OC_Group::usersInGroup($group1));
+ $this->assertEquals(array($user1), OC_Group::usersInGroup($group1));
- $this->assertEqual(array($group1), OC_Group::getUserGroups($user1));
- $this->assertEqual(array(), OC_Group::getUserGroups($user2));
+ $this->assertEquals(array($group1), OC_Group::getUserGroups($user1));
+ $this->assertEquals(array(), OC_Group::getUserGroups($user2));
OC_Group::deleteGroup($group1);
- $this->assertEqual(array(), OC_Group::getUserGroups($user1));
- $this->assertEqual(array(), OC_Group::usersInGroup($group1));
+ $this->assertEquals(array(), OC_Group::getUserGroups($user1));
+ $this->assertEquals(array(), OC_Group::usersInGroup($group1));
$this->assertFalse(OC_Group::inGroup($user1, $group1));
}
}
diff --git a/tests/lib/group/backend.php b/tests/lib/group/backend.php
index f61abed5f29..d308232a78b 100644
--- a/tests/lib/group/backend.php
+++ b/tests/lib/group/backend.php
@@ -20,7 +20,7 @@
*
*/
-abstract class Test_Group_Backend extends UnitTestCase {
+abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
/**
* @var OC_Group_Backend $backend
*/
@@ -52,18 +52,18 @@ abstract class Test_Group_Backend extends UnitTestCase {
$name2=$this->getGroupName();
$this->backend->createGroup($name1);
$count=count($this->backend->getGroups())-$startCount;
- $this->assertEqual(1, $count);
+ $this->assertEquals(1, $count);
$this->assertTrue((array_search($name1, $this->backend->getGroups())!==false));
$this->assertFalse((array_search($name2, $this->backend->getGroups())!==false));
$this->backend->createGroup($name2);
$count=count($this->backend->getGroups())-$startCount;
- $this->assertEqual(2, $count);
+ $this->assertEquals(2, $count);
$this->assertTrue((array_search($name1, $this->backend->getGroups())!==false));
$this->assertTrue((array_search($name2, $this->backend->getGroups())!==false));
$this->backend->deleteGroup($name2);
$count=count($this->backend->getGroups())-$startCount;
- $this->assertEqual(1, $count);
+ $this->assertEquals(1, $count);
$this->assertTrue((array_search($name1, $this->backend->getGroups())!==false));
$this->assertFalse((array_search($name2, $this->backend->getGroups())!==false));
}
@@ -91,15 +91,15 @@ abstract class Test_Group_Backend extends UnitTestCase {
$this->assertFalse($this->backend->addToGroup($user1, $group1));
- $this->assertEqual(array($user1), $this->backend->usersInGroup($group1));
- $this->assertEqual(array(), $this->backend->usersInGroup($group2));
+ $this->assertEquals(array($user1), $this->backend->usersInGroup($group1));
+ $this->assertEquals(array(), $this->backend->usersInGroup($group2));
- $this->assertEqual(array($group1), $this->backend->getUserGroups($user1));
- $this->assertEqual(array(), $this->backend->getUserGroups($user2));
+ $this->assertEquals(array($group1), $this->backend->getUserGroups($user1));
+ $this->assertEquals(array(), $this->backend->getUserGroups($user2));
$this->backend->deleteGroup($group1);
- $this->assertEqual(array(), $this->backend->getUserGroups($user1));
- $this->assertEqual(array(), $this->backend->usersInGroup($group1));
+ $this->assertEquals(array(), $this->backend->getUserGroups($user1));
+ $this->assertEquals(array(), $this->backend->usersInGroup($group1));
$this->assertFalse($this->backend->inGroup($user1, $group1));
}
}
diff --git a/tests/lib/helper.php b/tests/lib/helper.php
index cfb9a799579..336e8f8b3c5 100644
--- a/tests/lib/helper.php
+++ b/tests/lib/helper.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Helper extends UnitTestCase {
+class Test_Helper extends PHPUnit_Framework_TestCase {
function testHumanFileSize() {
$result = OC_Helper::humanFileSize(0);
diff --git a/tests/lib/public/contacts.php b/tests/lib/public/contacts.php
index 23994667a26..ce5d762226b 100644
--- a/tests/lib/public/contacts.php
+++ b/tests/lib/public/contacts.php
@@ -39,7 +39,7 @@ class Test_Contacts extends PHPUnit_Framework_TestCase
public function testEnabledAfterRegister() {
// create mock for the addressbook
- $stub = $this->getMock("SimpleAddressBook", array('getKey'));
+ $stub = $this->getMockForAbstractClass("OCP\IAddressBook", array('getKey'));
// we expect getKey to be called twice:
// first time on register
@@ -65,7 +65,7 @@ class Test_Contacts extends PHPUnit_Framework_TestCase
public function testAddressBookEnumeration() {
// create mock for the addressbook
- $stub = $this->getMock("SimpleAddressBook", array('getKey', 'getDisplayName'));
+ $stub = $this->getMockForAbstractClass("OCP\IAddressBook", array('getKey', 'getDisplayName'));
// setup return for method calls
$stub->expects($this->any())
@@ -85,8 +85,8 @@ class Test_Contacts extends PHPUnit_Framework_TestCase
public function testSearchInAddressBook() {
// create mock for the addressbook
- $stub1 = $this->getMock("SimpleAddressBook1", array('getKey', 'getDisplayName', 'search'));
- $stub2 = $this->getMock("SimpleAddressBook2", array('getKey', 'getDisplayName', 'search'));
+ $stub1 = $this->getMockForAbstractClass("OCP\IAddressBook", array('getKey', 'getDisplayName', 'search'));
+ $stub2 = $this->getMockForAbstractClass("OCP\IAddressBook", array('getKey', 'getDisplayName', 'search'));
$searchResult1 = array(
array('id' => 0, 'FN' => 'Frank Karlitschek', 'EMAIL' => 'a@b.c', 'GEO' => '37.386013;-122.082932'),
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index 92f5d065cf2..ab43e47726b 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -19,7 +19,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Share extends UnitTestCase {
+class Test_Share extends PHPUnit_Framework_TestCase {
protected $itemType;
protected $userBackend;
diff --git a/tests/lib/streamwrappers.php b/tests/lib/streamwrappers.php
index 89b2785fca6..2237ee7d378 100644
--- a/tests/lib/streamwrappers.php
+++ b/tests/lib/streamwrappers.php
@@ -1,45 +1,45 @@
<?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/>.
+ *
+ */
-class Test_StreamWrappers extends UnitTestCase {
+class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
public function testFakeDir() {
- $items=array('foo', 'bar');
- OC_FakeDirStream::$dirs['test']=$items;
- $dh=opendir('fakedir://test');
- $result=array();
- while($file=readdir($dh)) {
- $result[]=$file;
+ $items = array('foo', 'bar');
+ \OC\Files\Stream\Dir::register('test', $items);
+ $dh = opendir('fakedir://test');
+ $result = array();
+ while ($file = readdir($dh)) {
+ $result[] = $file;
$this->assertContains($file, $items);
}
- $this->assertEqual(count($items), count($result));
+ $this->assertEquals(count($items), count($result));
}
public function testStaticStream() {
- $sourceFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
- $staticFile='static://test';
+ $sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $staticFile = 'static://test';
$this->assertFalse(file_exists($staticFile));
file_put_contents($staticFile, file_get_contents($sourceFile));
$this->assertTrue(file_exists($staticFile));
- $this->assertEqual(file_get_contents($sourceFile), file_get_contents($staticFile));
+ $this->assertEquals(file_get_contents($sourceFile), file_get_contents($staticFile));
unlink($staticFile);
clearstatcache();
$this->assertFalse(file_exists($staticFile));
@@ -47,32 +47,51 @@ class Test_StreamWrappers extends UnitTestCase {
public function testCloseStream() {
//ensure all basic stream stuff works
- $sourceFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
- $tmpFile=OC_Helper::TmpFile('.txt');
- $file='close://'.$tmpFile;
+ $sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $tmpFile = OC_Helper::TmpFile('.txt');
+ $file = 'close://' . $tmpFile;
$this->assertTrue(file_exists($file));
file_put_contents($file, file_get_contents($sourceFile));
- $this->assertEqual(file_get_contents($sourceFile), file_get_contents($file));
+ $this->assertEquals(file_get_contents($sourceFile), file_get_contents($file));
unlink($file);
clearstatcache();
$this->assertFalse(file_exists($file));
-
+
//test callback
- $tmpFile=OC_Helper::TmpFile('.txt');
- $file='close://'.$tmpFile;
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array('Test_StreamWrappers', 'closeCallBack');
- $fh=fopen($file, 'w');
+ $tmpFile = OC_Helper::TmpFile('.txt');
+ $file = 'close://' . $tmpFile;
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array('Test_StreamWrappers', 'closeCallBack'));
+ $fh = fopen($file, 'w');
fwrite($fh, 'asd');
- try{
+ try {
fclose($fh);
$this->fail('Expected exception');
- }catch(Exception $e) {
- $path=$e->getMessage();
- $this->assertEqual($path, $tmpFile);
+ } catch (Exception $e) {
+ $path = $e->getMessage();
+ $this->assertEquals($path, $tmpFile);
}
}
public static function closeCallBack($path) {
throw new Exception($path);
}
+
+ public function testOC() {
+ \OC\Files\Mount::clear();
+ $storage = new \OC\Files\Storage\Temporary(array());
+ $storage->file_put_contents('foo.txt', 'asd');
+ new \OC\Files\Mount($storage, '/');
+
+ $this->assertTrue(file_exists('oc:///foo.txt'));
+ $this->assertEquals('asd', file_get_contents('oc:///foo.txt'));
+ $this->assertEquals(array('.', '..', 'foo.txt'), scandir('oc:///'));
+
+ file_put_contents('oc:///bar.txt', 'qwerty');
+ $this->assertEquals('qwerty', $storage->file_get_contents('bar.txt'));
+ $this->assertEquals(array('.', '..', 'bar.txt', 'foo.txt'), scandir('oc:///'));
+ $this->assertEquals('qwerty', file_get_contents('oc:///bar.txt'));
+
+ unlink('oc:///foo.txt');
+ $this->assertEquals(array('.', '..', 'bar.txt'), scandir('oc:///'));
+ }
}
diff --git a/tests/lib/template.php b/tests/lib/template.php
index 736bc95255c..6e88d4c07fc 100644
--- a/tests/lib/template.php
+++ b/tests/lib/template.php
@@ -22,7 +22,7 @@
OC::autoload('OC_Template');
-class Test_TemplateFunctions extends UnitTestCase {
+class Test_TemplateFunctions extends PHPUnit_Framework_TestCase {
public function testP() {
// FIXME: do we need more testcases?
@@ -30,9 +30,8 @@ class Test_TemplateFunctions extends UnitTestCase {
ob_start();
p($htmlString);
$result = ob_get_clean();
- ob_end_clean();
- $this->assertEqual("&lt;script&gt;alert(&#039;xss&#039;);&lt;/script&gt;", $result);
+ $this->assertEquals("&lt;script&gt;alert(&#039;xss&#039;);&lt;/script&gt;", $result);
}
public function testPNormalString() {
@@ -40,9 +39,8 @@ class Test_TemplateFunctions extends UnitTestCase {
ob_start();
p($normalString);
$result = ob_get_clean();
- ob_end_clean();
- $this->assertEqual("This is a good string!", $result);
+ $this->assertEquals("This is a good string!", $result);
}
@@ -52,9 +50,8 @@ class Test_TemplateFunctions extends UnitTestCase {
ob_start();
print_unescaped($htmlString);
$result = ob_get_clean();
- ob_end_clean();
- $this->assertEqual($htmlString, $result);
+ $this->assertEquals($htmlString, $result);
}
public function testPrintUnescapedNormalString() {
@@ -62,9 +59,8 @@ class Test_TemplateFunctions extends UnitTestCase {
ob_start();
print_unescaped($normalString);
$result = ob_get_clean();
- ob_end_clean();
- $this->assertEqual("This is a good string!", $result);
+ $this->assertEquals("This is a good string!", $result);
}
diff --git a/tests/lib/user/backend.php b/tests/lib/user/backend.php
index 0b744770ea2..40674424c96 100644
--- a/tests/lib/user/backend.php
+++ b/tests/lib/user/backend.php
@@ -30,7 +30,7 @@
* For an example see /tests/lib/user/dummy.php
*/
-abstract class Test_User_Backend extends UnitTestCase {
+abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
/**
* @var OC_User_Backend $backend
*/
@@ -53,18 +53,18 @@ abstract class Test_User_Backend extends UnitTestCase {
$name2=$this->getUser();
$this->backend->createUser($name1, '');
$count=count($this->backend->getUsers())-$startCount;
- $this->assertEqual(1, $count);
+ $this->assertEquals(1, $count);
$this->assertTrue((array_search($name1, $this->backend->getUsers())!==false));
$this->assertFalse((array_search($name2, $this->backend->getUsers())!==false));
$this->backend->createUser($name2, '');
$count=count($this->backend->getUsers())-$startCount;
- $this->assertEqual(2, $count);
+ $this->assertEquals(2, $count);
$this->assertTrue((array_search($name1, $this->backend->getUsers())!==false));
$this->assertTrue((array_search($name2, $this->backend->getUsers())!==false));
$this->backend->deleteUser($name2);
$count=count($this->backend->getUsers())-$startCount;
- $this->assertEqual(1, $count);
+ $this->assertEquals(1, $count);
$this->assertTrue((array_search($name1, $this->backend->getUsers())!==false));
$this->assertFalse((array_search($name2, $this->backend->getUsers())!==false));
}
diff --git a/tests/lib/util.php b/tests/lib/util.php
index 27635cb8055..ebff3c7381a 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Util extends UnitTestCase {
+class Test_Util extends PHPUnit_Framework_TestCase {
// Constructor
function Test_Util() {
diff --git a/tests/lib/vcategories.php b/tests/lib/vcategories.php
index 63516a063da..e79dd49870c 100644
--- a/tests/lib/vcategories.php
+++ b/tests/lib/vcategories.php
@@ -22,7 +22,7 @@
//require_once("../lib/template.php");
-class Test_VCategories extends UnitTestCase {
+class Test_VCategories extends PHPUnit_Framework_TestCase {
protected $objectType;
protected $user;
@@ -49,7 +49,7 @@ class Test_VCategories extends UnitTestCase {
$catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
- $this->assertEqual(4, count($catmgr->categories()));
+ $this->assertEquals(4, count($catmgr->categories()));
}
public function testAddCategories() {
@@ -59,25 +59,25 @@ class Test_VCategories extends UnitTestCase {
foreach($categories as $category) {
$result = $catmgr->add($category);
- $this->assertTrue($result);
+ $this->assertTrue((bool)$result);
}
$this->assertFalse($catmgr->add('Family'));
$this->assertFalse($catmgr->add('fAMILY'));
- $this->assertEqual(4, count($catmgr->categories()));
+ $this->assertEquals(4, count($catmgr->categories()));
}
public function testdeleteCategories() {
$defcategories = array('Friends', 'Family', 'Work', 'Other');
$catmgr = new OC_VCategories($this->objectType, $this->user, $defcategories);
- $this->assertEqual(4, count($catmgr->categories()));
+ $this->assertEquals(4, count($catmgr->categories()));
$catmgr->delete('family');
- $this->assertEqual(3, count($catmgr->categories()));
+ $this->assertEquals(3, count($catmgr->categories()));
$catmgr->delete(array('Friends', 'Work', 'Other'));
- $this->assertEqual(0, count($catmgr->categories()));
+ $this->assertEquals(0, count($catmgr->categories()));
}
@@ -90,8 +90,8 @@ class Test_VCategories extends UnitTestCase {
$catmgr->addToCategory($id, 'Family');
}
- $this->assertEqual(1, count($catmgr->categories()));
- $this->assertEqual(9, count($catmgr->idsForCategory('Family')));
+ $this->assertEquals(1, count($catmgr->categories()));
+ $this->assertEquals(9, count($catmgr->idsForCategory('Family')));
}
/**
@@ -110,8 +110,8 @@ class Test_VCategories extends UnitTestCase {
$this->assertFalse(in_array($id, $catmgr->idsForCategory('Family')));
}
- $this->assertEqual(1, count($catmgr->categories()));
- $this->assertEqual(0, count($catmgr->idsForCategory('Family')));
+ $this->assertEquals(1, count($catmgr->categories()));
+ $this->assertEquals(0, count($catmgr->idsForCategory('Family')));
}
}
diff --git a/tests/phpunit-autotest.xml b/tests/phpunit-autotest.xml
new file mode 100644
index 00000000000..23cd123edc6
--- /dev/null
+++ b/tests/phpunit-autotest.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="bootstrap.php">
+ <testsuite name='ownCloud'>
+ <directory suffix='.php'>lib/</directory>
+ <file>apps.php</file>
+ </testsuite>
+ <!-- filters for code coverage -->
+ <whitelist processUncoveredFilesFromWhitelist="true">
+ <directory suffix=".php">..</directory>
+ <exclude>
+ <directory suffix=".php">../3rdparty</directory>
+ </exclude>
+ </whitelist>
+</phpunit>
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index 23cd123edc6..f5a686c3020 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -11,4 +11,7 @@
<directory suffix=".php">../3rdparty</directory>
</exclude>
</whitelist>
+ <listeners>
+ <listener class="PHPUnit_Util_Log_JSON"></listener>
+ </listeners>
</phpunit>
diff --git a/tests/win32-phpunit.php b/tests/win32-phpunit.php
new file mode 100644
index 00000000000..ac8f95efcbf
--- /dev/null
+++ b/tests/win32-phpunit.php
@@ -0,0 +1,347 @@
+<?php
+OC_PHPUnit_Loader::checkIncludePath();
+OC_PHPUnit_Loader::detectPHPUnitVersionId();
+
+//load PHPUnit
+switch (OC_PHPUnit_Loader::$PHPUnitVersionId) {
+ case "36": {
+ OC_PHPUnit_Loader::load36();
+ break;
+ }
+ case "37": {
+ OC_PHPUnit_Loader::load37();
+ break;
+ }
+}
+
+//load custom implementation of the PHPUnit_TextUI_ResultPrinter
+switch (OC_PHPUnit_Loader::$PHPUnitVersionId) {
+ case "36":
+ case "37": {
+ class OC_PHPUnit_TextUI_ResultPrinter extends PHPUnit_TextUI_ResultPrinter
+ {
+ function __construct()
+ {
+ parent::__construct('php://stderr');
+ }
+
+ public function printResult(PHPUnit_Framework_TestResult $result)
+ {
+ $this->printHeader();
+ $this->printFooter($result);
+ }
+
+ protected function writeProgress($progress)
+ {
+ //ignore
+ }
+ }
+ break;
+ }
+}
+
+//loading of OC_PHPUnit_TextUI_Command
+switch (OC_PHPUnit_Loader::$PHPUnitVersionId) {
+ case "36":
+ case "37": {
+ class OC_PHPUnit_TextUI_Command extends PHPUnit_TextUI_Command
+ {
+
+ public static function main($exit = TRUE)
+ {
+ $command = new OC_PHPUnit_TextUI_Command();
+ $command->run($_SERVER['argv'], $exit);
+ }
+
+ protected function handleArguments(array $argv)
+ {
+ parent::handleArguments($argv);
+ $this->arguments['listeners'][] = new OC_PHPUnit_Framework_TestListener();
+ $this->arguments['printer'] = new OC_PHPUnit_TextUI_ResultPrinter();
+ }
+
+ protected function createRunner()
+ {
+ $coverage_Filter = new PHP_CodeCoverage_Filter();
+ $coverage_Filter->addFileToBlacklist(__FILE__);
+ $runner = new PHPUnit_TextUI_TestRunner($this->arguments['loader'], $coverage_Filter);
+ return $runner;
+ }
+ }
+ break;
+ }
+}
+
+class OC_PHPUnit_Loader
+{
+
+ const SUCCESS_EXIT = 0;
+ const FAILURE_EXIT = 1;
+ const EXCEPTION_EXIT = 2;
+
+ public static $PHPUnitVersionId;
+
+ /**
+ * @return void
+ */
+ public static function checkIncludePath()
+ {
+ //check include path
+ $PHPUnitParentDirectory = self::getPHPUnitParentDirectory();
+ if (is_null($PHPUnitParentDirectory)) {
+ echo "Cannot find PHPUnit in include path (" . ini_get('include_path') . ")";
+ exit(OC_PHPUnit_Loader::FAILURE_EXIT);
+ }
+ }
+
+ /**
+ * @return null | string
+ */
+ private static function getPHPUnitParentDirectory()
+ {
+ $pathArray = explode(PATH_SEPARATOR, ini_get('include_path'));
+ foreach ($pathArray as $path)
+ {
+ if (file_exists($path . DIRECTORY_SEPARATOR . 'PHPUnit/')) {
+ return $path;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @return void
+ */
+ public static function detectPHPUnitVersionId()
+ {
+ require_once 'PHPUnit/Runner/Version.php';
+
+ $PHPUnitVersion = PHPUnit_Runner_Version::id();
+
+ if ($PHPUnitVersion === "@package_version@") {
+
+ self::$PHPUnitVersionId = "37";
+ }
+ else if (version_compare($PHPUnitVersion, '3.7.0') >= 0) {
+
+ self::$PHPUnitVersionId = "37";
+ }
+ else if (version_compare($PHPUnitVersion, '3.6.0') >= 0) {
+
+ self::$PHPUnitVersionId = "36";
+ }
+ else if (version_compare($PHPUnitVersion, '3.6.0') >= 0) {
+
+ echo "unsupported PHPUnit version: $PHPUnitVersion";
+ exit(OC_PHPUnit_Loader::FAILURE_EXIT);
+ }
+ }
+
+ /**
+ * @return void
+ */
+ public static function load37()
+ {
+
+ require 'PHPUnit/Autoload.php';
+
+ }
+
+
+ /**
+ * @return void
+ */
+ public static function load36()
+ {
+ define('PHPUnit_MAIN_METHOD', 'OC_PHPUnit_TextUI_Command::main');
+
+ require 'PHPUnit/Autoload.php';
+
+ }
+}
+
+class OC_PHPUnit_Framework_TestListener implements PHPUnit_Framework_TestListener
+{
+
+ private $isSummaryTestCountPrinted = false;
+
+ public static function printEvent($eventName, $params = array())
+ {
+ self::printText("\n[$eventName");
+ foreach ($params as $key => $value) {
+ self::printText(" $key='$value'");
+ }
+ self::printText("]\n");
+ }
+
+ public static function printText($text)
+ {
+ file_put_contents('php://stderr', $text);
+ }
+
+ private static function getMessage(Exception $e)
+ {
+ $message = "";
+ if (strlen(get_class($e)) != 0) {
+ $message = $message . get_class($e);
+ }
+ if (strlen($message) != 0 && strlen($e->getMessage()) != 0) {
+ $message = $message . " : ";
+ }
+ $message = $message . $e->getMessage();
+ return self::escapeValue($message);
+ }
+
+ private static function getDetails(Exception $e)
+ {
+ return self::escapeValue($e->getTraceAsString());
+ }
+
+ public static function getValueAsString($value)
+ {
+ if (is_null($value)) {
+ return "null";
+ }
+ else if (is_bool($value)) {
+ return $value == true ? "true" : "false";
+ }
+ else if (is_array($value) || is_string($value)) {
+ $valueAsString = print_r($value, true);
+ if (strlen($valueAsString) > 10000) {
+ return null;
+ }
+ return $valueAsString;
+ }
+ else if (is_scalar($value)){
+ return print_r($value, true);
+ }
+ return null;
+ }
+
+ private static function escapeValue($text) {
+ $text = str_replace("|", "||", $text);
+ $text = str_replace("'", "|'", $text);
+ $text = str_replace("\n", "|n", $text);
+ $text = str_replace("\r", "|r", $text);
+ $text = str_replace("]", "|]", $text);
+ return $text;
+ }
+
+ public static function getFileName($className)
+ {
+ $reflectionClass = new ReflectionClass($className);
+ $fileName = $reflectionClass->getFileName();
+ return $fileName;
+ }
+
+ public function addError(PHPUnit_Framework_Test $test, Exception $e, $time)
+ {
+ self::printEvent("testFailed", array(
+ "name" => $test->getName(),
+ "message" => self::getMessage($e),
+ "details" => self::getDetails($e)
+ ));
+ }
+
+ public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time)
+ {
+ $params = array(
+ "name" => $test->getName(),
+ "message" => self::getMessage($e),
+ "details" => self::getDetails($e)
+ );
+ if ($e instanceof PHPUnit_Framework_ExpectationFailedException) {
+ $comparisonFailure = $e->getComparisonFailure();
+ if ($comparisonFailure instanceof PHPUnit_Framework_ComparisonFailure) {
+ $actualResult = $comparisonFailure->getActual();
+ $expectedResult = $comparisonFailure->getExpected();
+ $actualString = self::getValueAsString($actualResult);
+ $expectedString = self::getValueAsString($expectedResult);
+ if (!is_null($actualString) && !is_null($expectedString)) {
+ $params['actual'] = self::escapeValue($actualString);
+ $params['expected'] = self::escapeValue($expectedString);
+ }
+ }
+ }
+ self::printEvent("testFailed", $params);
+ }
+
+ public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time)
+ {
+ self::printEvent("testIgnored", array(
+ "name" => $test->getName(),
+ "message" => self::getMessage($e),
+ "details" => self::getDetails($e)
+ ));
+ }
+
+ public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time)
+ {
+ self::printEvent("testIgnored", array(
+ "name" => $test->getName(),
+ "message" => self::getMessage($e),
+ "details" => self::getDetails($e)
+ ));
+ }
+
+ public function startTest(PHPUnit_Framework_Test $test)
+ {
+ $testName = $test->getName();
+ $params = array(
+ "name" => $testName
+ );
+ if ($test instanceof PHPUnit_Framework_TestCase) {
+ $className = get_class($test);
+ $fileName = self::getFileName($className);
+ $params['locationHint'] = "php_qn://$fileName::\\$className::$testName";
+ }
+ self::printEvent("testStarted", $params);
+ }
+
+ public function endTest(PHPUnit_Framework_Test $test, $time)
+ {
+ self::printEvent("testFinished", array(
+ "name" => $test->getName(),
+ "duration" => (int)(round($time, 2) * 1000)
+ ));
+ }
+
+ public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
+ {
+ if (!$this->isSummaryTestCountPrinted) {
+ $this->isSummaryTestCountPrinted = true;
+ //print tests count
+ self::printEvent("testCount", array(
+ "count" => count($suite)
+ ));
+ }
+
+ $suiteName = $suite->getName();
+ if (empty($suiteName)) {
+ return;
+ }
+ $params = array(
+ "name" => $suiteName,
+ );
+ if (class_exists($suiteName, false)) {
+ $fileName = self::getFileName($suiteName);
+ $params['locationHint'] = "php_qn://$fileName::\\$suiteName";
+ }
+ self::printEvent("testSuiteStarted", $params);
+ }
+
+ public function endTestSuite(PHPUnit_Framework_TestSuite $suite)
+ {
+ $suiteName = $suite->getName();
+ if (empty($suiteName)) {
+ return;
+ }
+ self::printEvent("testSuiteFinished",
+ array(
+ "name" => $suite->getName()
+ ));
+ }
+
+}
+
+OC_PHPUnit_TextUI_Command::main();